一个平庸工程师的自白

时间:2020-06-14 02:05:13   作者:    651浏览
一个平庸工程师的自白

Jacob Kaplan-Moss 是着名 Python 框架 Django 的 Co-Creater 和核心开发者,在 Heroku 担任安全部门的 Director, 他常年参加 Python 社区的年度聚会 PyCon ,并经常上台演讲。在这次 PyCon 2015 上,他声称自己顶多只是一个平庸的工程师,幻灯片上也写着:

这次演讲非常精彩,影片可以在 Youtube 上看到。Jacob 以马拉松为例,试图说明大部分人在大部分领域都是平庸的,特别好的和特别坏的都是极少数,但在工程师领域,我们听到的大都是某某工程师 rocks 或者 sucks ,基本没有中间状态,这是一件非常奇怪的事情。他还提到「真正的工程师」这个概念,也就是所谓的「10x programmer」,你只有精通某些原理或者长得像 Mark Zuckerberg 才算是一个 real programmer ,而一个使用各种云端服务以及 API 快速搭建自己应用的人就不算,这非常可笑。顺带一提,Jacob 的 Twitter 个人简介就是「not a real programmer.」

Jacob 认为这种关于「程式天才」的神话非常有害,一方面它把行业门槛设置得特别高,令很多人望而却步,另一方面它也在折磨产业内的人,因为你如果不能 rocks ,就会变成 sucks ,所以不得不用一切时间来努力学习和工作,导致影响生活。他认为我们应该改变这种态度,写程式只是一些技能,并不需要太多天分,它是可以学习的,而且做一个平庸的工程师不丢人,「it's cool to be okay at these skills」。跑步的人有很多种——短跑运动员,纯粹为了锻炼身体的人,参加马拉松的人,等等。为什幺写程式就一定要做 real programmer ,而且做不到就觉得自己不配写程式呢?

这个演讲在大会现场赢得很多掌声,在提问环节也可以听到一些怯生生的声音说:「我也是一个平庸的工程师。」不过在其它地方也引起一些争议,有人认为拿跑步和写程式对比并不恰当,有人说工程师能力的差距确实大得惊人,有兴趣的人可以去看 Hacker News 上的讨论 。

对于我个人来说,Jacob 的演讲触动了我多年来的心结,让我非常感动。我一直认为自己顶多只是一个平庸的工程师,而且无论多幺努力学习,总觉得自己不是一个 real programmer ,而且好像越走越偏。Jacob 的演讲让我明白,有此苦恼的大概不只我一人,所以这里写一下自己的心路历程,希望对别人有一些启发。

公开承认自己平庸是一件危险的事情,如果不能说明你智商低或者没有天分,至少说明你态度有问题:「平庸就应该去努力练习,而不是写文章为平庸辩解」。而当你说 Jacob 这样的人也承认自己平庸时,就会出现一堆带有「资格论」的反驳:「Jacob 至少写了那幺多程式,你怎幺能和别人比」「人家那样说是谦虚,你这样就是无耻了」,顿时你就会觉得自己和那些只会从伟大人物身上挑毛病的小人没什幺两样。幸运的是,今后我很可能不会以写程式为业了,所以这些事情都无所谓了,可以诚恳地说一下自己的经历。

我对 real programmer 的印象始于大学,儘管对于其它专业的人来说我们和修电脑的没什幺两样,但专业内部已经隐约有对某种高级事物的崇拜,记得大一时一个同学对我说:「我们现在还学 C,外面早就开始用 Java 了」。那个时候专业内也已经流传了不少工程师的传说,比如某个学长多幺厉害,或者微软某个工程师一个人做完了一个专案组的工作。相信很多人都听说过那个故事,大意是一个人电脑坏了,于是找一个电脑高手来修,电脑高手拿来电话,连上电脑,花了整整一夜的时间用 0 和 1 写了一个操作系统,故事的结局是「这个电脑高手去了美国,杳无音信」。当时我听到

这个故事的时候半信半疑,居然宁愿相信它是真的!因为如果万一它是真的而我不相信,只能说明我的技术水準或者智商无法理解那个层次的东西,那就太糟糕了。那个时候真的很想变得厉害。

随着对专业的了解,很快我们就开始嘲笑那种「Java 比 C 新,所以比 C 好」的看法,转而去相信「越底层越强」的论调,写 C 的比写 Web 的厉害,写彙编的又比写 C 的厉

害,为什幺呢?因为他们「基础更扎实,更了解原理。」这种论调发展到一个极致就是:学数学或者物理这种「硬科学」的人如果转行写程式,肯定比我们厉害。他们算法一定比我们好,而且就是这帮家发明的计算机啊我靠。有一段时间隐约觉的别的专业的转行写程式都会比我厉害,哪怕是一个钢琴家——因为他手指灵活打字更快。

大学里另外一个让我印像极其深刻的传说就是:高手写程式不用 IDE ,都是直接记事本。高手摘花飞叶皆可伤人,谈武器和工具,那就是落了下乘,只有不入流的才整天研究哪个工具更有效率。所以在很长一段时间内我都因为自己没用记事本写程式而怀疑自己的能力,直到后来工作之后我接触到了 Vim,发现它长得和记事本还真的挺像的。

