Andrew Koening及Babara Moo谈C++学习

来源:互联网 发布:花生壳域名管理 编辑:程序博客网 时间:2024/06/10 01:01

Andrew Koening和Babara Moo夫妇是C++领域的国际知名专家、技术作家及教育家。也许你记不住他们的名字,不过如果你是一个C/C++程序猿,那么这几本书肯定是你没看过也听说过的:《C++沉思录》、《C陷阱与缺陷》、《Accelerated C++》等。今天看书的时候看到了Koening和Moo谈及如何学习C++的一番话,觉得很有道理。这其实也从某种程度上给出了一直争论不休的“java和C++到底谁好?”及“C和C++到底谁好?”的部分答案。摘录如下。

K:当前C++的教育状况实在是太糟糕了。很多所谓的C++教材不过是C语言书,只是在结尾粘贴一点C++的材料而已。结果呢,他们告诉读者,字符串乃是定长字符数组,应该用标准库中的strcpy和strcmp来操作。一个程序员一旦在一开始掌握了这些东西,就会根深蒂固,多年挥之不去。

就起本身而言,C++是一种非常低级的语言。唯有利用库,才能写出高层次的程序来。初学者还不能自己构造库,所以他们要么用现成的标准库,要么自己写低层次的程序。确实有不少程序应该用低层次技术来构造,但是对于初学者不合适。

M:当然是库优于语言细节。两个原因:首先,学生们可以不必费力包装低层次的语言细节,从而更容易建立整体语言的全局观念,了解到其真实威力。根据我们的经验,学生们首先掌握如何使用程序库之后,就会很容易理解类的概念,学会如何构造类的技术,如果首先去学习语言细节,那么就很难理解类的概念及功能。这种理解上的缺陷,使他们很难设计和构造自己的类。

不过,更重要的一点是,艘首先学习程序库,能够使学生培养起良好的习惯,就是复用库代码,而不是凡事自己动手。首先学习语言细节的学生,最后的编程风格往往是C类型的,不是C++风格。他们不会充分运用库,而自己的程序带有严重的C语言倾向——指针满天飞,整个程序都是低层次的。结果是,在很多情况下,你为C++的复杂性付出了高昂代价,而没有从中获得任何好处。

——————————分割线——————————

这里面的几点思想是以前从来没听到过的,了解到之后有醍醐灌顶之感。初学C++的最大困惑就是,类是用来干什么的?为什么这种抽象反而让我的程序看起来更加冗长、效率底下呢?先学习语言细节而不是先学习一种应用,从应用本身出发去理解语言细节,代价是高昂的。真正工作之后,才开始理解C++相对与C的优越性——代码可组织,封装性良好,丰富的库简化了编程过程等等,这些都要在实际的项目中,才能一点点得到体现。