「职业能力」会写程序还不够,硅谷杰出软件工程师都有的6种能力

曾任职于Google和Quora等公司、现任Quip软件工程师的Edmond Lau,于《The Effective Engineer》一书中访问任职于Facebook、Instagram和Google等知名网络公司的资深软件工程师,归纳出他们眼中高生产力的杰出软件工程师都具备的五种能力。

一、不害怕探索陌生程序语言

接触新项目或是转换工作跑道时,都有可能需要学习全然陌生的程序语言,许多人对此感到害怕,甚至未尝试就先放弃。其中,跳脱舒适圈的恐惧往往多于学习程序,会担心是否无法重现过去工作的好表现,甚至因此怀疑自身能力。

不论是多厉害的工程师,一定都有起点,就像打造Microsoft Windows基础的微软资深工程师Dave Cutler为文组出身,没受过正式电脑科学教育,比起同辈花更多时间在错误中学习。在这之中,最重要的两个关键为具备「成长心态」(growth-mindset)而非「固守心态」(fixed-mindset),以及「乐于学习」(optimize for learning)的态度。

学习陌生程序语言这项关键能力会越练越上手,并让你在学习过程中成为更好的程序员。

二、精通Debug

「为什么程序跑出来和我预期的不一样?」是许多工程师会遇到的问题。Debug能力往往是影响工程师是否能顺利完成项目的关键因素,却被大部分人低估。Debug的系统性思考如下:

先假设造成bug的可能原因。

若假设为真,界定此假设可能导致的结果。

试着检视是否有和这些结果冲突的现象。

若有冲突表示假设错误,要重复上述思考过程。

由此可知,想加快Debug速度,要提升「提出假设」和「检视假设」的能力。假设能力可随着Debug经验的累积而提升,检视能力则需加强善用检测工具的技能。在此过程,必须先假设所有东西都是可检视的,并找出可用来检测或加快检测速度的工具或机制,千万不要只用自己熟悉的工具。

三、开发节省时间的工具

减少时间做那些电脑就可做的工作,例如开发节省时间的工具和使工作流程自动化。

曾负责Facebook软件基础建设团队的软件工程师Bobby Johnson,带领该团队从6人成长至超过1百人。他观察到,团队中表现出色的人多数写了许多工具,这些看似和绩效无直接相关的工具开发时间可能占三分之一的工作时间,却因此大大提升工作效率,其中包含用来部署程序、监测系统,以及其他可节省时间的工具。

四、优化重复性工作的速度

软件工程师每天可能要搜寻、浏览函数定义很多次,善用键盘快捷键可省下可观的时间。例如,每次搜寻需花12秒,类似的步骤每天要重复20次,若用快捷键可将搜寻时间缩短到2秒,一年下来即省了40个小时。其他状况如每次Debug都需要在不同装置测试,除了要分别打开app,还要设定测试情境,这时候就可以思考如何加快这类重复性工作的速度。

五、发展系统性思考模式

写完代码、让程序可运作仅是冰山一角,要产出真正有价值的程序,必须从程序本身提升到整个系统来思考。

你的程序和其他程序库以及其他人写的功能是否兼容?

程序是否测试完成,并确保其他成员可执行你写的这些功能?

部署你的程序需要改变哪些生产环境?

新程序对其他正在运作的系统是否有负面影响?

客户和使用者的新程序使用情况是否如预期?

新程序是否达到公司期待的效果?

从宏观的角度思考问题,可让你更懂得如何调配时间和精力以让程序达到最佳效果。

六、化繁为简、有条不紊与人沟通

很多工程师很难与人沟通,有些满嘴都是一般人或老板听不懂的术语,有些则是会做不会讲。各位到硅谷看,大部分的高级工程师都能言善道,能够把艰涩难懂的技术,依据对方的程度,用对方能听懂的语言表达。如果不能表达清楚的话,再怎么厉害,作为工程师的成就也有限。

拥有高度生产力的工程师,是国家真正的技术力和国际的竞争力,这是瑞士、荷兰、以色列、芬兰这些国家走的路线,而不是靠低工资和加班工作。我发现台湾过去的薄利多销的路线已经不单只是衍生出业界现在必须面对的问题,经济压力和普遍过劳的现象也造成不少社会文化的问题,影响健康、降低生活品质、让文化层次停滞不前。

在我个人能力范围所能做的,是设法提高我学生的工程素养,有机会就协助某些有志提升技术能力的业界人士。但大家可能要先有个认识,这些能力往往都不是一般人到研究所和业界学个一年两年能够出师的。以我个人的驽钝之才,到了国外念博班和工作时有缘遇到艰难的工程问题,才得以略窥门径,然而在台湾要如何才学到这些技能呢?

我没有简单的答案,这也不是容易的事,我之前谈过多次,包括最近一篇【系统人才的出路】[3]。我只是相信,以目前台湾的环境来说,这是一条值得鼓励尝试的路,如果在学校和业界有机会面对艰难、前瞻的工程问题,才有机会练到功夫。网路上很多明师,不一定要拜师才能学艺。

反过来说,如果只在乎速成,在学校不愿挑战艰难的工程问题,到了业界又没有机会遇到前瞻的工程问题,我想就很难发展上述的能力,这也是当前台湾业界非常缺乏系统架构师、软件架构师的原因。

但这些原因都不是真正足以阻挡一个能欣赏工程技艺的、愿意认真学东西的人,有机会花几年时间深入做系统研究,自然会学到上述能力,Jim Huang 就是一个好例子。如果具备上述能力,还需要担心工作的问题吗?如果业界有很多高生产力的人才,还需要这么担心竞争力的问题吗?

  • 微博
  • 微信