沙洲,2008 年毕业于上海交通大学,计算机科学专业。毕业加入微软,从事 Mac Office 开发,一直是个 C++ 程序员。2015年,内转必应广告团队,转为前端开发。2019 年 1 月,离开微软,怀揣着打造中国 Office 的梦想,加入钉钉文档团队,希望能跟一群有情有义的人,共同打造属于中国的最好的在线办公产品。
对于阿里前端,我其实是一个新人。有幸被前端大学邀请,分享成长故事,诚惶诚恐。未满三年,还不算阿里人;对于前端,我也只是半路出家。让我谈前端同学在阿里巴巴的职业发展,我是没有信心的。倒是可以借此机会,分享来自不同视角的观点,希望能对同学有所补益。
先大概介绍一下个人经历。
花名:沙洲
2008 年毕业于上海交通大学,计算机科学专业。毕业加入微软,从事 Mac Office 开发,一直是个 C++ 程序员。2015年,内转必应广告团队,转为前端开发。2019 年 1 月,离开微软,怀揣着打造中国 Office 的梦想,加入钉钉文档团队,希望能跟一群有情有义的人,共同打造属于中国的最好的在线办公产品。
我想跟大家分享的故事,也大概按照时间顺序去讲。
技术栈为今天,学习能力为明天
2008 年,我本科毕业,加入微软。接 Offer 的时候,HR 列了几个部门让“填志愿”。外企的部门都是英文缩写,作为一个乳臭未干的校招生,我对这些部门是做什么的毫无概念,当时就提了一个天真可爱的问题:“我在学校是开源社团的社长,我不喜欢在 Windows 上写程序,微软有不在 Windows 平台开发的团队吗?” HR 小姐姐回复说,有一个团队在做 Mac 上的 Office。于是我作为职业程序员的第一套技术栈就这么草率的决定了。
上班第一天,我问主管,在学校只在 Linux 上写过的程序,没写过 Mac,这没问题吗?得到的答复是:“没关系,我们团队的校招生没有一个学过 Mac 开发的,你们有时间 Ramp up”。
Ramp up,这是我在外企学会的第一个术语,本意是高速公路入口的匝道,在工作中,指新人在上手项目时的学习过程。
这一经历,也奠定了我对技术人才的基本观点。优秀的工程师,不应该拘泥于某个具体的技术栈,而应该是融汇贯通的。后来的工作中,我从 Mac Office,转到 Windows Office,又转到前端,用过的编程语言大概有十多种。自己也从来没有把切换技术栈当作负担。在微软,所有的研发都叫做 Software Engineer,不区分技术栈。只要工作需要,随时上手某个技术,可以在一周之内达到能高质量输出的程度。
2019 年加入钉钉,我才意识到原来在阿里,不同的技术栈,是有非常分明的赛道的。相对于通用型人才,专注于某个技术方向,的确能够让人的工作更加熟练,帮助组织快速拿到业务结果。但对于工程师个人而言,用技术栈为自己贴标签对成长是不利对。技术的成长不在于学会了某个工具,某个库,某个框架,而在于不断提升自己学习的能力。套用一句土话来说,技术栈为今天,学习能力为明天。
那技术方面的学习能力具体是什么呢?我觉得,微软的技术面试标准可做参考:计算机科学基础和编码能力。
计算机科学基础,其实就是大家在学校学习的算法、数据结构、操作系统、编译原理、计算机网络等课程。在日常工作中,这些知识很少被直接使用。但当你在面对新技术,新知识时,这些知识会让你快速的理解背景和方案,毕竟绝大多数的创新,都是现有知识的重组。
而编码能力,更像是一门手艺。程序员是写代码的工匠,编码能力是我们赖以生存的基本技能。给了需求,能够实现,只是入门。设计原则,设计模式,是工具。如何用好这些工具,在编码的过程中顾全性能,可读性,可扩展性,这是需要在编码过程中反复锤炼的。编码能力出众的程序员,能够洞悉业务模型背后的逻辑,技术框架背后的思想,在上帝视角去观察业务和技术,自然学习得更快。
从专业,到职业
外企在大家心目中的印象,好像总是很闲,朝九晚六,从不加班。其实并不是,大部分外企的研发部门是弹性工作制。上下班时间不定,按需调整。
我工作后第一次通宵加班,是因为 Build Break。2008 年,当时 Mac Office 团队刚刚有了持续构建,持续集成的流程。Mac Office 完整构建 + 测试要跑两个多小时,如果每次都等构建测试跑完再提交代码,效率太低。大多数时候,研发同学都是做增量编译,跑最基础的测试就提交代码。这就意味着主干分支的代码是有可能会构建/测试失败的。为了提升团队研发效率,我们配置了几台 Mac Pro,定时从仓库同步代码,做完整构建并测试,这套系统叫 Build Monkey。如果猴子检出问题,就是 Build Break,会持续给全团队发告警邮件。
作为新人,我对 Build Break 是没有太多体感的。毕竟不是线上系统,Break 了,并不直接影响用户。但当第一次自己的提交出现在可能造成 Break 的列表中时,着实还是慌了。
整个 Mac Excel 团队都受到影响,测试跑不过,代码提交不进去,所有人都在回邮件,关心处理的进展。诡异的是,当时的问题还是不稳定复现的,没办法用二分法查出有问题的 change。直到北京的大部分同学都已经回家,问题仍没有定位。我和一个师兄是最有可能的“嫌疑人”,继续留在办公室排查。过了午夜,美国的同事陆续开始上班,询问的邮件又多了起来。当时的心情感觉就像当着老师面写检讨的小学生。
问题最终解决,大概是凌晨四点半。定位到问题的那一刻,完全没有了疲惫,精神亢奋,如释重负。
十几年过去了,这段记忆让我记忆犹新。加班的事情常有,但最让我难忘的,是当时的羞耻感。作为程序员,自己的代码给别人造成了不便,拼尽全力也要把问题解决掉。当时,自己的心情如此,师兄的行动如此,整个团队的氛围更是如此。这件事,我理解了“专业”和“职业”的分别。
专业是一种能力,职业是一种态度。
对于程序员而言,如果你技术很好,写代码很少出 Bug,这叫“专业”。当代码出了 Bug 时,拼尽全力去把问题解决掉,把对别人对影响降到最低,这是“职业”。
对于刚工作的新人,学会“职业”精神很重要。给个需求,写代码实现出来,所有的人都能做到。但多数时候,一位同学能够脱颖而出,被组织委以重任,并不是因为他比别人懂更多的技术,而是因为他对工作表现出的职业精神:对产品有主人翁意识,出现问题能跟进到底,对产品质量精益求精。
把路走宽,把路走远
从 2008 年毕业,我一直在微软 Office 团队。2013 年,内部组织架构调整,我跟着 Mac Excel 项目去了 Redmond 微软总部。在美国工作两年后,我又回到北京,转为前端开发,做必应广告平台。
这次变化的底层动力,源于我对职业发展的一个担忧。在 Office 团队持续做下去,可能会让自己的技能捆绑在一个具体的项目上,看不到,抓不住其他的可能性。
(Mac Office 2011,我入职后全程参与的第一版 Office 产品)
Office 有庞大的工程化团队,从分布式构建系统,到集成测试平台,都是自己开发的。跟 Windows 团队和 VC 团队保持着比较密切的关系。一些资深的 Office 程序员为实现某些需求,甚至会去给 Windows 系统库和 VC 编译器提代码。这种项目很有技术深度,但与之相对的,个人能力与项目深度捆绑。许多在 Office 团队积累的技术经验,在这个团队以外是无法应用的。
在美国工作期间,我一直有这样的担忧,于是利用自己的业余时间去学习 Web 开发,希望能对 Office 以外的技术发展保持敏感。当得知必应广告要在北京成立一支新的前端团队时,我果断选择回国。开拓新的技术领域,把自己的技术路线走得更宽一些。
再下一次的职业生涯转变,是 2018 年,国内的互联网公司纷纷开始投入在线文档产品的开发。腾讯文档,头条飞书,石墨。钉钉也是在这个时候加入战斗。曾经在 Office 团队工作六年,我感到这是我应该投入的战场,做属于中国的最好的在线 Office 产品。加入钉钉文档团队时,我心中所想,是陶行知先生的这番话:
人生天地间,各自有禀赋。为一大事来,做一大事去。
在文档应用上的积累或许是我的禀赋。我花了 4 年时间把路走宽,但人不能一生都在天空中盘旋,需要找准自己的一件“大事”,全情投入,奋力一搏。
把路走宽,把路走远。这两者其实并不矛盾,而是互为表里的硬币两面。在做眼前的项目时,不要忘记抬头看看,自己的技能是否与时俱进,跟得上行业的发展。追求自我提升,不要在具体的技能上迷失,要时常问自己,你不同于别人的“禀赋”是什么,你所追求的“大事”又是什么。
关注「Alibaba F2E」
把握阿里巴巴前端新动向