成功的程序员凌驾于他人的五个关键思维

原文链接: Five Key Mindsets that Separate Successful Programmers from Everyone Else
The Effective Engineer

本翻译文章经由作者Edmond Lau授权翻译。

Dave Cutler,在 74的年龄仍然每天到微软办公室去写代码。

我第一次听说 Cutler 是因他于计算机产业50年的贡献获得计算机历史博物馆研究员奖(Computer History Museum Fellow)。 1 光根据他几乎一辈子奉献在软件程序, 许多人会认为他是“强悍”的程序员。

比他终身职位更令人振奋的是, 他的工作已经影响20亿的计算机使用者的经验。  在他许多贡献中, Cutler 建置了 Windows NT 很重要的部分 — 过去20年来所有主要 Windows 版本的基础, 让微软在早期于市场上有很大的优势, 能回溯之前的操作系统, 让操作系统与前面的版本相容。 他被称为   “微软 Windows 操作系统背后的关键技术头脑 ”。 2

是什么让 Cutler 这样的人成为如此成功的程序员?  我们要如何立志才能达到可能只到他的几分之几的影响力呢?  什么因素让这些最强的程序员以他们的软件创造出如此杰出的正向影响?

以上最后一个问题是我在写 The Effective Engineer 这本书时特别投入研究的主题。  虽然程序设计不是工程师唯一的活动, 但是这仍是最主要的一项。  在访谈许多矽谷顶尖公司的工程部门主管后, 我发现最有效率的工程师, 确实完成任务而且拥有很大影响力者, 都至少有以下五个程序设计的思维:

1. 对于陌生的代码会毫不畏惧地下去了解


跳进一个不熟悉的代码基底(codebase)让人不舒服甚至感到害怕 — 很多人可能连试都没试就放弃了。  这种严苛的技巧在你多次尝试后将不再困难, 且经过这种历练, 你将会有显著的成长。  如果一个开源库或另一团队给的库不如你的预期, 这刚好给你了弹性跳入, 抓出为何你觉得不好的原因。

对陌生感到害怕不会只局限于代码。 每次你换工作, 你可能会迟疑是否有办法复制前一角色一样强的工作表现。  很少人不公开谈“冒名顶替综合症”( imposter syndrome), 但我曾听过CTO 职位的人告诉我他们有觉得自己是冒牌的感觉。

事实上每个人的起步都不一样。 Culter 的学历是一间小型的人文科学大学, 且不曾受过正式的计算机科学教育。 从很多方面来说, 他的起步落后于同侪, 且需要透过尝试和错误学习很多事务。

为了与时具进,我们必须采用成长的思维与 最佳化学习 。  任何技术, 不管是程序设计、沟通、 联网、小型演说或任何其他事务, 都是学得来的, 只要你愿意花时间。 就你想学的项目找书来读、寻求帮助。  相信随着时间, 处理不熟悉的事务会越来越容易。

2. 精通解Bug


“为什么我写出来的代码跑不出我要的效果?” ,这是身为程序员每天会问自己的问题。   解决bug的能力对于工程师完成工作的效能有不成比例的高度影响, 然而在大学的教学里以及技术的面试都还没受到应有的重视。

你如何有效率的 debug ? 由其核心滤出的科学方法:

  • 猜猜到底发生了什么事。
  • 假设猜测正确, 辨识此猜测将会有哪些结果?
  • 试着观察与结果抵触的事实。
  • 如果有任何牴触,你的猜测就不正确, 所以请做另外的猜测。 如果没找到任何牴触, 那已找到其中一个原由。

要能更快些除错,你必须要学会做更好的猜测, 且你要精通那些能让你更有效观察的工具与技术。

是否能做更好的猜测取决于你解决更多的问题也因此经历了更多的练习。

是否能有更好的观察能力在于你是否建立了技术窍门。 先从每件事都有办法观察到的假设开始, 然后找出可以让你做到某种观察或更快辨识出来的工具和机制。 别以为你只能从你熟悉的有限工具来做观察。  经常有可能某人已经发展出某个工具, 它已经知道你想要找的。