除此之外,还有对经典书籍的顶礼膜拜,MIT 的 Introduction to Algorithms 和 SICP ,Knuth 的 The Art of Computer Programming ,TCP/IP 详解,以及一些其它的经典操作系统、数据库等方面的书。不啃完这些就说明你天分不够,或者没有热情,还是趁早转行比较好。在我一直很喜欢的一篇文章 Teach Yourself Programming in Ten Years 中,作者在结尾推荐了 SICP ,他说:「The book is challenging and will weed out some people who perhaps could be successful with another approach.」所以儘管我一直没有读完这本书,而且应该也不会去读了,但对它总有一种情结,以至于两年前出国的时候还把它带在身边。

毕业之后开始做职业工程师,每天都是和工程师打交道,关注的也都是科技新闻,那时候硅谷文化也越来越流行,所以更加嚮往和崇拜 real programmer 。Joel Spolsky 写过一篇《飙高音》,其中的两段可以算作是对 real programmer 的最佳诠释:

……

一流的歌唱演员不管在什幺时候,都可以很轻鬆地唱出高音,而平庸的歌唱演员就是永远做不到这一点。莫扎特的歌剧《魔笛》中有一段着名的咏叹调」Queen of the Night」,音高必须达到 F6才能唱好这首歌,世界上能达到这个标準的女高音都快要绝迹了,而飙不到着名的 F6,你就是不能表演「Queen of the Night」。

简单地说,如果你缺乏天赋,那幺你再努力,也做不到 real programmer 可以做到的事情,而一个平庸的工程师就是一个烂工程师。这种断言式的文章一直比较能鼓舞人心,那些认为自己比较聪明的人也很喜欢这种说法,但对于我这种一直怀疑自己智商和能力的人来说,它就像一个阴影:万一我真的没办法飙高音怎幺办?

因为这种对 real programmer 的仰视,从工作以来,不对,是从大学以来,有一个想法一直挥之不去,那就是:I don't deserve it.

大学里我也有作品拿过奖,但总觉得自己的程式是一坨屎,不配拿那个奖,如果当时有另外一个 real programmer ,肯定轮不到我。

大四找工作的时候,儘管我是通过正规的笔试和面试拿到的 offer ,而且被录用的只有我一个本科生,我还是觉得自己不配得到那份工作,因为没写过 10 万行程式,也不是一个 real programmer。

刚工作的时候我每天从早晨 9 点到晚上 9 点都在公司,有时候週末也去,手头工作做完了就看技术文件,无聊了就用打字软体练习正确的指法,以便写程式可以快些。即便这样,我还是怀疑自己对写程式的热情,觉得自己离一个 real programmer 越来越远,不适合做工程师。

后来去 Yahoo 面试,从早晨 8 点面试到 12 点,第二天又跑去美国的同事影片面试。测试其实已经很严格了,而且我平时没有针对性地练习题目或做其它应试準备,但很奇怪,我还是觉得自己能力不行,只是侥倖拿到了 offer。

平时帮别人写程式,或者和别的部门合作,第一个念头就是自己的能力不行。儘管最后专案顺利完成,对方也对我评价不错,但我还是觉得自己不配得到那些夸奖,甚至想:如果他们见到 real programmer ,就不会称讚我的工作了。

这种心理还有另外一个负面作用,那就是时时刻刻焦虑,害怕落后。Jacob 在演讲中也说到:

这段话準确地说出了我以前的某种状态。我对除了写程式之外的很多事情都有兴趣,从生活的角度来看,这其实是一件好事,但我却常常因此有罪恶感,因为它们耽误了我写程式、看文档和学习新技术的时间。那些事情本来是可以带给我快乐的,但每次做好像都有一种偷偷摸摸的感觉,被别人问到也羞于提起。现在回头看,之前有段时间我的工作和生活其实平衡得很好,但当时我只有不断告诉自己「你本来就平庸」,甚至把自己想像成一个自甘堕落的人才能安心享受,实在太扭曲了。

以前我有时还喜欢写点东西,认为自己是在分享,但后来总觉的自己又不是 real programmer ,分享的东西有什幺价值呢?而且写文章会耽误写程式的时间,工程师文化又特别推崇「务实」,反对「务虚」——写作就是「务虚」,「只会打嘴炮」在工程师群体里面是一个非常严重的侮辱,记得之前看到过一条招募讯息,明确地说「不欢迎经常写部落格的人」。事实上写作不止是表达,它反过来还可以帮助思考,很多想法在下笔之前是不存在的,我从中获益良多。而且,「不愿意表达」和「不会表达」有着本质的区别。以前如果一个猥琐不堪、一句话都说不清楚的人过来朝我扔一句「Talk is cheap. Show me the code.」,我立刻就会惭愧不已,甚至认为他或许就是一个 real programmer.

