十年程序员
2012年,终于可以和人家说,我有十年工作经验了。幸运的是,十年后,我还在写代码。
十年前,促使我选择写程序作为一生追求的是我对写程序的好奇以及实现功能后的成就感,但那时,在对自己未来充满信心的同时,内心深处依然惴惴不安。萦绕心头的乌云是所谓30岁程序员的说法。
那时,很流行的一个论调是,程序员只能做到30岁。人到30岁之后,智力在下降,体力在下降,再加上家庭的琐事,人很难再写程序了。
那时的自己尚年轻,没有体会到30岁后的状态,很难知道这种说法的真伪,所以,内心里还是会有一丝丝恐惧。有时,我会假想,29岁的最后一天我还能写程序,30岁生日一觉醒来,我的编程能力便烟消云散了。
大概当我有5年工作经验时,那个扰人的论调依旧,只是年龄上,从30岁变成了35岁。我暗自庆幸,我又可以多写五年程序了。也是那一年,我进入了ThoughtWorks,在这里,我遇到了一群疯狂热爱代码的人,我所能做的就是暗自打磨自己的编程技艺。
在ThoughtWorks几乎五年了,这期间,我跨过了30岁的门槛。时至今日,我依然能写程序,我最担心的事情没有发生,而且,我写程序的能力似乎还在提升。相比于刚开始写程序的小朋友,
- 我在动手之前,就可以对自己要实现的内容有个更好的理解。
- 我的解决方案会更简单,更容易理解。
- 我分解出的任务步骤更小,更容易实现。
- 我写程序时考虑的方面会更多
- 我会更多的考虑写出的程序对于全局的影响
在这期间,我也逐渐释然。其实,不是30岁能不能编程,而是那个时候,30岁的程序员本来就没有多少,这也是我5年的时候,论调成了35岁,是因为这一代人已经长过了30。这不,今年就有人开始讨论一些40岁程序员的问题了。
十年程序员(二)
随着自己在ThoughtWorks经历的事越来越多,对这个曾暗自困扰我许久的问题,我也有了新的思考:真正可怕的不是X岁后能不能编程,而是X岁后只能编程。
为数不少有工作经验的人进入到ThoughtWorks之后,会感觉很不适应,因为这里很多刚刚毕业工作一两年的小朋友写程序都很厉害,他们自 身在写程序的优势就不那么明显了。结对的时候,他们不断被这些小朋友们挑战,有些人就会很郁闷,因此离开ThoughtWorks的例子也是有的。
单就纯粹的代码输出能力而言,经过一段时间的刻意练习,人和人之间往往不会相差很多,相比较而言,在编写一段代码时,可以考虑到的方面,不同人 会因为经验和视野差异极大。比如,要一个新手实现一个需求,他就会奔着代码直冲过去,而一个有经验的人,则会考虑许多方面,为什么要做这样一个需求,实现 这样一个需求有哪些技术方案,实现这样一个功能是不是会对现有架构有什么影响,写这样一段代码是不是需要对现有代码进行某些重构,等等。
如果一个人具备的所谓工作经验,仅仅是所谓代码输出的经验,那他的实际价值就会大打折扣。
事实上,在ThoughtWorks的开发团队里面,我们也是鼓励一个人尝试不同的东西,比如,有人可以帮助QA做测试,有人可以去尝试去做业 务分析,有人会在公司内部做分享等等。做这些工作本身并不能让我们的开发技能得到大幅度提升,但这些不同的尝试会让人不同的看问题的角度,如果我没有了解 过业务分析,我就不会考虑一个事情本身的价值,倾向于别人告诉我做什么,我就去做什么。如果没有带过团队,我就不会考虑,怎么把一个设计做得简单,让别人 更好理解和接受。
道理说白了很简单,一个人的价值取决于他有多大的不可替代性。如果一个人只能按照别人的要求写代码,他的技能就是很容易替代的。
十年程序员(三)
经验是什么?有一段时间,我一直在问自己这个问题。
许多所谓有着“相同工作经验”的人,表现的差异却极大。即便在ThoughtWorks,一同起步的毕业生,几年下来,个人的差距也是非常明显的。有人已经可以带团队了,有人成为了技术专家,有人却只能在团队里低着头忙活着自己的一亩三分地。
面对一个问题的时候,我所能想到的就是我的经验。
我所能想到的,取决于我做过的事情。习惯于在舒适区练习的人,因为做着本质上类似的东西,面对问题时,脑子里想到的东西只会局限在很窄的范围 内。很多貌似工作了很多年的人,其实,只是在不断重复最初一两年的事情而已,唯一的差别或许只在熟练程度而已。所以,工作经验和工作年限是截然不同的两个 东西。
只有跳出自己的舒适区,尝试一些不同的东西,才会打开一个人的思路,让人得到真正意义上的提升。
ThoughtWorks的经历让我开始把目光投向代码以外的许多东西,事实上,在ThoughtWorks里,凡是代码写得好的人,几乎都是具有多方面技能的:能写代码,能设计架构,能分析业务,能做测试,能带团队,能面试,能做咨询,甚至能建设新办公室。
正是因为能做的事情很多,所以,再坐回到计算机面前写代码时,想到的就不仅仅是局部的一点点代码,而拥有的是更好的大局观:
- 我要知道Story的价值所在,保证我写的东西真正有意义。
- 我要多从各个角度考虑一下这个问题,以免出现bug。
- 我要写出干净的代码,以便其他人更好维护。
- 我做出的设计要让团队成员都能更容易的理解
- 我要让团队成员更好的成长
- 我要站在的客户的角度思考这个问题
- 我要在客户面前更好的维护团队利益
- 我需要考虑整个办公室人员的成长
- ⋯⋯
记得有人对我说,你做了很多有意思的事:从最早的Ruby on Rails交付项目,到后来的咨询,再到现在基于DevOps on Cloud的持续交付。在我看来,得到这些机会,恰恰是因为我具备了做很多事情的能力。
能做的事情越来越多,路也就越来越宽,得到的机会也就越来越多,得到锻炼也就越来越多,能力也就越来越强,能做的事情也就越来越多。不知不觉中,一个人就会进入到一个正向反馈循环中。
幸运的是,十年来,我一直在成长,不管是主动还是被动。
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://dreamhead.blogbus.com/logs/188002525.html