朋友请我写篇文章,谈谈如何编程。我非功成名就之高人,自己那点儿经验拿出来会被人笑话的。但是看到周围很多师弟师妹正在走我以前走过的错路,使我不得不斗胆说几句,只望大家在程序员的道路上一帆风顺就好。
程序员——一个毁誉参半的称谓。想当初曾经被视作英雄,众人景仰。而如今,却被许多人瞧不起,客气的说他们是“高技术工人”,不客气的就直接称其为“牛”了。图灵奖获得者,Edsgar Dijkstra在他的《卑微的电脑程序员》一文中说:"对我来说,电脑程序员是个尊称,但对其他一些人来说,电脑程序员确是不懂他自己在干什么,而是只会依指令行事之徒,一些只知道分析、追求语言特性的人。”看来,许多人曲解了“程序员”这个名词的涵义。那什么样的人才是真正的程序员呢?我斗胆给程序员分为四类,请大家对号入座。
一、高中生程序员
这里丝毫没有贬低高中生的意思。在美国,有大量的高中生从事程序员的职业,他们的工作就是编码、编码、再编码。很可悲,目前中国的大学生基本都是做这样的工作,甚至某些硕士、博士也是如此。
这一类型的程序员认为语言是最重要的。他们认真地学习语言的语法和函数库。他们不停地学习语言,以为只要掌握的语言多、新,就能有竞争力,有好的工作。他们确实很厉害,VC、VB、Delphi、PB、Java、ASP、PHP等等都能拿来就用。但是,正因为他们,编程才被称为“牛都可以干的事”。
在正规的公司,高中生程序员整日都在添表格——工程师程序员把软件划分模块,甚至详细定义好了每一个函数,高中生们就是向这些函数里添加代码,如同添表格一样。很多时候,高中生甚至不知道他做的项目是什么,只知道这个函数的功能是什么。
在国内,如此正规的软件公司很少,大多数还处于作坊式的开发模式,所以,高中生程序员还是很吃香的。几个人一商量就开干,没有完整的计划,不考虑维护性、重用性,注释懒得写,文档更不提。这样,项目非常依赖这几个人,自然他们的日子过得很好。他们最头疼的事情是后期维护,每当要加碱功能、改bug的时候,他们就会发现自己已经看不懂自己写的代码了。
软件工程正在逐步实行,公司越来越正规,高中生程序员也就越来越难做了。年轻时,他们或许可以打拼一番,但是30、40岁之后,当他们对新语言、新技术的接受能力已比不过年轻的程序员时,他们也就退出了竞争行列。
当“软件集成电路”的梦想变为现实,当各种可重用控件、组件、类库都已经具备,那时就不再需要高中生程序员了。
二、黑客程序员
黑客决不是那些到处黑机器搞破坏的人,他们是一群痴迷于技术的人。
他们从不循规蹈矩,不信奉任何规则、定理,总是从常人不可想象的角度去思考、编程、使用工具。这样做的结果,或者发现系统漏洞,或者发现更高效、巧妙的方法。他们从不满足于使用别人封装的接口、定制的框架,总是要刨根问底,对技术的钻研直至底层。
他们中间,高学历者并不多,多的是热血青年。对他们来说,当黑客程序员决不是职业,而是爱好。当一个人对自己所作的事充满兴趣时,他肯定能作出非凡的成果。这就是他们成功的根本原因。
黑客是推动技术进步的最重要力量之一。
三、工程师程序员
他们是企业的中坚,属于管理阶层。人们送给他们美称——软件工程师,但他们仍喜欢说自己是程序员,因为他们中的大多数是从高中生程序员成长起来的。
“软件工程”是他们的法宝,在这套理论导引下,他们领导者整个软件的开发过程。他们知道什么样的软件是拥有市场的,知道用户需要什么样的软件,知道该让谁来编代码、谁来测试,使整个团队协调一致。他们设计出了一个个可重用的模块,让公司的开发工作越来越高效。他们设计出的系统都是可维护的,能够方便地做各种修改、扩充。总之,他们是为高中生程序员做表格的人。
他们也懂技术,不过他们更注重的是技术的思想而不是末节的使用。比如当Java出现的时候,他并不是去学Java的语法、函数库,而是看各种介绍Java的文章,听别人的评论,领会Java的功能和思想,思考怎样利用Java的特性。
随着软件业的发展,必须抛弃作坊式的手段,实施基于团队的科学的管理和开发过程。所以对工程师的需求越来越大,然而现在合格的、富有经验的工程师却很少。
四、科学家程序员
有些科学家在设计出算法后,将它交给别人在计算机上实现。另一些科学家在设计的同时便考虑到可实现性,并能利用计算机的特性增强算法,更可贵的是他们饶有兴致地自己编程实现算法。后一种科学家便是科学家程序员。
他们具有深厚的理论水平,带动着计算机领域中各个学科的前进。