评价一个人是有很多维度的,有些程序员可能编码平庸,但在商业上取得了更大的成功,这同样是一种成功。但是这里就事论事,只评价其在工程领域取得的成绩。我的评价标准是 “大神级” 程序员是要有公开或者可考证的作品的,不依赖于其在其它领域取得的成就。因为 “大神级” 不是一个很严肃的称呼,后面统称为系统级程序员。
软件工程最本质的东西是关于复杂性的调控 -- Tame the complexity。如何独立驾驭一个大型软件的开发是一个有经验工程师再进一步,所要跨越最大的门槛。 事实上绝大部分系统软件一开始的架构也都是一两个人主导的。很多工程师大部分职业生涯是参与商业软件的某个模块的具体研发,或者把不同的组件粘合起来, 没有机会独立架构某个系统级软件。所以从这个角度来说,是某些程序员自身独特的经历造就了自己知识的跨越, 成为了系统级程序员。
我所在的领域主要是程序语言领域,日常有幸和OCaml, Hack, Infer, Flow,Skip, React 这些项目的创始人近距离接触过。自己架构过两个大型软件: 一个是 Fan 宏编程系统 (没有能商业化),还有一个是 ReScript 语言。
可能从事的是基础软件研发,我发现他们无一例外的基本功非常扎实,而且涉猎面很广。像OCaml的作者Xavier Leory涉猎之广令人叹服,他的主页是这样写的 “I'm a senior computer scientist interested in all scientific aspects of computer programming.”。事实也确实是这样,他不仅对编译器造诣很深,还写过第一个版本的pthreads,对密码学有很好的insight,formal verification方面也著作颇丰。
与普通程序员一个更显著的区别是,在系统级程序员眼里,所有的依赖都不是黑盒,都是可以根据需求修改的。比如我需要调试一个内存的bug, 直接修改GC, walk through GC roots看下什么情况。或是标准库里某个数据结构不够高效,自己直接手写一个,这种情况非常常见。
我自己当时在给ReScript找一个快速的构建系统,当时市面上最快的是Ninja, 但是还是达不到自己的预期, 就直接动手去修改了很多代码,最后大概快了50%。
这个可能和我们常说的软件工程模块化有违背,但是真正要做到极致的性能,整个软件栈是不应该有黑盒的。我感觉这一块也是国内和国外的主要差距,回国的时候发现在国内一些一线大厂,GCC被当作是一个黑盒 而没有深入订制。很多技术大会大部分停留在如何更好的使用已有的技术, 这时候应该再进一步,研究如何直接创造更好的技术, dream high。
Hack项目的创始人在Hack大获成功之后又搞了个skip lang的项目, 但是没有获得成功,最后被解散了。他离职以后,我跟他视频过一次,他说自己独立雇佣了个合伙人继续skip的开发,这很好的诠释了什么叫发自内心的热爱。
系统级的程序员大多是self motivated, 只是单纯的觉得这个东西很有意思,并没有太多的想法。我当时开始ReScript这个项目也是觉得这个东西很好玩,并没有想到它以后会被很多商业公司用到。
还有一点体会比较深的是我们目标要定的比自己的能力高那么一点。如果一个项目从规划一开始就知道能做出来或者已经有人做过了, 那反而没有什么意思了。一个项目没有人做并不一定代表它很难,回答里面提到Bill Joy写了VI编辑器?这东西 真的很难吗,恐怕未必,难得是他第一个去实现了这个未知的东西。
就像孙子兵法里说的 "取法乎上,仅得其中, 取法乎中,仅得其下;取法乎下,无所得矣!" 软件工程相比于数学或者其它自然学科还是一个比较简单的学科,只要野心足够大,很多情况是能做出来点东西的。
(责任编辑:代码如诗) |