咋说呢?C++它爹写的,总得支持一下
2010-06-12
这本书已经看完了几个月,一直想写点什么,又不知从何说起。今天看到Linus对C++的一些批评,和这本书结合起来看,还有点意思。(Linus对C++的批评不是偶然的心血来潮,07年的时候就说过“C++ is a horrible language”,这次则说“It's a really bad language, in my opinion. It tries to solve all the wrong problems, and does not tackle the right ones.” )
学习和使用C++的人都有体会,C++难学,难精通,使用起来很复杂,有很多陷阱,稍不留心就可能掉进去。刘未鹏曾经在08年初采访过Bjarne Stroustrup,具体内容见C++之父元旦专访(8+13个问题,关于C++的学习&使用和未来)。在被问到“C++学习起来非常困难,一般要阅读不少于10本书才能使用好,希望您的新书能改变这种情况(注:就是指这本Programming: Principles and Practice Using C++)”,Bjarne Stroustrup很有自信的说,他的这本新书将给“什么是正确的学习C++的方式”提供一个答案,1、2本精心选择的书籍足够让人成为好的C++程序员。
拿到这本书,先是惊讶于它的分量(嗯,超过1200页,我买的是影印版,拿在手里真是累死人),读的时候津津有味,读完又怅然若失、意犹未尽。这本书不是用来教C++编程,而是一本教你如何去编写程序,C++只不过碰巧被选做工具。书里面有很多编程的通用原则、概念和技术,对于初学者,可能不是特别理解这些原则,对于老手,可能又没有太多新意。Bjarne Stroustrup提到这本书的目标读者是刚刚学习编程的人,对于老手来说,也可以从中学到很多东西。但他以前提到的目标“说明什么是正确的学习C++的方式...1、2本书即足够”,应该是没有达到。
只读这本书,显然还无法让你成为优秀的C++开发人员,最多达到合格的程度,我想这可能也是此书出版后并无太大反响的原因。单纯入门的话,这本书应该足够,如果要深入学习C++,我还是推荐下面几本书:
The C++ Programming Language: Special Edition (3rd Edition)
C++ in a Nutshell
Accelerated C++: Practical Programming by Example
C++ Primer (4th Edition)
Essential C++ (C++ In-Depth Series)
.....................................
唉,看起来又是一大堆 :(
--------------------------------------------------------------------------------
Linus最近的言论在http://www.realworldtech.com/forums/index.cfm?action=detail&id=110549&threadid=110549&roomid=2,问题的由来是某人问“Can you use C++ in Linux kernel?”(感觉每过1、2年就会重复这个问题),随便摘录Linus的几句话(Linus有strong opinion,嘴巴很大,口无遮拦。随手摘抄翻译出来的,最好去看原文,):
“C是一门很好的语言,它足够完整,非常有用,同时又很简单” “C make it as simple as you can, but no simpler” “C++里其中一个最糟糕的特性是有太多context-dependent的东西,你查看代码的时候,仅当前的代码片段很难看出是在干什么。当你看到sctp_connect()的时候,你一下子就知道它的含义,但如果只看到connect(),就很难明白, grep -w my_connect一下子就可以了” 注:我自己也反感太多重名的函数,还有什么虚函数之类...
“C很大程度上是context-free的语言,你看到了一个表达式,你就知道它在干什么。一个函数调用只做一件事情,不用去费心去想是在调用它的哪个版本,在做什么事情”
“好的设计应围绕着数据如何流动,如何组织,如何查找,如何与其它数据结合。但OO语言倾向于object最重要,method要和object结合在一起,真是胡说八道”
--------------------------------------------------------------------------------
Bjarne Stroustrup 针对Linus的批评曾经有如下的回答
“Linus Torvald is not C++ programmer, hasn’t (to my knowledge) tried to use C++ for a decade, and then he used a truly crappy C++ compiler (which was so bad that I refused to use it for anything real). More importantly, he works in a highly specialized field: few programmers do kernel hacking – and some do that it in C++.
C isn’t simple: Please explain the rules for conversion from unsigned short to int. Note the need for workarounds for just about any modern or large-program technique.
But yes, it’s a myth, and it damages individuals and organizations that buy into it.”