做什么不重要,怎么做才重要。
如果你想成为一名真正杰出的资深开发者,那只有一个办法:犯错误、改正错误、从错误中学习、分享错误、再重复这一过程。
所有犯过的错误都将成为你的宝贵经历。再从经历中学习,这就是成为一名成功资深开发者的关键。很简单,对吗?
换句话说,你刚刚步入社会,成了一名初级开发者,你纠结着该怎样做才能取得职业发展。这只是时间的问题吗?你要不要回到学校继续深造呢?或者再多拿些高级认证?
并不全是。
虽然正规教育可以让你迅速得到提升,但事实上我认识许多资深开发者,他们都只有大学学历而已。
好的资深开发者不仅要能写出漂亮的代码,还必须具备某些其它特质,这样才能受到别人的青睐。资深开发者是能为公司带来 10 倍以上价值的人,他们知道好的东西是怎样的,可以为顾客交付价值。
不要把资深开发者仅仅当成一个职务名称,它更是一套工作上的行为准则。不是你的工作内容,而是你的做事方法,让你真正地成为资深开发者。关于这一点没有什么好商量的。你不可能一进入职场就是个资深开发者,在成长的过程中你肯定会犯错,犯很多很多的错,但这些最终都会转换成你学到的东西和经验。
下面这些特质是我从许多资深开发者身上总结出来的,正是这些特质,把他们与普通的开发者区别开来。
1.他们很好奇
正如阿尔伯特·爱因斯坦所说:
我并不聪明,我只是特别好奇。
研究表明,当好奇心被激发时,人学习和记住知识的能力都会得到大幅度提升。当你好奇时,大脑中的奖励系统就会开始发挥作用,大脑分泌出名为“多巴胺”的化学物质,让人变得异常兴奋,学习速度非常快,即使对枯燥的内容也是如此。
好的资深开发者会更进一步。他们会有组织有计划地引导自己的好奇心,在紧急状况下就会用上自己积累起来的知识。
举个例子,先把一门编程语言学深学透,然后再扩展开,去学习其它语言。
2.他们会对选中的平台进行彻底研究
你不太可能碰上一个别人从未碰到过的编程问题。也没几家公司开发的东西真的是别的公司没有做过的。
正因如此,在使用你的语言和平台的过程中,你所面临的绝大多数问题,都曾经被解决过。
比如,我曾经利用 SAP 自带的面向对象类,将 30,000 行的 SAP ABAP 代码模块化,最终成了一个 200 行的类。我能做出这样的成绩,最主要的原因是我决心在了解其它 SAP 模块之前,先深入掌握 ABAP。我知道这样做会很慢,但付出的努力是值得的。
好的开发者从来不会满足于现状。不管他们的代码能不能工作,他们对每个应该问的问题,都会努力找出答案。
3.他们都是好导师
John Crosby 曾经一针见血地说:
辅导就是深入别的想法,听取别人的意见,再朝正确的方向推一把。
谷歌曾在 2008 年对这个问题做了一次重要研究。谷歌人才创新实验室的氧气计划团队以绩效评语、员工调查、优秀经理奖提名和其它信息等为素材,进行了长达一年的数据挖掘研究,以评估得分高和得分低的经理之间到底有多大差别。他们对 100 多名经理的 10,000 多项数据进行了研究。
研究有两点重要发现:
要想取得管理成功,最重要的事就是做好导师工作。成功的经理们知道怎样指导团队成员获得成功。
最不重要的事就是技术实力。这也从另一个角度证明,好的开发者不一定能成为一个好的经理。
根据研究成果,谷歌修改了他们的调查反馈模板,以反映出这些特质。在过去他们注重衡量经理人的产出如何,现在则关注他们花多少时间来指导团队,对愿景是否沟通得清晰有效,等等。他们也以这些技能为中心,开发了新的管理培训项目。
他们说,每个资深开发者的核心期望之一,就是要能够与内外部用户和合作者进行有效沟通。非技术背景的人没办法理解技术行话。所以最好的资深开发者反而总没办法在技术上得到别人的赞赏。
所以,你要提升自己的沟通能力,迅速判断听众们能听懂什么水平的技术术语,然后用简单的语言和贴近生活的例子来解释复杂的技术概念。
辅导紧密关系着新手向老手的成长,不管是职业发展还是个人成长。分享知识,分享经验,提前锻炼团队。
4.他们没有“闪亮玩具” 综合症
如杰夫·贝索斯所说:
公司不应该对闪亮的东西上瘾,因为闪亮的东西不长久。
这也适用于开发者。事实上,大多数开发者都是属喜鹊的,他们总是喜欢搜罗新鲜闪亮的东西,不管怎样先保存起来,再慢慢寻找用途。
如果你对这种现象没什么切身感受的话,闪亮玩具综合症的典型特征就是想拥有最新潮的玩具,不管有没有实际用途,不管是否需要。或者就是痴迷于紧张而又短暂的拥有感,然后很快就移情别恋了。
好的资深开发者会不断提醒自己不要犯这样的毛病。他们很清楚什么时候不要做什么事。他们知道很多决定都是坏决定,比如为了提高可读性而把一个库完全重写,或者从旧框架切换到一个全新的框架。他们并不害怕风险,他们只是知道哪些事情该做而已。
所有事情最终都会归结到代码上。代码应该只做它应该做的事,别的什么都不要做。代码的功能要清晰易懂,让人花几分钟甚至几秒钟就能明白。浏览代码应该非常容易,对水平不高的开发者也应如此。
大道至简。
5.他们承认有自己不知道的东西
Neil Gaiman 曾说:
发现自己不知道某些东西,有时候正是弥补的良机。
世上最难说出口的一句话,不是“我爱你”,而是“我不知道”。行为经济学畅销书《魔鬼经济学》的作者 Stephen J. Dubner 和 Steven D. Levitt 这么认为。
这一刻无法避免,但当它发生时你又如何应对?你滔滔不绝地把自己的成就大讲特讲了 20 分钟,造就了领域专家的形象,享受着领军人物的光环。人们不断地提问,你游刃有余地解答。终于他们问到了一些其实你并不太懂的东西,这时候你会怎么办?
对许多人来说这是非常扫兴的事,但事实上直接承认也没什么大不了的,总比掩盖自己的短板好,不管是知识还是技能上的。这时最关键的就是你将如何解决这样的问题,不管是请教别人还是自己去深入钻研。
你对待问题的方式,正是你能否变得资深的关键。你能否深入了解他们问这样问题的原因,了解更多的背景知识,扩展自己的知识面?你能不能为他们提供帮助,一起找出问题的答案?你愿不愿意事后再研究一下,并且把答案反馈给他们?
成为一个资深开发者并不意味着你要无所不知、无所不晓。它只是意味着你可以帮助大家找到问题的答案。
6.最后,他们可以感受到坏代码的味道
在这个问题上,Seymour Cray 一语中的:
程序员们的问题在于,你完全没办法知道他们在做什么,直到错过良机,无法补救。
正因如此,好的资深开发者们都对代码的“味道”特别敏感。如果看起来或者闻起来像是坏代码,那就很可能是坏代码。之前的开发者很可能在这个问题上犯过错误,你也一样会。写代码就是这么回事。
当我们不断地解决接踵而至的新问题时,也要不断努力提高现有代码库的质量,起码保证不要变坏。所以当你挠头“谁写了这么烂的代码啊”的时候,下一个跟着要问的问题就应该是:“我该怎样才能让它变好呢?”
在想明白怎么改进之前,你先得知道要改进什么。你要知道好的代码和坏的代码都长什么样子。顶级足球运动员与普通运动员之间的区别之一,就在于他们会多花很多时间去研究其他运动员的比赛。我相信对顶级开发者来说也是一样的。
有味道的代码就是那些你也没办法说清楚为什么,但就是感觉不对劲的代码。这样的代码就应该被去除掉。这也是你做为一个资深开发者的独特卖点之一,可以让你鹤立鸡群。要做正确的事,即使不一定要马上开始。
用 Donald Kruth 的话来说:
我猜编程就和平凡的生活一样。如果你喜欢什么东西,你就会在其中发现美。
英文原文:
How to Be a Good Senior Developer
评论 1 条评论