欢迎大家点击左下角“阅读原文”到原帖与作者交流讨论哦!
题记从年申请出国留学就开始潜水地里,8年的人生N次Z字形大转,每次都收获满满,却一直没有落到笔头,算起来实在欠了地里很多。这次借着从SDE功成身退的机会趁热打铁写写自己做程序员期间打怪升级的故事,一来回馈地里,二来若是能给后人一些启发和激励,也不枉费我作为前浪这一番折腾。
背景?06--10年国内某航空院校航空相关本科专业CS零相关!4年唯一学过的编程课是大一1学期的C语言
?10--12年国内1年半某小破私企弱电工程师工作经验。继续CS零相关!曾试图自学Java,结果连Environment都setup不起来的那种,自学不了了之。
?12年转专业申到top20的学校,EngineeringManagement的Master,继续CS零相关。
?在校第二个学期开始,出于兴趣自己强转CS,修了本科CS的四门课:DataStructure,Algorithm,Database,OOSoftwareDevelopment(真的只学了这四门课…)
?刷了大约80道Leetcode(那还是leedcode只有道题的纯真年代)
?14年毕业前拿到某老牌美企的程序员offer,SDE事业起航。
?16年跳槽Amazon。FireTv组直接给的SDEII。在同一个组一干四年。从绝对吊车尾、被组内大牛各种鄙视嫌弃、医生一度诊断我为重度焦虑,到四年后在组内做到顶梁柱,独当一面
?年现状:现任老板在积极为我办升职,原打算明年Q1给我升SDEIII并已得到了SeniorManager们多多少少的点头。形势一片大好之时,我决定平级跳去另外一个org做SA(SolutionArchitectII)。面新组的过程对现任老板完全透明,于是我拿offer之前那一个月每次1:1他都在使尽浑身解术留我,动之以礼晓之以情,最后还祭出skipmanager和skipskipmanager(我们很熟,后文会提)直接当面聊,表示我要不想编码他们可以组内帮我划出个不编码的职位让我做嘛……感动的稀里哗啦,然而十动然拒。最近刚签了新岗的offer,预计10月份正式结束程序员的旅程,去新组开启SA新篇章——嗯,我的三观嘛,升职加薪都是浮云,人生啊,还是开心的做自己此刻想做的事,最重要了。
这篇的重点,就讲讲年到年我在Amazon的大牛组做小小SDEII,从挣扎生存,到成长,到挑大梁的经历。希望给如我一样非大牛的小伙伴们、尤其是因为转专业受尽折磨、怀疑自己怀疑人生的孩纸们,一些启示和希望。
后续文章如果大家有兴趣,我会写写这次转SA的传奇经历。以及入职SA后如果有感悟也会单开贴写吧。希望自己种下的树苗,可以让后来者乘乘凉。
AmazonSDEII历险记开局我在Amazon的开局烂到不能再烂。给你们一些DataPoint让你们看看刚进亚麻时挫到人神共愤的我:
?上个公司的工作强度接近于0(老牌美国企业嘛,每天11点开始工作,中午吃2小时饭,下午4点半去公司Gym,6点下班回家吃喝玩乐)对比一下Amazon的工作强度,大家自行脑补天堂地狱的反差
?在那么一个酱油公司,我也才干了不到两年,底子潮的一逼。至今不明白Amazon当年是看上了我哪儿,四轮面下来,居然手一抖就敢给我发SDEII(而且我TM还真敢接了……无语)
?我一个非CS出身、接触Java总共不过3年、正式工作经历不足2年、接触Android总计不过1年的小白,直接被扔进了一帮在亚麻平均工作了5年、全都是SDEII和III的智商超人的大牛组里(俺们组当年压根没有SDEI……并且这个组的人真的都超牛逼),每天遭受各种碾压和暴击
?技术方面,刚进组的我Unittest都写不熟,Agile开发流程只有听闻从来没有实践,OODesign仅限纸上谈兵,稍大点的Component都没怎么写过,多线程和操作系统更是不咋懂各种抓瞎……所以真的,我一点也不怪那些曾经看不起我的人
地狱难度的开局,坦诚写出来,一是已经时过境迁了,二是想给大家鼓鼓劲儿,我那么菜鸡都能咬牙撑到海阔天空,你们也可以的。.From1point3acresbbs
P.S.当然,别用我当年的标准要求你现在的自己……现在IT竞争的惨烈程度不可同日而语,以我这四年在亚麻做面试官面近百人的经验,再没见过比我更挫的拿过SDEIIoffer的选手。
僵局于是进来就悲剧了。
第一年一直在疲于奔命的疯狂学各种东西,只是为了跟上节奏,生存下去。
从头开始补Android、学多线程、学CodeDesign、学写unittest,轮做scrummaster,出于任务需要也硬着头皮去和其他组谈需求谈预期……
每天都自己默默干到晚上8点半9点的才从公司离开,skip过不知道多少顿晚饭,回了家也会继续读组内代码到11点12点;周末会至少有一天加班,还曾经在公车上当场掏出电脑实践自己的想法。两年时间,我连做梦都是这个code还有哪些地方可以提高……
是不是在盼着神转折?可惜生活没有日漫的中二啊,我也没有主角光环的命,一夜之间学会什么盖世神功。
就这么干着,我依然很挫。技术上的东西差太多,别人本科4年+之后N年的基础知识+实践经验岂是我一两年不吃不喝就补的上的?于是第一个独立完成的中型feature,我一个cr写了5页之多,完全没有design可言。组里那个最好心的senior帮我整整review了两天,70多条评论,我改了13版,最后submit出去结果出现了多线程的bug根本不work,我又花了一周的时间自己默默debug,然后再两周推倒全部重写,各种绝望到想自尽……第二个feature稍微简单一些,但多次当初想好的design最后发现有根本的问题需要推倒重来,又是磕磕绊绊做了小一个月。当scrummaster,也都是各种摸不着头脑疲于应付,根本谈不上在流程层面为这个组做些什么优化…而且当年的我作为自卑小人脸皮还超薄,很多东西不懂也不敢问,间接导致到第三年我还偶尔会发现一些本来应该刚进组问问就知道的Tools我居然不知道(SDE反面典型就是头两年的我了!)
极为庆幸的是,这真的是个绝世好组啊(唯一的缺陷是节奏有点快工作压力有点大,因为都是牛人嘛……但我们Sev2几乎没有!为我们组打call!):组本身发展迅猛,高visibility,一直极度缺人所以从来不pip;当年的manager能力超强却超耐心,看出来我不qualify但够努力所以愿意等我慢慢成长为SDEII(现在他是我的skipskipmanager,正在往Director的level上高歌猛进,超级牛逼);组里的其中一个senior人特别好一直带我(现在这哥们是我的skipmanager了,也超级牛逼)。另一个senior虽然对我很刻薄(当着我的面说过Amazon怎么招SDEII有时候这么没底线),但涉及到技术问题时依然有问必答,倾囊而授,不厌其烦的给我讲细节补漏洞…于是赶鸭子上架的我也一直在尽我最大努力跟着做。轮不到自己挑任务,轮不到组内话语权,这期间我的主题都只是:活着。
至此,给对自己专业能力不自信、或刚入职场的朋友们的一些Tips:
1:别被网上那些鸡血文骗了。如果你底子不够厚,靠短期内努力期望弯道超车是不可能的。和牛逼的人一起共事,你的努力只能保持不被落得更远,要想慢慢缩短差距,你要有把命押在桌子上拼的觉悟,并且有做持久战的心理准备:技术上的差距不是一朝一夕能够补上的。而且在某些方面可能相当长时间都补不上。比如,即使是到现在,我也没有自信说我是个全方位合格的SDE——systemdesign仍然挫到一逼啊,Cloud那边继续屁点不懂……但要时刻给自己打气:努力不会白费,眼光要放长远。
2:刚开始进组的打杂期是难免的,但当你了解组里任务大致的组成之后,最好能够有针对性的选focus于一两个方向的task,慢慢积累成domainexpert。当有一天别人碰到这类问题都跑来问你,你就知道自己修成正果了。我的打杂期因为个人原因所以相当的长(前2年都是survivalmode)但机缘巧合、也是经过时间的打磨,成了对组内Data和UIlayer业务逻辑最懂的人,也有一两个自己的domain。所以虽然CS基础涉猎不广,但这个组所涉及的各种detail我了熟于心。所谓术业有专攻,每个组对每个人都会有其定位,就算专业知识上有短板,但长于组内特有的业务需求,也是可以有生存空间的
3:刚进组一定要厚着脸皮问问题!各种二逼问题问个够!因为再没有什么比刚进组那半年一年更适合问二逼问题了。我当年很多事都是因为一开始脸皮薄不想问(也搭上我当年实力实在差太远,无从问起),于是只能自己在表面上照猫画虎。对深层的技术逻辑没吃透的后果,是等真正要用上来还得狗急跳墙现学。而且最关键的是,有些技术只有在你了解了深层逻辑之后,才能对新问题提出创新的解法。所以发现不懂的一定不要怕,要敢问;碰到问题一定不要懒,要深究!有能力举一反三的前提是DiveDeep。
4:问问题一定要记下来,及早建立好个人的知识管理系统。Amazon的各种Tool和技术栈超级无敌多,像我们这样快节奏的组又会同时进行N个不一样的Project,所以不要过分相信自己的脑袋,勤动笔记下来!用Cloud也好、用Note也好、网页收藏分类也好,记在自己习惯的地方,这样自己就只需要记得去哪里找这些信息,不需要记得太多具体细节了。
死局笨小孩的故事还在变得更坏……这么拼完了第一年之后,我身子垮了:整夜整夜睡不着觉,每天脑子昏昏沉沉根本记不住事情,没法集中注意力。听人说话偶尔都觉得远在天边,前一分钟自己说过的做过的事情转瞬就忘;而且一闲下来,就头疼欲裂,一闭眼都是工作里搞不定的问题和对自己这个人的各种否定;生活行尸走肉一般,完全回忆不起来任何快乐的事情;很多个早上都要强迫自己下床去工作;开始越来越频繁的请病假……去医院看病,医生下的诊断,重度焦虑。
但是我硬是没遵医嘱、没吃药……(不推荐效仿!!)
这段时间我实在分享不出什么。我能最后走出来,也完全是运气大于实力:因为自己残存的最后一点骄傲和虚荣心?因为机缘巧合的去参加了10天的冥想课?因为老板后来好心的批了我2个半月无薪假准我去中印旅行浪了两个半月?(我老板自始至终不知道我焦虑症的事儿)因为家人朋友们的默默支持?总之,九死一生,是过来了。
唯一以过来人的身份能建议的是,如果你正在经历我那段时间的焦虑抑郁状态,请去看心理医生!看心理医生!!看心理医生!!!然后为自己争取长期病假(地里有攻略吧?)。身体是革命的本钱。什么工作也不值得毁了自己的健康。
生局但怎么说呢,从在Master硬转CS那时起,我就知道我喜欢编程。被亚麻恶心两年到重度焦虑,我否定掉的也只是自己的能力,而不是自己对IT这个行业的热情。就像我当年面试Amazon时坦言的,编程最吸引我的地方,在于它是种纯逻辑的游戏,不牵扯任何其他。有bug,那一定是自己哪里逻辑有漏洞了。没有模凌两可,没有颠倒黑白。顺着逻辑的严谨找bug,并且凭借逻辑的纯粹来解决实际工程上的问题,真的很美。
于是虽然半死不活,我终于撑到了将死而生的这一刻。
迎来生局是两年后。旅行回来,焦虑症的症状慢慢有所缓解,虽然头疼依旧,但记性和思考能力是在慢慢恢复了。加之组里陆续招进来新人(SDEI/SDEII都有)终于可以让自己积累的经验派上用场:带带新人,为自己找找价值感。新招进来的人里有个从业界经验到技术能力到为人处事都超牛的小姐姐(其实她是SDEIII的实力,结果按照SDEII招进来的。前阵子终于名正言顺的升了),于是我在一旁慢慢的偷师,从她身上真的学了很多。这是我SDE生涯真正的转折点,也让我从一个程序员负面典型慢慢转变为正面典型。在此分享一下我看到并在慢慢实践的职场成长的tips:
SDEII的职场发展Tips:
?埋头完成本职工作之外,要抽空抬起头来看看其他组都在干什么,想想和自己的组有什么交叉的可能性,如果有可能,直接邮件reachout聊一下。记得当时PrimeVideo那边有个什么demo展,我们一帮人本着蹭吃蹭喝的心态过去,小姐姐就敏锐的洞察到了他们某一个demo和我们组的东西的合作可能性。拽着人聊了半天,顺带推销了我们组在做的东西,回来和我们manager聊牵线搭桥的事情。嗯,我也曾经被Ads组的某人reachout过问问技术栈有没有可能实现他的某些想法。我觉得老美这一块脑子真是很活,行动力也超强。
?要对和自己组相关的各种时间线有概念。也许作为程序员你觉得把代码漂亮的交付了就好,项目周期啊releaseschedule啊那是TPM的活儿。但如果想升Senior,眼光看到组外是必备技能。也许AWS那边会不太一样,但Device这边的代码是随着按月甚至按季schedule的AppOTA/SystemOTA而publish。一个OTA的schedule,可能除了你的模块,还会被其他组的东西影响。那么能够在组会上言简意赅的帮本组人update别组的进度,时刻了解各组之间不断变化的block/dependent关系等等,其实能很好的培养自己的跨组思维,也是在变相减轻manager的工作量获得好感。
?要对组里下一步要聚焦的事情有概念。这是1:1很好的话题,有时我会直接问,有时是我Manager会说现在有ABCDE这几个事儿你觉得哪个你感兴趣想做做看呢?这时一定要抓住机会!!这是你发挥主观能动性为自己的职业做规划的最佳时刻!!
?开会一定要发言。这点上国人可能都偏保守……要么担心自己的语言,要么觉得自己不太了解啊先虚心听听多学习一下吧。但实际上,开会多说话一定没错,无论你懂不懂。举两个不同的例子:我们组的小姐姐本身人非常聪明、思路清晰,每每开会提出的问题、作出的总结句句在理,次数多了,她因为正确提问所得到的信息自然多于其他人、而她犀利严谨的思路也给参会的各种senior、manager留下印象,邀请她去开的designmeeting就越来越多,scope就越来越大;组里另个大叔呢,开会时的逻辑思路比较异于常人,有时候脑子会不太绕的过来,经常一说就跑题了……但!是!经常表达自己,他也成功给所有人留下了“有这么一个人”的印象,并且大家都知道他脑洞大思路剑走偏锋,虽然未必能有直接的contribution,但也有很多歪打正着的时候。而且是Hackathonidea的一把好手哈哈,大家也都很喜欢他~
?勤写wiki!大到DesignDoc,小到你自己开发、测试时候的笔记,统统花点时间整理到单独的wiki页面里,事半功倍。勤写文档的好处:一是你不会自己做着做着忘了之前的某些重点,二是你会有一个sourceoftruthforeveryone,别人问你问题,与其长篇大论的解释,不如直接甩过去你的wiki,专业潇洒又高效。三是在别人涉及相关领域时,你可以方便的邀请别人帮你一起维护提升你的文档,何乐不为?四是升职时候的artifect好refer啊。勤写wiki这点我简直不能强调更多了。
?要有能力放松和闲扯。这个也许和Personality有关,如果性格本身不外向、做起来不自然,也没必要强求。只是以我的观察和亲身实践,职场里爱笑(要爽朗!~)绝对是加分项,能不时的开个玩笑蹦个段子更好。大家都是人,如果你能让人心情舒畅,大家自然而然会喜欢。即使语言不如人、讲不出精彩的故事,能够接个下茬做个捧哏也很好——谁不喜欢对自己观点感兴趣的人呢?
?工作之外,待人接物要温暖一点。这个和Personality关系就弱一些了,内向外向都能做。就是,平时吃饭啊聊天啊,可以关心一下别人工作生活中的事情,如果自己有类似的经验/资源/兴趣/讯息,可以提供帮助~或者哪怕是过两天有机会的话follow一下对方生活中某件事情的进展,别人也会很开心——你记得,就是一种关心。
破局真正事业上的突破是第三年。旧的组因为发展迅速,需要剥离出来一个新的sub组专注于特定业务(和第三方对接的业务,此处为我将来转SA提供了伏笔)。我懵懵懂懂的答应了进新组,主要因为新组没人想去,而且自己那时到了一个瓶颈:我那时已经充分意识到自己对于编程没热情了(兴趣爱好变了吧。纯逻辑依然很美,但我对一天到晚只缠斗于逻辑有点厌了。而且组里的东西太熟了啊完全没激情嘛。)。但我也不想当Manager,TPM感觉也不对,所以工作上虽然仍然认真,心态上却很随波逐流。没想到换到新组有意外之喜,新组的老板是我们原来的TPM(人也巨牛逼,在我的第二年他进的Amazon,进来不到一年L5升L6的那种牛逼)很积极很努力也很彪悍,恰好我手里刚开始investigate一个对第三方很有影响力的新feature,于是他马力全开的帮我争取到了这个项目在上边的