在美国面试工程师是一次很有趣的经历。以前在朋友圈发过一些经验。这两天采访了两位很有意思的工程师,其中一位给我勾起了一段尘封的记忆。今天我们就来说说这三个人。(1)施先生。昨天采访的SH先生。他的背景是广告系统——他在之前的公司用erlang实现了RTB系统。学习能力强,知识体系丰富,考虑周到。他使用erlang才一年多时间,在上面的造诣还是不错的。我和他聊了一个小时,越聊越投机——通常这个时候我会问应聘者一些奇怪的问题,比如,你最近在看什么书?你最近发现了哪些有趣的开源项目等等。我问他这个问题:如果erlang核心团队愿意在语言和VM层面为你实现几个特性,你希望得到什么?这个问题很开放。它不仅考察了候选人对现有系统的理解,也考验了候选人知识的丰富程度。没想到他一口气提出了三个愿望:1)更好的refc管理,提高内存效率而不造成“泄漏”2)引入类型系统,最好像Haskell一样严格区分纯/非纯函数3)把OTP的核心函数,比如application/supervisiontree,都是在语言层面提供的,不是以lib的形式。我对1)和2)并不太惊讶。3)非常有趣和周到。我让他进一步澄清——他说虽然他对akka了解不多,但akka在某些方面显然比blue好。在akka下,任何生成的actor都有一个默认的监督者,而erlangOTP提供了一个监督树,但是语言或VM本身并不将此作为默认行为——如果我们因为上下文临时生成一个进程,大多数情况下情况下,将额外监视它以进行适当的错误处理。既然如此,为什么不默认监督呢?不管这个想法对不对,光是这个思路就超越了很多很多程序员。(2)Mr.B.今天面试的是Mr.B.android工程师。快速浏览了一下简历,B先生让我想起了很久以前面试过的S先生(后面再说)。原因很简单:又一个硅谷活化石。1980年B先生开始工作的时候,我还没有出生。那是DEC如日中天的时代(谁也没想到,把IBM逼到墙角的小型机王者,几年后就被PC的浪潮打垮了),他在DEC工作,然后就可以了改变它。十家公司,比较有名的是amazon和twitter。如果按照正常孩子十七岁花季上大学来计算,他现在已经七十多岁了。在国内程序员圈还在讨论35岁以后程序员该干什么的时候,他却在大力投身到android开发一线。此外,他还是三本android书籍的作者,最近的一本出版于2016年,名为androidconcurrency。虽然老人不幸错过了近代计算机史上几乎所有发财的机会,但他依然乐此不疲,乐此不疲,没有自怨自艾。在采访他之前一个小时,我去亚马逊浏览了这本书的评论和可供预览的章节。平心而论,文笔不佳,概念解释不够清晰(面试也证实了他对并发和并行没有明确的定义,可能我是一个对概念太认真的人),以及大图看不懂(比如actor模型、CSP、STM等)。当然,能出书,非一般人所能及。他的android造诣不浅,年近六十的他活跃在科技第一线,还在继续着书立说。他真的是我们这一代人的榜样。(和老人聊天时,他说会继续出书)(3)Mr.S.采访S先生已经一年多了,如果不是写了一篇未完成的文章,保留了一些鲜活的记忆,我对S先生的记忆只会停留在“他是活化石”的阶段.这是当时的文章:10多年前我刚加入Juniper时,我的同事们每天中午一起吃午饭。一时间,总部来了很多华人工程师,聊起了硅谷的各种奇闻轶事。做Kernel的大同事易说,有一次他在钓鱼,和旁边的老人聊天,拉出一个以太网发明家。当时感叹,硅谷TM真是个神奇的地方。后来听同事讲了很多在硅谷遇到活化石的故事,比如采访与盖茨、乔布斯同一代的程序员等等,让我如痴如醉。上周终于见到了Mr.S,他是Joe先生的当代面试官,1978年毕业于印第安纳大学。MIPS早期员工,NeXT早期员工(Joe先生被自己踢出后加入)sonAppleandjustadoptedNeXT),几家公司的VP,包括NEC(好吧,现在NEC几乎算不上什么好公司了,但曾经很火)。然后他就来我们图比TV的小庙采访了!这在中国是难以想象的!你能想象鲍月桥、简晶这些令人敬佩的资深程序员来到你的创业公司应聘程序员职位么?S先生家住硅谷知名富人区Atherton,并不缺钱。整个面试过程中,我好几次差点脱口而出一个问题:你好像不缺工资,凭你的资历(或人脉),可以去一些大公司,在你老的地方找到工作。年龄。嗯,你为什么要来TubiTV?这样一个处在什么都需要操心的阶段的初创公司?但我因为文化差异而退缩了。作为热身,我问了他关于NeXT的简历,他说他是一个object-c编译器。我对编译器不熟悉,所以不敢出错。聊了几句,我就把话题转到了乔老师身上。S君立马打开话匣子,说起各种奇闻轶事(程序君:我当时怎么没把这些奇闻轶事记录下来),然后眼神黯淡下来,说自从老爷子接手皮克斯以来,精力一直都在筋疲力尽的。投那边,他很少出现在NeXT。然后我们聊起了MIPS。我渐渐感受到他对技术的热爱——这也能说明他跳槽过很多公司,在大大小小的公司都有VP头衔,但依然愿意在一线工作。他说在他加入NeXT的前两年,1984年(嗯,那时候还是个穿着开裆裤满地爬的蹒跚学步的孩子),加入了刚成立的MIPS,体验了一套来自学术界的指令集转型到工业界,对MIPS充满了感情。因为在Juniper做过中断处理相关的代码,对各种RISCCPU比较熟悉,尤其是MIPS和ARM,所以尝试用branchdelay来试试他的底线。他说他的主要工作是优化TLB,尽量优化CAM(估计那时候还没有TCAM)和DRAM(那时候SRAM很贵)之间的SRAM,但是他也看懂了指令管道。在他像教科书一样详细介绍了早期MIPSCPU中分支延迟的演变后,我突然想起了一个困扰我多年的问题:为什么MIPS有分支延迟,而ARM/PowerPC,也是RISCCPU,在指令级没有分支延迟。做这种事。他解释说,就RISC而言,MIPS是更纯粹的RISCCPU,ARM/PowerPC在业界对性能做了一些改进(妥协)。另外,它暴露了太多的流水线逻辑给软件工程师(注:主要是编写编译器和Kernel底层代码的工程师)会使编译器过于复杂(静态编译很难完美预测动态状态)指令的执行)。所以他认为ARM的做法是正确的,尤其是超线程(hyperthreading)的出现更证实了这一点。流水线的复杂性让这种简单的优化变得毫无意义。只有CPU本身的乱序执行才是王道。.我听得津津有味。这难道不是英式编程(程序员告诉CPU执行的步骤)和函数式编程(程序员告诉CPU做什么)之间的区别吗?由于提到了ARM,我问他是否了解文字池。很遗憾,文章到这里就结束了。面试过程不记得了。我唯一可以确定的是,他没有来图比电视台。(4)本来是出于感情写的,在火车上随手写的,发长长的文字和图片,不经意间就写了这些。程序员的人生很长,未来会有波澜。大多数人注定会错过一切成名的机会,一辈子成为普通的勤奋的程序员。对于这几次采访,其实我也有很多感悟,但三思而后行,还是决定在这里不写了,让大家自己去想一想。
