C++及编程语言认识上的误区

我在 1996 年就开始接触 VC 了,那是我用的是 1.0 1.5 版本,即便不是国内最早接触 VC 的,也算比较早期的一批吧。那时候学习 VC 最经典的一本入门书籍 是《 Visual C++ 技术内幕》,现在也算是最好的一本之一。《深入浅出 MFC 》 简体版在大陆发行应该是 2001 年的事了,《 C++ Programming Language 》,《 C++ Primer , Think in C++ 》,《 Effective C++ 》大量介绍翻译到国内,恐怕是 2003 年以后的事了。而这时候,国内早期的 C++ 程序员已经用 C++ 超过十年了( 90 年代初的那批 C++ 程序员是用 Borland C++ 的)。我有朋友开玩笑说 , 最早那批 C++ 程序员想学 C++ ,却找不到好的讲解 C++ 的书。等这些经典的 C++ 书籍介绍到国内时, C++ 已经过了它的黄金年代,用的 人开始少了,很多人转向 Java C# 了。这就是中国程序员的悲哀啊!

事实上,没有《 C++ Programming Language 》,《 C++ Primer , Think in C++ 》,《 Effective C++ 》这些书,并不影响你写出好的 C++ 程序。 90 年代那批 C++ 程序员已经用 C++ 做出了很多知名的软件,不过他们的 C++ 程序大多是 C 风格的,并不 符合标准 C++ 的思想。我曾经见过开发 MapGIS 那批人,他们很早就用 Borland C++ 。但实际上他们没有用 C++ ,而是用 Win32 API 写程序,也没有用 Borland OWL (Borland 公司早年推出的类似 MFC 的类库 ) 。《C++ Primer 》直到去年才将它通读一遍,这时我已经离第一次使用C++ 超过十年了。我当时所在的部门是做GIS 平台的,大部分程序员都使用的是C++ 。然而据我所知,他们中应该没有一位通读过《C++ Primer 》或TCPL 。这确实是件不可思议的事情,但国内的软件公司就是这样。管理者并不关心一位C++ 程序员是否看过《C++ Primer 》或TCPL ,他关心的是项目是否完成,甚至你在上班时间看书而不是写程序,还会遭到上司的批评。

作为一位C++ 程序员,如果你觉得TCPL 太厚太学院气息而很难读完它,那《C++ Primer 》是应该看一遍的。《Effective C++ 》、《深度探索C++ 对象模型》等书如果有时间就看,没有的话不看也罢。因为他们确实有些深奥和抽象,对于很多程序员,我估计不太好看懂,这几本书我也一直没有看完。这也是很多想学C++ 的人觉得C++ 难学的原因,实际上,C++ 是一门学起来的深用起来浅的语言。有些精微的技术细节你不知道,大部分时候也不影响你写出好程序,或者你只要记住《Effective C++ 》中的结论,而不用深究它这么做的原因。

从实用的角度看,或者从公司管理者角度看,是否符合 C++ 标准并不重要。语言并不重要,个人认为库比语言重要,因 为只有语言,没有库,实际上你几乎开发不出像样的软件出来。 Windows 上最重要的 C++ 库有 MFC ATL, Linux 上有 Qt 。掌握库的设计思想 以及其中涉及到的和操作系统有关的知识和机制,比如 MFC 中的文档-视结构, MFC 中涉及到的很多 Windows 的机制,比如消息机制、窗口重画机制、 COM/ActiveX 的原理、线程的概念等等都要搞明白,而这些和 C++ 语言没有关系。

我也做过技术团队的 Leader ,从更高的层次看,比如站在管理者或招聘人员的角度,语言也不是个非常重要的问题。关键看你做什么类型的项目,然后才能决定用什么语言最适合。所以,我觉得应该思考的是对什么样的项目和技术而不是语言有兴趣,比如是做网站、通信系统、图像处理、 ERP MIS 等等。然后根据感兴趣的技术去选择应该学习的语言,这样会更明确更有目标,因为语言终究是为应用服务的。比如说,我很长时间以来从事的 GIS 技术,如果是开发 C/S 模式下的 GIS 平台软件,适合的语言基本上就只有 C++ 。如果是基于 GIS 平台的项目二次开发,适合的语言就有 VB Dephi 等等。

我也用过不少语言, C C++ VB C# js PHP 等等,到现在为止,我其实不在乎用什么语言。在我眼里,语言只是工具。从逻辑的角度看,都大同小 异,比如都有一套类似的类型系统、 if 语句、分支语句、循环语句和函数。当然,语法总会有些细微的差别,语言的设计初衷也不尽相同,底层的机制也不一样(有的是 Native 的,有的是托管的)。但对于大部分使用语言的程序员来说,语言设计上更深的思想和很多细节并不需要太多关心。对我来说,现在学习一门新语言也就个把月就能上手写东西,对这门语言的熟悉是在边写边查书的过程中完成的。当年学 VC 用了一年多才明白里头很多东 西,后来学 VB 连书没看过,看 MSDN 就会了。学 C/C++ 有个好处就是对底层的机制会很清楚,你再学别的就易如反掌,看一眼就知道底层是怎么回事。一个 程序员的收入和水平和用什么语言没有必然关系,任何语言都有菜鸟和高手。很多人认为 C++ 程序员水平高,所以收入高,实际情况是反过来的说的 : 因为这个人 水平高,所以能用好 C++ 。 而且,很多 C++ 程序员收入也不高,那要看他做什么样的技术,水平如何以及在什么性质的公司,比如外企做 VB 可能都比国内企业做 C++ 工资高。

经常看到CSDN 上有不少讨论哪种语言更有前途的帖子,这种总是能吸引一批人参与,很是热闹。其实目前Tiobe 每月的编程语言排行榜上前十名内的语言都是 目前最流行的语言,他们在几年内都是有前途的。编程语言的排行也是缓慢变化的,一个有经验的程序员有足够时间为适应这种变化而学习一门新语言。实际上,很 多人讨论的语言的前途是“钱”途,如果是这样,要我说和语言有关系,也没有关系。如果真要讨论语言的“钱”途,不如讨论什么性质的公司、甚至哪家公司、什 么水平和经验的程序员更有“钱”途。

更重要的水平实际上体现在你的设计水平和对技术全面理解和深入把握上,但《 C++ Primer 》不会教你怎么做。遇到一个具体的项目该如何去架构、设计,应该采用什么技术,任何一本书上都没有答案。《设计模式》也许有点帮助,但我见过 太多的为了设计模式而设计的系统,那不过是纸上谈兵和迂腐的表现,最后的结果是一团糟。兵无常法,水无常形,尽信书不如无书。是的,软件工业界几十年的经 验总结是:没有银弹!如何设计这取决于你的经验、渊博的技术积累和良好的工程判断力。而这些,有的是靠得是天赋,有的靠得是是积累。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值