内容

源文地址:Gad



       翻译:赵菁菁(轩语轩缘)   审校:李笑达(DDBC4747


      嗨,大家好!我是一个四十二岁的自学成才的开发者,下面是我的故事。

      几周前,我偶然看到下面的推特,它让我反思了我的职业生涯,那些想法将我带回到自己最初的起点。

      我于一九九七年十月六日,周一上午十点开始了我作为软件开发者的职业生涯,地点位于奥利沃斯,就在阿根廷布宜诺斯艾利斯的北面,Unix的时间戳是876142800,我刚刚度过了我的二十四岁生日。


一九九七年的世界

      当时的世界稍有不同。

网站没有cookie警告,网站的未来是像Excite.com这样的门户网站,AltaVista是我最喜欢的搜索引擎,我的电子邮箱是kosmacze@sc2a.unige.ch,这意味着我第一个个人网站的网址是http://sc2a.unige.ch/~kosmacze。我们还在为戴安娜王妃哀悼;斯蒂文乔布斯刚刚被任命为CEO并且说服了微软为苹果电脑投资一亿五千万美元;数字设备公司正在起诉戴尔;切·格瓦拉的遗体被带回古巴;《老友记》第四季刚刚开始;詹尼·范思哲在自家门前被谋杀;特蕾莎修女、罗伊·里奇特斯坦和雅娜·卡尔曼特(世界上最长寿的人)刚刚去世;人们正在PlayStation上疯狂地玩《最终幻想7》;BBC2开始播放《天线宝宝》;詹姆斯·卡梅隆将要发行《泰坦尼克号》;Verve才发行他们的热门单曲Bitter Sweet Symphony,之后向滚石支付了大量版税。

1997Excite,互联网档案的亲近

      智能手机看起来和诺基亚9000通讯机差不多,8兆内存,24 MHz i386 CPUCEOS操作系统。

      智能手表看起来像卡西欧G-SHOCKDW-9100BJ,没有现在这么多应用程序,但是电池寿命要长得多。

      IBM深蓝第一次在象棋游戏中击败加里·卡斯帕罗夫。

      一名叫做“_eci”的黑客在Windows 3.1, 95上发布了C源码,NT开发了一种叫“WinNuke”的DoS攻击,针对TCP139端口(NetBIOS),会造成蓝屏死机。


      另外,一九九七年也是Malala YousafzaiChloë Grace Moretz 和 Kylie Jenner出生的年份。

      许多电影故事情节发生在一九九七年,我列了几个:《逃离纽约》,《铁血战士2》,《返老还童》,《哈利·波特与混血王子》,《教父III》,还有《终结者2:审判日》,Skynet在一九九七年八月二十九日上午两点十四分已经有了自我意识。在一系列有趣的事件中,google.com域名在一九九七年九月十五日注册了。我们距离Y2K(千年虫问题)有两年的时间,人们开始因媒体而紧张。


我的第一份开发工作

      我的第一份工作包括在各种各样的编辑器里写ASP页面,从微软的FrontPage,到HotMeTaL Pro,再到EditPlus;管理网景浏览器和IE4之间的跨浏览器兼容性;并且在SQL Server 6.5中写存储过程来使一个商业网站变得强大,这个网站以日语、俄语、英语和西班牙语发布——在软件堆栈中没有任何的一致UTF-8支持。

      产品的这些成果在Pentium II服务器上运行,在美国一些地方有主机,有惊人的2G硬盘驱动,还有非常好的256M RAM。这是一个单独服务器,上面跑着WindowsNT 4SQLServer 6.5 和 IIS2.0,每天为大约一万个访问者服务。

      我的第一个专业编程语言是这个叫VBScript的变体,当然还有客户端的一点JavaScript,我被灌以很多这样的想法——“如果是网景做这件事,别人也要做”,因为那时我还不知道怎样适当使用JavaScript

      有趣的是,二零一六年我们才开始明白怎样用JavaScript做事。

      单元测试前所未闻,敏捷宣言还没有写出来,持续集成还是个梦想,XML甚至还不是个流行词。我们的质量保证策略包括每周重启一次服务器,因为如果不这样做的话服务器就会不定时崩溃。我们在Visual J++中开发了我们自己的COM++组件来解析上传到服务器的JPEG文件。开始突然出现两千个编码的JPEG文件时,我们的组件悲催地崩溃了。

      我们没有用到源代码控制,甚至没有CVSRCS,或者,上帝保佑,SourceSafeSubversion还不存在呢,我们的Joel测试评分是负二十五。


6776

     在过去的6776天中,我在早上喝一杯咖啡,用那些叫VBScriptVBScript, JavaScript, Linux, SQL,HTML, Makefiles, Node.js, CSS, XML, .NET, YAML, Podfiles, JSON, Markdown,PHP, Windows, Doxygen, C#, Visual Basic, Visual Basic.NET, Java, Socket.io,Ruby, unit tests, Python, shell scripts, C++, Objective-C,批文件和最近新出的叫Swift的东西写代码。

      在那6776天中,发生了许多事;最重要的是,我妻子和我结婚了。我辞了六份工作,被炒了两次。我创业后又失败,我拿到了我的硕士学位,我发布了几个开源项目,其中一个项目让我在一篇叫Ars Technica by EricaSadun herself的文章上出现。我被瑞士和玻利维亚的电视节目报道,我看了在西雅图和洛杉矶举办的比尔盖茨和乔布斯的现场主题演讲,我在四大洲共同组织的会议上讲话,我撰写并出版了两本书,我也累坏了两次。还有很多其他事情发生了,有好也有坏。

      我经常考虑离开这个行业,但是有些时候,代码总是不久就把我召唤回来。我喜欢写应用程序,系统,软件。为了避免筋疲力尽,我必须建立一些策略。

      在这次谈话中我会给你们讲我的秘密,这样一来你也可以在四十岁这个黄金年龄做一个经验丰富的开发者,想要继续留在这个行业。


给“心理”年轻人的建议

      为了让大家到黄金四十还能做一个快乐的软件开发者,我有一些简单的建议。


1. 忘掉炒作

我能给你的第一条建议是:不要关注那些铺天盖地的宣传。每年都会有一门新的编程语言、框架、库文件、模式、组件架构或者范例在博客圈中疯传。人们会为此疯狂,会议会为此召开,书会为此出版。嘉特纳的炒作周期周而复始。培训机构会疯狂授课、部署或者榨取本行业人们的剩余价值来敛钱,报刊杂志会支持这些恐怖的事情,而且如果你不注意这些新事物,他们会让你感觉到愧疚。

1997——CORBA & RUP.

2000 ——SOAP & XML.

2003 ——模型驱动架构和软件工厂

2006 ——语义Web OLPC.

2009 ——增强现实

2012 ——大数据

2015——虚拟现实? Bots?


不要担心炒作。继续做你的事,继续学你正在学的,不要半途而废。除非你有特别的兴趣,否则不要注意它,或者如果你感觉它能给你在中期或长期带来一定收益,再去学它。

关于此的原因是:正如罗曼斯过去说的一样:nihil sub sole novum,你在计算机科学中看到的和学到的大多数内容都已经有几十年历史了,该事实被成堆的市场营销、书籍、博客和Stack Overflow上的问题所淹没,每个新的架构都只是围绕着已经存在几十年的观点进行重想象和重适应。


2. 明智地选择你的“星系”

      在我们的产业中,每个技术都会产生我所叫的“星系”这个东西。这些“星系”的特征是星星,但是也会有黑洞;因大气变化,一些会在黑夜中消失,许多行星只有很小一部分可以容纳生命的存在,还有许多宇宙尘埃和黑暗问题。

      “星系”的例子有:.NET, Cocoa,Node.js, PHP, Emacs, SAP等等。每个星系都有传播者、开发者、博主、播客、会议、书籍、培训课程、咨询服务和内在问题。“星系”建立在它们的基础技术是所有问题的答案的假设之上。因此,每个“星系”都是一个错误的假设。

      来自那些不同星系的开发者体现出典型的态度,这些态度能够把这个技术带到实际生活中。他们坚持自己的想法,而且会充满热情地穿着T恤告诉其他人他们选择星系的优点。

      实际上,我用“星系”这个术语是为了避免使用另一个更合适但可能更有争议的词——“宗教信仰”,“宗教信仰”可能会更好地描述这一现象。

      在我个人的案例中,我把我职业生涯的最初十年花在了微软“星系”上,之后的九年在苹果“星系”上。

      我敢说,我改变“星系”最大的原因是SteveBallmer。我厌倦了微软“星系”的人对于开源软件的普遍态度。

      另一方面,我也必须说苹果“星系”是一个令人愉悦的地方,这里充满了艺术家、音乐家和作家,这些人可能是偶然或者运气不佳碰巧也来写软件。

      我参加了微软“星系”的会议,像2003年巴塞罗那的TechEd,或者在布宜诺斯艾利斯、日内瓦或者伦敦举办的各种各样的技术交流会。我甚至在日内瓦2006年微软的开发者日上讲话。微软“星系”中开发者的总体态度都是不友好的,“团结的”,而且受保密、NDA和繁琐的IT过程限制。

      回到2006年,苹果“星系”对于我来说恰好相反;它充满了音乐家、艺术家、画家;他们写软件来支持他们的热情,而且他们会带着热情来写软件。这完全不同了,直到今天,我在这个“星系”中仍然非常享受,就是我们当前处于的这个“星系”,它把我们聚到一起。

之后iPhone发布了,余下的就是历史了。

所以我向你们推荐:明智地选择你的“星系”,尽可能多或尽可能少地按照你的想法享受它,但是要把你的目光朝向其他“星系”,如果有必要的话,准备跳到其他地方。


3. 学点软件史

      这把我们带到下一点:要了解你最喜欢的技术是如何成为现在的样子的。你喜欢C#吗?你知道谁创造了它吗?.NET项目是怎么来的?谁是领衔架构师?项目的局限性在哪里?为什么语言变成了现在的样子?

      对于你喜欢或喜爱的任何语言或CPU架构都问一问上面的问题,这些语言可能是:Python, Ruby, Java,不管编程语言是什么;了解它们的起源,它们是怎么出现的。操作系统、网络技术、硬件,任何事情都应该这样做。去学习人们是怎样想出那些主意的,他们花费了多长时间来成长直到变得成熟。因为好的软件会花费十年,你懂的。

      关于我们行业起源的故事是很美妙的,而且这些故事可以告诉你两件事:第一,一切都是重组;第二,你也可以是重组下一个热门事物。不,重新说:你将要成为下一个热门事物的创造者。

      为了帮助你达到目的,这是我选择的历史书(高度推荐),都是我喜欢和想要推荐的:

  • Michael A. Hiltzik的《创新未酬》

  • Andy Hertzfeld的《硅谷革命》

  • Eric S. Raymond的《大教堂与市集》

  • Steven Weber的《开源的成功》

  • Raymond Chen的《Windows编程启示录》

  • Frederick P. Brooks Jr.的《人月传说》

你也会学着评价那些禁住了时间考验的东西: LispTeXUnixbashCCocoaEmacsVimPythonARMGNU makeman pages这些是一些值得庆祝、珍惜和学习的东西,它们是持久的、有用的东西。

4. 坚持学习

学习了,一切都会成功。想要学习Fortran?就去学吧!觉得Erlang有趣?太好了。想想也许COBOL会成为你职业生涯中下一个大惊喜?美妙极了。需要了解更多关于函数响应编程的知识?随便去学。设计?当然。UX?你不能错过。诗歌?你需要。

在计算机科学中许多常见的概念已经存在了几十年,这会让学习老编程语言和框架变得物有所值,甚至是“arcane”这样的事物。首先,它会让你感激(或憎恨,仁者见仁)当前产业的状态,第二,你会习得怎样更加高效地使用当前工具——如果还有好处的话,就是你会理解它的传统和起源。

贴士1:每年至少学习一门新的编程语言。这个主意不是我想出来的;是《实用编程》这本书提出来的,而且这很有效。

每年一门新的编程语言。简单,嗯哼?跨过“Hello World”的阶段,用这门语言写点有用的东西。我通常会用我所学的任何新技术建立一个简单的计算器。它会帮助我理清语法,也让我更加熟悉API或者IDE等等。


贴士2:每年至少读六本书。我已经列出了六本必读的书;那会让你一年都很忙。以下是明年的列表:

  • Tom DeMarcoTim Lister的《人件》

  • Gerald M. Weinberg的《软件编程哲学》

  • Robert L. Glass的《软件工程事实和谬论》

  • Don Norman的《设计心理学》

  • Bertrand Meyer的《敏捷!:好的,大放厥词的和丑陋的》

  • Jason Fried David Heinemeier Hansson的《重来:更为简单有效的商业思维》

  • David Rice的《极客经济学》

(好吧,这是七本书)

每年六本书看来有点多,但是这只意味着两个月看一本,而且我提到的大多数书都不那么厚,更好的是,它们都写得非常之好,它们都很有趣而且充满洞察力。

这样想吧:如果你现在是二十岁,到了三十岁,你就已经读了超过六十本书,到了我的岁数就读了超过一百二十本,你已经玩过了至少二十种不同的编程语言。想想吧。

我为大家选择的十二本书中有一些是在七十年代写的,一些是八十年代写的,一些是九十年代,最后大多数都是过去几十年写的,它们代表了我在这个行业中看过的最美的文字。

但是别只是读它们;做笔记。书签。在书页上做笔记。之后经常重读它们。博格斯曾经说:比读一本书压力更大的是重读。同样,拜托,买你喜欢书的纸质版。相信我,电子书被过誉了,没什么能打败真实的事物。

当然,请记住你会变老,符合新和/或重要标准的事情的数量会显著下降,要有思想准备,当你意识到这件事时默默流泪是没关系的。


如果我可以回到过去,告诉年轻时的我学一件事,而且只有一件事的话,那就是“学UNIX”。

5. 授课

一旦你已经学了,教别人,这是非常重要的。这不意味着你需要建立一个教室再邀请人们听你白话(尽管如果你这么做效果可能惊人!),这可能意味着你会在Stack Overflow上给出有意义的答案;意味着你写了一本书;意味着你发表了关于你最喜欢技术的播客;意味着你一直在写博客;意味着你在Medium上写文章;意味着你去到另外一个大陆,用Raspberry Pis建立编程学校;或者意味着你帮助一个年轻的开发者,成为了他们的导师(但不要在三十岁之前做这件事)。

授课会让你变得更谦逊,因为这会让你痛苦地显示出你的知识多么有限。授课是学习的最好方法,只有面对他人检验你的知识才能让你更恰当地学习。这会让你对于其他开发者和其他技术更加尊重;每个语言,无论多低级或神秘,都有其在编程之道中的地位,只有通过教授你才能感受到。

通过授课,你真的真的可以改变这个世界。在2012年,我收到一封邮件,发信人参与了我很多培训课程。她曾经是Adobe Flash的开发者。记得ActionScript那些东西吗?嗯,不出所料,做了十二年Flash开发者自由撰稿人后,她突然发现自己失业了,孤身一人,还带着一个嗷嗷待哺的孩子。她在邮件消息中告诉我,她曾经参加过我的培训,她很喜欢并且学到了一些有用的东西,在那之后,她找到了一份移动网页开发的工作,给我写信是为了说谢谢。

我不能说我改变了世界,但是我可能小小地推动了世界的发展,让它成为更好的事物(希望是这样)。自那之后,这种想法让我教的每堂课都更加有价值和有意义。


6. 工作场所糟透了

      别指望软件公司提供所有可能的职业规划,他们可能会在美国做这件事,但是我在欧洲还没见过。这意味着只有你自己对你职业生涯的成功负责。没有人会告诉你“噢,好吧,明年你可以成长为团队领导,之后是经理,之后是首席技术官……”。

      不,可,能,是,这,样,的!恰恰相反,实际上:你过去、现在、将来都会是一个软件开发者,那也就是说,是一个相对贵一点的工厂工人,无论你的经理告诉你什么,那都不能全信。

      别只因为钱就接受一份工作软件公司已经成了血汗工厂,在这里你应该证明你挣高得离谱的工资是有道理的,而且必须疯狂地加班,满足不合理的期望需求。而且,至少在瑞士的例子中,如果出了问题没有工会能帮助你。实际上,在瑞士有工会,但是他们不太关心那些会让他们在媒体前曝光的情况。

      还有更糟糕的;在大多数工作场所,你都会感觉很烦,特别是如果你是一名女性,还是一名来自LGBT社区或非白种人团体的成员。我曾经看到过这样的情况:如果开发者不快点工作的话,就会被人威胁不能更新签证。我曾经目睹过女性和同性恋同事的烦心事。

      我们行业的一些部分是极其恶心的,你不需要待在硅谷承受这些,你不需要Medium来阅读这些,你在此时此地的瑞士就能经历得到。一些银行的工作场所糟透了,金融机构想要你一天十五小时码代码,即使瑞士劳动法明确禁止这一点,他们也依旧让你这么干。制药公司想要你写代码伪造测试结果来让帮助他们钻制度的空子。创业公司想要扒你一层皮,每天工作十八小时不给报酬,告诉你一些废话,像“因为我们给你股权了”或者“因为我们是一个小组的”。

      你是ZachHolman,你在CV中说自己差不多从零开始写Github没么用;你也会因最琐碎的原因被解雇。

      应用程序给你老板带来流量和收入的一半以上也没什么用;API小组会轻蔑、草率地对待你和你的想法。

      行业里有一些非常有名的人让我无偿工作,他们甚至还在维基百科中有词条,这是非常过分的。我不会给出他们的名字,但是我会阻止任何新手靠近他们,因为工作没有道德的人不值得任何人的脑力服务

      无论何时HR告诉你“你必须做这件事(无论是任何你认为不对的事情),因为我们给你付工资,”记得要这么回应:“你给我付工资,但是我给你我的智慧作为交换,我拒绝遵从这个要求。”

      更糟糕的是,他们会把你放到一个开放空间中,由于一些原因,他们会为此骄傲。开放空间是一种癌症。开放空间无疑是有史以来最差的办公室布局,而且最不适合软件开发——或者任何类型的脑力工作那类事。


      记住这一点:你理解一些事不意味着你必须要同意。

      不屈服于权威。说“去你的,我不会做你让我做的事”并且换工作。外面的世界很精彩;虽然好的工作场所不是很多,但是确实存在,我很幸运能在其中之一工作。别让不好的工作浇灭你的工作热情,这不值得,叛逆点继续前进。

      或者,进一步说,独立一点。

7. 知道自己的价值

      你可能听说过“10x软件工程师”的神话,对吗?其实是这样:这不是一个神话,但是它不是按你想象的那种方式奏效。

      它确实有效,但是,从老板的观点来看:一个“10x软件工程师”产生的价值会是老板付的钱的十倍。那意味着你或她或他每年得到100 KCHF,但是她或他实际上创造的价值超过一百万法郎。当然了,他们会在年底财务核算时获得奖金,因为,你懂的,资本主义嘛。要知道自己的价值,读读Karl Marx 和 Thomas Piketty,已经说得够多了。

      继续说;做一条不停游动的鲨鱼,因为你的技能非常非常有价值。说出你的工资,大声说出来,写工资博客,这样一来你的同行就会知道他们的工作多有价值。

      公司想要你停止上述事情,这样一来女性的工资就只是男性工资的70%。所以说出来吧!写博客吧!写推特吧!我每年赚135KCHF,那就是我目前的工资。你赚多少呢?还有你呢?我们说出来的越多,不公平就会越少。任何与我工作经验相近、正在与我做相同工作的人都会得到相同的报酬,不管种族、性别、年龄或者偏爱的足球队。这就差不多了,但是不仅仅是这样,不仅仅这样。

8.薪火相传

      如果你是一个白人男性,记得你自出生起享受的所有权利都只是因为你天生注定,改变这个行业,改变偏见让这个行业更加包容是你的责任。

      薪火相传是你的义务。

      在生活中谨慎做决定。小心你的行为和它们产生的影响。不要在改变你的看法时脸红或者尴尬,必要时说“对不起”。听着,不要做一个艺高而自负的人,有点诚信和自尊。

      不要批评或者嘲笑你同行的技术选择;其他人选择它们自有他们的理由,他们必须受到尊重。准备好在学习过程中的随时改变你的想法。一天你可能喜欢Windows,一天你可能喜欢安卓。实际上最近我喜欢安卓的一部分,这没什么。

 

9. LLVM

      大家都为Swift疯狂,但是实际上我这些日子更加关注LLVM

      我认为从LLVM长远影响来看,目前LLVM是最重要的软件项目。Objective-C blocks, Rust &Swift(据StackOverFlow开发者调查显示,这是两个最受欢迎的强类型编译型编程语言),Dropbox Pyston, Clang静态分析器,ARCGoogle SouperEmscriptenLLVMSharpMicrosoft LLILCRubymotioncheerp, watchOS应用程序Android NDKMetal,所有的这些东西都是因LLVM诞生或变强大的。对于现在很多最重要的语言来讲,有很多编译器使用LLVM作为后台,.NET CLR最终会与其交互,Mono早已使用LLVMFacebook已经开始尝试将LLVMHHVM集成,WebKit最近从LLVM转到新的B3 JIT JavaScript编译器。

      LLVM是跨平台、跨CPU架构、跨语言、跨编译器、跨裸眼测试的,又免费又自由。对于LLVM,尽可能地学习吧,这是真正革新正在发生的“星系”,这是未来二十年的基石。

10. 相信你的预感

      当我在两千年六月看到.NET的简介时,我有一种预感,.NET将会变强大。当我在两千零七年看到iPhone的简介时,我有预感iPhone会变强大。

      在这两个例子中,人们都确实曾嘲笑过我; 在这两个例子中,我相信了我的预感,我猜想事情会进展得很好。

      相信你的预感,你可能也会很幸运。

11. API才是王道

      好的API才能带来好的应用程序,如果API烂透了,应用程序也好不到哪儿去,无论设计得多么漂亮。

      记住粗糙比啰嗦强,客户不应该有太多疑问;尽可能多往API中加入逻辑。

      不要自己发明安全协议。

      学一些服务器端技术,确保节点是其中之一。

      REST放在一边,学学Socket.io, ZeroMQ, RabbitMQ, Erlang, XMPP;在应用程序开发的下一步中研究下实时,实时不仅仅对聊天应用程序有用。永远都要从方程中移除poll

      噢,开始围绕那些API建立bot,只是顺便说说。


12. 战胜复杂性

      越简单越好,一直如此。记得KISS原则。我的意思不是停留在UI级别上,直到你代码的深入层次上也不要忘了这一点。

      重构,单元测试,代码审查,提交请求,所有这些工具都任由你意愿来确保你装载的代码是有效的,而且可能是最简单的架构。这就是你建立长久、有弹性系统的方法。

结论

      最重要的事是记住:不要在意你的年龄。

      我一个儿子对我说:“不可能,爸爸。数学家在四十岁的时候工作成果最好,你已经八十多了,你现在不可能有好主意了。”

      如果你过了八十头脑还依旧清醒和警觉,你就已经有了优势,你活了很长时间,看了很多事,你已经看透了很多。我现在八十六了,我能有这些想法的时日不多了。新的想法到来,你这儿一点、那儿一点地拾起,现在时机成熟了,而实际上,可能时机五年或十年前还没有成熟。

      ——引用自菲尔兹奖和阿贝尔奖获得者,数学家Michael Atiyah的文章

      只要你的心告诉你继续编程,建立新事物,你就会永远年轻。

2035,距离当前19年之后,一些人也会在一个软件会议上给出与今天谈话相似的讲话,像这样开始:

嗨,我四十二岁,这就是我的故事。


希望你们中有一个人会进行这个演讲;否则,就会是一个AI bot进行了。你会提供一些关于2016年的奇闻轶事,比如,在这一年David BowieUmbertoEcoGato Barbieri 和 JohanCruyff去世了,或者SQL ServerLinux 上可用了,或者谷歌的AlphaGo打败了一个围棋冠军,或者巴拿马论文和土耳其公民数据库在同一天泄露了,或者谷歌第一次考虑为安卓使用Swift,或者这是人们享受隐私权这种没用的东西的最后一年。

我们距离2038年问题还有三年,人们会为此而担忧。


当然我不知道十九年后会发生什么,但是我可以告诉你三件一定会发生的事:

  1. 某个人会在Stack Overflow上面问怎样用正则表达式过滤电子邮箱。

  2. 某个人会发布新的JavaScript框架。

  3. 某个人会在LLVM的基础上建立一些炫酷的东西。

希望大家都能够带着微笑记住这次谈话。

感谢大家的参与!


【版权声明】

原文作者未做权利声明,视为共享知识产权进入公共领域,自动获得授权。