语言联合国
当一个系统比较大的时候,使用混合语言编程是很常见的,因为:
每个语言都有适合使用的时机,一个大系统可以分成多个次系统或模块,每个次系统都有不同的特质,适合采用不同的语言。
大系统开发时,开发者的人数变多。每个人倾向于使用自己熟悉的语言和工具。
以我自己的例子来说,基于上面的考虑,我规划的系统,同时使用C++、C#、REBOL、Lua,未来可能还会加入Erlang。我们用C++进行系统编程(处理低阶的,和操作系统相关的部分),使用C#写跨平台的服务器(未来考虑用Erlang取代),使用REBOL写解析器和编译器,使用Lua作内部脚本语言。每个语言各适其所。
使用混合语言的开发方式,另一个好处是程序员擅长什么就用什么。学习一个语言到精通的地步,需要很长的时间。我们无法要求自己团队的程序员都能使用某个我所熟悉的语言,可以退而求其次,让他们用自己最熟悉的语言,只要开发出来的东西符合我们规定即可。
使用混合式语言开发,只要模块切割得当,接口定义清楚,架构设计正确,那么绝对是可行的。这是我的经验之谈。
但是也请注意,混合多语言可能会导致维护难度的提高。当开发某模块的人离职,且当初他所使用的语言没有其它人会,这个时候麻烦就来了。
混合多种语言开发系统,有可能要面对语言之间的阻抗(impedance)问题,就好像不同国家之间会有不同的文化隔阂一样。好的系统设计应该要考虑到这一点,减少模块之间的接触点,设法让语言之间的阻抗降到最低。
我的建议
如果你想培养一个全能的联合国梦幻开发团队,我的建议是要集合下面的语言人才:
C:进行系统开发
C++:进行COM与传统的微软技术开发
C#:进行现代的微软技术开发
PHP:进行Web后端开发
JavaScript:进行Web前端开发
Objective-C:进行Mac或iPh-one开发
Java:毕竟许多地方还是会用到Java
Python:进行脚本开发
如果有一支这样的梦幻团队,应该是任何软件都能很快地开发出来吧!我想。
2009年,估计全世界经济都处于低谷,这个时候,身为程序员的我们,更应该好好学习一两个语言,为未来做准备。我的建议是,如果你只会系统语言,就挑一个脚本语言学习;如果你只会脚本语言,就挑一个系统语言学习;如果你只会Procedure语言,就挑一个OO语言学习;如果你只会OO语言,就挑一个函数式语言学习;如果你只会静态语言,就挑动态语言学习。如果你都会了就挑逻辑式语言(Prolog)学习。如果你是个怪胎,什么都会了,连Prolog都会了,那么就学习REBOL吧!
(本文来自《程序员》杂志0902期)
每个语言都有适合使用的时机,一个大系统可以分成多个次系统或模块,每个次系统都有不同的特质,适合采用不同的语言。
大系统开发时,开发者的人数变多。每个人倾向于使用自己熟悉的语言和工具。
以我自己的例子来说,基于上面的考虑,我规划的系统,同时使用C++、C#、REBOL、Lua,未来可能还会加入Erlang。我们用C++进行系统编程(处理低阶的,和操作系统相关的部分),使用C#写跨平台的服务器(未来考虑用Erlang取代),使用REBOL写解析器和编译器,使用Lua作内部脚本语言。每个语言各适其所。
使用混合语言的开发方式,另一个好处是程序员擅长什么就用什么。学习一个语言到精通的地步,需要很长的时间。我们无法要求自己团队的程序员都能使用某个我所熟悉的语言,可以退而求其次,让他们用自己最熟悉的语言,只要开发出来的东西符合我们规定即可。
使用混合式语言开发,只要模块切割得当,接口定义清楚,架构设计正确,那么绝对是可行的。这是我的经验之谈。
但是也请注意,混合多语言可能会导致维护难度的提高。当开发某模块的人离职,且当初他所使用的语言没有其它人会,这个时候麻烦就来了。
混合多种语言开发系统,有可能要面对语言之间的阻抗(impedance)问题,就好像不同国家之间会有不同的文化隔阂一样。好的系统设计应该要考虑到这一点,减少模块之间的接触点,设法让语言之间的阻抗降到最低。
我的建议
如果你想培养一个全能的联合国梦幻开发团队,我的建议是要集合下面的语言人才:
C:进行系统开发
C++:进行COM与传统的微软技术开发
C#:进行现代的微软技术开发
PHP:进行Web后端开发
JavaScript:进行Web前端开发
Objective-C:进行Mac或iPh-one开发
Java:毕竟许多地方还是会用到Java
Python:进行脚本开发
如果有一支这样的梦幻团队,应该是任何软件都能很快地开发出来吧!我想。
2009年,估计全世界经济都处于低谷,这个时候,身为程序员的我们,更应该好好学习一两个语言,为未来做准备。我的建议是,如果你只会系统语言,就挑一个脚本语言学习;如果你只会脚本语言,就挑一个系统语言学习;如果你只会Procedure语言,就挑一个OO语言学习;如果你只会OO语言,就挑一个函数式语言学习;如果你只会静态语言,就挑动态语言学习。如果你都会了就挑逻辑式语言(Prolog)学习。如果你是个怪胎,什么都会了,连Prolog都会了,那么就学习REBOL吧!
(本文来自《程序员》杂志0902期)