博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

《门门通还是精一门》(2010/07/05)

Posted on 2010-07-07 08:40  n216  阅读(11302)  评论(45编辑  收藏  举报

我一直希望计算机只有一种程序设计语言,哪怕是高级程序语言只有一种也行,这样我们就不必为学这种或那种语言而烦恼了;或者我们学习语言不费事,来一个学一个也行,也没有学不全语言的烦恼了。但是,两者都是一种希望,不知道未来是否可以实现。

程序员进入了成长期,必然和程序语言打交道,这个时候学语言一定是和具体项目相关,和应用相关,和客户相关。学习语言已经不是一种个人爱好的选择而是一个工作的选择。就如同铲雪扫不但需要扫帚,而且需要铁锹一样。

有的程序员在单位只负责一个系统的维护和升级工作,这可能只要一种语言就足够了。有的程序员在软件公司,公司会接来的各种各样的项目,各个项目会应客户要求,采用不同的语言开发,有的项目需要C#开发、有的项目需要java开发,有的项目需要php开发。当公司人手不够分工时,程序员必须要学习多种语言才能满足工作的需要。因此,程序员因工作需要学习语言的门数是不一样的。

程序员不但因为工作要学习语言,还会因为未来职业发展考虑学习语言,而未来职业发展需要何种语言,需要掌握多少语言,是一个未知数,所以,大家潜意识里有一种多多益善想法,恨不得来一门学一门,一个都不放过。因此,程序员心理负担极为沉重,无论是在工作时候,还是休息时候,每每在想“门门通还是精一门”这个话题。

当然还有一些程序员还没有改变新手时期对语言的认识,还是以个人的兴趣去选择语言和学习语言。就这一点而言,站在实用主义角度上我是反对个人兴趣的,除非个人兴趣和工作需要以及未来职业规划相一致,这种个人兴趣才是值得提倡的。反之,为语言而语言且与现有工作以及未来职业无关,仅仅是因为这种语言自己没有学过,或语言很流行就去学,那是没有必要的。因为,中国不缺那种不能实用的语言,只缺能够实用的软件。

从我自己的成长经历来看,一个程序员一般至少要精通二门语言。这个两个语言一个应该是面向过程的语言,一个是面向对象的语言。至于了解和掌握多少其他的语言,那就要根据工作需要和个人职业规划了。一般三到五个也就足够了。也就是说一个程序员一般要掌握五六种程序设计语言,其中2门必须是精通的,其他3-4们语言只要一般掌握,会利用它们进行编程就行了。

我想对成长期的程序员在语言选择方面、在语言学习方面、在语言实用方面说说自己一点看法,供其参考。

1、 精一门到什么程度

很多程序员也知道要精一门语言,但是,他们并不清楚精一门到底有什么标志,有的人会按照程序员掌握语言的时间来确认对语言的掌握程度,例如,如果一个人使用这种语言编了三年的程序,他自己或其他人就会认为他对这个语言精通了。有的人会根据自己对这个语言的驾驭程度来说明自己对这种语言的掌握程度。例如,有的人认为自己编起程序来很顺手,不用查手册,说写就写,很熟练,几乎什么程序都能编出来,就认为自己对这种语言很精通了。

其实对于一门语言的掌握程度是不可深测的,对于语言掌握其实是一个无止尽的过程,没有终点。

编写时间的长短和编写熟练程度,仅仅是精通语言表现的一个方面。更重要的是程序员要掌握这个语言的适用范围,整体构架,语法规则、功能分类等基础理论方面的知识,并能利用这方面的知识,用最科学的方法去解决现实中各种项目的各个问题。

通俗地说,如果你能当这个语言的老师(反映出对语言的理论和语言构架的掌握程度),又能熟练地用这个语言解决各种问题(反映出对语言使用能力)你可以说你精通了这门语言了。

如果,有人让你讲讲这个语言,你不会讲、讲不全、讲不透,说明你在这个语言的理论方面和构架方面掌握远远不够。有人问你一些这个语言一些常用的问题,一些常用的技巧,一些常见的错误,你都无法解决和解释,说明你对这个语言的使用还不够充分,掌握还很肤浅。这些都不能说你精通这门语言。

2、 最好要精通2

精一门我感觉到还是不够的,程序设计语言一般分两大类,一类是面向过程的语言,一类是面向对象的语言。如果要很扎实地在程序员这个职业中耕耘,最好去精通2门语言,一门是面向过程的,一门是面向对象的。如果怕时间不够,精力不够,我建议一定要精通一门面向对象的语言,因为在面向对象的语言中也包含了面向过程的编程内容。

3、 其他3-4门怎么才算掌握

现实中我们常常会找本书去学习一种语言,也会用这种语言去编几段小程序,那这个究竟算不算对这种语言已经掌握了呢?怎么才算已经掌握呢。我认为只要能用这个语言能开发一个项目了,开发中没有太多问题就行了,就可以算掌握了。当然,开发的时候,结结巴巴,走一步查一步,问一步,问题如同连环绊脚石,这个则不能算掌握了。

4、 不要太急于赶潮流

一些程序员往往对技术潮流关注过渡,明明自己工作上用的是C语言,自己做的是后台维护的工作,但是,听说现在流行C#java,就心里老想有时间把C#java学学,不学可能就落伍了。

说实在的话,如果不急于应用,最好等这个语言的风头过落后,成熟以后,再决定学习不迟。从各种语言发展过程来看,有的语言的生命周期只有几年时间。

5、 语言是互通的

其实各种语言的本质是相同的,他们有太多的共性,虽然有些个性,但是在实际中个性功能很少用到,用到现学也不迟。因此,我们可以在精通一门语言的基础上,通过这门语言结构去学习另外一门语言的结构,对这门的示例采用另外一门语言来编写,这样有对照,有比较学的应该是很快的。找出相同点,是学习多种语言的一种技巧。

6、 语言的无知与有知

现实中会有遇到有人问你,你知道什么什么语言吗?如果你不知道,千万不要感到无知和羞愧。因为,人的价值不在于你知不知道,而是你知道后,做些什么。常言道“光说不练假把式”,为知道而知道,只会浪费实用的工作时间,影响自己实战能力的提高,很多情况下,有知和无知会发生逆转的。有意的无知,要比有意的有知更加聪明。

当然,我们可以关注一些语言方面发展的新闻,就如同我们每天看到的国内新闻、国际新闻一样。能给自己印象的那就印象吧,不能给印象的那就算没看,传播和卖弄新闻那可是媒体的事,我们全当休闲就行了。但是,这个不能算是“通”的范畴。

我想对程序员说,实用主义是最好的主义,把现有的实用的语言掌握好,研究深入一些比什么都重要,人可能都会有“这山望着那山高”的想法。但是只有站在这山上,才能望到那山。