我看国内的C++教育以及我的建议

本文探讨了C++教育现状,指出了国内C++教育存在的问题,并为初学者提供了学习建议,强调选择好书的重要性,培养面向对象思维及重视标准库的学习。

学习C++,是因为效率。

学习C++,是为了对底层更牢固的控制力。

学习C++,是因为这里才存在真正的泛型。

。。。。。。

 

可是我,有点郁闷,学习C++,是为了学习MFCMFC衰落了,但是C++并没有,C++0x将是C++历史上的第二次革命,boost组件的加入必将把generic programmingtemplate meta programming推崇到极致,程序员不必把它们当作是“阳春白雪”,它们确实是我们每个人都唾手可写的。

国内的C++教育很让我心寒,首先是出版届的问题,除了台湾的侯老和国内的几个比较负责的翻译作者,别人的书基本都是垃圾。我也只看国外的书(除非不得不看国内书的时候),那是一种享受。即使像《Inside C++ Object Modal》、《Modern C++ Design》中错误百出,我仍然把它当作是艺术品,大师渊博的知识,丰富的经验尽现其中,给人的是实实在在的,具有作者特色的知识(这点很重要,不然这本书和别的书又有什么区别?)。

大三,学校开了C++的课程。

学校使用的是“马光志”的教材,完全垃圾的一本书,我不知道它比《Essential C++》《Accelerated C++》这样的入门书籍好多少,莫名其妙被骗的感觉。

下面来列举几个教材中的错误和误区,这些可能也是国内C++教育中存在的问题:

C++教学不是C教学。讲宏定义和宏展开等等这些C语言使用广泛而在C++中不提倡使用的是不值得的,毕竟上课的时间有限,应该把时间留给更有用的内容。

不需要扣语言细节。这个是学生自己的事情,而且不是那么重要的。应该把面向对象的思想传授给学生。

对于初学者,不适合讲C++对象模型。而且讲的时候不要把任何话,任何图都说的那么绝对。那些都是依赖于编译器的。这样会给初学者一种错觉,任何编译器都是一样的对象排布方式,这就有可能为写编译器无关的代码埋下隐患。

忽略标准库。不知道是不是老师们都觉得STL不是C++的一部分,如果是1998年以前,你们是对的。现在STL已经被写入ISO C++ Standard,它不仅仅是一个库,它是一种思想,一种思维方式,一种生活方式。没有它们的日子的痛苦的。

忽略模版和泛型。这是一种趋势,必然的趋势。早晚有一天,C++程序中会遍布templateTemplate有如此强大的功能可能是C++标准委员会当时也没有想到的,当初的想法非常简单,作为一种代码自动产生机制。但是后来template被证明是图灵完备的,并且产生了template meta programming这样地下油田一般的财富。

 

我走过不少弯路,还好,现在对C++有点心得,想给C++初学者一些建议。

首先,选择一本好书(国内还没有这样的好书,看国外的,如果你不知道哪本好,来问我)。像某些书(《The C++ Programming Language》、《C++ Primer》)是必看的,即使是作为工具书查阅。国际标准的文档最好也备一份,因为有些东西连上面那两本书都没讲清楚(typedef,重载决议,模版匹配规则。。。。。。天啊!BjarneStanley都在干什么)。

接下来的就是要培养面向对象的思维。多态与虚拟是其核心,这也是所有面向对象的核心。这方面没有特殊针对的书籍,一些书的部分主题讨论了这些。只能多读多写多想,有项目做最好,边做边修炼。

同时要重视标准库的学习。学习STL的三重境界:熟练使用STL,谙熟STL源码,扩充STL组件。怎么才叫熟练使用呢?就容器而言,很有可能,你对vector<bool>bitsetropeslisthashtable都闻所未闻,而algorithmfunction objectadapteriterator4个部分还有更多的内容需要了解。我的意见是:对整个STL有个大局观的掌握,需要什么再查什么。第二个境界,就需要花时间了,当然,侯捷有一剖析STL源码的书,可是书中内容可能不能满足你的好奇心,直接去SGI的网站,直接看你编译器提供的头文件,都是可行的办法。第三重境界,首先推荐两本书《Generic Programming and the STL》和《Extended STL》它们对STL的规格有详细描述,也给出了一些扩展STL的例子。

等具有OOP的思维后,就可以准备在template领域闯荡一番了。Template技巧和泛型思维比OOP更难培养,而且学习了一阵后,你可能还发现,你每每都在考虑,我该用继承还是用模版(《Effective C++Item 41告诉了你如何抉择)。当你为错误的template语法焦头烂额时,你一定要看看《C++ Templates》。当然,一些基本的东西,还是要一开始就搞清楚的(比如函数模版不能偏特化,再比如你的编译器根本不支持export关键字,而你确努力在编译器的错误提示中寻找根本找不到的错误),免得发生徒劳的辛苦。

学习C++的同时,也不要拘泥于C++,可以对其他语言,设计模式,软件工程的方面学习。

 
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值