TOP 1%的软件工程师和其他 99%有什么不同?

点击上方“CSDN”,选择关注

关键时刻,第一时间送达!

首先我想声明,我不认为自己能属于 TOP 1%,也许勉强算得上 TOP N%,N 大于 1。实际上,业界对于“TOP 1%”的界定一直很模糊,因为它取决于究竟谁才能称得上是人们口中的“软件工程师”——要包括使用 R 语言的数据科学家吗?以及制作 Excel 图表的业务分析师吗?

TOP 1%的软件工程师和其他 99%有什么不同?

程序员的能力层次可以划分为三等

所以下面我们从 0.0 到 3.0 来区分程序员的能力层次。一般而言,程序员可以分成三个大类:

  • Adders,即做加法的人(“1 级”,0.0 到 1.4)。对于他们,只要给予充分的时间就可以解决大多数编程问题。这些人往往是做业务线工作、写脚本来获取数据、回答高管或交易者关心的问题等等。在这一层级中,能力优秀的人往往想要脱离狭隘的细节,超越这个层面来研究更普遍的“核心”问题。

  • Multipliers,即做乘法的人(“2 级”,1.5 至 2.4)。这一层级中,他们可以选择技术、制定架构决策、编写或维护有用的库。更倾向于以自己的名字做出开源贡献,以及在各种会议上发言,而且往往在执行上与公司相当。

  • Global Multipliers,即在全球范围内做乘法的人(“3 级”,2.5 以上)。这一层级能够构建社区、创建平台甚至提出 Google、MapReduce 这样的概念。他们的野心往往超出了大多数公司的范围,所以经常在学术界、独立咨询、或在大公司的研发实验室的高薪岗位上任职。

当然,这三个抽象层次并不是完全准确的,比如有一些 “Adders” 任务也是非常困难的(例如建立一个生产交易系统),大部分“ 1 级”程序员无法完成。有的时候,未达到“ 2 级“(或者 3 级)要求的人也会被赋予“ 2 级”(或者 3 级)的工作,比如复杂的软件系统结构。也许一个很难的 1 级任务是真正的 1.3 或 1.5 甚至更高。所以,以下只是理论层面的讨论。

注:为了更好地评估程序员的水平,我们假定在 1.5 (0.0 ~ 3.0)时,程序员能力达 50%(0% ~ 100%)。

0.7 程序员基本上只可以完成最直接的编码任务,1.0 就是人们通常认为的“软件工程师”基本水准,1.2 可能就是中等水准的工程师(但在顶级科技公司,中等水准的工程师要求接近于1.6)。例如在谷歌,SWE 3 要求 1.6 ~ 1.8 级别的工程师任职,但分配了 1.2 ~ 1.4 级别的工作。谷歌的 Sr. SWE 要求 1.8 ~ 2.0,但是分配了 1.4 ~1.7 级的工作——所以在这样的大公司工作,工程师的水准经常被低估,但也侧面体现了谷歌的代码质量相当高。相对的,在一些没有 1.5+ 工程师的公司(一般是一些依靠软件的非技术公司)中,通常会由 1.2 ~ 1.4 级别的人员来做“ 2 级”工作,所以技术水准可想而知。

注:Google 团队由 SWE(软件开发工程师)、SET(软件测试开发工程师)、TE(测试工程师)组成。

如何成为 TOP 1% 级别的程序员?

上面所有的言论其实都是为了证明,客观一点来看, “TOP 1%”完全取决于公司内部程序员群体的具体构成。以我的观点来看,目前全球大约有 20 万程序员达到了 2.0 级或更高的级别,这也是我认为的 “TOP 1%” 水准。那么对于程序员来讲,怎么才能练就 2.0 的水平呢?

  • 首先,7 ~ 14年的成长时间。虽然我这 8 年来也一直在编程,但因为工作的关系一直断断续续的,所以我猜我是 1.9 ~ 2.0 级的。因此你必须一直编写代码,阅读代码,并且不断尝试新技术,通过各种失败的尝试来反复提升自己。如果能做到这一点,每年 0.1 ~ 1.1 的进步是必然的。而且,因为大多数雇主会把你的工作内容分配在你真实的能力之下,所以可以在工作完成之外,悄悄地学习和试验新技术。

  • 做到充分的研究。计算机科学是一个复杂的领域,要做到精通,至少需要对所有事情有一个正确的理解。如果你认为汇编代码、线性代数或强静态类型是“吓人的”或“太深奥了”,那么你永远不会达到 2.0,不能有胆怯心理。同时要保持好奇心,对所有话题都要涉猎,不能有“这不会用到的”侥幸心理。此外,还需要了解行业本身:为什么会有这么多的软件项目失败?是什么错误(技术性的和非技术性的)导致的?如何防止?如何成为一个好的创业CTO?哪些模式值得学习?哪些模式需要舍弃?......

  • 无论成功与否,都努力做出一些项目。想要成为一个称职的程序员、建筑师、或是 Linux 黑客,只有通过反复的实践。虽然实践中可能会面临着各种摇摆不定、失败、不顺利等等情况,但是一定要坚持做下去,才有可能有进步。

  • 借助网络来发掘创意。不要把“网络”看作下班后的休闲工具,程序员也是社交生物,所以可以通过和其他优秀的程序员交谈,了解他们解决了什么问题,以及如何解决问题。

  • 停滞不前时选择跳槽。大多数程序员的能力都被局限在 1.2 左右,归根结底是因为他们没有机会去进步。他们的工作中需要花费大量时间去解决各种复杂的、纠结的遗留代码,而不是专注在计算机科学本身。花费大约 3 个月的时间来研究糟糕的传统架构是非常有用的,但不能再长了。如果想在成功的项目工作,遇见更强大的人,那么是时候离开现在的岗位了。

通过上面的阐述,你认为自己是属于哪个级别的呢?你现在的工作内容是否在你的能力之下?如果想要成为 TOP 1% 程序员,那么是时候做出改变了。

相关推荐