以上种种不安和困扰,让我常常觉得自己从性格到业余爱好都不适合做工程师。工程师文化告诉我的是:如果你不是一个 real programmer 或者不在成长为一个 real programmer 的路上,那幺你连一个 programmer 都不是。Hacker News 上针对 Jacob 演讲的讨论中,panjaro 说了他自己的经历:

他的描述让我感同身受,当初我也痛恨自己对数学不感兴趣,整天在自习室苦苦複习离散数学和算法,工作之后也常常想要重新回头学习这些「基础知识」。有时候即使你发现在某些工作中演算法并不像传说中那幺重要,也不能说出来,否则你就是忽视基础,或者你从事的就是工程师当中的低级工作,以至于体会不到演算法的重要性。

工程师文化当中「能力决定一切」的态度很多时候都值得商榷,因为除了极少数的电脑科学家,大部分工程师从事的是产品开发工作,而在产品开发中是没办法用一个简单的标準衡量一个工程师的能力的。一个人可能写程式能力很强,但他可能执意要实现自己的想法,以至于拖累整个专案。另外,写程式能力强的人不一定能从事某些「低级的」、不需要太多智力的工作,那样的工作可能需要大量的耐心,而耐心和传说中的天赋一样,也不是一种人尽可夫的品质。以前看到过一个招募讯息很有意思,里面说希望应聘者「已经结婚,或者至少有过一段长期的恋爱关係」,他们觉得这样的人懂得与别人相处,不太容易是一个鄙视别人工作的 jerk .

我并不是否认神人的存在,Linus 和 John Carmack 就不用说了,刚毕业在中国 Yahoo 的时候就遇见过一位神人同事,清华毕业,基督徒,已婚,业余时间喜欢写程式和做饭,经常一个人做完整个团队的工作,打字奇快,每次技术分享都有很多人去听,甚至 HR 都因为好奇过去。听众提问的时候,他能清楚讲解某个不常用命令的某个参数的作用,简直就是活的 user manual 。他非常乐于助人,经常看到他在 mail list 里面回答别人问题,从问题的成因分析到解决方案都一一给出,表达非常清晰。让我比较惊讶的是他对很多琐碎的事情也极有耐心,记得公司想要一些人申请专利,週末就看到他在那里专心写申请。另外一个和我比较要好的同事本来觉得自己还算有天分,比我厉害得多,在大学里真的写过 10 万行程式,但见过神人之后立刻发现自己其实没天分。那个时候他女朋友在外地,他业余时间也就是看看电影写写程式,不想写的时候就打开神人的 Github 看看,一般都会发现他又有新的 commit ,然后就有动力继续写了。

问题在于并不是所有人都是神人,整个行业需要的也不止是神人。举个例子,很多写 PHP 的大概看不起那种「Wordpress 工程师」,就是只懂 WordPress 而对 PHP 了解不够深入的人。但很多公司确实就需要做一个小网站,只需要你能开发 WordPress Theme 就够了,不需要研究更多东西。帮别人开发 WordPress Theme 完全可以谋生,甚至挣得不少,但他们大概自己也觉得自己不是 real programmer ,所以很少发声。前一段时间有个应用程式很火,但他们团队的文章开头就说「我们团队中没有神人」,好像那是很丢人的事情,一定要神人组成的团队才配开发出好东西?如果抛开其它不谈,「一个人凭藉自己的能力养活自己,他就应该得到尊重」,这话听起来没有任何问题,只是一旦牵扯到程式,好像只研究 WordPress 的工程师就不能见人。

很多公司也迷信只有大神工程师才能做事,所以在招募的时候会说他们只招募 Top 1% 的工程师,这其实根本不可能,Joel Spolsky 早就写文章谈过。你不可能招募到 Top 1% ,只可能招募到应聘者中的 Top 1%. 我们可以想像一下,最厉害的人可能直接去了 Facebook、Google 或者硅谷的创业公司,差一点的可能选择百度腾讯等中国国内巨头,或者非常有前景的创业公司,剩下的人才是市场中的人,这里面的 Top 1% 已经不是全部人中的 Top 1% 了。所以看到这种招募可以评估一下这个公司,如果不是特别强,完全可以大胆去应徵,因为你在那些愿意应聘这个公司的人当中,可能已经是 Top 1% 了。

其实我非常喜欢这个行业的某些理想主义色彩,过去这几年也认识了不少朋友,发现了不少 thinker ,对我启发很大。可惜我常常感到不舒服,也觉得和这种工程师文化或者 Geek 文化格格不入,虽然很努力去尝试过,但发现还是不行。当然,也可能并不是文化问题,而是因为像我和 panjaro 这样的人胆小浮躁,太在乎别人看法,容易焦虑和抑郁,这样的人大概在任何行业都是 loser 。希望其他人可以活得理直气壮一点。

过去常常希望找到人生目标,而当怀疑自己不是 real programmer 的时候又庆幸生活是一团乱麻,而人生可能并没有意义,不然的话,可能每时每刻都要生活在一条「鄙视链」当中了。

欢迎加入"Inside" Line 官方帐号,关注最新创业、科技、网路、工作讯息
一个平庸工程师的自白