语言真的不重要吗?

最近CSDN上有一个帖子特别火《36岁IT老人再次随笔 》,地址:http://topic.csdn.net/u/20091108/18/0a28b3e0-6cf8-4a3a-93b5-b0a6f0f2c289.html。其中作者的经验很是让人敬佩,但有些观点却十分荒谬,例如作者在谈到编程分类的时候,认为编程语言只有两种,原话为:”两种,一种是面向过程的,另一种是面向对象的。面向过程的C,脚本语言等都是一样的,而C++为代表的OO语言也是一样的。在我眼里,语言之间没什么区别,区别只是在思想上。“,这样的观点我坚决反对,今天就趁机在这里把话说透。

谁要是在面试的时候向考官说“语言只有两种,一种是面向过程的,另一种是面向对象的”,我敢说99%的可能性你要失去这份工作。且不说这句话会让面试官觉的你是如何的不切实际和高谈阔论,单从道理讲就会让人觉得你是多么肤浅。难道说掌握了所谓的编程思想,就真的进入编程的白化境界,达到了所谓的“手中无剑心中有剑”的境界了吗?难道说语言真的无关紧要吗?如果不是,真相到底是什么?下面就让我来告诉你!

1.你很难在市面找到一份工作,只需要抽象的思想而不需要具体的编程。你可能会说架构师,但谁又告诉你架构师不需要编程,谁又告诉你架构和语言无关。我所经历的最糟糕编程经验就是实现一个C++的架构师设计的C#架构,整个架构充斥着COM和Socket,而和应用最切合的Web Service则完全没有涉及,因为这个 C++架构师的脑子里根本就没有Web Service的概念。
2.所有市面流行的语言(例如Java和.NET),即使你掌握了所谓的思想,你也无法轻易的从一门语法跨到另一门语言。不要相信所谓的“语言都是相通的,掌握了一门就一通百通”。能写个“Hello world”并不代表你真正领悟了一门语言的精髓。如果一门语言和竞争者的差异只是表现在语法层面,这样的语言根本就不应该设计出来,当然也无法生存下去,因为根本就没有学习的必要。下面是我以Java和C#的差异来验证语言之间的鸿沟:
    A.语法不一样。一个熟练的Java的程序员并不能想当然迅速成为一个熟练的.NET程序员,从编译不通过到没有语法错误需要的不是数周,而是数月。
    B.类库不一样。优秀的程序员只掌握语法是远远不够的,还需要掌握数量庞大的类库,看看那本1000多页的《C#高级编程》,你就知道你需要掌握的有多少。请不要告诉我你可以用的时候再去查,如果是这样,我只能说你连熟练的层次都没有达到(《C#高级编程》讲的都是最基本的),这样你凭什么和别人谈思想。
    C.开发工具不一样。Eclipse和Visual Studio一样吗,SVN和SourceSafe一样,不要告诉我它们都很easy。如果您是这样认为的,我只能说你了解的还不够深刻。
    D.积累的代码不一样。如果你告诉我你是个资深的Java程序员,我当然可以认为你手头一定积累了大量的Java源码,我不会期望你的每一行代码都从头写起(虽然ctrl c + ctrl v不止一次被人嘲笑,但我要说这不仅高效而且实用),我期望你表现出现资深的效率,因为我会支付给你资深的价格。因此,如果我想要的是一名资深的Java程序员,我当然不会去招一名C#程序员,至少C#代码无法无法粘贴在Eclipse中编译。
3.不同语言的所蕴含的深层思想也不一样。还是拿.NET和Java来说事,难道两者除了最基本的面向对象思想,就没有一些更深刻的东西可以启发你?难道JSP+Struts+Hibernate+Spring的设计理念和Asp.net完全一样吗?如果多少年过去了,我们念念不忘的依旧还是“面向对象的三个基本特征(基本所有的C++教程都会告诉你),我们可真的够可怜的了。

软件工程师的本质是匠人,生产力的根源在于熟练,正如《卖油翁》所说的:“我亦无他,惟手熟尔”。
posted @ 2009-11-13 17:27  张旭光  阅读(521)  评论(15编辑  收藏  举报