职业生涯回顾
介绍
2023 年 2 月,我(和其他数百人一样)不幸被一家当时非常出色的公司解雇,当时该公司刚刚更换了一位新 CEO。
幸运的是,我在那里待了将近九年,薪水很高, RSU补偿也非常丰厚,积攒了不少钱,所以没什么找新工作的压力。既然如此,我只是随便找了找。
我的问题在于,我经常在技术面试中失败。被要求在限定时间内实时编程,而且几乎有人在背后盯着,这真的让人很不安。(这些年来,我接的那些工作,要么被问到熟悉的问题,要么幸运地灵光一现。)
裁员已经一年了,我觉得是时候正式退休了。这45年的历程真是精彩纷呈。或许是时候好好回顾一下了。
早年时期(20世纪80年代初)
我最早使用计算机的记忆是在高中时使用DECwriter (纸质!)终端通过BASIC进行编程,该终端连接到由BOCES维护的远程计算机。
我偶尔也会去附近的Crazy Eddie商店,摆弄他们的电脑模型。我用得最多的是雅达利 800。还好,销售人员对我在那里花几个小时摆弄东西还算宽容。
后来,我的高中开始添置Commodore PET和Apple IIplus 电脑。我和高中里所有的计算机老师都成了好朋友。学校原本计划团购 PET 电脑供个人使用,但最终未能成行。
因此,1982 年,我的父母决定给我买一台 Apple IIplus、一台Disk II、一个RF 调制器和一盒 5¼ 英寸软盘,总价 2017 美元。(相当于 2024 年的 6369 美元。)
这是一个关键时刻,让我走上了使用苹果电脑的道路——直到今天我还在使用它。
我至今还记得,当我看到 Apple II 能够绘制“高分辨率”图形时,我是多么的震惊。(PET 没有图形功能,只有PETSCII。)
在 Apple II 上,我最终自学了6502汇编语言,并为Applesoft BASIC编写了一整套扩展程序。我还自学了Pascal,它很快就成了我当时最喜欢的编程语言。
有段时间,我甚至找到了一份兼职工作,为我所在的学区编写程序,使用 Apple II 和Apple III电脑。除此之外,我还编写了记录学生成绩和打印成绩单的软件。高中毕业后,我一直从事这份工作,直到本科毕业。
我要感谢 Andrew L.、Henry C.、Linda P.、Richard A. 和 Robert G.,他们都是优秀的老师、导师和朋友。
本科阶段(1985-1989)
虽然我在高中时获得了伦斯勒理工学院的伦斯勒奖章,但我还是决定就读当时的理工学院。当时,我不太愿意为了上大学而搬离伦斯勒理工学院;而“理工学院”离我父母家开车只有20分钟的路程。
最终,我买了我的第一台 Mac。(我认为它是一台Mac SE,或者可能是Mac SE/30。)我还买了一整套《Inside Macintosh》并为其编写了程序。
后来,我通过《C 编程语言》自学了C语言,并且发现《C 程序员手册》也非常有用。C 语言取代了 Pascal,成为了我当时最喜欢的编程语言。从那时起,我就断断续续地用 C 语言编程。
贝尔实验室时期(1989-1995)
我大学毕业后的第一份正式工作是在贝尔实验室(当时它还是AT&T的一部分)。工作地点不在新泽西州(贝尔实验室的大部分部门都在那里);而是在伊利诺伊州内珀维尔的印第安山(Indian Hill)实验室(位于芝加哥以西约30英里)。
尽管我(最终)不得不独自搬到大约850英里外的地方,但这真是一个不容错过的好机会。我的意思是,如果你是一名程序员,你怎么能错过在Unix、C和C++的诞生地工作呢?
我记不清申请了哪些公司,但我记得苹果是其中之一。我没有收到苹果的回复,所以我猜他们不感兴趣。但后来我接受了实验室的工作后不久,终于收到了苹果的消息:他们想面试我。我告诉他们太晚了。
这又是一个关键时刻。如果苹果早点联系我,我的人生和事业或许就会走上截然不同的道路。
在实验室,我实际上是从测试5ESS 电话交换机开始的。这份工作并非直接编程,但我编写了很多ksh脚本。(我甚至还见过David Korn一次,虽然时间很短。)
不知何时(具体原因我记不清了),我开始尝试Cfront,当时 C++ 中刚刚添加了模板。显然,我擅长发现 bug,并将 bug 测试用例精简到几行代码提交给作者。最终,我成为了一名正式的 Cfront 测试员。
当时,HyperCard在 Mac 上被广泛使用。出于兴趣,我决定将《C 程序员手册》翻译成 HyperCard 堆栈。然后我决定看看 Prentice-Hall(手册出版商)是否对 HyperCard 版本感兴趣。(由于我来自贝尔实验室,他们真的接了我的电话。)他们礼貌地拒绝了,于是我问他们是否有兴趣出版这本手册的 C++ 版本——他们答应了!我花了大约一年时间编写,最终《C++ 程序员手册》于 1992 年出版。
当时贝尔实验室的一些好处包括:允许我在书的封面上使用AT&T的“死星”标志(这赋予了它某种庄重感);他们负责我书的照相排版费用;他们还允许贝尔实验室的作者保留100%的版税。这本书被翻译成了法语、日语、俄语和乌克兰语(据我所知)。(普伦蒂斯霍尔给我寄了一些副本。)
为了更好地完成我的日常工作,我开始编写脚本,使用dot语言为需要测试的新5ESS软件生成软件交付计划图表。最终,我与Steve North(dot语言的主要作者之一)合作。
在贝尔系统解体之前,实验室通常会聘用刚从大学毕业、拥有学士学位的人员,然后立即将他们送往研究生院(学生自行选择)攻读硕士学位。
更让人吃惊的是,实验室不仅支付学费,还每月发放生活补助,这样他们就不用工作,可以专心攻读学位。实验室甚至不要求人们签署任何形式的合同,保证他们在毕业后一定年限内继续为实验室工作。他们只是相信人们会做正确的事情。这才叫交易。
唯一的要求是,你必须在一年内完成硕士学位(而不是通常需要的两年),因此得名“OYOC”:校园一年。
拆分后,AT&T 面临着真正的竞争,他们的钱袋子收得更紧了。虽然 OYOC 仍然存在,但已经不那么常见了。尽管如此,我还是向管理层表达了我希望有机会加入 OYOC 的想法,但没有立即得到回复。
有一天,史蒂夫让我给他发一份可交付成果计划表的样本。他没说原因,我也没多问。大概几周后,我在走廊里碰巧碰到了部门主管,他漫不经心地说:“我们想看看能不能帮你加入OYOC。” 我惊喜万分。
原来,史蒂夫要的那张样图,在一次关于贝尔实验室研究如何与其他部门合作的演示中被用到了,我的部门也在其中展示了这张图。这给了我部门主管很大的面子,我想这也是我进入OYOC的原因。
我决定就读伊利诺伊大学香槟分校(UIUC)。我的论文是关于状态图的 C++ 实现:CHSM。事实上,CHSM 已经在一些生产环境中得到了应用,例如飞利浦、高通以及欧洲核子研究中心 (CERN) 的ANTARES中微子望远镜项目。
从伊利诺伊大学厄巴纳-香槟分校回来后,我申请并获得了在实验室软件生产研究部门(也在伊利诺伊州,就在我之前所在位置的街对面)的实习机会。
虽然在实验室工作总体来说很棒,但在研究部门工作就更好了。作为一名年轻的计算机科学家,我偶尔会遇到丹尼斯·里奇、比亚内·斯特劳斯特鲁普、安迪·科尼格,甚至阿诺·彭齐亚斯这样的人,有时甚至会与他们交往。
关于Bjarne,我曾经去过位于新泽西州默里山的贝尔实验室总部,他当时就在那里工作。因为我有贝尔实验室的徽章(全公司都是统一的),所以我可以直接进去。最终我找到了Bjarne的办公室,敲了敲门,我们聊了聊。我已经不记得聊了什么,但我记得他非常和蔼可亲。
后来,比亚恩来印第安山做演讲。演讲结束后,不知怎么的,我成了唯一一个带他去吃午饭的人。我开车带他去了内珀维尔市中心一家墨西哥小餐馆,我们一对一地聊了聊。(我也不记得当时聊了什么了。)
在Steve E.的指导下进行研究期间,我合作撰写了几篇论文,并获得了几项专利。那是一段美好的时光。然而,我的实习期最终还是结束了。
多年来,研究人员的招聘标准从相当宽松(你只需要展示才能)摇摆到相当保守(你还必须拥有博士学位——而我没有)。不幸的是,当时的钟摆偏向了保守的那一端,我没有被聘用从事研究工作。相反,我回到了另一个团队,负责用 C++ 为 5ESS 开发“配置器”软件。
然而,最终我不仅厌倦了这份工作,也厌倦了整个芝加哥。离开芝加哥后,我回首往事,意识到不知为何,我从未在那里真正感到“家”。我决定再次搬家,这次搬到了更远的加州和硅谷。
美国宇航局艾姆斯研究中心时期(1995-1999)
我在Caelum研究公司找到了一份工作,与位于加州莫菲特菲尔德的NASA艾姆斯研究中心计算科学部签订了合同。我设法在两英里外租到了一套公寓,而且离家很近。我的通勤时间很短,有时我可以回家吃午饭,甚至还能小睡一会儿。
我在那里开发的两个突出的项目是:
- 一个基于网络的系统,允许行星科学家查看来自机器人火星探测器的图像并请求实验。
- 博士后项目:NASA 广泛使用的基于网络的文档共享和协作系统。
对于博士后系统,我需要一种方法来搜索全文索引和文档。我尝试过SWISH-E,但它非常慢,最终花了超过 24 小时才索引完前一天的新内容。(事实证明,作者使用了非平衡二叉树。)
我决定编写自己的索引和搜索引擎:SWISH++。通过简单地使用平衡二叉树加上mmap来代替传统的 I/O,SWISH++ 的性能提升只需几分钟,而不是几小时。
SWISH++ 是我最喜欢做的事情之一。
在艾姆斯大学待了大约四年之后,我觉得这里的官僚主义太过繁琐,于是我决定投身创业世界。
创业时期(1999-2014)
Liquid Audio(1999-2000)
第一家初创公司是Liquid Audio ,它是数字音乐下载领域的先驱。(这比iTunes的出现早几年。)
这份工作最终要求我随叫随到,带着寻呼机(那时候除了医生,其他人还在用实体寻呼机)。我的第一个晚上简直是地狱般的夜晚。寻呼机一直响个不停,我彻夜难眠。尽管如此,第二天我还是设法去了办公室。我的经理内森(他看过寻呼机的记录)看到我后,就让我回家睡觉了。第二天,我告诉他我再也不想那样做了。(我还暗自发誓:再也不想了。)尽管据说随叫随到是工作的一部分,但他告诉我,我对公司太有价值了,我不需要再随叫随到。
在 Liquid 工作期间,我用 C++ 编写了一个小型、轻量级的自定义 Web 服务器来提供音乐剪辑,并设计并实现了一个系统,用于直接从源代码控制自动配置和部署软件到服务器,为此我获得了几项专利。
最终,情况发生了变化,这份工作不再有趣,所以我离开了。
iPix(2000–2001)
我去了iPix。除其他工作外,我还从事了以下工作:
- 通过 HTTP 的大型文件存储库系统每天为 eBay 提供超过 6000 万张图片。
- 通过 HTTP 的容错文件传输服务器,用于从现场收集虚拟旅游图像。
- 用于处理虚拟旅游的自动化、模块化排队系统,配有 Web 管理前端。
尽管和优秀的人一起工作很有趣,但最终,iPix 还是因为财务现实而开始崩溃,所以我离开了。
XQRL 和 BEA(2001-2005 年)
当我还在实验室软件研究部门实习时,当时担任欧洲核子研究中心研究员的法比奥联系了我。我们合作改进了 CHSM,以便法比奥在那里使用。
时间飞快,Fabio 搬到了硅谷,和妻子 Dana 一起创办了自己的小公司 XQRL(发音为“squirrel”)。他们给了我一份工作,让我为XQuery的 Java 实现实现类型系统。(我完全不懂 Java,但自学了。我不喜欢 Java。)
XQuery 类型系统与大多数编程语言类型系统不同,其中的“类型”不仅可以是简单的类型xs:integer
,例如 ,还可以是析取类型,例如xs:integer
或 xs:string
。要回答诸如“类型 A 是否匹配类型 B?”之类的问题,需要将每个类型转换为DFA,并使用诸如DFA 最小化之类的算法。在 CHSM 的工作中,我已经熟悉了这些概念。
我的 XQuery 类型系统实现是我最喜欢做的事情之一。
XQRL 正在与BEA Systems合作,他们最终收购了我们,所以我为他们工作了一段时间。
光工艺(2005–2011)
法比奥离开BEA后创办了另一家公司,这次是开发桌面照片编辑软件。Photoshop虽然占据主导地位,但它的设计者是图像科学家,而不是摄影师。
以曲线工具为例。这个工具根本无法直观地使用。它与你试图调整的照片完全无关。你只能摆动线条,看看它对图像的影响。
相比之下,Fabio 的想法是创建一个使用区域系统的工具,使其更加直观。最终成果就是LightZone。它还能以非破坏性的方式完成所有照片编辑,甚至可以处理相机 RAW 文件。它主要用 Java 编写,以便在 Mac、Windows 和 Linux 上实现跨平台运行,但也有一些用 C 语言编写的代码,用于特定平台的功能以及 RAW 文件的解码。
我负责图像元数据的提取和索引以及 Mac 和 Windows 的低级、平台特定的代码(这是我唯一一次真正进行 Windows 编程),包括检测数码相机何时通过 USB 连接并直接从中导入照片。
我们在几次MacWorld大会上都设立了展位。2007 年,LightZone 荣获了 MacWorld 编辑选择奖。
我们曾经在曼哈顿参加过 MacWorld 大会。我们的展位几乎与苹果公司全新Aperture照片管理器和编辑器的展位隔街相望。大约在同一时间,Adobe 发布了Lightroom。尽管 LightZone 的编辑器远胜于苹果和 Adobe 的编辑器,但时机选择得并不恰当。如果 LightZone 早几年上市,情况可能会大不相同。
28毫秒(2011年至2014年)
这时,我去了另一家初创公司,继续做 XQuery 的实现,不过这次是用 C++ 写的。此外,我还实现了全文扩展和多语言错误报告。
有一次,公司董事会告诉CEO要削减成本——所以我被解雇了。当时开发人员寥寥无几,所以我被解雇实际上意味着能写代码的人员大幅减少。董事会听说CEO削减成本后,我被重新聘用了。不过,正如你所料,这给我留下了不好的印象,所以我开始寻找新的工作。
28 毫秒后,我决定我已经受够了初创企业的世界,并寻找一家中型或大型公司。
Splunk 时代(2014-2023)
尽管经历了一整天残酷的技术面试,我还是收到了 Splunk 的 C++ 开发职位邀请。我的第一个任务是改进 Splunk 的调度程序。
简而言之,用户可以编写查询来搜索索引数据。他们还可以像cron一样安排查询周期性运行。当然,其中一个问题是资源限制:用于运行搜索的 CPU 核心数量有限。如果在任何给定时间要运行的搜索数量超过了这个数量,你就必须确定要运行哪个子集,同时仍然(最终)保持公平。
我所做的修改使搜索吞吐量提高了约 20%。这项工作我获得了几项专利。
我的调度程序实现是我最喜欢做的事情之一。
之后,我致力于将S3集成到 Splunk 中,用于索引数据的云存储,并智能地缓存检索,以最大限度地降低延迟。这项工作我获得了更多专利。
在此之前,工程师没有随叫随到的要求(工程师有专门的团队负责)。但这种情况即将改变,即使是开发人员也要随叫随到。从我在Liquid Audio的经历来看,我发誓以后再也不用了,所以我开始找新工作。
我设法找到了一份工作,并得到了一份不错的工作机会;但后来,偶然间,我在浏览 LinkedIn 时看到了 Splunk 的一个空缺职位,要求成立一个新的“开发人员生产力”团队,通过更好的教育和工具来减少开发人员的痛点。
由于我从事软件开发工作多年,我觉得这样的改变很好。我确实想做更多有教育意义的工作。而且这份工作没有随叫随到的要求。我申请了,并获得了录用。我决定留在“我认识的魔鬼”身边,留在了Splunk。
我开发并主持了多个高级 C++ 讲座,其中包括面向新开发者的完整 9 部分 C++ 课程。我还致力于开发新工具和文档,以消除痛点。作为在那里工作的开发者,我了解所有痛点所在。我还领导了将编译器工具链从 C++03 升级到 C++17 的工作。
然后就被裁员了。虽然我最近和我的长期顾问对我的财务状况做了彻底的分析,并得出结论,我的钱足够退休了,但被裁员仍然让我很受伤。
结语
感觉很奇怪:45年过去了,感觉既慢又快。一方面,我的职业生涯确实像是花了一段时间才完成;另一方面,我又不敢相信它就此结束了。所有的课程、学习、考试、面试、工作,现在终于结束了。我成功了。我可以放松一下了。
那么我的退休计划是什么呢?我很想在当地大学找一份计算机科学的教学工作。(可惜的是,空缺职位并不多。)
与此同时,我仍然热衷于各种项目的开发,例如cdecl和我的编程博客。除了电脑,我还喜欢园艺、烹饪,并希望能去旅行。
我曾经想过,以后有机会,可以组织几个理工学院的同学聚会,看看大家从毕业到退休这段时间的职业和生活过得怎么样。我们以前在纽约州法明代尔的校园已经不复存在了,但那里现在有一个购物中心,里面有一家Chili's餐厅。那里或许是个举办聚会的好地方。
从事软件行业45年了,我有什么建议吗?当然有,不过那是另一个故事了。
鏂囩珷鏉ユ簮锛�https://dev.to/pauljlucas/career-retrospective-1ojp