【科普杂谈】会写程序还不够,硅谷杰出软件工程师都有的 5 种能力
曾任职于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,还要设定测试情境,这时候就可以思考如何加快这类重複性工作的速度。
五、发展系统性思考模式
写完程序码、让程序可运作仅是冰山一角,要产出真正有价值的程序,必须从程序本身提升到整个系统来思考。
- 你的程序和其他程序库以及其他人写的功能是否相容?
- 程序是否测试完成,并确保其他成员可执行你写的这些功能?
- 部署你的程序需要改变哪些生产环境?
- 新程序对其他正在运作的系统是否有负面影响?
- 客户和使用者的新程序使用情况是否如预期?
- 新程序是否达到公司期待的效果?
从巨观的角度思考问题,可让你更懂得如何调配时间和精力以让程序达到最佳效果。
相关文章
- Java高级软件工程师面试考纲
- 网络工程师级考试大纲
- 软件自动化测试工程师面试题集锦(2)
- 浅谈测试发展的未来--全栈式测试工程师
- 学习java工程师,成功入职字节跳动
- 应聘高级Java工程师历程感言,已获万赞
- 工信部java高级软件工程师,帮你解决95%以上的问题!
- Java开发需要学什么!java软件工程师简历格式模板
- 12年高级工程师的“飞升之路”,好文推荐
- 腾讯总裁刘炽平回应组织优化传闻;美国软件工程师平均薪水最高;GIF动图发明人去世|极客头条
- 在职阿里6年,一个29岁女软件测试工程师的心声
- 21岁的工厂普工到24岁的自动化测试工程师,月薪20k,3年改变人生
- 7年测试工程师经验,浅谈一下如何测试一个web网站?
- 面试官下场:面试功能测试工程师主要考察哪些能力?
- 年轻不乏野心,想做年薪40万+的软件测试工程师?写给长途漫漫中的你...
- 前端工程师如何打发闲余时光?
- 写代码可能是成为软件工程师最容易的部分
- 【编程实践】代码之中有创意:“我一直认为工程师世界上最具创造性的工作之一”
- 作为一名软件测试工程师你认为怎么样才能保证软件质量?
- Google前工程经理王忻:如何准备软件工程师的面试
- 【无标题】长期招聘硬件工程师-深圳宝安
- 软件工程师 Book
- 安天工程师解读CryptKeeper通用密码事件
- 前端工程师可以分成 4 种,你属于哪一种?
- 软件工程师的爱情