前几天,我在现在的公司工作满五周年了,想想还蛮意外的,意外在于,没有想到在一家公司居然会呆上五年之久。
图片来自 Pexels
在我之前的印象中,在一家公司呆两年是比较合适的,也许一年就够。理由很简单,在一家公司真的呆了一年,假如你足够勤奋,应该足够学习到你想学习的东西了,尤其是你的 Mentor 的技能。
全部学习到不可能,但是学个五六成应该没问题了,否则只能怪自己太笨了。
那时候我觉得,在一家公司呆五六年的人好奇怪,什么工作值得干上五六年?
在来这边工作后,知道谷歌那边有一些人干了十几年,一呆就呆到至少当上 Staff Engineer,觉得也是很莫名其妙。
公司再好,一个事情干好几年总会腻,并且容易瓶颈。我前公司的领导们,不少是在百度呆了五六年以上,还都是一毕业就在百度的。
那会我觉得挺神奇的,百度呆这么久,高 T 也没混上,不知道图什么。现在我对之前的想法有所改变。
下文会说一说在一家公司呆五六年到底还能学什么。还是从自己的工作经历总结起吧。
十年一瞬
大家别奇怪,标题是工作八年,怎么这里成了十年了?因为我真的工作了十年,其中前两年是全职实习生。
工作的经历大概如下:
- 2009-2010 年,在一家小公司做服务器开发和 IM 客户端开发。接触 Linux 开发和 Windows 开发。当时后期带四五个人的团队。
- 2010-2012 年,在云壤工作,1 年实习,1 年正式。云壤是我知道的迄今为止谷歌工程师最密集的创业公司,我去的时候大概二十几个员工,谷歌来的十个以上,来来往往的前谷歌人估计接近二十个。
在云壤接触了搜索引擎,对爬虫,索引挑选,网页处理等有较多的接触。当时没有带人,一心当小弟。
- 2012-2014 年,在宜搜科技,做移动搜索引擎。宜搜目前没什么名气,当时还是移动搜索的重要玩家,云壤当时从网页搜索转型移动搜索,竞品分析里就有宜搜。
入职时担任的是爬虫组负责人,工作主要是爬虫。后来也负责索引和一些新业务的整个后端。在宜搜大约一年,升职搜索架构师,当时在宜搜我应该是最年轻的架构师了。
不过可惜,在宜搜学习到的技术并不多,主要是技术输出。后来一位 exGoogler 告诉我说,我在宜搜两年其实有点耽误了,一定程度上我是认同的。当时最多带十几个人。
- 2014 年至今,在当前公司任职。在这边工作接近两年后,升职技术总监,又过三年,升职高级技术总监。
开始的时候带人两三个,中间几乎单干,后来五六个,十来个都有。目前多点。
多变的时代和行业
回顾十年的工作经验,蛮多感慨的,这样的感慨也发生在阅读《浪潮之巅》《硅谷之谜》时。时代变快真是快,尤其是 IT 行业。快到连追逐浪花的勇气都快没有了。
在 2009 年的时候,当时还是百度当霸主,大家以能进百度为荣。那会我也去百度面试了,没记错的话我在实习和应届校招都面试过,人家没把我当回事。后来在毕业 1 年后,百度给过个 Offer,接近 T6,不过我没去。
目前,百度对人才的吸引力更弱了一些。我认识的一些人,目前也都在犹豫要不要离开百度。
后来实习做 IM 的时候,那会大家都认为能去腾讯开发 QQ 绝对是很牛逼的事情,钱多,有成就感,你想,几亿用户在使用 QQ 这个产品。
这会别说开发 QQ 有多牛逼,开发 Windows 客户端都快凉凉了。微信都面世八年多了。
那会我刚来这边的时候,大家还不知道人工智能是啥玩意,听过的就是推荐,广告,搜索,最多机器学习,意图理解等。
我在加入这边的时候,还搜索了一番,觉得语音不靠谱,难度太大,后来没多久,铺天盖地都在炒作人工智能,应届生不管什么专业,都在简历上写自己在人工智能上多有积累和造诣。
也许过几年,又会回到语音技术,图像处理技术,搜索技术,推荐技术,广告技术,而不是目前人人皆说人工智能的状况。
异于常人的选择
我呆过的最大的公司就是目前的公司,最多达到 800+ 人,估值在独角兽水平。呆的第一个公司,入职时 10 个人不到。
第二家去的时候工号 21,离开的时候大概两百人。第三家去的时候五六百人,离开的时候估计三四百人。
目前的公司加入时三十几个,在 A 轮阶段,后来有了 B 轮、C 轮、D 轮等。
我也和几乎所有的应届生一样,有大公司情结。不过我属于比较懒的人,有了选择后,可能就放弃再次面试和比较了,比较能说服自己:“想学习哪里都一样”。
不过我懂得学习的法门,却是花了好几年的时间,以后有时间再专文分享。
实习的时候,大部分同学去了大公司,比如微软,人人网,Adobe,百度,网易有道等。
不过目前来看,人人网几乎挂了,Adobe 退出中国了,网易有道早就和搜索没啥关系了。死不死其实和大公司与否没啥关系。
而我呢,当时因为比较懒,有了选择后,第二天就去报道了,我告诉自己,Offer 其实还可以的,实习薪资一天还有 120 呢,可以了,加上饭补 20,一天 140 了,一个月三千多呢。
当时就是这么乐观,算钱的时候算“Total Package”来安慰自己,不过在实习快一年的时候,我离开了这家小公司。
虽然当时我还在公司的“管理层”,公司的管理层会议,我还参与过几次。不过我觉得自己应该追求技术,而不是太早将精力花在管理上。
毕业的时候,大部分同学也都去了大公司或者国企等。比如阿里,EMC,百度等。
而我当时几乎没有投过简历,记得当时可能唯一面试过的互联网公司就是宜搜科技和 3G 门户了。
Offer 都有,但是都不如云壤有吸引力。另外还有一个面试,记得是做视觉的,还是国企,给军方做项目,面试的时候问了很多个人隐私信息。
2011 年那会,我说要年薪 30 万(有户口),他们的 HR 觉得我有病,要价这么高,浪费大家时间,原因很简单,牺牲了技术发展,我当然要多一些,否则去了就得立马后悔。
现在我反倒庆幸当时没去,要是那会去了,可能当时在班级里我会是薪资最高的(那会微软的 Offer 一般 22 万左右,人民搜索大部分在 17-20 万左右,百度特殊 Offer 在 22 万),但是绝对会是目前看来最傻的决定。
刚开始的时候钱多个十万八万,对整个职业生涯而言没有什么帮助。那会也有一些人,选择去日本外包公司,待遇相当于人民币 40 万/年左右。
和国内的 Offer 相比,简直高得吓死人,目前在我看来,选择这样的 Offer,都是很蠢的决定。
小公司里如何精进
小公司往往因为创始人的背景,决定了团队的平均水平。大佬创业,一般都是精英团队,而普通创业者,招聘能力还是比较弱的。
原因很简单:
- 一来,没能力融资就意味着没钱招聘。
- 二来,创始人们的能力不够强,也会导致没能力吸引到优秀人才。
不过团队里的能力有强弱,但是在不同的团队,个人能够学习的东西还是很多的,比如:
①在我第一家公司里,我学到了问题到我为止的求学精神
我算是 Team Leader, 我第一次学会了怎么编译大规模软件,怎么去构建团队,怎么做招聘,怎么去解决软件稳定性问题,怎么处理编译和链接的各种诡异的问题,怎么去构建代码基础库和共同的代码风格。
不过很多事情都是自己瞎折腾,毫无体系,而提出的解决方案,也没有什么水平。
因为当时的自己,搜索技巧也不成熟,连谷歌搜索引擎都不知道怎么使用(那会公司没有谷歌搜索,而自己也没有买过 VPN),没有能力去搜索到业界成熟或先进的技术方案。
不过客观来说,当时开源的氛围还没那么强,很多谷歌等的知名项目,都是在 2011 年后出来的。
②在第二家公司,我不是 Leader,也没有带过人
毕竟当时我在的时候还几乎没有应届生加入,而我自己还是实习生,工程师里几乎是最嫩的,怎么可能有机会让我去带人?
不过没关系,我还是发挥主人翁精神,在实习阶段就承担了很多基础库的开发,承担了几个重要模块的开发。
因为开发或者维护了不少基础库,因此找我咨询问题的同事倒是蛮多的。有人找你问问题是好事,问题找上你,你就有机会去总结和归纳,这样别人问你的时候你才会说得有条理。
而别人找你,就会给你提新的需求,新的需求的实现过程,其实就是不断突破自己的过程。这时候我的 Mentor 的风格间接促成了我独立解决问题的习惯。
当时的 Mentor 不太喜欢做员工沟通,也很少与我沟通技术方案,更多的是告诉我要做什么任务,而不是告诉我要怎么做。
我曾经心里有过一些抱怨,觉得公司在培养人方面太不积极,但是另一方面想,知识就在那里,人就在那里,他们都为好奇的人随时准备着。
只能怪自己当时太嫩,没有足够强的好奇心,没有足够明确的学习计划和求学心态。机会总是留给有准备的人的。
另外一点,当时觉得有一些问题不好意思去问,因为自己并不参与那块的研发,而那些还是公司的核心模块,也许因为保密,也不适合问太多吧?
现在想来,这个想法太幼稚了。大部分技术人都会因为别人找自己请教问题或者讨论问题而开心,大家会因为分享而提高存在感和成就感。
你要是问了不该问的,回答者不回答就是了,绝不会因此而对你打上“偷师”的标签,而很可能会心里想:“这小朋友真不错,勤学好问,是个苗子”。
很可惜的是,我在第二家公司呆的时间并不够长。当时觉得爬虫也没啥好做的了,自己参与过大部分模块的开发,算是元老了。
而别的新的活儿也没什么挑战。其实回想起来,当时应该花大力气去学习索引、检索和排序技术,把相关的技术学个遍。
那会虽然云壤的搜索质量不算太好,但是却有好几个聪明人在。比如后来 360 要和百度在搜索上硬碰硬,找的移动搜索和 PC 搜索的技术负责人,都是云壤出去的。
我们觉得自己学得差不多了,其实是自己的眼界受限,自己不敢在公司内去承担更多责任,自己没能在公司内发挥更大的作用罢了。很多时候,不是没有学习的机会和空间,而是自己没有认识到、没有抓住。
③在第三家公司,我花了很多的时间重新造轮子
原因很简单,这里的轮子太旧了、太烂了。每一次重新造轮子,我们对轮子的理解就又深了一层。
当时造的轮子包括:编译器的选择,开发环境的选择(操作系统和 IDE),编译工具的选择(Google Bazel 之类的 Build System,不是指 GCC 这样的编译器层面),源码管理工具的选择,Code Review 平台的选择,代码风格的选择和推广,基础库的编写和旧代码的重构,单元测试的引入,内存泄露的检测等。
当然,重新造的轮子主要还不是上面这些,而是重写了大部分爬虫的模块。网页爬虫系统其实挺庞大的,代码规模也不小。
算上网页解析和排序信号抽取的话,代码规模更是庞大。当时我的主要工作就是重写这些主要模块,让爬虫抓取规模上来,让稳定性上来,让新的数据抓取需求能快速响应,让搜索的时效性上来等。
后来爬虫没什么好做的了(主要是因为搜索没做起来,流量不增长的话,对爬虫的需求就没那么强,因为搜索质量小幅度提升的价值有限)。
后来去负责好几个新 App 的后台开发,包括一个应用商店,一个类似头条的新闻应用,一个视频搜索网站等。
那个视频搜索网站大概是融合了网页视频搜索和种子搜索的形态,这基本是我自己的 Idea,雏形也是自己做出来的,包括爬虫,索引,检索,排序,以及最开始的网站前端。
那会当真是把自己当全栈工程师了,并且产品心爆棚。宜搜这段经历,学会了怎么在整个搜索产品的视角看问题,怎么带一个十来个人的团队,怎么去培养其他人成长,怎么去站在整个部门的资源看问题。
前面说了,我离开宜搜的时候,公司人员大幅减少,估计才剩下不到 400 人。减少了三分之一不止。
我历来对公司的运途还算敏感:我离开云壤后,大部分谷歌人慢慢开始离开了;我离开宜搜的时候,那会大部分人也开始离开了。
在互联网公司,被动离开其实很高频,比主动离开还多。公司还欣欣向荣的时候,很少有人会主动离开,因为多多少少都还有机会在。
我一直很讨厌在一家进入沉默阶段的公司待下去,这可能也是我习惯性选择在创业公司的原因吧。
毕竟创业公司要么爆发,要么死亡,不太可能不死不活,不死不活的公司,老板也会觉得食之无味。
④离开宜搜就来到了目前的公司 C
刚开始半年差不多也是重新造轮子,把垂直搜索重新写了一遍。每次重写都能找到新的感觉,有更进一步的理解。
比如爬虫,解决的问题差不多,模块也可能差不多,但是每次重写,对问题的认识,对有限资源下的目标最大化,都有更深的理解。
小公司做搜索没什么机会,做了半年多,我甚至都开始写 Windows 脚本了。
做了半年多,我开始写语音合成。当时几乎对机器学习完全白痴,对语音技术更是白痴,不过这并不妨碍我转去做语音合成。
当时公司没有人做过语音合成,我自己一个人带一个实习生琢磨,竟然在三四个月左右就做上线了。
后来做了一两年搜索和合成后,开始做语音识别。目前几块都有所参与,算是公司里工作范围跨越的组别最多的工程师之一。
如何实现自我突破
小公司里,不是没有牛人,不过往往比你牛的人都比你忙,可能他们是 VP 或者 CTO,甚至是 CEO。
人家总不能天天带着你成长吧?大部分管理者事情多,并且不太做微管理,更喜欢下属自己主动成长。后续我会写一篇文章说一下管理者喜欢的工作风格。
小公司里,你如果稍微有一些能力,往往还会是个 Leader,甚至是总监,有时候还身兼数职,学习的时间更少。那往往让人很容易天天迷失在琐事之中,技术得不到成长。
这里结合我自己在 C 公司的一些经历,做一些总结分享:
①学会阅读最好的书籍
比如计算机行业,应该阅读《计算机体系结构——量化研究方法》,《计算机组成与设计》,《计算机程序设计艺术》,《重构》,《代码大全》,《TCP/IP详解》,编译器龙书,Linux 内核源码相关书籍,《深度探索C++对象模型》等书籍。而不是仅仅翻阅国内课本,技术博客,翻译很水的外文书籍。
②学会阅读最专业的论文
很多 Topic,其实自己想破了脑袋,都不如找几篇业界的论文看看。论文里除了说明现状以外,也会提出一些新的想法去改进。
毕竟论文比书籍更新,为了了解最新的研究成果,必须养成搜索和阅读论文的习惯。
③学会阅读最好的开源项目
很多时候论文里的想法没有开源,所以应该看论文。而很多时候论文里的想法又太飘,导致很难完全理解,这时候就可以借助开源项目了。
在我前几年的编程生涯中,我基本只是做到知道怎么用,知道复杂度,但是不知道这样的复杂度是怎么实现的,而不同的设计目标,又会导致不同的项目有怎样不同的 trade-off。
④保持好奇心,学会顺藤摸瓜
很多时候围绕一个问题,顺藤摸瓜,可以花了一年半载去学习和钻研。而这往往更有延续性。
去年开始我花了很多的精力做性能优化,也因此阅读了很多的相关资料,包括操作系统的实现,体系结构的设计、历史与进化,指令集,编译器的性能优化,C++ 的性能优化,常用的数据结构的实现复杂度,常用的性能优化技巧等。
基本上围绕着性能优化这个事情,我一路阅读了 Google gperftools 的源代码,想到了一些改造方法,改进了很多开源项目的性能(比如 Word2vec,LevelDB,Crf++,Openfst,SRILM,KenLM,Xapian 等),并一路学到了操作系统的 CPU 调度和存储器管理。
⑤学会发挥自己的长处,也学会忘掉自己的长处
比如我之前一直做的是搜索引擎,那么爬虫,分布式系统等是我的长处,我就可以在语音工程里发挥这些长处。
同时,忘掉自己的长处是说,很多时候你的长处在公司不一定有发挥的空间。
这个时候要么选择离开,找一个适合自己的坑,要么既然选择留下了,那么就改变思路,找一个更适合公司战略,更重要或更有难度的事情去做。
我以前经常想着,我的搜索经验也不错,懂爬虫,擅长网页解析,懂索引检索,还能做一些排序。技术视野可以说相当可以了。
何况我自己还做过很多的垂直搜索,熟悉垂直搜索的构建过程。我想找工作,分分钟找一个垂直搜索团队的负责人。
我带过的人,出去做搜索都可以拿到百万年薪了,我为什么不继续坚持把搜索做透,继续提高我的搜索能力呢?
因此花了不小的精力在搜索上。后来因为公司对搜索的需求其实没那么强,个人的贡献也没有充分发挥出来。搞得自己偶尔会有怀才不遇的郁闷感。
⑥站得更高,应该看得更远
假如你已经是技术总监了,其实可以充分利用职位给予的权利和空间,找到更多适合自己发挥的地方。
看得更远是说,你应该多想想哪些事情对公司是有价值的。不仅是创业公司,商业这个事情都是在有限资源下的竞争游戏。如何提高绩效,本质上还是在各种限制条件下,去追求目标最大化。
那么怎么去最大化目标,关键就在于你对公司目标和战略的理解,你对团队资源的理解,对各种限制条件的理解,对内外部竞争优势的理解,对个人能力和贡献空间的理解。
⑦成就别人,从而成就自己
工作开始的几年,总是更为“自私”,老想着怎么更快地提高技术,做一个事情时,很多人不管对公司有没有价值,只要能够让自己学习到技能,他们就干,并且一意孤行。
而工作越久,负责的任务越多,带的团队越大,这些时候越能明白,其实成就别人的乐趣更大,并且成就更多的人,反过来也能成就更好的自己。
⑧把自己当成公司的主人,一起打造公司这个产品
最近流行说张一鸣 Run 公司,宿华 Run 产品。其实真想成长,多想想怎么让公司成长才是正道。公司成长了,你的薪资,你的期权价值,才有上涨的空间。
公司成长了,你的团队才有可能有更优秀的人才加入,你的才华才有更大的施展舞台。
有了这样的视角和想法后,你会发现,每天面对的问题太多了,能够学习和成长的技能数也数不清。
互联网的变数太多,而身在互联网的小公司,变数更多。倘若说我以前仅仅是没勇气和信心去挑战大公司的机会,目前我反而蛮喜欢在小公司不断超越自己的感觉。
我可以说我自己的自信心越来越强了,你可以说我越来越没有追求了。在未来的八年里,我也许还会在小公司,也许有机会一起把一家小公司打造成我所喜欢的大公司。
路漫漫其修远兮,谁知道呢,且看脚下的路,一步一个脚印吧。
作者:叶顺平
简介:北大硕士。多年搜索研发经验,对网页搜索和语音交互有丰富经验。现为某知名人工智能公司技术总监。爱编程,喜文艺,业余时间写有“技艺丛谈”公众号(ID: jiyicongtan ),主张“谈技术要有趣,论艺术要飘逸”。