JacobKaplan-Moss是著名的Python框架Django的Co-Creator和核心开发者。他担任Heroku安全部门的主管。曾参加Python社区年度盛会PyCon,并经常上台演讲。在这次PyCon2015上,他声称自己充其量只是一个平庸的程序员,幻灯片上还写着:“嗨,我是Jacob,我是一个平庸的程序员。”这个演讲很精彩,视频可以在Youtube上看到(如果不想看视频,这里也有文字总结:https://lwn.net/Articles/641779/)。以马拉松为例,雅各布试图解释大多数人在大多数事情上都是平均水平。大多数人在大多数事情上都是平均水平。很少有人特别好或特别坏。来这里的程序员大多是rocks或者suck,基本没有中间状态。这是一件很奇怪的事情。他还提到了“realprogrammer”的概念,也就是所谓的“10xprogrammer”。只有精通某些原理或者看起来像MarkZarkerberg的人,你才能被认为是真正的程序员,而使用各种云服务和API快速构建自己的应用程序的人不算在内,这很荒谬。顺便说一下,Jacob的Twitter个人资料“不是真正的程序员”。雅各布认为,这种关于“编程天才”的神话是非常有害的。也是在折磨这个行业的人,因为如果你不能摇滚,你就会变得很烂,所以你必须把所有的时间都花在学习和努力上,影响你的生活。他认为我们应该改变这种态度,编程只是一些技能,不需要太多的天赋,是可以学习的,做一个平庸的程序员也没什么可耻的,“会这些技能很酷”。跑步的人有很多种——短跑运动员、纯粹为了锻炼的人、跑马拉松的人等等。为什么编程一定要是真正的程序员,做不到就觉得自己不配编程?这段发言在大会上赢得了一片掌声,提问环节也能听到一些胆怯的声音说:“我也是一个平庸的程序员”。不过,这也在其他地方引起了一些争议。有人认为将跑步与编程相提并论不太妥当,有人说程序员能力的差距确实大得惊人。有兴趣的可以去HackerNews上讨论。就我个人而言,Jacob的演讲触动了我多年的心结,令我非常感动。我一直认为自己充其量只是一个平庸的程序员,无论我怎么努力学习,我总觉得自己不是一个真正的程序员,而且似乎越来越偏颇。Jacob的演讲让我明白,我可能不是唯一有这种苦恼的人,所以我会在这里写下我自己的心路历程,希望能对其他人有所启发。公开承认自己平庸是一件危险的事情。如果不是说你智商低或者没有天赋,至少说明你的心态有问题:“平庸要苦练,不要写文章为平庸开脱”。而当你说雅各布这样的人也承认自己平庸时,就会有一堆“资格论”的反驳:“雅各布至少写了这么多代码,你怎么能和别人比?”,你这样不要脸”,顿时觉得自己像那些只会挑剔大人物的小人物。幸运的是,我以后可能不会以编程为职业,所以这些都无所谓,可以坦诚的说说我的经历。我对真正的程序员的印象是从大学开始的。虽然我们和其他专业修电脑的人没什么区别,但是专业内部已经对一些高级的东西产生了一种隐隐约约的崇拜。记得大一的时候有个同学跟我说:“我们还在学C,外面早就用Java了。”那个时候,这个行业流传着很多关于程序员的传说,比如某位前辈有多厉害,或者微软某位程序员一个人完成了一个项目组的工作,相信很多人都听过这样的故事。idea是一个人的电脑坏了,就找电脑高手修,电脑高手拿了个手机,连上电脑,用0和1写了一个操作系统,结局故事是“这位计算机专家去了美国,没有他的消息”。当我听到这个故事时,我很怀疑,但我宁愿相信这是真的!因为如果是真的我不信,那只能说明我的技术水平或者智商看不懂那种水平的东西,那就太糟糕了。那时,我真的很想成为伟大的人。随着对专业的了解,我们很快开始嘲笑“Java比C新,所以比C好”的观点,转而相信“级别越低越好”的说法。写C的比写Web的好,写汇编的比写C的好,为什么?因为他们“基础扎实,对原理的理解更透彻”。这种论调发展到了一个极端:学数学或物理“硬科学”的人如果转行写程序,那肯定比我们厉害。他们的算法肯定比我们的好,就是这帮家伙发明的计算机。有一段时间,我隐约觉得其他专业的转职写作项目会比我好,即使是钢琴家——因为他的手指灵活,打字速度更快。大学里另一个让我印象很深的传说是:高手不用IDE写程序,都是直接记事本。高手摘花飞叶,能伤人。谈论武器和工具是次等的。只有底层人才会把所有的时间都花在研究哪个工具更高效上。所以很长一段时间,我都怀疑自己的能力,因为我没有用记事本写程序。直到下班接触到Vim,才发现它真的很像Notepad。此外,还有致敬经典书籍,MIT的算法与SICP导论,Knuth的计算机程序设计艺术,TCP/IP详解,以及其他一些经典操作系统和数据库的书籍。如果你没有完成这些,说明你的天赋不够,或者你没有热情。最好尽快转行。在一篇我一直喜欢(现在仍然喜欢并推荐)十年自学编程的文章中,作者在最后推荐了SICP,他说:“这本书很有挑战性,会淘汰一些也许可以通过其他方法获得成功的人”所以虽然这本书我还没有看完,估计也不会再看了,但心里一直有一种情结,以至于两年前我出国的时候还带着它。毕业后,我开始从事专业程序员的工作。每天和程序员打交道,关注科技新闻。那时候硅谷文化越来越盛行,所以我更加向往和敬佩真正的程序员。JoelSpolsky写过一篇文章《飙高音》,其中两段可以算是对真正程序员的最好诠释:用许多平庸的程序员代替少数优秀的程序员,这种做法的真正问题在于,无论平庸如何程序员工作时间长,产出的东西还不如一个优秀的程序员。……一流的歌手,任何时候都能游刃有余地唱出高音,而平庸的歌手永远做不到这一点。莫扎特的歌剧《魔笛》中有一段著名的咏叹调《夜之女王》。音高必须达到F6(女高音的最高音)才能唱好这首歌。世界上能达到这个标准的女高音几乎绝迹了,不撞大名鼎鼎的F6就做不了《夜后》。简单来说,如果你缺乏天赋,那么无论你怎么努力,你都做不到真正的程序员能做的,平庸的程序员就是差劲的程序员。这种有主见的文章一向比较励志,自认为聪明的人也喜欢这种说法,但对于我这种一直怀疑自己智商和能力的人来说,却如影随形:如果我真的可以怎么办?高高在上,我该怎么办?因为这种对真正的程序员的敬佩,从工作开始,不,从大学开始,就有一个挥之不去的念头,那就是:我不配。我在大学的时候也因为自己的作品获奖,但是我总觉得自己的代码是一坨屎,我配不上那个奖,如果那个时候再有一个真正的程序员,肯定轮不到我。大四找工作的时候,虽然通过正式的笔试和面试拿到了offer,而且我是唯一被录用的本科生,但我还是觉得自己配不上这份工作,因为我没有'写了100,000行代码。我也不是真正的程序员。刚开始工作的时候,每天早上9:00到晚上9:00都在公司,有时候周末也会去。做完手头的工作就看技术文档,无聊的时候就用打字软件练习正确的指法。这样编程可以更快。尽管如此,我还是怀疑自己对编程的热情,觉得自己离真正的程序员越来越远,不适合做程序员。后来去雅虎北燕面试,早上8:00到12:00,第二天去美国的同事视频面试。考试其实很严格,平时也不刷题或者做其他的考试准备,但是奇怪的是,我还是觉得自己能力不行,侥幸拿到offer。我通常帮助别人写代码,或者和其他部门一起工作。说到合作,首先想到的就是自己的能力不够。虽然最后项目圆满完成,对方也给了我很好的评价,但我还是觉得自己配不上那些夸奖。我什至想:如果他们看到一个真正的程序员,他们不会称赞我的工作。这种心理还有一个负面影响,就是不断的焦虑和害怕落后。雅各布在他的演讲中还说:如果唯一的选择是令人惊奇或可怕,这会让人们相信他们必须对自己的职业充满热情,他们必须在生活的每一个醒着的时刻思考编程。如果他们将视线从球上移开哪怕一分钟,他们就会再次从惊人滑落到可怕。这导致人们在工作中疯狂工作,在自己的时间不断研究编程主题,等等。脱离我以前的状态。我对编程之外的很多事情都感兴趣,这从生活的角度来说其实是件好事,但我常常感到内疚,因为它们耽误了我编程、阅读文档和学习新技术的时间。那些事情本可以给我带来快乐,但每次做的时候,我都有一种偷偷摸摸的感觉,被人问起我也不好意思说出来。现在回想起来,曾经有过工作和生活平衡得很好的时候,但那时我不得不不停地告诉自己“你很平庸”,甚至把自己想象成一个自我牺牲的人,才能安心地享受它.扭曲。以前有时候喜欢写点东西,以为自己是在分享,后来总觉得自己不是真正的程序员,那么分享有什么价值呢?而且,写文章会耽误编程时间,而程序员文化尤其推崇“实用主义”,反对“后退”——写作就是“后退”,“只会说说”在程序员界是一种非常严重的侮辱。记得之前看到过一条招聘信息,上面写的很清楚“不欢迎经常写博客的人”。其实,写作不仅仅是表达,还可以反过来帮助思考。很多想法在写作之前是不存在的,我从中受益匪浅。而且,“不愿意表达”和“不能表达”是有本质区别的。以前,如果一个不会说话的猥琐的人过来扔给我一句话“Talkischeap.Showmethecode.”,我会立刻感到羞愧,甚至认为他可能是一个真正的程序员。以上所有的焦虑和烦恼,常常让我觉得自己从性格到爱好都不适合做程序员。程序员文化告诉我的是:如果你不是一个真正的程序员,或者在成长为一个真正的程序员的路上,那你连程序员都算不上。在HackerNews上关于Jacob演讲的讨论中,panjaro说出了自己的经历:我就是一个例子,这个神话是如何摧毁你的。我在正常项目中编程了6年,我认为自己没有天赋。我离开了工作,来到研究学位。现在我意识到我在数学和高级算法技术方面很糟糕。我想回去,但因为我已经3个月没有在公司工作了,我觉得我是一个非常糟糕的程序员,没有人会雇用我。我很沮丧和瘫痪。我整天所做的就是查看HN和阅读文章,认为这些人都是多么有才华而我却如此愚蠢。我讨厌我对数学不感兴趣。整天在自习室复习离散数学和算法,工作之余经常想回去学习这些“基础知识”。有时候即使你发现算法在某些工作中没有图例那么重要,你也不能说出来,否则你忽略了基础,或者你在程序员中从事低级工作,以至于你不意识到算法性的重要性。程序员文化中“能力决定一切”的态度往往值得质疑,因为除了极少数的计算机科学家,大部分程序员都是从事产品开发的,产品开发没有办法用一个简单的标准。一个程序员的能力。一个人可能编程能力很强,但是他可能会执着于实现自己的想法,以至于拖累了整个项目。此外,编程能力强的人也不一定能从事一些对智力要求不高的“低级”工作。这样的工作可能需要很大的耐心,而耐心就和传说中的天赋一样,并不是一种天赋。海湾品质。之前看到一个招聘启事很有意思,上面写着应聘者“已婚,或者至少是长期恋爱关系”。他们觉得这样的人懂得与人相处,不容易做一个看不起别人工作的混蛋。我不否认大牛的存在。Linus和JohnCarmack就不用说了,刚从雅虎中国毕业的时候认识了一个大牛同事。毕业于清华大学,Christian,已婚,喜欢编程,经常一个人做整个团队的工作,打字速度很快。每次分享技术都有很多人听,甚至HR也因为好奇而过去。当观众提问时,他能把一个不常用的命令的某个参数的作用解释清楚,简直就是一本活生生的用户手册。他很乐于助人,经常看到他在邮件列表里回答别人的问题,从问题的原因分析到解决方案,一应俱全,表达的很清楚。让我吃惊的是,他对很多琐碎的事情也非常有耐心。记得公司要一些人申请专利,就看到他周末专心写申请书。另一个和我关系好的同事认为他很有天赋,比我强多了。他在大学时确实写了10万行代码,但在遇到大牛之后,他立刻发现自己其实并没有什么天赋。那时,他的女朋友不在城里。在空闲时间,他只是看电影和写代码。不想写的时候,他会打开大牛的Github看看。通常他会发现他有一个新的提交,然后他就会有动力继续写下去。.问题是不是每个人都是大牛,整个行业需要的不仅仅是大牛。比如很多写PHP的人,大概看不起那种“Wordpress工程师”,也就是只懂Wordpress而对PHP了解不够的人。但是很多公司确实需要建一个小网站,只要会开发WordpressTheme就够了,没必要去研究更多的东西。帮助别人开发WordpressTheme可以谋生,甚至可以赚很多,但他们大概认为自己不是真正的程序员,所以很少说出来。前段时间有个app很火,但是他们团队的文章一开始就说“我们团队没有大牌”,这似乎是一件很丢脸的事情。只有大牌组成的团队才能开发出好东西?不说其他的话,“一个靠自己的能力养活自己的人应该受到尊重”,听上去没什么问题,但是一旦涉及到代码,好像只学Wordpress的工程师就不行了不认识人。很多公司还迷信地认为只有伟大的程序员才能做事,所以在招聘的时候会说只招Top1%的程序员。这实际上是不可能的。JoelSpolsky写了一篇关于它的文章。你不可能招到Top1%,只能招到申请者中的Top1%。我们可以想象,最有权势的人可能会直接去Facebook、谷歌或者硅谷的创业公司,他们可能会选择百度、腾讯等国内的巨头,或者很有前途的创业公司,剩下的人才都是在硅谷的人市场,这里的Top1%不再是所有人的Top1%。所以当你看到这种招聘的时候,你就可以对这家公司进行评价。如果你不是特别优秀,可以大胆应聘,因为你可能已经是愿意应聘这家公司的前1%了。其实我很喜欢这个行业的一些理想主义色彩。在过去的几年里,我结识了很多朋友,发现了很多思想家,对我启发很大。可惜我时常感到不自在,也觉得自己与这种程序员文化或极客文化格格不入。虽然我很努力,但我发现还是不行。当然,这可能不是文化问题,而是因为像我和panjaro这样的人胆小浮躁,太在意别人的看法,容易产生焦虑和抑郁。这样的人大概是任何行业的失败者。希望别人能活得自信一点。曾经希望找到人生的目的,但当我怀疑自己不是真正的程序员时,我庆幸生活一团糟,生活可能毫无意义,否则,我可能会活在“鄙视链”中每时每刻。
