深入学习了STL的内部构造以及一些C++深层次的机制与技巧以后,突然浮现出每个Programmer都要面对的问题。
Why Programming in C++?
比起质朴纯净的C,灵活庞大的JAVA和C#,我为什么要选择C++?
在各大技术BBS和牛人的BLOG里逛,大家都在为自己喜欢的语言争论,C#/JAVA的程序员说,不要重复造车轮,拥有良好的语言平台,有丰富全面的库比较全,可以将注意力转向更为重要的架构方面,软件工程方面。又何必在语言的表层基础苦上苦痴迷?C++标准中连最基本的GUI库和网络库都没有。包括 C++创始人BJ本人也想将C++发展成为一个平台(palform)。
C++的STL库固然不错,但是一个新手用STL时,一个小错误编译就跳出上K的错误信息(就算有STLFilt,确实也以难安装),最新的C++0x中 能改善这一问题的万众瞩目的Concept已被取消,C++又该何去何从?C的程序员(包括Linus大叔)说,C++简直就是邪恶的语言,效率底下,语言繁杂,违反KISS原则,更无法在底层如操作系统中胜任。大家说的好像都有道理,难道C++就是这样一门高不成,低不就的语言么?
我也用过C语言和C#语言,而且还在大学里也拿过关于这两种语言竞赛一些小小的奖,最起码能说对这两种语言还有粗略的了解。
但是我最喜欢、花的时间最多的还是C++。C++是我学的第一门语言,一路学来吃了不少苦,C++作为语言国度的一个联邦[EFC++Item1],灵活,弹性大让我着迷,它像一个精通太极的大师,容纳百川,但却深藏若拙。它有精妙的技法如SFINAE和tag distributing (技法的复杂性这也是它被指责的重要原因)。
它有沉着老练的STL库,其中有各种数据结构和常用算法的灵活精巧的实现和高度可扩充性,有锐意进取的boost库,loki库,有超重量级的网络通信开发框架ACE,还有效率较高的Blitz++科学库等。
C#中的各种“高阶”功能C++都能实现(没有“基本”两字,您和我说不可能?那就去看看C#的托管机制是用什么语言写的吧),虽然您将花费更多的时间学习与调试,但是我觉得中途的乐趣只有您自己做过才能深有体会。
它和C语言工作效率不分伯仲,(您说C++效率低下?请问您深入用过C++么?您看过SGI实做中内存分配的实现么?)C++也可以毫不费力的使用现有的 C代码(所谓C-Sytle),C++STL中泛型的sort完胜C中的qsort这也是C++程序员津津乐道的话题。
但哪种语言不是经过无数大牛们大师们千锤百炼的产物?争论哪种语言的好坏只是显出您的自卑心理。当你去说一门语言好与不好的时候,你有想过,你有真正的深入的学过它么?你真正的了解这门语言的特性么?
请记住这句话:好手艺人从不会责怪他的工具。语言没有好坏之分,只有在特定环境下,具备各自的优势。
对于初学者而言,学通一门语言是他叩开计算机底层原理世界的大门的钥匙。语言的好坏不重要,关键是看你自身从学习这门语言中得到了什么。
若是单单执着于语法细节,把把你的思想全部拘束在孔乙已争论茴香豆的“茴”的几种写法上(像贵国的等级考试这类的考察语言偏僻细节上),你将会得不偿失。
在学习的提高阶段,可以通过大体学习其他的语言,来发散自己的思维;甚至还可以帮助你更好的理解你所目前热爱的语言。
还有一些人执着争论哪门语言更有“钱途”的时候,我建议您嘞,改行吧。 (您说我装清高,什么程序员也要吃饭,现实也很残酷之类的。我只能说,连吃饭都成问题的,您也不适合在这个层面上讨论语言的好坏,您还是继续学吧)。
by XGuru 09年12月