作者:罗燕珊 | 审校:蔡芳芳
在金山办公副总裁以及 AI 中台负责人姚冬看来,关于能不能一辈子做程序员的问题,要讨论的其实是“你有多大概率把它当成一个终身职业,可能性有多大”,目前看起来,程序员这行“只要你想,只要你愿意,然后选对方向,有合适的环境”,基本上就可以一直做下去。据姚冬透露,目前金山办公在职的、年纪最大的技术人于 1990 年入职,并且 30 年来都在一线写程序。
“程序员可以不做管理职位,但是不能没有管理能力。”9 月 29 日,姚冬现身InfoQ“大咖说”,妙语连珠,观点犀利,他既与我们分享了他丰富多彩的职业生涯,也结合自身经验讲述了自己选择职业方向和技术方向的方法论,并进一步给出了关于技术转型、如何判断技术是否容易过时以及管理能力等方面的思考和建议。
以下内容节选自当天的分享,InfoQ 做了不改变原意的编辑:
不断迎接新挑战
InfoQ:首先请您跟大家做一下自我介绍,包括您的职业经历、您一直以来关注哪些技术领域等等。
姚冬:我目前在金山办公任副总裁,主管 AI 方向的研发,做程序员有 20 多年,从 97 年就开始在软件公司,98 年进入金山,如果小伙伴们不怕暴露年龄的话,可能也知道金山词霸、金山游侠。后来去过一些其他公司,比如说我在诺基亚做塞班系统,后来又去了 YY 语音,打游戏的小伙伴们应该用过 YY 语音,团队指挥、开黑那也是我主导的,17 年的时候又重新回到金山办公,转型做 AI 方向的算法和工程产品。
InfoQ:您曾两进金山,您对金山办公的感受和看法有发生什么变化吗?
姚冬:人都有这个“问题”,就是在一个组织里的时候,更容易发现这个组织有问题。因为这时候你是一个近距离的观察者,看了很多细节,会总觉得这儿也不好,那儿不好,这个不对,那也不对。但如果跳出这个领域成为一个旁观者,距离产生美,当你看不到一些琐碎的细节的时候,你更容易从一个全局的宏观视角去看待问题,这时候你会发现,原来的组织或许也没那么糟糕,甚至有些原来的一些亮点、一些优秀的地方是你以前是看不到的。
我在 2004 年的时候离开金山,当时觉得金山当时还是一家小的软件公司,但是你出来再看的时候,你会发现这家公司,尤其很多以前没有注意到的优点,比如这家公司充满了技术梦想,至今也是,仍然是一家技术驱动的、技术立业的公司。上次雷总在我们的年会上甚至还说着,在我们这里“程序员是老大”。
另外这家公司仍然坚持着它的梦想,30 年就坚持做一件事情。从创办的时候就做办公软件 WPS,现在还是,它可以把一件事情坚持到底。从商业的角度看,你会发现这并不是一件很赚钱的好生意,它更多的是承载了一代代程序员的情怀和梦想。
另外你会发现这家公司也很正派,从不搞什么歪门邪道、坑蒙拐骗的事情,一直都很奉公守法,本分经营。你可以说它有一点保守、不够激进,但是它是能守住一些底线,经营上属于比较本分正直,老老实实做自己专注的、喜欢的事情,特别是技术上的事情。这家公司的确有它的这些优点,所以从金山离开了一段时间又重新回来的人非常多。
InfoQ:今年 7 月 27 日珠海金山办公技术开放日直播的时候,评论区有人说您现在的演讲能力“爆棚”,但是以前性格比较腼腆,是这样的吗?
姚冬:是的,因为我在高中的时候就属于被老师叫到讲台上说个话腿都哆嗦的那种,这个(演讲能力)是在职业生涯里慢慢练出来的,尤其是在金山的时间。这里很注重内部员工的能力培养,除了专业能力以外,也会注重培养其他能力,比如说演讲。我记得当时在北京的时候,我就是一普通程序员,但我是有机会代表部门去做季度总结的,那时一个部门二三十人,就让一个普通工程师代表部门去做季度总结会发言。金山就是会干这样的事情,给你机会让你在很多人面前去表达去演讲,当然紧张是紧张,站在台上底下坐着五六十人,大部分人职位比我高,肯定是紧张,但是这种事干多了慢慢就练出来了。
InfoQ:您曾经提到过自己“每过几年就换一个技术方向”,能否跟我们分享下您每一次都是如何选择技术方向的?都是在什么样的情况下做转换?
姚冬:如果把时间线拉回到过去,要说在那个时间点上我是怎么选择的,有一部分其实是运气,或者说命运的推动。碰巧在某个时间,来了个机会,有朋友找你,或者说是有些什么变化导致了现在这个结果。如果说有什么深思熟虑倒也称不上,但是过后我有总结,发现成功的和不成功的转型到底是为什么?人总是这样子,也许当时没想那么多,但是过后还是要做总结,作为未来的一些经验教训。
后来我自己总结了下,现在大概是这样思考的,职业生涯大概由四个基本要素组成,第一种是理论基础知识,比如说你懂数学、懂物理、懂化学、懂生物或历史文学,这些叫基础理论知识。第二种是工程能力,对程序员来说就是语言、框架、操作系统、工具等等。第三是面对的产品和客户,就是你做什么样的产品,面向什么样的客户群。比如你说做社交、做电商、做游戏,包括 WPS 做办公,始终是什么样的产品就面对什么样的用户群。第四个要素是团队和所在的企业,除非是纯单干,否则我们都一定有团队,有合作伙伴,有企业。
这四个要素在转型的时候不要同时换,我很庆幸自己过去从来不同时换,最多换两个,就要么换基础知识,要么换工具,要不换工程能力,要不换产品、用户方向,要不换团队、换公司,反正这四个因素不能同时换,同时换风险太大,我总结我过去的有些成功的一些转型都是换其中一到两个。
InfoQ:所以不能把所有这些要素都换到自己不熟悉的陌生境地。
姚冬:太冒险,比如我从 YY 语音出来回到金山办公,对我来说团队等于没换,因为这是我熟悉的地方、熟悉的人和团队。我的基础理论知识也没有换,不管做 AI 还是做音视频处理,它的基础还是数学、算法、计算机组成原理、线性代数这些东西,基础理论还是计算机和数学那套。工程能力换了一部分,比如框架可能从音视频处理框架换成了深度学习、机器学习,Python 用得比较多,但 C++还有。
产品和用户群也的确是换了,原来是做娱乐软件和语音通讯的工具,现在变成做办公软件,做 AI 类的产品,产品方向换了。这种转型风险相对可控,所以我过去总结要是想换得比较顺畅,或者说成功概率高,四个要素不要同时变,只变其中一到两个。
用成熟的工程技术和基础知识跟熟悉的团队做个新产品,这个是风险比较小的;或者把现有的产品用新技术重新改进,这个也是风险比较小的;或者做原来的产品,原来的技术,但是换家公司,换个团队,这个风险也是比较小的,总之这些东西不要同时更换。
InfoQ:您回到金山办公是 2017 年左右,那阵子技术浪潮很多,选择也很多,您是因什么机缘巧合回到金山办公的?
姚冬:我原来做 YY 语音,在 YY 做了 7 年,刚开始负责它的客户端,后来负责音视频算法部分,感觉 7 年也差不多可以告一段落,而且 YY 已经是一个比较成熟的业务。所以也要给自己找一些新的方向,去找一些新的挑战,这时候正好机缘巧合,金山办公这边也想投入 AI。因为 2016、2017 年那会正是 AI 最热的时候,对各个企业来说,都会在这个领域去投入,看看用 AI 的技术有没有可能改善他们自身的业务,正好也有这么一个岗位,简单聊了一下就一拍即合。
金山办公在 AI 技术上的探索和应用
InfoQ:您回到金山办公之后负责 Al 这块,可以简单谈谈您现在的工作吗?
姚冬:我在金山办公主要是在组建 AI 的研发团队,包括算法、工程、产品,现在团队算是有一定的规模,而且有些产品和工程已经落地了。我现在做几件事情,一是推动算法改进,就是已经落地的一些产品,包括一些新的算法的改进。第二推动工程落地,就是算法、工程、技术这些,它是一定要落地到一个具体的产品和业务里的,要服务真正的客户,所以说要推动算法工程的落地。第三件事情就是关于发掘未来的两样东西,一个是优秀的人才,培养未来的有潜质的人才,人才梯队建设,还有一个就是挖掘未来的产品、技术和业务的新方向。
InfoQ:最开始对于如何将 AI 应用到办公软件,有没有哪些头绪或者想法?
姚冬:这个我当时也大概花了几个月去摸索技术领域的一些东西,包括现有的一些算法、理论、工程,然后我当时给自己定了一个原则和方向,今天还是这个原则:既然我们做办公软件,那么我们处理最多的数据就是文本数据,就是文字,WPS 这三个字的缩写,当年就叫“Word Processing System”,翻译过来就是字处理系统,我们 30 年来主要是跟文字打交道。当然现在 WPS 的组建很丰富了,包括演示、表格、图片、视频、海报、思维导图等等,但至今文字还是非常重要的部分,所以我给自己定了一个方向就是处理文字。
那么人类处理文字主要是几个事情,是“听、说、读、写”。对于机器来说,它处理文字大概也是这四件事情:“听”就是语音识别,说就是语音合成,叫 TTS(Text To Speech);“读”就是自然语言理解,如果这个字是印在一张纸上,你要先做 OCR、做扫描识别,如果这个字是英文或者其他语言,你听不懂,那么就先做机器翻译;还有自然语言生成,自然语言生成就是辅助写作,问答都属于自然语言生成。
人类做对于文字主要是做四件事——听说读写,我做 AI 也是瞄着这四个方向,怎么处理文字的听说读写,并且把这四个能力应用到办公场景去,跟我们的主产品 WPS 去结合。
比如说我们做了字符识别。那怎么样识别?扫描件或照片里的文字,我们可以把它读出来,提取出来。比如说我们做机器翻译,各国文字都可以把它翻译成中文,或者把中文翻译成外文。除此以外,我们也做各种自动美化、排版、检测识别功能,还做辅助写作,也做搜索,知识图谱......总之都是围绕着文字去做的事情。我不做人脸识别,是因为我们不是做人脸识别的公司,也不做自动驾驶,那些跟字没什么关系。
InfoQ:金山办公做 AI 和其他公司有什么不同?要用几个形容词来形容的话您会选择什么?
姚冬:金山办公还是一个比较务实的公司,它是做什么技术都会考虑工程化、怎么落地,这是几十年来一贯的风格。公司从创始人开始就是做工程的,就是要做实实在在的产品,求总(求伯君)、雷总(雷军)也好,他们都不是学术圈出来的,他们是工程背景,都很在乎工程要落地,要服务客户,要变成产品。所以我们一向都是工程主导,无论做什么事情,都想着怎么把它落地,怎么变成一个功能、变成一个业务、变成一个产品,变成用户能用到的东西。
InfoQ:两个月前金山办公发布了 AI 深度学习推理框架KSAI-lite并开源出来,能否跟我们介绍下这个项目,以及您对它后续发展的期望。
姚冬:WPS 这个产品由于它的特性,是和很多产品不一样,可能中国跨平台跨的最多的产品就是 WPS,PC、IOS 和安卓都有,在浏览器里它有 Web Office,PC 上它支持 Mac、Linux、Windows,它可以在 X86 芯片上跑,它也可以在 ARM 芯片上跑,它甚至支持龙芯,它几乎支持所有的终端设备。
如此一来就给它带来一个问题:它如何做 AI 推理和算法的框架?
那这框架必须也支持所有的设备,所有的操作系统,所有的指令集的排列组合,这就是 WPS 一个非常特别的地方。你看别的产品,哪怕是一些大的企业,它的产品也不是跨所有平台,但是 WPS 就是这样的,你可以在所有你能想到的终端上看到 WPS。所以它的 AI 推理框架也必须支持所有的操作系统和所有的平台指令,那这件事只能说由我们自己来做。当然,我们不是从头做的,我们也是拿业界的开源框架,在上面去做移植、做优化。因为不同的指令集总是要做适配,不同操作系统要做一些针对性的优化,所以我们希望把这些成果开放出来,如果有其他的公司的企业产品业务也遇到这样的问题,可以考虑使用我们这套解决方案。
目前我们把 OCR 能力、文本校对的能力移植过来了,争取把机器翻译也移植上去,这样它就可以让这些 AI 深度学习算法在所有的终端上都能跑起来。
顺便说一下,我们为什么要让这些算法在终端上跑起来?这些算法在服务端的 GPU 上跑是没有问题的,为什么要在终端跑?是因为我们用户群体很大,有各种复杂的场景。比如说:有的场景可能网速很慢,甚至有很多办公场景是不联网的,或者政府和一些保密机构、大企业的核心部门是不联外网的,它希望能做本地处理,但是它需要这种能力怎么办?我们就能提供相应的解决方案。
程序员的发展路径
InfoQ:前面咱们聊了您的一些经历和当前在做的一些事情,接下来想请您聊几个“老生常谈”但又备受关注的问题,我们今天的栏目标题是“在中国,能一辈子做程序员吗”,从您目前接触和观察到的情况来看,您会如何回答这个问题?
姚冬:哈哈,下边就开始知乎式的“一本正经胡说八道”时间,首先在中国不能一辈子做程序员,这句话是符合科学的,因为它有可证的一些情况。但要是说能,那么只要我找出一个人能做一辈子不就可以了吗?肯定有人做了一辈子程序员一直做到退休,比如说我们公司就有程序员退休,他就一直做到退休。
不是说非得等到 60 岁退休,可能觉得差不多了,钱也够了,就可以了。所以说肯定有人可以做,把它当成一个终身职业。但是我们真正要讨论的问题是你有多大概率把它当成一个终身职业,可能性是多少?它既不是绝对能,也不是绝对不能,它只是一种可能性。目前看起来程序员和其他职业没什么特别的区别,也不是所有职业都能做一辈子,任何职业也不能给打包票说,这个职业可以是做到退休,这可能性也不大,它总有一些竞争淘汰或者主动退出的情况,总有些变故。
目前看起来,程序员这行只要你想,只要你愿意,然后选对了一些方向,有合适的环境,基本上可以做下去,没什么问题。金山办公这边有很多程序员已经做了很多年,比如说目前在职的,据我所知,年纪最大的人应该是 90 年入职,30 年了,今年 50 多岁,他还是在最一线的地方做程序员,默默写程序。
InfoQ:像您刚说也是概率问题,如果要能做一辈子程序员,他可能需要具备哪些条件?
姚冬:首先得热爱这事,因为你不喜欢就肯定不愿意干,谁愿意一辈子干自己不喜欢的事情。第二,你选择的这个领域必须相当长寿,就不能做那种一两年就挂掉的项目。如果想做一辈子程序员真的可以考虑一下金山办公,我们家项目寿命特别长,可能你退休了它还在呢,像我们今天的 WPS 产品已经是被翻新了四代,最新的这代,所谓最新其实也已经 18 年了,并且目前看起来势头依然很好,短期内可能十年二十年也不会死,因为办公软件这种产品,它的产品特性就决定了是长期的项目,微软 Office 做了快 40 年,它是 80 年代末开始做的。
InfoQ:所以也要选对行业跟公司?
姚冬:岁数大了的确是对这个方向是有要求的,你不能做那些特别短平快的东西。要有一些沉淀,有积累,有传承,能长期发展的一些事情。
InfoQ:不知道从什么时候起,35 岁变成了一个很“残酷”的年龄。能否跟我们聊聊,在您眼中,IT 圈 35 岁“年龄歧视”的真相是什么,是否真的那么残酷?
姚冬:我有一种思考方式,它是这样的:我们通过学习掌握了一些知识,掌握了一些技能,随着时间的推移,你不停地学习,你的知识和技能也会随着时间增长。但是,当你掌握了大量知识和技能的同时,你的知识和技能也在被遗忘,被“过期”。它总归在某个时间点上达到一个动态平衡,你学了多少东西,也忘掉了相应的东西,你的知识的技能的总量基本恒定,是不是可以这么说?总会有这么一个平衡点。
而对绝大多数人来说,这个平衡点大概就在 35 岁左右。你会发现所有做技术的人,他可能都在 35 岁左右迎来一个知识和技能的平台期,就知识和技能感觉没有太大的变化,或者增长放缓。不像年轻的时候,每年都学会很多新东西,也都掌握了很多新能力。只是这个时间有人来的早,有人来的晚而已,这是 35 岁焦虑的一个根源。对于很多人来说,他在 35 岁左右的时候,他的知识技能总量不再快速增长,因为他每年学了一些新东西,由于他脑子里装了大量的知识和技能,他会忘掉一些东西,有的是你主动自己忘掉的,还有一些是因为技术进步,总有一些东西会过期。比如说我是个很好的 Pascal 程序员,我 Pascal 写得很好,但是 Pascal 已经没有了。我还是个很好的塞班程序员,但诺基亚手机没有了,今天塞班也式微了,这些技能我没有忘,但是它自己消失了,它过期了。这个行业都会有些技术慢慢地消退,你在这上面的所有的知识和经验的积累也就都失效了。技术都有自己的半衰期,有的半衰期会很长,有的很短。
我有一点建议,我们能不能去学一些半衰期比较长的技术和能力?什么是半衰期比较长?线性代数、数学,数学半衰期特别长,可能几万年都不会过期,甚至有些数学是基本的定律类的东西,它可能永远不会过期,它的持续时间就会非常长。比如我最擅长的语言 C 和 C++,这个语言的半衰期就非常长,到现在也没有过期,它可能长达 50 年 60 年。所以说把自己更多的精力,时间去用来学习和掌握那些半衰期相对比较长的技术,可能就可以延长自己的职业生命。
InfoQ:留言区有人提到,他说前端程序员肯定不能做一辈子。
姚冬:前端就属于那种变得比较快的,但是你没必要非把自己限制在前端,我以前是做客户端的,客户端也可以认为就是当年的前端,而我可以选择不做客户端,我可以做点别的,我可以去做其他的行业,因为反正基础知识是一回事,工程技术是另一回事。基础知识是计算机科学、数学、算法、数据结构、计算机组成原理、编译原理、操作系统原理等等,这些东西都是基础知识基础理论,而前端、UI 框架这些是工程技术,选择哪个平台也只不过是工程技术,还是属于工具。工程技术是可以换的,基础技术又不会过期,无论你选什么语言,还不是算法、数据、结构那套。
InfoQ:还是要更讲究底层的理论基础知识这一块的东西是吗?
姚冬:基础理论的半衰期非常长。我以前有一个不是非常严谨、简单的算法,度量一下你离最终用户有多远。什么叫离最终用户有多远?就是你今天写一段代码,实现了一段程序,做了一个东西,你就算一下最终用户用到你的程序的时候要等多长时间。这时间越长,这个技术的半衰期就越长。那些做操作系统的人,他可能要做个一两年之后你才能拿到它的操作系统内核的新版本,比如做 Linux Kernel 的人,Windows Kernel 的人,他的代码可能要几年以后才会交付到用户手里,那些做基础理论的人就更厉害了,做科研的,做基础理论,他的东西可能几十年之后才会真的用上。
InfoQ:留言区有提问,程序员的路径不一定只有技术这一块,该做管理吗?什么时候转管理,以及怎么去做,这个应该怎么去做判断?
姚冬:我觉得是这样子,大家不要把职业的选择路径变得那么窄,好像这世上只有程序员和管理两个职位一样,还有产品、运营、销售、人事、行政,比如说人事,我们有程序员转型做 HRBP 的,去做人事的事情,做行政、市场、销售都有。职场选择是很宽泛的,不只有管理这条路。
我对管理的态度是这样的:可以不做管理职位,但是不能没有管理能力。管理能力和管理岗位是两回事。有些人可以不做管理岗位,不做部门经理,不做总监,但是我建议程序员们还是要锻炼自己的管理能力。刚开始的时候你做工程师,你的问题可以通过技术手段去解决,但是随着年龄增长,你的项目变得复杂,你的业务变得复杂之后,你以后想解决一些技术问题就必须用管理手段,动用一些管理手段去解决技术问题。
举个例子,假设有个技术问题,它的工作量很大,但这世上不是什么问题都可以用一个巧妙算法来解决,有的事情就需要很多人,然后分工协作把这件事解决掉,技术圈里有很多需要消耗大量工作量的事情,这时候就需要动用管理能力,有的时候有十人二十人,你能不能让他们分工协作,彼此配合好来解决这个技术问题。所以即使是解决一个技术问题,也是需要管理能力,尤其一些需要很多人配合的技术问题。
接下来我们说,你应该至少精通某一个领域,在配合的时候,你就会是一个非常容易和别的团队进行合作的人,你的机会自然就会很多,因为你有一项特别强的能力,还有很多项虽然没那么强、但也基本懂的能力,当一个团队需要什么的时候,你有更大的概率可以去跟这个团队去协作。这样其实拓宽了自己职业上的很多选择,而且你参与的项目也比较容易成功,因为这个团队不会有短板。所以说对于程序员来说是一专多能,或 N 专多能是最好的,就是有那么一两项非常深入,同时又是涉猎很广,各种东西都会一点,这其实是最好的状态。
InfoQ:还有观众提问,为什么现在招合适的技术人才那么难?有没有一些可以解决的方法?
姚冬:这个也是我的痛苦,招合适的人的确变得越来越难。原因很简单,优秀的工程师一定是越来越多,因为我们教育水平在上升。大学每年在扩招,学校教知识也肯定是越教越好,互联网上的各种信息资讯也很发达,这自学也变得容易,理论上讲优秀的人才应该是越来越多的,人才也不会因为资源的限制而导致无法学习编程。但是,同样地,从业人员也变多了,我以前的看法就是优秀的人才从数目看绝对是变多了,但是在人群中的比例下降了。所以说找人才难在优秀人才在群体中的比例下降了,招聘优秀人才的难度的确是比以前高了。
别的公司我不太清楚,我们公司的解决方法一方面是跟优秀的高校去合作。另外我们公司也办各种各样的编程培训班,技术培训班,我们的工程师会去培训一些技术能力,从中去选拔一些优秀的人。优秀的人有两种,一种是挑选出来的,还有一种是培养出来的。金山办公的理念一向更倾向于自己去培养人。
业界普遍的方式还有简历海选,朋友推荐,以及打造个人的影响力。比如说做个开源的项目,在 GitHub 上有很多星,这时候简历啥都不用写,你把 GitHub 链接放上去就行。真的是这样子,我看有些同学的简历杂七杂八写那么多东西,自己精通这个、精通那个,做过各种项目,还不如把 GitHub 链接和截图放上去更好使。
我也面试过这样的人,他附了一个 GitHub 上的链接,我真的会去看他的代码,看他的提交记录,看他的注释,代码风格,甚至如果能编译的话,我会拿一些来编译,运行一下看看。这个就很好使,当然这时候,我根本不看你哪个学校,哪个专业,什么学历,就用程序员的代码说话。还有一种途径就是做出个人作品,可能不是开源代码,但是你有一个程序,有一个作品,有一个小工具软件,这个也可以。反正别人能通过一些其他方法对你的技术能力有一个评估,这就可以。
InfoQ:最后一个问题,有观众提问,如果架构设计足够好,那么大部分参与项目的程序员就只需要做很基础、很简单的工作,因此有经验的程序员可以由若干个年轻的程序员取代,您怎么看待这个问题?
姚冬:我的思路是这样子,架构好这件事它是有时间线的,不可能一个架构可以永远持续,它终究有不好的那天,要推翻重写的那天,总会有。因为架构会随着时间的推移,随着需求和环境的变化而变,一个非常好的架构可能过一段时间看起来就是个非常糟糕的架构,这个是常有的事,在技术圈这是非常常见的事情。
比如说以前很典型的,为一些嵌入式的小设备设计了一些很紧凑的软件,到后来随着算力,随着资源的增长,它反而显得不合适了,这是常有的事情。
另外很多系统难度还受规模因素的影响。随着系统的规模变大之后,难度也会上升,比如说 WPS,有五千万行代码,一行行看都不知道看到什么时候去,所以它的难度是越来越高的。
所以说不存在“一个企业良好的架构会永永远远都只用程序员干很简单的事情,就可以持续地维护下去”这种说法。