岁月流转,往昔空明

C++博客 首页 新随笔 联系 聚合 管理
  118 Posts :: 3 Stories :: 413 Comments :: 0 Trackbacks

 扯了这么多,再次回到开始,C++有那么重要么?
 是或者不是,这个答案并不重要,而我也不能正确地给出答案。如果真要说我只能刷刷奸猾,告诉大家“因人而异”。
 重要的是,我们用什么样的思路,用什么样的态度来衡量、评价、解决这个问题。
 下面一段又是个老生常谈,随便到哪个搜索引擎上都能搜到一堆的话题:C++是怎么来的,它为什么而设计的,实际上人们又拿它来做什么,它有什么优缺点。我接触编程6年,其中C++占到4年,而且是我用的最好,也是最喜欢的语言。每次说到历史这个话题我总是有一大堆罗嗦的话要说。但是实际上我对C++的感觉到的最大的特点,却是书多,相关的书非常多,经典的著作相比较其它语言而言也算得上是最丰产的了。书多不外乎三种原因,一是流行面广,而是流行时间长,三是难度大。C++就那一点点编译器规则,一本ISO C++的手册搭配其发明者Bjarne Stroustrup的《The C++ Programming Language》就把语言机制讲的很清楚了,为什么它又有那么多的书来阐述一些所谓的Advanced Topics呢?因为灵活。C++极度灵活,这种灵活并不是动态语言的那种灵活,而是在于它承载了太多的需要,导致它变得极度灵活化,灵活的负面意思就是太多,太复杂,使得人们太容易混淆与各种语言机制的Chaos中。似乎南师大的荣耀教授在采访BS的时候还是BS在什么地方说过,如果C++要像现在的老师们这样教他自己都不会去学。
 然后BS就举了一个Hello World的例子来说明他所认为的启蒙C++与一般授课使用的C++差别在什么地方,并以此说明C++其实并不复杂。好吧,我们就承认纯正的C++并不难学。但是不能忘了,我们的C++的对与错不是由我们决定的,而是编译器。工程上用的C++编译器绝对不会说不支持单纯的,蹩脚的C-Style(不是说CStyle蹩脚,而是说C中蹩脚的部分),不会不让你使用指针访问内存(指非必要的访问,例如动态数组),甚至不会拒绝你使用一些类似于Hacker的代码来完成一些极具技巧性和挑战性的工作。好吧,既然C++都支持,那么便不能拒绝你写出有此类特性的代码。更加致命的事情是,它的很多高阶机制,都是建立在底层机制基础上。最明显的例子就是Boost和STL。一旦编译出错,那么它的提示可能出在任何层面上,为了解决这些问题便又需要去学习那些较为底层的知识。C++的大坑就是这样一点一点挖出来的。
 C++可供选择的东西太多。所以BS就出了一本书,叫《The Design and Evolution of C++》,专门讨论了每种机制在C++当中被采纳的背景、他们当时的考虑、这些机制的适用范围。虽然说这本书属于“入门教材”的行列,但是实际上我更加倾向于将这本书看成是在你品尝了C++大餐后的甜点。也就是说,尽管看起来有道理,但是作为预备知识同样不适合,于是你只能一边牢记大量的语言机制,一边应用,一边体验,一边读那些专著来纠正你的错误并填补你的不足,不可能有机会让你只走你需要走的路,大量的知识构成了一个扁平的知识框架,为了达到相对自由运用的水平,你需要学习的知识、需要获得的体验、需要弥补的弱点太多了。
 
 如果说,只有C++可选的话,那么也就没什么办法了,大家只能去学那个能让人死去活来的东西。但是实际上我们并不如我们自己认为的那样无奈。大量的语言,总有比C++更加适合一般学生的。灵活的脚本语言Python/VBSP/JSP/Perl/Ruby/Lisp,半动态的(我是这么叫的。。。)Java/C#/VB/VB.NET/CLI,高效的 Ada/Fortran,桌面开发用功能强大的Delphi(人家的语言叫Object Pascal,但是也就那么一个编译器,所以无所谓了),这其中的绝大部分语言学习难度都要低于C++。
 一般来说,有不少学校对于除了与电子和信息相关的专业都选择的是VB(以下说的VB均不指.NET)/VFP作为计算机二级的突破口。而这点教学,往往就成为了一个工科研究生仅有的编程基础。VFP这种被淘汰的使用范围狭隘的环境不讨论,VB作为RAD来说着实是个不错的选择。但是为应付计算机二级所教授的课程来看,并不能教会除了语法外的什么,况且所使用的VB6严格来说是Message Driven兼Object Based的一个开发环境,这都不利于学生从程序结构的高度(不是数据结构)去思考所撰写的代码。在短暂的学习以后我们会误认为界面框架就是软件的构架,于是我们便可以看见在毕业设计时候,那数百行可怜的代码都拥挤于Command1Click这样的字里行间。Object Based的语言既不能教会我们用过程的方式开发,也不能支持面向对象的程序设计方法。这些都是VB对进阶学习的最大障碍。
 但是毕竟我们熟悉了VB的语法,知道了程序设计语言是怎么一回事。这已经花费了没有接触过编程的同学的相当长的时间,如果说我们还要去牵扯入C++那可怕的内存海洋中,还要被C++那恐怖的前后++所威胁,但是实际上我们不需要它也能过得很好,我们是不是有些冤大头了?
 实际上,对于研究生阶段,最重要的就是要让我们学到的那一点点东西在尽可能少学别的东西的情况下发挥最大的价值。
 前面我把VB一通好臭,我想VB都会不理我了。那么我们就另结新欢吧。找谁呢?

 VB的弱点已经有点数了(很有数的话你我就不会在这儿瞎混了,早被M$请去了),那么便要去找一门结构性比VB好,概念又不比VB艰深太多的语言(不是说它不能艰深,而是说,不理解那些艰深的东西我们一样能用的挺欢,最主要的是用起来要舒服,什么乱七八糟的内存管理问题,让编译器和RTL/VM去替你擦屁股吧)。JAVA/C#/Delphi/VB.net都算是不错的选择。虽然从我的角度来说,很不喜欢,非常不喜欢,特别不喜欢微软,但是我仍然将C#作为我的第一建议。
 因为C#的开发环境好,速度也还算不错,桌面开发、企业级开发都很方便,微软的支持也很到家,但是对面向对象的支持有些强迫性了,可能初期会有些难度。
 JAVA跨平台,工业基础好,从嵌入式到大型的分布式系统都能拿来做,但除了和C#一样的不利因素外,开发环境和程序库要比C#难用一些。
 Delphi对对象和过程的程序设计方法都能支持良好,语言干净利索,检测严格,能培养出一个人好的编程习惯,但是它以后用途偏窄。
 VB.NET就不用说(人家都叫VB了),跟VB比较接近,语法跨越小,但是太小了会有学习惰性,会低估语义和程序设计方法上的差异,弄点不伦不类的东西出来。

 C++在程序控制上的能力,基本上都有了,而在在企业级开发方面,C++的弱势也得到了新语言不错的弥补。C++的另一个优势,效率方面呢?
 MATLAB。这个工具生来就是为了计算。作为研究生的工程运算来说,无论效率上还是功能上来说,通常都是够用的,而且也非常方便,避免了自行编程所面对的极为复杂的算法选择、编写、调试的问题(工程计算程序的调试难度是很大的)。
 再加上VBA/VBSP。为什么要带上VBA/VBSP?其实很多你需要完成的功能,往往都在软件中可以通过调用某些组件来完成。除了脱机编写完整的应用程序以外,对于大部分的问题的解来说,都可以直接使用系统所提供的环境方便的完成。使用这个环境所采用的语言,就是软件的脚本宏,而现有很多的软件所采用的宏语言都是VBA/VBSP。它的语法、架构、程序的设计都与VB非常接近,用来快速的构造原形或为编写实验提供帮助的程序来说,都能比较好的完成任务。

 好了,在一门通用语言+VBSP+MATLAB的帮助下(VBSP基本上是白送的,MATLAB经常是必须掌握的,如果你不需要掌握MATLAB,那么你的工作很可能也用不到C++的高效率),你还需要C++么?
 如果你的答案是肯定的,那么我只能相信这个世界真的有爱情存在。我钦佩你的执著。那么请允许我告诉你我走过的路。
 《The C++ Primer》/《The C++ Primer Plus》  不是一本书,但是都是入门的。别为它的厚度吓倒,能看多少算多少,不难的。
 《The C++ Programming Language》   手册。随身必备,供查阅。
 Platform SDK       MSDN是个不错的选择,讲解相近,查阅方便。
 
 《Thinking in C++》      从C++开始,接触OOP的深入解析
 《Effective C++》《More Effective C++》
 《Exceptional C++》《More Exceptional C++》  技巧、技术和技艺,编写C++程序必须注意的若干事项。
 
 基本上到这里就差不多了,后面的就是诸如泛型、并发、元编程、模版、设计模式一类的话题了,不同的话题都有不同的问题背景和应用范围,这些往往对于大部分语言来说都是相同或者类似的。恭喜你,你们的爱情长跑到站了。
 从此以后,研究生和C++过着磕磕碰碰却幸福的生活。