3. 投资可省时的工具


当计算机刚刚问世,计算资源很有限且昂贵, 所以程序员在使用计算机时要很注意资源占用。  而现在, 亚马逊云的一小时运算花费不到一毛钱。3

但反观来看, 我们仍然一样一天只有24小时, 一星期只有7天。  这表示任何手动的工作如果可以用计算机替代处理, 将会是高度减轻工作负担的杠杆。  我们以投资省时的工具以及自动化流程来达到。  只要是能让我们放大投入相同时间的产出, 或能在我们睡觉时或专心其他问题时帮我们自动做某些事的工具, 都值得考虑投资。

当我在写 The Effective Engineer , 我与前 Facebook 的工程总监 Bobby Johnson (他把6人的架构团队成长到100人以上)座谈时, 他提到一个他观察到的现象让我想很久。 “在这些成功的人中, 几乎所有人都写了蛮多工具。 ”

似乎很明显的, 对于一些程序员而言工具是很棒的投资, 可是当我们真正的去分解一天的工作时间, 计算要花多少百分比在工具建置上, 我们认为应该不会很高。 而在 Johnson 团队中,很多最好的程序员事实上花三分之一的时间在工具上, 用这些工具来做代码的部署、监控系统以及更多方面来帮助他们在更短的时间内完成更多事。

不要一直做可以运用机器就能帮你做好的事。

4. 最佳化例行性工作的执行速度


假如说从一个 function call 找到并导览到它的定义花你12秒,如果你一天要做类似的导览60次。 那就是每天要花12分钟在文档的导览。 如果你够熟悉文字编辑到文档导航的快捷键, 将12秒缩短到2秒, 那么经过一天, 你节省了10分钟。  每年加总起来你可省40小时, 相当于一个工作星期。

找出三个类似的最佳化,如此你将节省一个月。 想像你每年多出一个月的时间可以做什么?

或假设你正在解决一个bug, 这需要你开启这个app然后浏览过五个画面后以设定好的条件引起那个bug。 你可以花10分钟来写个程序帮你从开启然后直接引到发生bug的画面吗? 如此你将因为这小小的起始投资大大的加快迭代速度。

系统性的思考: “我可以如何加快重复性动作的速度”,  这个收益将会很丰硕而且 随着时间加倍  。

5. 从系统级高度来思考


当你写程序时, 你很容易认为所谓“工作完成”就是你已经写完规格所要求的程式码。  但这真的只是冰山一角, 任何被闲置在代码贮存库(repository)里的作品而且没有拿出来运作的都是毫无价值的产物。

为了建置并交付真的有用的代码, 你必须超越写程序的角度, 以系统级的高度来思考:

  • 你写的代码如何与其他人建立的代码基底和功能配合?
  • 你对自己写的代码已经做够足够的测试了吗?品保团队(如果有)能够运作你建立的功能吗?
  • 为了部署你写好的代码,营运生产环境需要做什么变动?
  • 你新增的代码对于正在运行的其他系统会有不良的作用或影响效能表现?
  • 当使用你所写的部分, 客户与使用者的行为如你预期吗?
  • 你所写的代码有达到你想发挥的事业影响力?

这些都不是简单的问题,需费点功来回答。 但你需要一个清楚的心智地图了解你写的代码是否符合大方向,指引你在时间和精力上的分配, 让自己的工作往更有影响力的方向发展。

这五个程序设计的思维将帮助你起步,但记得要成为成功的程序员或工程师一定还有更多条件是超乎写程序的范围。 如果你想要更多来自Google、Facebook、Twitter、 LinkedIn、 Airbnb、Reddit和其他顶尖科技公司的最佳程序员给的提示, 訂閱兩個星期免費的email課程 (sign up for the newsletter)或购买The Effective Engineer, 探索如何最大化你的影响力。

享受你的工作!

此部落格内容是原本作者于Quora的 問答 整理出来

也许你会有兴趣

♥欢迎关注 Soft & Share 微博

发表评论

Powered by WordPress.com.

Up ↑

%d 博主赞过: