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++程序员,还挺不容易的,钱途看涨;)。

6 thoughts on “C or C++ ?

  1. 严重同意你的观点。:)
    尽管在用c#可是还是觉得c++能体现programmer的素质

  2. 还是应该深入学习好C++的。C++能培养你多方面的能力和素养,如OOA/D、GP等等。
    但为什么你现在转向JAVA呢?(我看见blogs.sun.com,应该是和java相关的是吧),作为一个计算机新手,可不可以直接研究python,ruby这些语言,而不去碰c++,java呢?

  3. 嗯,我觉得自己还未正儿八经地做过Java程序员,blogs.sun.com中也有很多是关于OS和系统编程方面的内容,我本人更多地使用C和C++在Solaris/Linux平台上编写应用程序。另外,我觉得作为计算机的新手,只要有一定的C语言知识作为基础,直接学习和使用python和ruby这样的动态语言,也是可以的。

  4. 我也是不该,其实我是看了你译的PR(programming ruby)才来到你的blog的。
    “我觉得作为计算机的新手,只要有一定的C语言知识作为基础,直接学习和使用python和ruby这样的动态语言,也是可以的。”
    一些高手说设计模式,数据结构和算法这些很重要(内功),我也同意,但我在china-pub上看这些书,大多用c++,java语言来描述的。如果直接学python,ruby,恐怕看这些书有困难是吧。(我学过c++的皮毛).

  5. 嗯,算法和数据结构的确很重要。对于设计模式,我觉得它也在随着动态语言的发展而不断演进。举个例子,创建型的许多pattern(s),在动态语言中根本就不需要。
    我个人的一点感想是,对于命令式编程语言,无论OOP或者动态OOP,只要你能够在头脑中把它结构化(例如转换为C),就不会被它花哨的外衣(语法)所迷惑。(当然,函数式编程语言是另一回事。)例如《深度探索C++对象模型》和《深入Java虚拟机》这样的书,就可以分别帮助你掌握C++和Java语言的核心。《Programming Ruby》也专门有一章,是讲解Ruby的对象模型的。

  6. “我个人的一点感想是,对于命令式编程语言,无论OOP或者动态OOP,只要你能够在头脑中把它结构化(例如转换为C),就不会被它花哨的外衣(语法)所迷惑。”
    很好的指导思想:-)

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

To submit your comment, click the image below where it asks you to...
Clickcha - The One-Click Captcha