posted on 2006-10-13 21:32 空明流转 阅读(1898) 评论(6)  编辑 收藏 引用

评论

# re: 研究生,请你拒绝C++的爱(下) 2006-10-18 17:39 duanxingchuan
我也差点被C++被害苦了!!!!!!幸好我觉悟的早!  回复  更多评论
  

# re: 研究生,请你拒绝C++的爱(下) 2006-10-20 16:50 wbt
智商低的还是别玩,免得自己被玩,哈哈  回复  更多评论
  

# re: 研究生,请你拒绝C++的爱(下) 2007-05-12 16:09 lovedday
我觉得你神话了C++的难度,C++固然很复杂,但如果你狠下心来研究,也一定可以掌握的,一门语言再复杂都不会复杂到什么程度,夸大语言的作用和复杂度都是不好的,你说C++会比编译原理更复杂吗?对于一个学习的人来说,最重要的是克服恐惧的心理,如果你觉得C++很难很复杂,那你就肯定学不会了。而且很多人使用C++都不用C++的那些复杂的高级特性,语言嘛,够用就可以了,没必要非得掌握它的所有语言特性,BS不是说过吗?没人能够彻底掌握C++。从某种意义上说,复杂并不是一件好事,我喜欢简单的东西,简单就是美,在实际的开发过程中,效率是非常重要的,如果你对C++的复杂语言特性掌握的不牢固却非要使用那些语言特性,那么出了错就会浪费很多的时间。  回复  更多评论
  

# re: 研究生,请你拒绝C++的爱(下) 2007-05-12 16:10 lovedday
而且我觉得在计算机领域,掌握基础知识和技术原理比研究语言的高级语法特性更重要。  回复  更多评论
  

# re: 研究生,请你拒绝C++的爱(下) 2007-05-20 14:33 Jedimaster
C++就是为妄图重新发明世界的天才们设计的魔方。我觉得,设计第一,思路第二,算法第三,编码第四。  回复  更多评论
  

# re: 研究生,请你拒绝C++的爱(下) 2014-10-21 13:55 yuen
看了几次学长写的东西,尤其是这个。
深深觉得学长说的是正确的。如果一年前我能多看看学长的东西,恐怕不会在C++上浪费了如此多的精力和金钱。。。。。
感谢学长美文,以享莘莘工科狗!thx!  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理