image.png

沙洲,2008 年毕业于上海交通大学,计算机科学专业。毕业加入微软,从事 Mac Office 开发,一直是个 C++ 程序员。2015年,内转必应广告团队,转为前端开发。2019 年 1 月,离开微软,怀揣着打造中国 Office 的梦想,加入钉钉文档团队,希望能跟一群有情有义的人,共同打造属于中国的最好的在线办公产品。

对于阿里前端,我其实是一个新人。有幸被前端大学邀请,分享成长故事,诚惶诚恐。未满三年,还不算阿里人;对于前端,我也只是半路出家。让我谈前端同学在阿里巴巴的职业发展,我是没有信心的。倒是可以借此机会,分享来自不同视角的观点,希望能对同学有所补益。
先大概介绍一下个人经历。

花名:沙洲

2008 年毕业于上海交通大学,计算机科学专业。毕业加入微软,从事 Mac Office 开发,一直是个 C++ 程序员。2015年,内转必应广告团队,转为前端开发。2019 年 1 月,离开微软,怀揣着打造中国 Office 的梦想,加入钉钉文档团队,希望能跟一群有情有义的人,共同打造属于中国的最好的在线办公产品。
我想跟大家分享的故事,也大概按照时间顺序去讲。

技术栈为今天,学习能力为明天

2008 年,我本科毕业,加入微软。接 Offer 的时候,HR 列了几个部门让“填志愿”。外企的部门都是英文缩写,作为一个乳臭未干的校招生,我对这些部门是做什么的毫无概念,当时就提了一个天真可爱的问题:“我在学校是开源社团的社长,我不喜欢在 Windows 上写程序,微软有不在 Windows 平台开发的团队吗?” HR 小姐姐回复说,有一个团队在做 Mac 上的 Office。于是我作为职业程序员的第一套技术栈就这么草率的决定了。
沙洲:换个视角看前端职业发展 - 图2
上班第一天,我问主管,在学校只在 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,会持续给全团队发告警邮件。
沙洲:换个视角看前端职业发展 - 图3
作为新人,我对 Build Break 是没有太多体感的。毕竟不是线上系统,Break 了,并不直接影响用户。但当第一次自己的提交出现在可能造成 Break 的列表中时,着实还是慌了。
整个 Mac Excel 团队都受到影响,测试跑不过,代码提交不进去,所有人都在回邮件,关心处理的进展。诡异的是,当时的问题还是不稳定复现的,没办法用二分法查出有问题的 change。直到北京的大部分同学都已经回家,问题仍没有定位。我和一个师兄是最有可能的“嫌疑人”,继续留在办公室排查。过了午夜,美国的同事陆续开始上班,询问的邮件又多了起来。当时的心情感觉就像当着老师面写检讨的小学生。
问题最终解决,大概是凌晨四点半。定位到问题的那一刻,完全没有了疲惫,精神亢奋,如释重负。
十几年过去了,这段记忆让我记忆犹新。加班的事情常有,但最让我难忘的,是当时的羞耻感。作为程序员,自己的代码给别人造成了不便,拼尽全力也要把问题解决掉。当时,自己的心情如此,师兄的行动如此,整个团队的氛围更是如此。这件事,我理解了“专业”和“职业”的分别。
专业是一种能力,职业是一种态度。
对于程序员而言,如果你技术很好,写代码很少出 Bug,这叫“专业”。当代码出了 Bug 时,拼尽全力去把问题解决掉,把对别人对影响降到最低,这是“职业”。
对于刚工作的新人,学会“职业”精神很重要。给个需求,写代码实现出来,所有的人都能做到。但多数时候,一位同学能够脱颖而出,被组织委以重任,并不是因为他比别人懂更多的技术,而是因为他对工作表现出的职业精神:对产品有主人翁意识,出现问题能跟进到底,对产品质量精益求精。

把路走宽,把路走远

从 2008 年毕业,我一直在微软 Office 团队。2013 年,内部组织架构调整,我跟着 Mac Excel 项目去了 Redmond 微软总部。在美国工作两年后,我又回到北京,转为前端开发,做必应广告平台。
这次变化的底层动力,源于我对职业发展的一个担忧。在 Office 团队持续做下去,可能会让自己的技能捆绑在一个具体的项目上,看不到,抓不住其他的可能性。
沙洲:换个视角看前端职业发展 - 图4
(Mac Office 2011,我入职后全程参与的第一版 Office 产品)
Office 有庞大的工程化团队,从分布式构建系统,到集成测试平台,都是自己开发的。跟 Windows 团队和 VC 团队保持着比较密切的关系。一些资深的 Office 程序员为实现某些需求,甚至会去给 Windows 系统库和 VC 编译器提代码。这种项目很有技术深度,但与之相对的,个人能力与项目深度捆绑。许多在 Office 团队积累的技术经验,在这个团队以外是无法应用的。
在美国工作期间,我一直有这样的担忧,于是利用自己的业余时间去学习 Web 开发,希望能对 Office 以外的技术发展保持敏感。当得知必应广告要在北京成立一支新的前端团队时,我果断选择回国。开拓新的技术领域,把自己的技术路线走得更宽一些。
再下一次的职业生涯转变,是 2018 年,国内的互联网公司纷纷开始投入在线文档产品的开发。腾讯文档,头条飞书,石墨。钉钉也是在这个时候加入战斗。曾经在 Office 团队工作六年,我感到这是我应该投入的战场,做属于中国的最好的在线 Office 产品。加入钉钉文档团队时,我心中所想,是陶行知先生的这番话:
人生天地间, 各自有禀赋。 为一大事来, 做一大事去。
在文档应用上的积累或许是我的禀赋。我花了 4 年时间把路走宽,但人不能一生都在天空中盘旋,需要找准自己的一件“大事”,全情投入,奋力一搏。
把路走宽,把路走远。这两者其实并不矛盾,而是互为表里的硬币两面。在做眼前的项目时,不要忘记抬头看看,自己的技能是否与时俱进,跟得上行业的发展。追求自我提升,不要在具体的技能上迷失,要时常问自己,你不同于别人的“禀赋”是什么,你所追求的“大事”又是什么。


沙洲:换个视角看前端职业发展 - 图5
关注「Alibaba F2E」
把握阿里巴巴前端新动向