Jacob Kaplan-Moss 是著名 Python 框架 Django 的 Co-Creater 和核心开发者,在 Heroku 担任安所有门的 Director, 他常年参加 Python 社区的年度聚会 PyCon ,并常常上台演讲。在此次 PyCon 2015 上,他声称本身顶多只是一个平庸的程序员,幻灯片上也写着:
"Hi, I'm Jacob, and I'm a mediocre programmer."
此次演讲很是精彩,视频能够在 Youtube 上看到(若是不想看视频,这里也有一篇文字总结:https://lwn.net/Articles/641779/)。Jacob 以马拉松为例,试图说明大部分人在大部分领域都是平庸的(Most people are average at most things.),特别好的和特别坏的都是极少数,但在程序员领域,咱们听到的大都是某某程序员 rocks 或者 sucks ,基本没有中间状态,这是一件很是奇怪的事情。他还提到“真正的程序员”(real programmer)这个概念,也就是所谓的 "10x programmer" ,你只有精通某些原理或者长得像 Mark Zarkerberg 才算是一个 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 愈来愈远,不适合作程序员。
后来去雅虎北研面试,从早晨 8 点面试到 12 点,次日又跑去美国的同事视频面试。测试其实已经很严格了,并且我平时没有针对性地刷题或作其它应试准备,但很奇怪,我仍是以为本身能力不行,只是侥幸拿到了 offer.
平时帮别人写代码,或者和别的部门合做,第一个念头就是本身的能力不行。尽管最后项目顺利完成,对方也对我评价不错,但我仍是以为本身不配获得那些夸奖,甚至想:若是他们见到 real programmer ,就不会称赞个人工做了。
这种心理还有另一个负面做用,那就是时时刻刻焦虑,惧怕掉队。Jacob 在演讲中也说到:
If the only options are to be amazing or terrible, it leads people to believe they must be passionate about their career, that they must think about programming every waking moment of their life. If they take their eye off the ball even for a minute, they will slide right from amazing to terrible again. That leads people to be working crazy hours at work, to be constantly studying programming topics on their own time, and so on.
这段话准确地说出了我之前的某种状态。我对除了编程以外的不少事情都有兴趣,从生活的角度来看,这实际上是一件好事,但我却经常所以有负罪感,由于它们耽误了我编程、看文档和学习新技术的时间。那些事情原本是能够带给我快乐的,但每次作好像都有一种偷偷摸摸的感受,被别人问到也羞于提起。如今回头看,以前有段时间个人工做和生活其实平衡得很好,但当时我只有不断告诉本身“你原本就平庸”,甚至把本身想象成一个自甘堕落的人才能安心享受,实在太扭曲了。
之前我有时还喜欢写点东西,认为本身是在分享,但后来总觉的本身又不是 real programmer ,分享的东西有什么价值呢?并且写文章会耽误编程的时间,程序员文化又特别推崇“务实”,反对“务虚”——写做就是“务虚”,“只会打嘴炮”在程序员群体里面是一个很是严重的侮辱,记得以前看到过一条招聘信息,明确地说“不欢迎常常写博客的人”。事实上写做不止是表达,它反过来还能够帮助思考,不少想法在下笔以前是不存在的,我从中获益良多。并且,“不肯意表达”和“不会表达”有着本质的区别。之前若是一个猥琐不堪、一句话都说不清楚的人过来朝我扔一句"Talk is cheap. Show me the code.",我马上就会惭愧不已,甚至认为他或许就是一个 real programmer.
以上种种不安和困扰,让我经常以为本身从性格到业余爱好都不适合作程序员。程序员文化告诉个人是:若是你不是一个 real programmer 或者不在成长为一个 real programmer 的路上,那么你连一个 programmer 都不是。Hacker News 上针对 Jacob 演讲的讨论中,panjaro 说了他本身的经历:
I'm an example how this myth can destroy you. I was programming for 6 years in normal projects and I thought I was not talented. I left job, came to research degree. Now I realized I'm terrible at maths and advanced algorithm techniques. I think about going back but since it has been 3 months I haven't worked in a company, I feel I am a very bad programmer and no one will hire me. I'm depressed and paralyzed. All I do all day is look into HN and read articles, think how all these people are talented and I'm so dumb.
他的描述让我感同身受,当初我也痛恨本身对数学不感兴趣,成天在自习室苦苦复习离散数学和算法,工做以后也经常想要从新回头学习这些“基础知识”。有时候即便你发如今某些工做中算法并不像传说中那么重要,也不能说出来,不然你就是忽视基础,或者你从事的就是程序员当中的低级工做,以致于体会不到算法的重要性。
程序员文化当中“能力决定一切”的态度不少时候都值得商榷,由于除了极少数的计算机科学家,大部分程序员从事的是产品开发工做,而在产品开发中是没办法用一个简单的标准衡量一个程序员的能力的。一我的可能编程能力很强,但他可能执意要实现本身的想法,以致于拖累整个项目。另外,编程能力强的人不必定能从事某些“低级的”、不须要太多智力的工做,那样的工做可能须要大量的耐心,而耐心和传说中的天赋同样,也不是一种人尽可夫的品质。之前看到过一个招聘信息颇有意思,里面说但愿应聘者“已经结婚,或者至少有过一段长期的恋爱关系”,他们以为这样的人懂得与别人相处,不太容易是一个鄙视别人工做的 jerk.
我并非否定大牛的存在,Linus 和 John Carmack 就不用说了,刚毕业在中国雅虎的时候就碰见过一位大牛同事,清华毕业,基督徒,已婚,业余时间喜欢编程和作饭,常常一我的作完整个团队的工做,打字奇快,每次技术分享都有不少人去听,甚至 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 的时候又庆幸生活是一团乱麻,而人生可能并无意义,否则的话,可能每时每刻都要生活在一条“鄙视链”当中了。html