学习是一种信仰。
分类: IT职场
2013-09-02 11:45:12
《程序员成长路线图:从入门到优秀》
2.9 门门通还是精通一门
我一直希望计算机只有一种程序设计语言,哪怕是高级程序语言只有一种也行,这样我们就不必为学这种或那种语言而烦恼了;或者我们学习语言不费事,有一种学一种也行,也没有学不全语言的烦恼了。但是,两者都只是一种希望,不知道未来能否实现。
程序员进入了成长期,必然和程序语言打交道,这个时候学语言一定是和具体项目、应用、客户相关。学习语言已经不是一种个人爱好的选择,而是一种工作的选择。就如同扫雪时不仅需要扫帚,而且需要铁锹一样。
有的程序员在单位只负责一个系统的维护和升级工作,这可能只要掌握一种语言就足够了。有的程序员所在的软件公司会接来各种各样的项目,而各个项目应客户要求采用不同的语言开发,有的项目需要用C#开发,有的项目需要用Java开发,有的项目需要用PHP开发。当公司人手不够时,程序员必须学习多种语言才能满足工作的需要。因此,程序员因工作需要学习语言的数量是不一样的。
程序员不但因为工作需要要学习语言,还会为未来职业的发展而考虑学习语言。未来职业发展需要何种语言,需要掌握多少语言,这一切都是一个未知数。所以,大家潜意识里有一种多多益善的想法,恨不得有一门学一门,一个都不漏过。因此,程序员心理负担极为沉重,无论是在工作时,还是休息时,每每都在想“门门通还是精通一门”这个话题。
当然有一些程序员还没有改变新手时期对语言的认识,还是以个人的兴趣去选择语言和学习语言。就这一点而言,站在实用主义角度,我自己反对因个人兴趣而学习语言,除非个人兴趣和工作需要以及未来职业规划相一致,这种个人兴趣才是值得提倡的。反之,为学语言而学语言且该语言与现有工作以及未来职业无关,仅仅是因为这种语言自己没有学过,或语言很流行就去学,那是没有必要的。因为中国不缺那种不实用的语言,只缺实用的软件。
从我自己的成长经历来看,一个程序员一般至少要精通二门语言。这两门语言一个应该是面向过程的语言,一个是面向对象的语言。至于了解和掌握多少其他的语言,那就要根据工作需要和个人职业规划来定了。一般3~5门也就足够了。这也就是说,一个程序员一般要掌握五六种程序设计语言,其中两门必须精通,其他3~4门只要求一般掌握,可以利用它们进行编程就行了。
我想对成长期的程序员在语言选择方面、学习方面、实用方面谈一谈自己的看法,以供参考。
1.精通一门到什么程度
虽然很多程序员也知道要精通一门语言,但是他们并不清楚精通一门语言到底有什么标志。有的人会按照程序员掌握语言的时间来确认对语言的掌握程度。例如,如果一个人使用某种语言编了3年的程序,他自己或其他人就会认为他对这门语言很精通了。有的人会根据自己对这门语言的驾驭程度来说明自己对这种语言的掌握程度。例如,有的人认为自己编起程序来很顺手,不用查手册,说写就写,很熟练,几乎什么程序都能编出来,以此认为自己对这种语言很精通了。
编程时间的长短和编程的熟练程度仅仅是精通语言表现的一个方面。更重要的是程序员要掌握这门语言的适用范围、整体架构、语法规则、功能分类等基础理论方面的知识,并能利用这方面的知识,以最科学的方法解决现实中各种项目的各个问题。
通俗地说,如果你能当这个语言的老师(反映出对语言的理论和语言架构的掌握程度),又能熟练地用这门语言解决各种问题(反映出对语言的使用能力),那你就可以说你精通这门语言了。
如果有人让你介绍一下某种语言,你不会讲、讲不全、讲不透,说明你对这种语言的理论方面和架构方面的知识掌握得远远不够。有人问你一些这种语言的一些常见问题、一些常用的技巧、一些常见的错误,而你都无法解决和解释,说明你对这种语言的使用能力还不够充分,掌握还很肤浅。这些都说明你没有精通这门语言。
2.最好是精通两门
我感觉精通一门语言还是不够的。程序设计语言一般分两大类,一类是面向过程的语言,一类是面向对象的语言。如果要很扎实地在程序员这个职业中耕耘,最好精通两门语言,一门是面向过程的,另一门是面向对象的。如果怕时间和精力不够,我建议一定要精通一门面向对象的语言,因为在面向对象的语言中也包含了面向过程的编程内容。
3.其他3~4门要怎么才算掌握
现实中我们常常会找一本书去学习一种语言,也会用这种语言编写几段小程序,那这样究竟算不算对这种语言已经掌握了呢?怎样才算已经掌握了呢?我认为只要能用这种语言开发一个项目,开发中没有太多问题,那就可以算掌握了。当然,开发的时候,断断续续,走一步、查一步、问一步,问题如同连环绊脚石,这样则不能算掌握了。
4.不要太急于赶潮流
一些程序员往往对技术潮流关注过度,明明自己工作上用的是C语言,自己做的是后台维护的工作,但是,听说现在流行C#、Java,就老想有时间把C#、Java学学,不学可能就落伍了。
说实在话,如果不急于应用,最好等这门语言成熟以后,再决定学习也不迟。从各种语言的发展过程来看,有些语言的生命周期也只有短短几年时间而已。
5.语言是互通的
其实各种语言在本质上是相同的,它们有太多的共性,虽然有些个性,但是在实际中个性功能很少用到,用到时现学也不迟。因此,我们可以在精通一门语言的基础上,通过这门语言的结构去学习另外一门语言的结构,对这门的示例采用另外一门语言来编写,这样有对照、有比较地学进步应该会很快的。找出相同点,这是学习多种语言的技巧。
6.语言的无知与有知
现实中经常会有人问你,你知道什么什么语言吗?如果你不知道,千万不要觉得自己无知而羞愧。因为人的价值不在于你知不知道,而在于你知道后做了些什么。常言道“光说不练假把式”,为知道而知道,只会浪费实用的工作时间,影响自己实战能力的提高。在很多情况下,有知和无知可能会发生逆转。有意的无知?扔幸獾挠兄.硐值酶?哟厦鳌?
当然,我们可以关注一些语言方面发展的新闻,就如同我们每天关注国内新闻、国际新闻一样。能给自己留下印象的那就成功了,不能留下印象的那就算没看,传播新闻那可是媒体的事,我们权当休闲就行了。
特别需要提醒的是,对程序员来说,实用主义是比较好的,把现有的实用的语言掌握好,研究深入一些比什么都重要。人们可能都会有“这山望着那山高”的想法,但是只有站在这山上时,才能望到那山。
读后:
精通两门语言:C/C++、Java;
掌握一些:shell脚本类(包括shell命令行、awk、sed、grep等专项)、sql语言类(包括sql语句、plsql类、嵌入式sql类)、xml类;