原文链接:Coding skill vs. employee skill

对于这篇文章的观点,我是五五开。

文中的例子比较极端。多数情况,好的程序员不是不负责,不是完全不能交流,只是对于某些「愚蠢」特别不耐烦;擅长「沟通」的好员工,也许只是把它作为免除编程苦役的手段,最终技术能力也未必有所增进。最后好程序员成为了技术骨干,好员工成为了管理者,两种人互相鄙视互不理解,被分配进项目中以并不让人愉快的氛围开展工作,最终项目也鲜有非常成功的。

我不认同的,一是假设管理者一定是非技术向的,这只能说公司没有所谓的「工程师文化」;二是把管理认为是一种晋升(参考上一篇噗通文摘|工程师/管理者钟摆)。虽然,我知道这是普遍现象。

同意的部分,确实有些自我感觉良好的混蛋(有些编程能力确实不错,有些甚至很糟糕),过分强调了编程能力对一个优秀程序员的重要性。

但是,如果一个人能聪明地写代码,为什么就一定愚蠢地沟通不能呢?智商/情商这种解读感觉真是挺民科的,暂时不展开了……


在最基本的层面,有两种良好的特质每个程序员都应该为止努力:编程技能和员工技能

编程技能基本就是编写良好、可靠、高性能、易维护(以及所有其它正面形容词)代码的能力。这是编码者愿意讲述、讨论、阅读的事情。

员工技能是指成为良好员工和同事的能力。这意味着积极响应、能够良好沟通、赶上最后期限、愿意听取意见、能够清楚解释复杂的东西等诸如此类的事情。

一个极端的例子

假设有两个人

Rodrigo 是一名空闲时间写编译器的 MIT 毕业生,他是 Haskell 的核心贡献者同时还写了一些非常知名的 Python 包。他通常能写出可读的、非常可靠的代码,能漂亮地处理极端的情况。但是他好几天才回复邮件,他很少接听电话,他看起来不太理解最后期限的重要性,他以自己的方式做事,不围着他团团转你没法弄清楚他的想法。

Gabriella 不是一个非常好的编码者。她的代码一看就是业余爱好者写的。15 或 20 行代码能实现的她得用 30 行,她引入缺陷导致 QA 得花费时间,她不太明白如何编写运行良好的代码 —— “只要能运行,就行了”。但是她相应非常积极 —— 她几分钟内就回复邮件并且从不漏接电话,她是个很好的沟通者,能够清楚地向客户解释复杂的技术问题,她从未错过最后期限,她不断寻求反馈来改进工作,她是个很好交流的人。

好好想想,你真正想和哪个人每天一起工作?

什么最重要?

根据我的经验,一个程序员情愿和 Rodrigo 一起工作,而一个管理者情愿和 Gabriella 一起工作。

这说得通,毕竟程序员才是需要处理糟糕代码的人,而管理者是需要面对错过的最后期限和糟糕的团队沟通的人,所以我们都想要给自己带来最小痛苦的人。

然而,关键是管理者才是你需要留下印象以获得工作、晋升、加薪和鼓励的人,在这个场景下,Gabriella 遥遥领先。我已经多次见到这种情况发生:是优秀员工但不是优秀编码者的程序员升到高层,是优秀的编码者但也是糟糕的沟通者的留在底层。

不论我们程序员要怎么想,如果你想在工作中取得成功,编码技能不是真正重要的。作一名好员工至少也同样重要,有时更重要。