选用那种编程语言作开发是一个非常复杂的问题。有时开发者是没有选择余地的,比如客户可能出于某种原因规定项目必须采用某种语言,或者有决定权的经理因为自己有过使用某一种语言的经历而要求自己所管理的开发人员使用这种语言开始项目。抛开这些情况,当你作为一个开发者,有权利选择自己所使用的语言时,你会基于什么原则做出选择?
在这个问题上的争论非常多。经常有C++的拥护者提出学会了C++,就可以应付各种领域的问题。或者Java的使用者宣称C++已经过时了。最近又看到有人倡导使用Lisp,因为其优美。
作为一个C++的长期使用者,我曾经用C++完成几乎一切工作,从项目的开发,到一些很小的,但需要写程序来完成的工作,如一些文件格式的转换。长期积累的经验使我了解C++语言的很多细节,我同样熟悉C++的标准类库,因此在对语言的掌握上不存在大的障碍。但我感到即便如此,开发效率仍旧比较低。
我的开发平台一直主要是DOS,后来是Windows。Windows对开发者不够友好的一点是它没有提供一个好的Shell。如果你想使用一个批处理文件来完成稍为复杂一点的任务,比如一个项目的build,都将是一个挑战。后来我安装了cygwin,开始使用一些Unix工具,如tr,sed,lex,yacc等,我发现有些任务不再需要使用C++了。因为用其他的工具更方便。
Python语言进一步减少了我对C++的使用。尽管对我来说,Python是一门新的语言,但我发现,即便是把熟悉它所需要的时间算在内,有时用Python还是比C++效率要高。其中的一个原因在于Python有更多现成的库。
同Java相比,C++在库方面的弱点更加明显。从XML处理到图形用户界面,Java都提供了功能强大的类库。而C++尽管在某些方面有一些对应的库,但C++语言的复杂性导致了编写类库的难度和使用类库的难度。而类库的缺乏就意味着必须要作一些重复性的工作,除非你编写一些供自己使用的类库。
开发工具的支持?Eclipse,IntelliJ Idea,JBuilder,NetBeans,这么多优秀的IDE使我不再想念Visual C++的IDE带来的方便。更重要的是,Java的IDE通常提供了较强的Refactoring功能。 而Ant也使我减轻了对Shell的依赖。
但我仍然要使用C/C++。最近我参与了一个跟硬件有关的项目,硬件的firmware只能用C来写(还好,不需要太多汇编)。
现在我对编程语言的选择标准是:根据开发需要,选择效率最高的。当然,维护的工作是要考虑在“效率”中的。