评判一个程序员好坏的标准到底是什么?

在这个IT技术火爆的年代,人人都喜欢学IT,人人都用IT技术,但是评判一个程序员好坏的标准到底是什么呢?


翻开各大公司招聘网站,映入眼帘的是各种编程语言要求:大学本科毕业、英语四级、精通JAVA、3年以上JAVA开发经验、熟悉Servlet和MVC、熟练使用MFC、熟练使用Win32 Socket、熟悉Linux网络配置、熟悉Windows shell和Linux Shell,等等诸如此类的招聘条件。可以说,现在大部分公司招聘全都是这套路,培养人才也大概是这个体系,进入公司先做入职培训,培训如何使用公司的内部API高效的开发模块,让职员快速熟悉公司开发流程,然后就可以投入到生产流水线当中了。于是,我们看到大批程序员全按照此类标准要求自己,上来就看编程语言书,编程语言还没完全精通就开始熟悉开发架构,架构还没完全掌握就开始写代码了,如果你观察,身边此类程序员比比皆是。


那么,这种模式到底对不对?我觉得倒并非无道理,因为每个人定位不同,有人就想只写代码,如果按照这个要求的话,以上衡量模式未尝不可,因为这类人接触不到实际中的问题,遇到问题有其他人解决,他们只负责实现,只负责coding,其他的他们不管,很多大牛在职涯初期也都是这么过来的,一个公司总是需要有最底层的工作人员去做这些事情,但问题是,如果这种模式对程序员本身有没有利?我的回答是否定的。《编程之美》上有句话我很赞同:编程的过程就是享受思考的过程,也就是说,编程绝不单单是做别人告诉你的事情,在这个过程中,你要思考,你要探索,你要找到解决问题的方法。而这个过程,绝不单单是熟悉编程语言就能搞定的。


编程语言和我们用的自然语言其实有相同的地方,他们的作用都是表达人的主观意思,只要你能表达出你的意思,就达到了交流的目的,至于用的是英语、还是汉语,这个无伤大雅,但并不是说语言就不重要了,相同的一句话,不同的人说出来就有不同的效果,同样,同一个算法,不同人实现起来效率和安全性也不尽相同,但如果相对于想表达的看法而言,显然人内心想表达的看法是更重要的。这也就是我想表达的中心意思,一个程序员不应该只关注编程技术,编程技术再精湛,也是人下达的指令,让计算机去做,你让计算机怎么做、怎么下达指令,这更需要程序员关心。我们现在各大IT公司全以编程语言和编程架构来要求程序员,在我看来是这个社会浮躁的一种体现,他让程序员过于关注上层技术,而忽略了底层原理,现在的程序员太关注新技术的发展了,今天学JAVA,明天学C#,后天学Python,用着Spring架构,还关注着QT和MFC,没事还瞅.net两眼,看开发网络游戏赚钱,马上学游戏策划,看到移动应用赚钱,马上学Android和ios,大家仔细想想,身边这种人是不是很多呢?你能看到拼命写代码的人,但是很少看到钻研算法的人,你能看到学Android开发的人,但是很少能看到研究Linux内核的人,你能看到用java做网站的人,但是很少看到研究TCP/IP协议的人,你能看到用.net做组件编程的人,但是很少看到研究OS组件开发的人。有些人也许会说,研究那些技术也用不上,有啥用?恰恰相反,我认为那些技术是最实用、最本质的东西,深入学习那些东西才能做到事半功倍的效果,以不变应万变,成为一个真正的程序员。


但就像我之前说的,那些顶层的技术并非不重要,只不过现在的程序员有点太过重视那些,以至于蒙蔽了自己双眼,基础没打牢就搞高层,最后遇到瓶颈,无法提升自己。所以如果我评价一个程序员的好坏,会把是否熟悉计算机底层原理放在首位,在这个基础上的解决问题能力、思考能力、交流能力是考量因素,至于是否熟悉编程语言,这根本不是问题,因为对于熟悉计算机底层原理的人来说,学习程序语言、熟悉架构这些事情就是顺水推舟的事情,掌握了最根本的东西,那些招式根本就不是个多费力气的事。


我也希望我也能按这种标准要求自己,立足于原理和底层技术,往上发展,切忌浮躁,不要盲目追求代码量,在原理上花大工夫,辅以适量练习,我相信这是正确的道路,我也相信,最扎实的学习方式恰恰是最有效率的学习方式。

你可能感兴趣的:(个人日记)