C or C++ ?

最近Linus和Dmitry在Git的开发者列表上,展开了关于用C还是用C++的对战。国内的业者也开始轰轰烈烈的讨论起来,参见刘江的这篇blog“Linux之父炮轰C++:糟糕程序员的垃圾语言”,其中还提到了孟岩和风云的文章。读来的感觉是,中国人比较中庸,不容易走极端,提倡兼用所长。

我也曾花了许多力气来学习C++这门超复杂的语言,因此对它有较深的感情,市面上几乎所有重要的C++著作,都罗列在我的书架上。但是不得不承认,C++的适用领域已经越来越窄了。如果人们不了解C++语言和编译器背后的机理,是不可能写出优质甚至正确的代码的。另外C++的可移植性差,历来为人们所诟病。像mozilla社区对C++的使用进行了各种限制来保证可移植性(参见"C++ portability guide")。反过来说,用C语言来实现较完备的OO系统,例如GObject,远不如C++方便和直观。

最近读了刘未鹏的“C++ 0x漫谈”系列,能够看到C++社区对改进语言本身所做的努力。C++的确需要一个大变革。不过即便这个新标准通过了,等到各编译器完全支持它,又不知道何年月了。希望这一天早日到来。

那么21世纪的你,还应该学习C++这门语言吗?我认为,作为一个严肃地从事软件开发的职业程序员,还是应该深入学习好C++的。C++能培养你多方面的能力和素养,如OOA/D、GP等等。我觉得,一个优秀的C++程序员,一定有能力写出好的(甚至更好的)C代码。况且现在要招到有经验的C++程序员,还挺不容易的,钱途看涨;)。