前几天在看《代码大全》时,第三十一章,第八节中谈到了经验,引发了我的一些思考。里面有这样一段话:
人们也往往荒唐地强调程序员的经验。“我们需要有五年以上 C 语言编程经验的程序员”就是其中一例,如果一程序员在头一、二年没有学 C 语言,第三年学也不会产生很大区别。这种类型的经验和其工作能力没有多大区别。
在程序开发中,知识更新迅速使此领域中“经验”处在一种奇怪的地位上,在其它许多领域,过去有着成功历史的专业人员,往往令人放心,并且因其一串成功的事情而得到尊敬。退步很快的人将很快和潮流格格不入。为了使自己有所价值,你必须紧跟潮流。对年青的、求知欲旺盛的程序员,他们往往在这点上有优势,而有些老的程序员认为自己有所资格了而讨厌一年接一年都要证实自己的能力。
最后一个问题是:如果你已工作了 10 年,你得到了 10 年的经验应当是真正的经验,你如 能坚持不断地学习,你就能得到经验,如果你并不想学到什么,不管多少年你也学不到什么。
我觉得这说的太有道理了。过份的量化去强调所谓的经验是很没有道理的,比如在很多公司的招聘广告里面都有要在某某领域多少多少年的经验以上,我认为可以在广告中这样写,但是想应聘的人可以不完全理会它,招聘部门和面试官在选简历和面试时更不应该把这个作为一个硬性指标,否则会错失有能力有潜力的人,而错选已在IT界混了多年的老油条。注意我是说不必完全理会经验年限,但也不可不看,应届生与“有经验的人”还是有区别的,不要走极端。
记得我刚毕业的时候,进入公司的一个7人的项目组,里面的人配备是酱紫的有二个应届生(其中一个是我)有二个有二年工作经验的研究生,有二个有四年工作经验,其中一个是Leader,还是一个有七年工作经验。如果按照常理来讲,或者理论上来讲,应该是这个七年工作经验的老大哥当Leader,或者承担最多最重的责任才对。但是事实完全相反:没有人把新人当作新人,也就是没有陪训,其实没有陪训很正常,因为对于大多数小公司来讲都没有正规的过程的,我也不在乎是否有陪训。刚进去的二周就要做一个新功能的开发,可笑的是那些有经验的人竟然和我们二个应届生来争,都想推脱,都想把更多的事情推到别人身上。我一直以来都持有一个观点那就是能力越强责任越大,但是那些人却真的让我鄙视他们。特别是那个七年工作经验的人,动不动就请假,上班基本上都是在上网,因为他混的时间长,所以能把分到的任务很快的做完,但他却一点也不多承担责任,对他人不管不问。帮助帮助新人更是没有事儿。这也就算了,更可悲的是,虽然他混的时间长,但是做事不认真不仔细,虽然能很快的完成,但是质量也不过关,代码的细节没有做好。在测试的时候,会发现很多隐藏的Bug,因为像集成测试这样的粗活都是我们新人来搞,所以有很多次我们都会加班加点在修改测出来的Bug,最后发现竟然是老油条的代码的问题。而且这个老哥脾气还大的很,不听从Leader的安排,周末也不来加班,跟他讲他的模块出了问题,也不承认,后来虽承认了,却拒绝修改,最后还是我们别人去修改,把Leader气个半死。虽然我们是新人,但是那份激情是如烈火般的,我们非常愿意接收新的任务,加班加点也会把它做好,每天下班前也都主动的到Leader那问下,是否有其他的事要做。总之是特别的积极,用现的观点来说就是好用,是匹好用的马。
当然,今天说这些,没有一点报怨的意思,都过去二年多了,这里只是想说有经验的人不一定好用,虽然他们的能力可能会比应届生好一些(但也不一定)。像我之前文章中所提及的,对于软件开发来讲,真正的技术可能只占50%,更多的还看工作态度,责任心和人品这些所谓的“软能力”或叫“内功”。就比如我刚讲的经历中,我宁可要六个有激情的应届生,也不要那些老油条。团结一心加上勇气加上努力,可以做成一切项目,至少在一定程度上是这样的。
在我们的身边这样的老油条不在少数,虽然工作了很多年,但是工作水平却不怎么样。上班溜号上网,不负责任,做事不认真,应付了事,脾气却都不小,任务也都是靠Baidu+Google+Copy+Paste来完成的,代码也乱七八遭的。虽然新人也可能这样做,但是新人会听从安排,会按照代码评审去做调整做修改,而老油条们却自认为很牛叉,拒绝修改和重构,还能给你扯出一大堆废话出来。
我一直很喜欢新人,因为他们很有激情,很有潜力,同时又比较容易接受建议。虽然他们知道的少,会的少,但是肯去学。就好比我当初一样,我刚到公司那天,下午开发环境弄好后,因为项目需要Java语言,虽然在学校里学过,但是基本上忘记了。记得那天下午用Eclipse写一个HelloWorld的Java程序,竟然都有编译错误。但是二个星期后,我就能用Java跟老油条们一起开发项目的一个新模块,虽然代码量不大,但也用到了多线程,继承和多态,也是到了那时才真正理解了什么叫多态。知道为什么吗?因为那二个星期我每天中午,下班后都拿着Header First Java和Core Java在看,有时会看到晚上十二点多,那会住着一个小黑屋,无电视,无网络,时间就都用来看书了。就这样,二个星期就能够用Java来开发了。
McConnell说的很好,十年经验,到底是十年经验还是一年经验的重复十次。用我的话讲就是,一千个HelloWorld.c能不能比一个Linux网络驱动的技术含量更高?答案是显而易见的。
愚认为:经验=不断学习+实战+反思+总结。不断学习才能获取新的知识,而新的知识又必须在实战中得以验证,验证过程必有反思,最后总结方成经验。经验的作用就是让我们成长,让我们有积累,当遇到类似的问题,类似的情景的时候,能够快速的拿出解决方案。如果未能不断学习,那么经验会倒退的,因为人,只要是人,就会慢慢的遗忘。
最最关键的是,是否每天都在进步,抑或,今天只是昨天的又一个重复。