在亚马逊 (Amazon) 公司工作是怎样一番体验?

论坛 期权论坛 期权     
匿名的论坛用户   2020-12-29 23:38   7173   10
分享到 :
0 人收藏

10 个回复

正序浏览
11#
热心的小回应  16级独孤 | 2020-12-29 23:38:20
大家抱怨Amazon的时候,我说点Amazon的好话。
Amazon的开发构架相对很扁平的,这根他本身业务的特点有关系。在你打开Amazon的网站的时候,你屏幕上的那N*M个像素后面,可能是几十个互不相关的team共同完成的。这样的结果就是很多Amazon的team具有start up的特征。limited resources,service owner,full stack, fast iteration.
这中体验其实很难得,比如我们组目前负责的service,全球的Amazon SDE和SE都要用,而实际的设计和开发者只有我们7个人。我们这几个人,从理论验证,构架设计,技术攻关,产品测试,用户反馈一路拼杀过来,基本把一个软件公司跟技术相关的角色都扮演了一遍。这个过程难免有些力不从心,但这个过程的经验和心得也是很宝贵的。


PS:
看到不少过去的,现在的,同事对Oncall咬牙切齿。但你们知道吗,隔壁的微软正在学Amazon的Oncall模式,因为我们在做一件正确的事。传统的软件开发与测试已经无法满足现在web service的一些需求。开发+测试+运维的结构反应速度太慢,必然要走向合并和统一,出现开发者直接oncall的模式。比如说压力测试,Production级的压力本身是不可能模拟的,只能估算。比如LB转到一个instance后的压力会是多少,然后针对一个(几个)instance做压力测试;即使在一个instance上测,也不容易!它可能由几十个组件,高度解耦合,有依赖别的service。今天A类型request多,能handle;明天不知到为什么B类型request jump了,你系统可能就挂了。这些东西又不是运维能处理的,要么半夜把开发的叫起来;要么等明天上班,让系统挂着。
所以,问题不是出在Oncall上,而是待遇。听说Bing的一些SDE在呼吁提高Oncall时的待遇。。。不知到真假,但相比Amazon这深入骨髓的salesman屌丝气,着实是已经寒了开发部门的心。如果说能对oncall的人发点奖金或增加假期,大家的怨言明显会小很多。
10#
热心的小回应  16级独孤 | 2020-12-29 23:38:19
利益相关:亚马逊中国最年轻的MPE——Mechanical Process Engineer(截至到答题时),深圳在职.
声明:以下为个人看法,非亚马逊官方。
解释:亚马逊在2017年6月23日才正式允许我们回答what it’s like to work at Amazon,邮件截图附在文末(有删节 )。也就是说,在外之前的回答都……  括弧笑
以下是正文:
短答案:work hard; have fun; make history. 很多人说你只用记住第一句就好了 ;而我觉得第二句也是对的;当然大家都同意最后一句。
长答案:
我之前关注这个问题的原因是因为接到offer,想来探探口风。然而很失望,没有中国的工程师回答这个问题。将心比心,我相信其实你想关注的是:亚马逊工作怎么样?是否适合我?
关于一份工作具体如何,我想每个人有自己的权重安排。我们不妨就我的思考及在亚马逊的工作经验做个探讨。
1. 公司发展乃至行业发展是向上还是向下?
形势比人强。很明显,亚马逊正在蒸蒸日上。Alexa傲视群雄,kindle无人能敌,AWS一骑绝尘……仅仅2017年上半年,股价从800直升到1000美金每股。
这就是说你在这个公司得到的关注,增加的视野,培养的能力,掌握的技术都是业界领先的,这是一种智力上的满足。(楼上说一年顶七八年,我不敢说,你自己体会就好)退一万步说,即便你转去其他公司,又有谁会觉得你不够资格呢?
2.我未来的同事们,过的是我想要的生活吗?
你想要的只有你自己知道。如果你的同事过不到你想要的生活,你怎么保证你能做到?
我以前在香港的A公司工作,同事们关心的事到达不了第三天,今天谈论去哪吃,明天哪个甜品。很多人甚至连宝能万科的争斗都不知道——不是不关心,而是不知道宝能跟万科是啥,有啥争斗。
到了亚马逊,除了工作的具体技术问题(没错,大家吃饭也讨论这个 ),就是科技的发展,比如谷歌的苹果的智能音箱跟Echo的对比,ofo跟摩拜单车等等,对了,因为公司的产品有kindle,大家也会经常谈读书。另外旅行啊读书会(目前我负责)之类的。
我喜欢这样面向未来的生活,你呢?
3.这家公司的同事 来自哪里?离开后又去了哪里?
这就是你未来的大概率的职业转换的情况。我的同事(同一个项目合作的工程师们)都是业内大牛,在苹果摩托罗拉谷歌facebook等公司之间流动。
这些人大牛到什么程度呢?供应商L的E处理只对一个人开放,因为这个人是他们原先该方面的大老板,对他隐瞒也没什么意义;还有一次我说某供应商存在系统问题(不是工程技术问题)导致我们项目delay,我一个同事接过话说当年他们的管理系统是他参与建立的( 就能这么撞枪口),他以前是这个公司的高管……能跟这些业内大牛一起工作(是一起工作,就是你们在同一时间同一地点面对面做事——工程师下产线进车间,不是遥控指挥),绝对是稀有的机会。能学到的东西也不是仅仅只有工作而已,即便只是工作,系统的专家指导也是大有裨益。“吾尝终日而思矣,不如须臾之所学也。”很简单的道理对不对?
4.我的老板带人能力怎么样?
这个是你直接的工作状态的影响因子。
杰克韦尔奇在《商业的本质》里面提出了领导的关键素质“4E+P” (energy, energize, executive, edge, passion)。就我目前合作的老板们(不止是我自己的老板,因为你遇到的不一定是我的老板嘛)他们都表现的相当好,当然如果你用杰克韦尔奇的“八大原则 ”(略)去检查,你会更加满意。
另外还有一点,就是他们一般说话都是笑呵呵的,不会冲击你的心情。
5.薪酬
略。这个前面人回答过了。给你个参考,我拿到的数字比我在香港A公司拿到的数字大(工资账面收入,如果算结余的话,大约是香港的两倍——毕竟在香港要给“李嘉诚等”付工资的六成左右。)所以,就我个人而已,亚马逊给出的的确是有竞争力的薪酬。
友情提醒:如果你算时薪的话,亚马逊可能就比较低啦。哈哈哈,你可以参考前面人的回答。
6. 企业文化?所有人都知道并清晰的知道吗?
这个在亚马逊官网上就有Amazon's global career site。这个大家都知道,开会时甚至开玩笑时都会拿来说“这个要dive deep” “这是customer obsession”等等。何止清楚,简直是口头禅了好吗。
对了,投简历地址跟上一个链接差不多呦:Amazon's global career site
7. 你都看到这里了,好厉害!额外附赠小礼物一张。公司几乎每天一个问题问你(直接在电脑上弹出的),比如目前觉得最有趣的是下图:


哈哈哈,终于暂时写完了。我相信这样不仅能告诉你工作体验,也能启发你思考如何选一个好工作,比如亚马逊MPE,哈哈哈
对了对了,说好的邮件:我的回答是符合公司要求的呦

9#
热心的小回应  16级独孤 | 2020-12-29 23:38:18
不匿名。就是一点personal anecdote,不能代表整个公司的情况。

这是我的第二份工作,去年从湖对岸的m$跳过来的,因为想做分布式系统。大体上工作还是比较轻松的,跟大学时候相比弱爆了。也就on-call的时候压力略大,不过我们现在的团队人比较多,大概两个月轮到一次。(on-call这个事情真的看组,有人三周一次,有人半年一次。。。

工作内容比较有意思,需要处理很大的数据量,和上一份工作比,真的用到了以前学过的计算机科学知识。因为有节俭这个leadership principle,所以对程序的性能要求高。

亚马逊的工程师文化里面有一项是说operational ownership,就是你的线上服务你要负责(不过我猜这个应该是业界常识,非亚马逊独有)。如果出了问题,就得被page起来看log,不像以前写desktop software,还可以在本地repro然后attach debugger。repro不出来还能跟tester说



相比m$,亚马逊有不少全公司统一的系统,比如code review和wiki啥的,不容易出现每个团队都自己重新造一个轮子来搞知识管理的蛋疼事情。不过福利感觉略差一点,现在失去了免费的pro sports club membership,看着自己渐长的体重真是说多了都是泪。

公司有统一的trouble ticketing系统,很多行政上的事情也要cut ticket。有次周一来上班,发现椅子脚上有狗屎(dog-friendly工作场所之日常:),找来了security,security就给janitor cut ticket。结果janitor一直不出现,我给人打电话,那人说我们已经cut ticket了,只能干等了orz
8#
热心的小回应  16级独孤 | 2020-12-29 23:38:17
有同事看到的话欢迎在内网上人肉我,来Varzea我请你吃bagels

先说oncall,我换过一次组,之前那个组人最少的时候才两个人,所以每隔一周就会轮到一次,后来人员壮大了,三个月轮到一次吧。不过轮到也无所谓,反正我呆了一年也就发生三次事故,只有一次是在八小时之外(早上六点多,我已经起了。打开电脑连上内网的时候。。。印度那边的同事已经搞定了,于是我就关机去吃早饭了)现在的组是做新项目,代码没上线也就不存在oncall的问题了,所以bb机都丢在柜子里积灰。据说aws是真的很苦逼,小年轻可以去拼一下,很锻炼人,长远来看个人觉得不是坏事,有家有室的慎重。

亚马逊的部署系统是自己写的,速度慢了点,如果你记得xkcd那篇因为要等编译闲得无聊在椅子上舞剑打架的漫画的话,我办公室墙上就贴着这么一张。内容改成了等待各种内部系统,比如bounce,bb等。慢虽慢,但据说这套东西在业界算是一流的。码农只要写代码就可以了,完全不用担心部署的问题,不管你要部署多大的系统,有多少机器。有利有弊吧。所以下次我希望换组的时候能去builder tools组。

这也是亚马逊service oriented的文化之一吧。

亚马逊内部的知识管理主要是wiki,wiki有一个很大的问题,那就是内容很容易过期。亚马逊由于坑爹的绿卡政策和贫瘠的福利,人员流动极大,所以很多wiki写了一半就没人管了(我很希望wiki有定时自我销毁的功能,其实应该很简单吧,一个cronjob而已)。

我们私下经常讨论说,人员流动这么大,亚马逊的服务(网站和aws)还能这么稳定。那些principle engineers真不是白拿那么多钱啊。完完全全把底层码农变成可替换资源了。谁来都能干活。或许也正是因为这样,亚马逊根本不怕留不住人吧。

2 pizza team的存在意味着一个组的风格完全是取决于它的老板。每个组差别那么大也是因为这个。我觉得我还挺幸运。顶头上司(一线经理)是那种勇往直前劈荆斩棘的人,大老板(项目带头人)是那种很有想法,敢和vp拍桌子抢项目的人(军队出来的就是不一样,后备箱里全是枪,上午开会遇到sb的话,中午会跑去靶场发泄)。相比之下,有些老板就不怎么样,搞得怨声载道,最后集体辞职也是有的。

亚马逊等级还算扁平,SDE123,然后是principle,senior principle,distinguished engineer。基本上90的码农是SDE1和2吧。3是个门槛,有人呆了好多年都升不上去。一气之下跳到东边微软,直接就给principle,所以两边的principle不是一回事哦。principle engineer在亚马逊好像才0.5%?这样算来也就是小几百人吧。这些人是公司核心了,我的部门压根一个都没有。他们会经常办讲座,可以听到不少干货。有时候principle talks也会请外面的人来,比如今年早些时候请过对岸的Leslie Lamport。广大码农当然争相一睹风采,aws众更是顶礼膜拜。扁平化对我这种玩游戏喜欢升级的人来说好痛苦啊。稍微多几级也好嘛。

我只呆过电商这一边,所以只说电商的情况。aws不清楚。电商这边基本上是由产品汪驱动的,有了什么新的想法,就去让码农实现,然后对比看效果。好就换掉旧的,不好就保留原来的。举个例子,我们曾经要在checkout pipeline里插一个页面(在大家都在简化购物流程的时候,产品汪居然敢往里面加页面,胆子真大),结果证明效果好的出奇。而另一次,我们只是在页面顶端加了一个细细的横幅,就把转化率打掉了20%。客户心,海底针啊。

工作环境嘛,之前在Ruby是景色最好的办公室。(西雅图秋天很不错的,并不会一年四季都下雨)现在也可以看到space needle,不过方向不同。



椅子是hm的,不过我现在换成standing desk了,很少坐。电脑确实慢了点,内存硬盘都不够用。屏幕就一个22inch的,想多要一个的话。。。其实可以等同事离职的时候顺一个过来(这算自黑么)。笔记本可以选thinkpad或是Macbook,内存可以加,换ssd和老板打招呼报销就行了。

亚马逊在开源方面似乎不像湾区那些巨头那么高调,拿来主义比较多,有谁了解亚马逊在回馈开源社区方面做了哪些工作吗?

想到哪里写到哪里,将就着看吧。另外厚颜无耻地打个广告。Steve Yegge这本书里写了不少亚马逊内部的东西哦。

7#
热心的小回应  16级独孤 | 2020-12-29 23:38:16
已经成了亚马逊声讨大会了啊,那我来说说吧

工作不在西雅图总部,而是加州几个分公司中的一个(具体哪个就不说,免得被人肉)

先是吐槽:
1.工作强度
这个要看负责的service的类型,如果是S3和EC2这种一分钟都挂不得的重要的基础性设施,那压力是一般人很难想象的,有去内部wiki上面瞅过s3的oncall流程,两个字,可怕。如果是一些内部使用的不是那么critical的service,那么压力相对要小很多,非繁忙季节即使挂个一两天大家也很随意的,当然这个得看老板.
2.员工福利
不怎么慷慨,虽然好于总部,但是相较于本地的其他互联网公司,比如Facebbok,Linkedin,Google之类的,差距较大。最要命的一点儿:不管饭,要自己掏钱。也没有那么多花样繁多的脑洞大开的perk。不过医保非常不错,这点儿倒是比较放心。
3. 管理比较混乱
这个我觉得不是亚马逊专有的,但是亚马逊在这点上有其独特性。公司有专门的平台查看你的在公司里面的rank,多琢磨琢磨就能发现,相比MS这种内部title盘根错节的公司来说,亚马逊确实是很flat、很nimble的了,不信?你可以去数数自己和Bezos到底是几度关系,有惊喜哟。这种架构在带来灵活性,避免了潜在的官--僚--主义(又要黑微软一把)的同时,也造成各组之间各自为*政,业务切分过细导致互相之间依赖复杂,沟通成本要占到项目时间的一大部分,而且各说各话效率低下。

下面讲点儿好的:
1. 同事都很优秀。
虽然亚马逊待遇相比同类公司不算高,但是bar那是一点儿不低的说,估计这也是为啥一年到头都苦于招人的原因之一。我觉得优秀的工程师之间是能互相辨认的,每当你提一个方案,对方很快就能琢磨出你的动机,并提出相应地意见。对于新人来说,能快速总结经验并且提高。而且虽说木有G还有F那么光鲜,但是手里是真的攒了为数不少的牛人,听他们的talk会真有一种“我给你跪了”的感觉。。。
2. 自由度大
又要说flat这个上面来了,由于组的规模都不大,除开沟通和扯皮成本(通常是和其他组,如果你对于他们的service有依赖的话),工程师对于项目有很大的话语权,基本上可以按照自己的设想来干,从设计、实现到测试,都是一手包办。这种经验在大公司里面应该算是比较难得的了。而且亚马逊的scale和data摆在那里,遇到的很多问题都相当的有挑战性,解决起来非常意思。如果作为积累经验的跳板,我觉得还是很不错的。当然这个估计和人员流动性也有关系,向我就是刚熟悉完业务,马上就被发配去写核心系统了。。。。ORZ

总的来说,亚马逊从很多方面来说都是一个很独特的公司,虽然其中相当多的时候让你很WTF的,但是也确实有令人钦佩的地方。
6#
热心的小回应  16级独孤 | 2020-12-29 23:38:15
Xie Yao.
——-2017.11.25编辑:因为引用英文对话居然引发评论区讨论用词也是意料之外。————
入职三年后回头看这篇回答依然感觉有意思,有时候细节反映整体。经历了转岗,频繁换组,换location,升职,再换组,最初的这个小印象依然如故。
附上答案提到的姐夫的演讲链接:
http://v.youku.com/v_show/id_XNDEzMTMxNzQ4.html?sharefrom=iphone&sharekey=0e4069b6c1b08b1d79186346bef4f3278

——————-以下是原答案————————
直接讲个趣事,管中窥豹吧。

面试几轮都是在外面喝咖啡,面我的这个K君在亚马逊工作多年。几轮聊下来觉得不错,慢慢开始聊到公司文化:
他突然冒出一句:“Have you watched his speech in Princeton, talking about being kind and stuff?"
(暗笑: 幸亏朋友圈好多人分享过,仔细听过,Jeff跟台下数千普校师生讲他童年的故事,他怎么把他奶奶弄哭。然后告诉大家,抖机灵是一种天赋,而善待他人更加重要。。。告诉我们。。要去爱。。要多点赞。。。。。。。。blabla。。。)这下顺便可以跟他多聊聊公司的历史什么的。。
正想着,笑着点了一下头。
他劈头盖脸来了一句:”That's BULLSHIxxT!"
- 这位澳洲长大的胖子顿时面色有点潮红,斜视着看着窗外,眼里仿佛还擎着泪水。。。
然后他说了一句我觉得毕生难忘,高度概括这个丛林公司的话:“Being clever or kind, you only pick one here."
5#
热心的小回应  16级独孤 | 2020-12-29 23:38:14
就自己在Amazon西雅图的工作经历谈谈

亚马逊有一个十分明确的价值观 Customer-Centric
即是鼓励多考虑用户体验 在必要的时候牺牲员工时间 保全顾客利益
管理层开会经常都会讨论如何提高用户体验 减少ticket数量 组里开会这也是经常讨论的问题
作为对比 我以前在微软上班的时候 开会时很少谈用户体验

大部分组都有SDE轮流Oncall 每天携带传呼机 为了用户和集体时刻准备着
在我离职的前一周 周六凌晨三点 由于其他组一次错误的数据清理 欧洲的许多商品都发不了货 于是包括我在内的无数个SDE从睡梦中惊醒 起来解决问题 连续工作近二十个小时
我们成功的把对用户体验的冲击减到了最低 为了达到这个目标 从上游的Service到下游的Infrastructure System都超负荷运转 我们甚至把其他组的Capacity征用过来加快进程 拆东墙补西墙
你得和分布于五大洲四大洋的办公室 卧室里被叫醒的SDE, Manager 还有仓库里的现场经理在电话会议里面你一言我一语 讨论各种方案并执行 再向森罗于欧洲大陆的Amazon仓库一一确认问题已得到解决
有人说这样的工作刺激有趣 有人说这是对用户负责 有人说这是血汗工厂 我觉得都有

再来 亚马逊使用了许多开源软件包
这无疑加大了SDE维护软件的难度
以前在微软上班时 所谓版本升级 多数时候就是切换个.net版本
而在亚马逊 由于开源软件包多如牛毛 且都不是统一管理的
有时我因为安全考量升级了JDK 但我依赖的下游service依然还在使用更低版本的JDK 那么我就得想办法解决版本冲突 并追加相关测试
有时一个第三方软件包的版本要过期了 但你发现新的版本在你的service中无法使用 那你就得想办法排查兼容性问题
诸如此类的问题千奇百怪 层出不穷 大大的分散了SDE的开发注意力 有时一个月的工作被迫全部都用在了migration还有版本升级上 根本没有时间开发新功能
经理告诉我 正是因为这样 我们每年都要招聘无数的SDE 这些问题为我们提供了job security

离题:九篇描述亚马逊员工的日志 http://www.douban.com/doulist/3354820/
fb上流传的关于在amazon的工作感受的文章 "I Do Not Know One Person Who Is Happy at Amazon"

- - - - - - - - 2014年8月19日 修改  - - - - - - - -
得知在我离职以后两月不到 我以前的manager也已离职
至此一个8人的team工龄超过一年的仅剩一名(过去一年一直有离职和引进新人)
4#
热心的小回应  16级独孤 | 2020-12-29 23:38:13
哇靠,刚刚离职一个月,看见这个帖子是无比的激动啊,想想总算找到组织了! 西雅图的码工联合起来干翻亚马逊~ oncall,work life balance大家已经说的很多了,我作为一个小科学家来给跟风从管理和运营方面说一下吧。接楼上:我就是去湖对岸微软去混日子的!每年春节的时候,可以看到微软的人都成家了带着小孩去春节联欢晚会,亚马逊的呢?一群三十多的光棍在oncall。为自己想想吧,少年,改serv2写COE能为您的创业大计添砖加瓦吗?

Update: 答案里面大家问了薪资,股票等问题,在文章最后做了一点点补充。

1) Micro-manage
我们平时看到很多鸡汤文说要干大事抓主干,与之对应的反意词就是micromanage。经常micromanage的人叫做micromanager。亚马逊虽然自己吹嘘自己是互联网科技公司,但是做事和组织结构等方面却和科技公司大相径庭,确切的说,管理的方法和沃尔玛,Target等零售公司差不多,都是等级森严的MBA式管理,从上到下都是micromanager,包括Jeff Bezos 本人。这就导致技术人员对于项目的未来基本上没有任何的控制权,很多搞笑的技术细节就这么产生了。

前面有人提到亚马逊扁平化架构,完全是扯淡,对于某个组来说是扁平的,但是所有东西这里一块那里一块,最后就成了一个复杂度不断增加的网络。而且何种胡扯的架构放一起,越来越复杂,越来越容易出问题,然后为了修补他们更会产生各种更多问题。
举个纯属虚构的例子吧:亚马逊这么大了,Jeff仍然不忘偶尔下来走走看看。突然有一天消费者来信反映:你们家为什么把粉红色的按摩棒和粉红色的童装放一起呢,太不好了!于是Jeff盛怒,把邮件转发给了A9管理推荐引擎的人,并且亲自批示解决方法。这下够A9的人忙一个月了,因为这个推荐引擎已经在那儿跑了三年没有人敢动了,当年做的人,从最低的码工到最高的Director,都已经受不了上面各位提到的问题,离公司而去。。。没办法,要以客户为中心,MBA们还等着表功呢。 问题还没完,Jeff认为:“粉红色的按摩棒的Pink和粉红色的儿童玩具的Pink不应该是一个Pink,机器学习科学家们,你们必须想办法区分两个语义下的Pink,这样我们的搜索引擎就不会因为pink这个相通的关键词来把两个物品放在一起!"

这下好玩了,放在机器学习科学家面前的只有两条路:
  • 真的按照Jeff说的做,这样的话要涉及到更改5年前写的算法,有的用java写的,有的用 C 写的,源代码的comment里面各种"what the f*ck","i quit today. i don't care. screw you" 等东西。最初的架构已经请了好多程序员来维护了,要改,没准整个架构都会崩溃,所以是不可能的了。
  • 不按照Jeff说的做,用其他的办法把问题解决。这样的问题在搜索里面出很多的,在结果产生以后过滤一下其实就能很快解决问题。
各位看官以为机器学习科学家们就会按照第二个办法解决问题了吗?但是。。。 但是这是在亚马逊。。。 不按照Jeff开的药方做事就是不以客户为中心,不以客户为中心就是不愧在亚马逊为人。于是用了第二个办法的机器学习科学家被放在了performance improvement plan里面,三个月之内不“改正”就被开除。那怎么改正呢?当然就是按照Jeff的药方,把东西改好。Good game,小机器学习科学家知道这样安排的第二天,就去谷歌面试,一个月以后就跳槽加入已经跳槽过去的同僚了。
2) 管理层人品有严重问题
现代哈佛斯坦佛出来的MBA都有类似的不安综合征,什么东西都要说data driven,说KPI。可是不幸的是,很多事情并不是说要有好数据好结果就会有的,于是在数据上乱来就成了亚马逊高层必经之路。能帮着老板在数据上作假的人一般都爬的很快,不能帮老板作假的人就只有走的很快了。

在亚马逊内部经常会根数据打交道的有三种人:
  • business intelligence engineer (BIE):任何背景的人都可以,甚至完全没有数量背景的人
  • research scientist (RS):任何背景都可以,最好是博士
  • machine learning scientist (MLS):必须是博士
答主是博士,说这话大概有偏向性,得罪大家实在不好意思,所以就匿名了(靠,刚才想去另外一个答案下面灌水点了不要隐身结果就不能隐身了,晕,好吧)。不过往往大家能看到的现象是:BIE们五马六道比较会乱来,每次手上都能出让老板得意的结果,所以都爬升的特别快。而经过了博士训练需要各种统计检验的科学家们,往往就只能呆在原地永远没有晋升的可能。这些个人的问题就不提了吧,来讲个例子说BIE把整个公司包括Jeff都忽悠了的:
以下故事纯属虚构,如有雷同纯属巧合:亚马逊社交组负责的基本上就是跑到脸书,微薄等地跟消费者搭讪,偶尔发点打折信息什么的。为了测量花这么大的力气搞社交互动有没有效果,社交组的BIE做了这样一个实验:
测量两组消费者之间的购买量差别:一组在脸书上某一时段like了亚马逊,另外一组没有。购买量拿来做方差分析,看看哪边买的多。
聪明的社区大家们看到这里大概都要喷饭了吧,经常用脸书的人群本生就在网购方面比较厉害,这样比怎么都是比出来说脸书上跟亚马逊有互动的人买的多的。
比较有良心的是,做这个AB检验的BIE竟然写了一个报告给众多科学家们看,那个中午那个叫做血雨腥风啊,我后生小辈眼睁睁的看着各个白发苍苍的大研究员们严正警告BIE这个做法是错误的。
结果呢?过了两个月,BIE又被晋升了,Jeff在全公司的大会上说:我们在社交网络上和消费者互动取得了重大进步,和我们互动的消费者购买比不互动的多好多么么哒~~~
3) 内部管理混乱
亚马逊的中间管理层一方面对码工福利非常克扣,对零售和云计算的供应商的回扣可是一点都不会放松的。这种事情说出来,估计就算匿名了明天FBI就找上门了吼吼。

补充:

1) @胡江: 其一,都说亚马逊待遇低,那么怎么还是有人去亚马逊?第二,这次季报出来股价大跌,对Jeff有无影响?

为什么会有人去亚马逊?为什么会有人觉得谷歌特别牛?为什么会有人觉得阿里巴巴很厉害?国内的那套网络宣传攻势都是从美国学的。人生导师们怎么吹的,网络自媒体怎么编的,当然还有亚马逊自己的 PR 团队怎么宣传的,都有很大的作用。对传媒方面我不是特别了解,但是确定的是Jeff Bezos对Washington Post和Business Insider两大媒体都是主要投资人(独立于亚马逊的私人投资)。

对于Jeff影响不好揣测。我自己认为这样:亚马逊以前经营模式是在很低的利润率下面创造价格优势,是靠高效节约来的;现在亚马逊还是利润率很低,是因为有很多赚钱的地方,如零售、云计算,也有很多烧钱的地方,如Fire Phone,Kindle,已经不是节约型公司的运营模式了。要从一个烧钱的坑里面一下跳出来,对于谷歌这种现金流不断的公司来说是很容易的,但是对于亚马逊有没有可能就是一个值得商榷的问题了。

微软裁员了,砍掉了很多不被看好的部门,我个人是看好大方向的。对于亚马逊,如果Jeff意识到了这样的转变,大概也会在深夜想想要不要放弃一些不靠谱的业务吧。当然,如果Jeff等高层领导一直都被人品有问题的中层所蒙蔽而不能意识到这样的问题,那么亚马逊突然某天像雷曼兄弟一样烧断现金流也是一件很容易的事情的。

最后来说说待遇啦,其实待遇在什么水平上看几个东西,从靠谱程度从高到底排列是这样的:
  • base salary: 这个在亚马逊是最靠谱的东西,拿到手里实在的东西。
  • sign-on bonus: 头两年每年两万起步,多少看自己讨价还价。半路走人要按比例退还,所以基本行不靠谱。而且如果您入职之后买了辆豪车,就只能祝您oncall愉快了
  • 股票 (Restricted Stock Unit): 一年以后才可以开始拿,第一次只能拿总量的百分之五,所以如果您得了300股吧,第一年只能拿区区15股,完税以后到手只有9股,按照现在的股价也就两三千块。鉴于大家都走的很快,所以亚马逊的股票可以忽略不计。
  • 401(k):亚马逊会配50%,但是入职三年以后才能拿到,所以可以忽略不计
  • 每年100块亚马逊折扣:我都不好意思给人说
  • 没了
对于钱多不多其实是因人而异的,很多人刚刚毕业,不了解行情,就被忽悠进去,是很可怜的。人生第一份工作起薪低,以后跳来跳去都会比人少。但是也有反例,比如有人有很多个offer,亚马逊的HR可以抬价,给的工资是往往可以把人比下去的,当然,要您有counter offer,还要您非常能砍价。招人方面亚马逊效率非常高,从开始电面到得到offer快的只要两三个星期。而谷歌等公司这个时候大概简历都还没被人看过呢。所以导致很多新近毕业的人去了亚马逊,才会有很多人抱怨薪资太低什么的。
所以大家都学聪明一点,自己对钱的欲望不要有丝毫掩饰,我第一年结束的时候就把老板拉到小黑屋里面说我要升职,不然给我涨工资,结果当然没有涨我狮子大开口要的这么多,不过还是比一般人多一点的,大家试试吧 :)
3#
热心的小回应  16级独孤 | 2020-12-29 23:38:12
大多数东西大家都已经谈过了, 这里稍微聊聊几件事情。 以下纯属个人观点, 不代表亚马逊或亚马逊的立场。
我其实本来是想一直留在学校读书, 然后以后教书的。 来西雅图的亚马逊纯属偶然。
这些年在亚马逊做开发, 感受最深刻的就是学到了很多东西。 回头看刚入职的时候, 当时还真是很多事情都不懂。 所以现在也不敢说自己懂什么。毕竟过个几年再看, 现在还是什么都不懂。 我开始有时候还会以为自己是个工程师、以为做SDE的真的是做software development engineering。
这不是说所有的刚入职的应届生跟我当时一样什么都不懂。 今年遇到一个本科实习生, 对于开发和管理上的见解非常深入, 不比某些SDE III弱。 不知道他怎么领悟的。
最开始工作时我喜欢做些operations方面的苦活。因为当时觉得在西雅图10来万年薪已经很高了。组里大家不想干的活我就多做点才对得起这工资。当时组里同事对这个做法经常表示不解...因为一般当时最好的项目开发的活一般都是给实习生和SDE I做的。 这样可以让这些新人多写code, 在做code review的时候就可以更方便培养他们的设计灵感。 当然这些我当时都不懂。 我当时看我们SDE III一直在干一些又累又没人欣赏的脏活累活, 所以我也干。
那个组做的系统当时并不容易理解。 问题也多。我入组之前据说每晚得手动重启才不会把内存跑没。但是我反正新手, 也不知道问题所在。 我还以为干这行就是这样。
后来做了一年多之后组里做了几次系统重构。 新版本比老版本好懂多了, 也稳定多了, 我才开始感受到什么叫“好系统”。
之后大概有一两年, 做了不少系统设计, 学了很多销售领域相关的知识, 但是并没有抓到要领。 当时也没意识到系统设计最重要的就是要好懂。 那时候做设计主要靠灵感。等到换了组, 遇到了更难懂的系统、更大的设计问题, 才慢慢开始通过读书和找专家咨询来更正式地学习开发和管理。 学习初期犯了很多设计、领导方面的错误。 也没人跟我追究。 这些错误对公司和组造成的伤害我到现在才明白。 但是也没人跟我提过。 有次我跟经理提到这些问题, 经理跟我说:“没有人是通过一直做出正确的选择来学习的。”
这些年也遇到过几个比较普通的经理(虽然我也很喜欢他们, 但是当时不知道好经理是什么), 当时对薪水和职位就看得比较重。 现在遇到了很好的经理, 可以从他那里学到很多开发、管理、以及销售领域相关的知识。 对于薪水和职位就反而看得没那么重了。
即使是很普通的经理, 也都很关注我的成长。 有的给我找mentor, 还有的带我去跟客户和领域方面的专家接触、学习, 带着我建立我自己的职业网络。
我也遇到过两个很差的经理。 一般这种经理都不会很关心手下员工的成长(也有的是没时间管)。 一般这种经理都不会在一个组留太久。 大概几个月到一年半就会被转走。
亚马逊里只要你知道怎么操作, 很多事情可以大胆去做。 其实级别越低,话语权越高。 因为级别低的就算说错了、做错了也是理所当然。 所以想说什么、想做什么, 只要目的是好的, 都可以大胆去尝试。 当然了, 别违法。
接下来谈一下几件大家可能会比较关心的事情。
1. 关于是否应该来亚马逊
如果你不是太缺钱(比如学生债很重之类的), 亚马逊西雅图总部是一个适合职业成长的地方。今年(2018)亚马逊的应届生起薪不比别的类似公司低, 所以如果负债太重, 这类公司可能都不适合你。
不管你是什么专业, 都可以从这里的SDE I做起。 现在亚马逊招的本科生中, 有很多理科非电脑专业的。 我也见过很多文科、医科的, 读个半年的电脑硕士就来亚马逊当SDE实习生的。
个人而言非常喜欢这样的员工。 他们的思维模式往往非常灵活, 可以给公司带来不同的视角。 如果你背景就是电脑, 也很好。 这样上手快, 也就有时间多学一些别的专业的东西。
传统上,亚马逊大多数组会给新SDE I甚至实习生从头到尾的"ownership" (近三年某些部门有一些变化, 之后会提到)。 很多新人会去与客户谈项目、设计系统。一直到最后的购买硬件、发布功能、系统, 都可能是新人在主导的。这个ownership不应该被曲解为加班加点赶活。 只是说这个实习生或者SDE I拥有整个项目最高的话语权。
比如我今年就看到一个组的实习生, 在花了几周与他的客户讨论和深入分析之后, 成功说服他的组员去放弃他的实习生项目。 他的经理之后又花时间跟他一起开始了一个完全不同的项目。 这种自主能力是亚马逊强调的ownership。
这里同时要注意, 自主和自私是不同的!有人来帮着做项目是好事。 如何有效利用他人的帮助, 也是自主能力的一部分。
这种待遇在别的公司会比较少。这也是为什么有工作经验之后, 想面试进亚马逊难度反而会很高。一般工作经验3-5年的人, 面试亚马逊SDE II失败率很高。 因为这个阶段的普通程序员是很少会做项目规划和系统设计的。然而亚马逊的员工有很多从实习生就在做这些。
反之也同理。 我听说过不少起亚马逊SDE II跳槽到微软当Principal Engineer的事情。
当然并不是所有组都是这么好。 这点之后会详细讨论。
2. 关于亚马逊中国
亚马逊中国的开发,现在的确不够自主。 以前其实亚马逊印度也是全部都得听西雅图的命令。 一方面是因为不是总部, 另一方面是印度文化上比较随和。后来有一年派去印度一个Principal Engineer, 带领一群人建立这方面的思想, 最后改变了印度一些部门的文化。 虽然有些部门还是老样, 但是很多印度部门已经自主化, 完全可以和西雅图这边的想法抗衡。个人希望这种文化也可以传播到中国。
3. 关于oncall
个人而言很喜欢oncall。 oncall是学习机会。 软件行业里大多工作都是在已有的老系统基础上开发的。oncall可以让我们学习到老系统在开发和成长过程中所犯的错误, 进而在自己做开发时能够有更好的质量和效率。
对于做新功能开发的人而言, 不去了解自己写的程序长期的隐患, 就是失去了能够让自己进化的学习机会。
工作中有时能遇到只喜欢开发新东西的员工。 我对这种倾向不鼓励。 但是亚马逊里的确也有组是专门这样做, 做完了程序给别的组做operations (oncall)。 因为没有后顾之忧, 这样的程序很难保证质量。
如果一个新人加入了一个比较好的组, 这个新人很可能经常对于自己前一个月写的程序悔恨不已。 组里会给新人犯错的机会。 而犯的错通常会在oncall时被发现。
4. 关于组与组之间的差异
当时我入职的时候, 有人专门讲过这件事情:亚马逊的组的规划是以达尔文主义为中心的。 所以每个组都是自主的个体, 任意发展。 发展得好的就可以发扬光大, 发展得不好的就会被重组。
这是组和组之间体验不同的最大原因。
这个原因导致一个组好不好, 和它的经理、系统、开发者, 有直接关系。 很多人对于Software Development Manager (SDM)的理解有误区, 以为就是看大家效率、监视一下项目进度、然后有时候给人升个职、有时候给人来个PIP...换句话说以为SDM只是个管人事、管项目日程的。这个误解来源于很多人对于项目“成功”的定义的误解:
亚马逊项目的成功的定义不仅仅是“解决了问题”, 更是“培养了人才”。
也就是说亚马逊SDM的核心任务是培养SDE。好的SDM其实是很少的。 因为好的SDM必须有能力从各方面去培养手下的SDE。 如果一个SDM手下有个SDE III, 这个SDM的能力至少得接近于Principal Engineer才能够有效培养他。
我已经有几年没遇到特别好的SDM了,直到最近才又遇到特别好的SDM。 这几年遇到过很多比较普通的SDM。 大致上普通SDM分两种:
一种往往只有管理经验, 却对软件开发的各种流程、系统设计、以及其工作的商业领域并不是特别了解。这样容易给组里带来一些非最优的项目和解决途径。而且很难领会到怎么有效管理SDE - 因为不懂什么样的开发流程适合他现有的处境。 这处境包括小组的商务、包括组员的能力、包括与外组的关系等等。更糟糕的就是这样的SDM往往不懂得如何辅导他的SDE。
另一种虽然是SDE的背景, 但是缺乏管理经验, 经常挡在员工道上。比如有的会micromanage他最能自主的员工、却忘记管那些不能自主的员工。
这两种SDM都可以通过学习来进步。
所以如果在亚马逊工作, 并对自己的组经理不满意, 可以多了解了解别的组的一些做法, 用以改进自己的组、辅助自己的经理的进步。
一般没有人会阻止我们去做这些。 当然了, 我们也需要有足够的工具去理解现有问题和实行改变。
做这些改变的过程, 也是我们学习的机会。具体的工具有很多。 比如《Peopleware》就是一本这方面很不错的教材。
这里稍微提下PM的问题。 有些朋友提到被PM赶活。 这是近三年在有些部门开始有的问题。 我所了解的一些组以前PM很少。  这些年PM开始多了一些。 一个好的组会知道自己什么时候需要PM, 什么时候需要cross-functional的SDE。 并根据情况在这之间转换。 通常一个组需要有大量合作时, 会需要一个PM。 而好的PM应该促进SDE与客户的交流, 而不能总是直接自己去交流了, 然后给SDE丢requirements。 SDE不理解客户具体的问题会导致解决方案难以适应未来的需求。 主要的原因是SDE是最后做软件模型的人。 如果SDE理解客户的具体问题, 就更能预测长期的需求, 进而会做出更合适的模型。 所以所谓的系统设计, 设计的是所从事的领域的模型。 对一个领域越了解, 系统就可以设计越能适应未来的需求。
如果发现组里PM不是在辅助项目, 而是在赶着别人干活, 并且抢了所有对外交流的活, 最好的做法是和自己的SDM一起重新定义PM的角色。 这个重新定义的过程中, SDE和SDM应该积极去参与和做一些之前PM干的活, 比较自然地进行角色改变。 好的PM可以促进各组之间的合作, 以及帮助大家扩张视野。
少数组所做领域相关的活都给PM在干, 导致SDE无法学习自己所工作的组的领域相关知识。 比如一个SDE可能在推销组做了两年关于推销的程序, 但是完全不懂得基本的推销方案、无法自主解决基本的推销领域的问题。
这导致这些组里PM权势越来越大...还养成了少数经理什么项目不论大小都要看PRFAQ/BRD的恶习。不是说不应该写PRFAQ或者BRD。 好的组在项目复杂时、投资比较多时, 也是要写的。 但是当时比起PM, 更可能是经理带着SDE写, 而且是不需要写就不写。 现在有些组是能写就写, 而且全是PM在写。这些与亚马逊end to end ownership的理念背道而驰, 也与亚马逊frugality和bias for action的理念背道而驰。
5. 关于薪酬
SDE I其实在很多地方都是看作是暂时的一个角色, 不可长久。 一旦自主能力开发好了, 就是SDE II。 SDE I如果做得好, 顶多底薪增加1.9%左右(我第一年好像只涨了0.1%还是多少)。 但是SDE II做得好, 底薪可以每年增长6%左右(少数可以增长8%-13%), 直到增长到SDE II薪水封顶。 SDE II开始, 薪水慢慢向股票(RSU)转变。 亚马逊给股票时会假设明年这个股票会涨。 所以每年给的股数可能都比去年少。 这个虽然有时会比较恶心, 最后交税时还是可以看到每年钱在往上涨的。
由于级别比较少, SDE II开始, 每个级别薪水区间可以很大。 西雅图有的SDE II可能一年就10多万, 有的可能20多万, 有的接近30万。这与亚马逊股票浮动关系很大。
总之至少2018年, 就我个人了解:
SDE I: 13万到15万之间
SDE II: 14万到28万之间
SDE III: 16万到???之间
Principal Engineer: 据说比同级别的经理赚得多...
在美国, 员工之间讨论薪酬是被National Labor Relations Act保护的。 阻碍员工讨论薪酬是违法的。 所以大家也可以入职之后找同事了解一下别人的薪酬。 薪酬隐私化是美国传统企业为了削弱员工的议价能力而制造的文化。 但是如果你的同事不想讨论, 还是要尊重别人的。
我觉得亚马逊应该是喜欢留那些以长远目光看问题的人。贝索斯曾经说, 如果你计划做得长, 竞争对手就少。 大多数竞争对手都在看每3个月的财报, 少数可以以三五年做计划。 如果你做计划做到12年以上, 就没有人跟你比了。
所以只要你愿意放长线, 亚马逊给的报酬还是还可以的。
比如,如果一个员工是2012年大学毕业入职, 光他当年4万的signing bonus在2016年全部vest时就已经成了20多万。如果他到2018年都没卖, 就是40万了。
不过话说回来,如果有一个好的成长的机会, 长期的职业发展比这些短期的薪酬要重要
6. 关于升职
之前提到亚马逊级别比较少。其实升到SDE II是件很不错的成就。 升上去了, 你可以拿拿别的公司的Offer看看给多少。 一般可能会被亚马逊当年给你的工资多一倍左右。
但是从另一个角度讲, 最好着重于成长, 而不是升职。 亚马逊某部门这两年就出了一个问题: 很多系统被设计得过度复杂。 后来调查时发现, 都是因为设计复杂了容易忽悠人好升职。 升上去的人, 很多不称职。
但是大家不要忘了,亚马逊是会PIP人的!能力差的经理一般专PIP那些工作不久的SDE I。 其实SDE I是最不该PIP的。 因为SDE I破坏力最小, 而且最容易训练。
(对了其实现在不叫PIP了)
职位越高, 越容易遇到经验比较足的经理。 这些经理会着重审核SDE III和Principal。有个部门今年一年就开除了两个SDE III和一个Principal。
所以比起升职, 更重要的是成长。 做得好总是会加薪的。做得不好, 升职了饭碗都不一定能保住。
当然SDE I也不要怕PIP。 只要你做得好, 学得多, 你就不怕PIP。 出PIP是件很光荣的事情。 因为一个经理去PIP一个人, 代表着这个经理认为:
  • 这个人造成伤害很大
  • 这个人无法被训练
也就是说, PIP的确是用来开除人的。
但是如果被PIP的人出了PIP, 就很可能这个经理看错了。 如果一个经理把一个好员工当成坏员工, 最后被开除的很可能是这个经理。所以在亚马逊, PIP是双向的。
这是为什么SDE I其实没有那么好欺负:
  • SDE I无法造成很大的伤害
  • SDE I通常可以被训练
所以PIP SDE I十有八九都是错的。一个经理如果经常PIP那些SDE I, 等遇到一个有经验的经理, 就归他自己被开除了。
7. 关于工作与生活
这个也是一个纯粹看经理和个人态度的事情。好的经理着重于提高效率, 坏的经理着重于增加坐班时间。 如果遇到一个坏的经理, 那就得想办法训练他, 或者跟他的经理反应这方面的问题。 亚马逊的小组里, 往往经理比SDE走得快。所以实在无法训练的经理跟上面反应一下把他转走就好。
我最开始的一个组比较幸运, 组里效率比较高。 基本上中午到公司, 午饭一两个小时, 下午5点准时回家。然而工作成就感很高。 谈项目、解决问题、做开发, 都速度很快。 一个中型项目往往也就几周的事情。 而且一两个人能搞定。 每个项目都有时间重构现有系统来让之后的项目更容易。这个组当年是没人想当经理的,因为这个组的经理很累。所有的SDE他都得指导。 每天得考虑怎么样和SDE一起优化开发流程、帮手下的SDE联系上客户、卖项目给高层、应对客户非项目相关的问题。遇到SDE正在走弯路时还得很小心的诱导他走上正轨, 而不是否定他的工作。我们邮箱里24小时都可以看到他在发新的邮件, 不是催活儿, 而是帮组里解决一些琐碎的问题, 帮组员推脱一些客户不合理的要求, 找法务部帮组员研究新功能的合法性等等。这个经理是一个好经理。 虽然我最近发现,有些非常罕见的经理可以做到同样的事情而不会像他那么累。
后来到的有一个组就不太行了。 常常连续周末加班几个月。 全组人都加班, 什么都做不出来。 有两年时间我的休假储蓄都是满的——有假没时间休。这样的情况一直持续到了换经理之后我才知道之前经理做法上的问题。 但是我要是当时就知道这些问题和解决方式, 可能就会给那个经理一些反馈, 让他进行一些改善了。
8. 关于个人用硬件
每年亚马逊都会从员工那里汲取意见。 硬件是2016年以前最大的抱怨之一。 大家都觉得可以frugal, 但是frugal和cheap是两回事。太小气反而会浪费——员工每年开机、修电脑浪费的那些时间相对应的工资都可以给每个员工买好几台电脑了。所以2016年亚马逊给所有开发人员重新配了新的硬件。 包括最新的手提电脑。 最低配也是SSD和16G内存。现在我的Windows Laptop开机就十几秒。 Mac不清楚。
硬件改善也包括重新配置显示器。 可以选择双21寸显示器和单宽屏34寸的曲面显示器。 宽屏显示器做Code Review很好用。 双单屏做开发比较方便。 看个人喜好了。
最近新入职的小朋友表示只能选双显示器。 这是因为34寸的没货了。 可以找IT Support那块申请。 大概要等两个月。
新入公司员工可以选择用Mac或者PC。 这个主要看习惯。 有些组会推荐新人用Mac, 但是如果你没用过Mac, 最好别入坑。 Mac可以直接进行开发, 不用连到Linux主机上。 但是这样开发问题比较多。
PC是带Docking Station的, 很容易就可以和键盘、鼠标、显示器连起来。 Mac的Dock得另购, 不一定能报销(跟自己老板商量)。 没有Dock的话, 这些显示器、鼠标、键盘、电源、耳机什么的就得一条一条插...
2016年以前, 每个人还会配一台Linux的Desktop。 2016年以后已经大多换成了云端的。 可以用手提电脑直接连。
写程序主要是在Linux上进行。 但是有些组至少一半的活都并不是写程序。 做设计、写文档、处理数据, 都是在PC上比较容易。 因为Microsoft Project, Visio, Excel之类的软件, 在Windows上安装比较容易。
当你选好硬件之后, 5年后可以换新的手提电脑。 如果你弄坏了或者想换个或者Mac, 公司会给你换个旧的电脑。 同时5年的排期会重置。 如果出现2016年大更新的话, 倒是可以免去排期。 弄坏电脑的方式有很多种。 我见过人泼咖啡的, 也见过直接用升降桌压裂的。
新员工标准配置是带一张升降桌的。 我用的还是老款的木头Door Desk...主要是我喜欢这样的, 也方便我在办公桌附近搭别的东西。如果刚入职你没弄到升降桌,并且想要升降桌,一定要赶紧跟老板提,因为新员工换硬件比较容易。老员工以前换个升降桌得搞好几个月。 不知道最近有没有什么改动。
9. 关于移民
移民这个事情好像不是亚马逊说了算的。 以前只有SDE II能办绿卡。 2017年开始SDE I只要经理同意也可以办。 当然不是一进公司就立马办。 好像是要工作几个月才行。 现在美国这个情况, 以后移民会怎么样谁也说不准。
10. 关于职业发展
前面提了一些如何应对经理、小组的问题。 这些是主要成长的方式。 在亚马逊其他的学习机会也很多。 比如Principal of Amazon的演讲(POA), 以及各种"Learning Series"。POA并不需要是Principal Engineer才能去演讲, 也经常有SDE III去讲。
个人觉得, 早期的POA质量比较高。 会谈一些比较基础的东西。 比如我一直对SSL不是很了解, 当时就是从一个老POA里学的, 总算学懂了一时(现在又忘了)。 还有关于Consensus Algorithm, 也是从2007年的老POA里学的。 从2007年的演讲都可以从内网上找到。 最近的POA和Learning Series有部分偏见比较重。 往往让听众拿着一个解决方式去找问题。 这种做法容易造成之前提到的系统过度复杂化的问题。
比如有一次有个人谈Data Oriented Design时, 恨不得把主程序都用data来表达。 自己干脆只写这些数据的解析程序。 这不是不行,但是在大多数场合是过分复杂的。这人为了让大家不提意见, 一开始发言就是"There is no silver bullet", 来堵大家嘴, 但是到最后也没提这个设计的隐患以及它不该被使用的场合。 只提了句:"It might not fit your use case." 但是"which use case"恰恰应该是他整个演讲最重要的部分。
还有一次是我没听到的, 但是后来遇到某个组里的人, 他们已经有以event driven的方式做的一些系统, 非常好打理...但是其中一个SDE III拼命想做Process Oriented Architecture。 我从来没听说个这种结构...听他的描述, 这个做法根本不适合他们的问题领域, 反而感觉是把系统做得更脆弱...后来才从他们组另外一个SDE III那里听说, 这人之前跑去看了一个Process Oriented Architecture的Principals of Amazon演讲...然后就盯着不放了...
那么话说回来, 职业发展到底怎么样做最好呢? 这个可能真的得看人。 但是我现在工作年数也不久, 还处于职业初期(前10年初期, 10-20年中期, 20-30年后期), 所以一方面只对SDE早期的成长有一些了解, 另也方面也只对我看到的一些SDE有一些想法。 这只是一家之言, 不能以偏概全。 具体上, 有些做法我也提不上来对哪些人不合适, 有些也许根本就是坏的做法, 只是我现在不知道而已。  可以大概想到的就是如果你不在亚马逊, 你的公司也许很难接受下面这些做法。 因为有些公司看待开发者的方式就是“程序员”。 他们不会希望“程序员”去干涉商务, 也不需要“程序员”去建立商务模型。
10.1 入职
从入职到一年左右, 一般的SDE I最大的学习机会是写程序。 一方面写程序本身是一种思维、建模上的锻炼(熟能生巧),  另一方面, 小组训练新人最有效的地方是Code Review。
Code Review里面别人提意见多是好事。 当然也要多想想、问问为什么。 一般的SDE II提的意见大概有一半不一定是对的...我之前就经常提错误的意见。 最近遇到有些SDE III甚至Principal Engineer在Code Review上提的也不一定对。 有时候他们是故意的——因为想看新人的自主能力。 如果别人提的是对的, 下次就尽量不要犯同样的错误了。
Code Review的主要目的是培养SDE的习惯, 次要目的是提高程序质量。 有些组(比如我的)有时候拿Code Review来保证程序的正确...这个做法...怎么说呢...Code Review有可能保证程序正确吗? 有时候的确能找到一些bug, 但是要通过Code Review要保证程序没有bug, 按我一位mentor的说法, "it is an impossibly high bar." 写程序没bug是不可能的, 更何况读别人写的。 读程序比写程序可难多了。
那么除了写程序、让别人Code Review、做别人的Code Review, 另外一个学习的方式就是把自己组里的程序多读读。 这个是很累的。 我一般最多读几个class就懒得继续了。 只有在oncall的时候为了debug一些问题才能一直读下去, 因为有目标。 这是为什么oncall也是学习很重要的一部分。 不是为了debug, 漫无目的地读程序, 实在是太难受了。
除了这些, 可以考虑看一些2007年左右的POA演讲, 巩固一下基础。 虽然我看了之后还做了笔记都很难记得多少。 但是以后遇到的时候会比较有用。 新的POA我觉得应该敬而远之。 但是带着怀疑的态度去看看也可以。 偶尔还是会有好的。
我看到不少新入职的朋友所在的组里的软件质量并不是特别好。 组员给他们做的Code Review也不好。 但是因为他们是新入职, 所以也意识不到。 可以考虑读一下《Effective Java》的目录和《Head First Design Patterns》。 前者在目录里有什么好奇的可以进去读下。 后者是一本很适合初学者的培养审美的书。 实在遇到一些组里吵架的问题, 比如怎么写test, 怎么做dependency injection之类的, 还可以参考Martin Fowler的博客(直接google相关话题和"Martin Fowler")。
入公司需要学的第一个设计模式可能就是Dependency Injection了。MSDN上对于Inversion of Control还有Dependency Injection的解释非常清楚。 可以考虑看看。  可能还会因为这个需要去学Guice或者Spring IoC Container。
10.2 写了读了很多程序, 但是什么算程序写得好?
之前提到培养审美, 这里想解释一下程序好看是什么意思。
要理解什么, 首先要理解大多数SDE做的并不是high-tech。我们大多不会在IEEE之类的发表论文。即使在学术界的时候发表过, 现在也没在发表。 大多数SDE的工作是用商务模型所定义的程序来实现以前由人实现的商务功能的自动化。
程序作为商务模型的一个展现方式是写给人看的, 不是写给电脑看的。 电脑看binary就可以了。 电脑不在乎我们的设计, 也不在乎我们的结构。 对电脑而言, Service Oriented Architecture是一种不有效利用资源的规划程序的方式。 偶尔我们要担心一下程序是不是太浪费资源, 但是大多数时候程序是写给人看的。  如果我们优化的是给电脑看我们的程序, 那么所有的程序都该用汇编写, 而且都应该是monolithic的(比如渲染引擎之类的)。
这种商务程序好不好主要在于是不是容易懂。 有些程序过于复杂难懂, 看起来写得很高级, 其实是写得不好。
用“以后看这个程序的人会很蠢而且很懒”的心态下写程序可以预防这个问题。 假设未来看这个程序的是未来的自己, 就很难会故意把程序写的太复杂。 在优化程序设计时, 通常优化的也就是可读性。一个程序容易懂可以减少这个程序被改变、替换时的痛苦, 也就进而让商务模型得到了extensibility,flexibility和复杂度上的scalability。 容易懂也就可以让浪费资源的步骤更明显, 更容易优化, 也就容易提高系统运作的scalability。 容易懂也就让我们更容易debug, 于是bug就更少, 就可以增加reliablity。 容易懂也就让我们更容易看到bottleneck, 也就是更容易增加availability。 所以有多容易懂是测量一个程序好不好的主要方面。
10.3 程序容易懂了, 那商务模型本身怎么做?
模型是某事物的一个表达方式(representation)。
同一个事物可以有很多的表达方式。 每一个表达方式就是一个模型。 模型之间不同的地方在于它省略的部分。 一件事物的完整表达就是它自己本身。
通过省略不同的部分, 不同的模型会更适合不同的用途。
过于精细的模型虽然可以完成原本事物的本职, 但是往往很难懂, 也很难改变。过于粗糙的模型虽然容易懂, 但是却不能完成原本事物的职能。
所以在建模时, 我们会试图把复杂的事物分割之后分别建模, 保证每个部分都比较容易懂, 而又能照顾到细节。 这许多被分割的模型之间的关系, 就是一个更抽象的模型。
想要给一个领域的商务问题建模, 就得了解这些需要解决、需要自动化的问题。
程序写熟、习惯养好这段时间, 慢慢也要了解自己的领域。 做物流, 就得了解物流优化方式;做定价, 就得了解定价策略。 具体的一些建模方面的东西我自己也做不太好, 但是大体方向是针对问题。
建模方面的技术可以参考 Eric Evans的《Domain Driven Design》。 这书很枯燥, 不好读, 但是很有用。入门考虑先读Sam Newman的《Building Microservices》和Fred Brooks的经典《The Mythical Man-Month》 。 后面这两本读起来不会脑壳疼。
以前有人提过这么个事:
很多在SDE II或者SDE III经验级别的人找他做design review时, 会拿6页的设计文件过去。 6页除了一个自然段讲问题, 其他全是问题的解决方法。 他看了之后先会说:“写得很好”(因为不想让别人不高兴), 然后说:“你用了多少篇幅写解法, 用同样的篇幅去写问题”。 别人再来时, 写了6页问题。 这时他说:“现在你列出这个问题的所有解法, 只是列出来, 不要去想细节, 也别管多蠢”。 然后别人列出来了。 然后他这时说:“现在做所有解法的trade-off analysis”。 于是别人做了trade-off analysis。 然后...然后就没有然后了。 他跟我解释说:“最后他们选了哪个解法, 我其实不在乎,因为肯定错不到哪去。”
在过程的结尾, 这些SDE会对自己的领域更了解, 往往会做出比reivewer能做的更好的选择。
用这种方式产生的6页的设计文件的结构大概是这样的:
前5页讲问题, 最后1页总结解法的选择,外加6-20页的appendix列出所有解法、它们的trade-off analysis、以及更多的问题的研究。
这个过程, 通常是一系列Principal Consultation的过程。 这个过程中, Principal Engineer会带着SDE建立问题的模型, 但是不会给任何答案(有位Principal Engineer提到, 当Principal最痛苦的就是明明知道答案但是却不能告诉别人...)。 SDE会需要去见这个Principal Engineer很多次。 这与亚马逊里有名的Principal Review是不同的。 Principal Review通常是一个完整的文档拿去给一群Principal Engineer看一遍...这个做法很不受欢迎, 因为Principal Engineer很难纠正一个已经投资很多的设计。 Principal Consult最开始的时候一般并没有6页文档。 差不多半页描述一下大概的问题就够了,越短越好。 这样意味着少走很多弯路, 也意味着你在尽早让Principal Engineer了解你解决的问题, 帮助你学习, 而不是在自以为已经解决之后想去找Principal Engineer“盖个章”。
Principal Consult的过程通常能让人学到很多建模的技巧, 以及自己商务领域的知识。 做Principal Consultation是不需要看级别的。 一般SDE II就可以去做。 SDE I也可以去。 当然大多数情况下, 先从最便宜的人用起, 比如自己组里的SDE。 不够用了再往上走。
做了这类活动的SDE对设计基本上有了一定了解, 可以针对问题来设计解决方案。 差不多看看最近的一些POA演讲也不会有什么危害了。
10.4 找一个系统极差的地方, 在那里多呆个几年...
这里其实是个职业分化的地方。 有些人想停在SDE II养老, 也有的想转SDM, 还有的想继续升SDE III。 我也见过有些Principal Engineer这个阶段转过Product Manager的, 之后又转SDE。
除了想养老的, 不管想怎么转, 有些hard skill和soft skill是通用的。 侧重会不同, 但是都得有。
对很多人而言养老可能是最好的选择。 我以前有不少SDE II印度同事想赚够钱了去泰国隐退。不想升职的SDE II生活是很好的。 平时就带带项目、写写程序, 迟到早退...平时面对的最难的问题往往是选择S3, SABLE, 还是DynamoDB...据说要是是在印度的话工资够买豪宅请仆人和司机。
要是硬着头皮想跟自己找麻烦, 那就最好找一个系统极差的地方, 在那里多呆几年。
如果看亚马逊的Principal Engineer的背景, 会发现他们很多都是在同一个组或一个领域呆了很多年。 他们的主要贡献是对那个领域的建模和开发。  如果没有足够的时间, 很难学到一个领域足够的商务知识。
这个阶段的SDE可以看到周围很多人做的设计并不理想(毕竟选了一个系统极差的地方)。 最常见也是最荒谬的莫过于整个设计都在讨论选什么工具。 一般这种文件都回用"we are researching what is the best technology to use","we are using cutting edge technology", 或者"we are doing machine learning"来掩饰它的不足。一个系统变化最快的就是用的工具。 在亚马逊很多组里是年年被要求要从一个平台上迁移到另一个平台上, 从一个框架上迁移到另一个框架上。 一个系统是用DynamoDB还是S3还是SABLE根本没那么重要(一定要用S3去做high frequency transaction当然还是不太美好的)。 重要的是这个系统的模型是否能有效解决商务问题, 以及未来暂时没解决的商务问题有多容易解决。 即使要谈工具, 也只是讨论从SABLE迁移到DynamoDB能不能少痛苦一点...
这种做法的出现是因为很多SDE以为学这些工具才是technical的, 同时以为商务领域知识不是technical的。之前那个让人回去写6页问题的人就提到:我们行业很多人认为技术(technical)就是指软件。 其实"technical"这个词……(他边说边开始在网上查字典)……仅仅代表有某个领域的专门知识。 比如律师就是一个被规划在"technical"的职位。  他的意思就是, 商务问题是technical的, 让大家不要太过于追求软件工具上的technical。
所以怎么去跟这些“所谓走技术路线”的人交流就成了一个问题。 可以考虑读一下《Crucial Conversations》(Kerry Patterson)和《Yes, And》(Kelly Leonard and Tom Yorton)。
另一个问题是《Domain Driven Design》这书比较抽象, 在老系统已经很差的情况下虽然可以定义目标, 但是很难用来帮我们接近目标。 相对而言,比较具体的人与人之间的交流方式、小组的文化、大组的结构, 与系统设计感觉很相似, 也容易应用。 比如如果两个相关的组物理距离很远, 通常他们开发的系统耦合度(coupling)也不会大。
后来我mentor跟我说这叫Conway's Law:
"organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations."
也就是说,两个组之间因为交流有障碍, 无法随便假设对方系统内部逻辑, 自然系统之间的耦合度就会减少。
想要优化一个极差的系统, 虽然可以硬头皮上(我认识一个人曾经一手重铸过好几个系统), 但是如果系统太复杂, 组太大, 就得要考虑是什么趋势导致系统和组走到现在这步的, 并想办法改变造成这些趋势的原因。
10.5 学习Soft Skills和软件架构
这里要谈谈Soft Skills,因为我最近觉得它是软件设计和架构的根本。
网上对Soft Skill这个概念有误解。 Soft Skill下列出的那些管理技术和交流技术并没有错。 但是认为Soft Skill是IT行业产生的、用来区分于technical skill的术语, 并不准确。
我经理有次告诉我, 这个概念应该是来源于军队或者制造业。 早在1950年左右Soft Skills的概念就出现了。 1972年曾经军队开过专门关于Soft Skills的讨论会。 当时IT行业还不存在。Soft Skills的定义是“难以测量的技能”(比如你的工厂里的人是否融洽)。 它相对的其实就是Hard Skills(而不是网上说的technical skills), 就是一些“可以测量的技能”(比如你一天生产量是多少之类的)。
虽然难以测量, 因为Soft Skills是一些技能, 所以它们还是可以通过学习、锻炼来获得提高的(相对于天赋)。 这些技能是有系统的, 有专业的(管理能力、行为影响能力、政治能力等所相对的学科:管理学, 心理学,政治学 )。 所以它们也可以说是technical的。
比如"写程序容易懂"这种设计方面的技能因为难以测量, 所以是一个Soft Skill. 但是这个技能可以通过不断地锻炼和学习来提高。 架构方面的技能也很类似。
架构就是所谓的Architecture。 这个词是从建筑学偷来的, 在软件行业里被滥用 。我很长时间都不信这个词。 后来那个让人回去写6页问题的人说, 其实这个词还是有用的, 它指的是把资源、空间以某种方式分配, 让在这之上的设计自然趋向于好的。 简单地说就是架构的就是造成某种趋势的原因。
之前我们提到两个组距离远, 系统耦合度就小, 就是其中一个例子。 如果我们希望某些系统能融合, 把开发它们的小组并到一起就好。 如果我们想分割一个系统, 就把开发它的组员分成不同的小组。
架构也可以是电脑相关的工具, 比如用functional language去写一个系统会让组员更多去思考运算, 更少去思考物件(更有可能会招不到员工)。
现实中, 分组、合组都是很复杂的事情。 这关系到大组结构的影响, 怎么说服别人,怎么用人, 怎么调整过程中和之后的人际关系, 怎么调整每个组的开发流程, 怎么定义每个组的职责等等。这些需要很多针对如何应对、操作人(包括自己)的技术。这些技术往往是无法直接测量能力高低的, 比如管理技术和交流技术。 所以这些技术属于Soft Skills的范围。
因为不论是架构上的改变还是设计上的容易懂都是需要Soft Skills的,意识到每个Soft Skill都是一门技术可以让我们更有效地去探索其中的机制(mechanism)、利用其中通过实验得出的结论, 而不是单纯地利用直觉(intuition)、好的意向(good intention)、和“成功人士”讲的“道理”。
比起从建筑学、工程学借用一些工具, 软件开发其实更适合借用心理学、社会学、管理学、经济学、以及政治学里的工具。 大概因为建筑学和工程学的媒介(比如木头)和限制(比如万有引力), 都来源于物理。 而软件的媒介(想法)和限制(思考方式), 都来源于人的思想
比如我们之前提到, 软件设计最重要的是"容易懂"。 "容易懂" 是认知心理学的概念(cognitive ease) 。 通过学习认知心理学, 我们能够有机制地让软件更容易懂, 而不是单纯地借助直觉。 我们之前提到Conway's Law, 它提到软件结构通常来源于部门的交流结构。这是社会学的范围。 通过学习社会学, 我们可以有机制地优化部门之间的交流模式。
理解和利用Soft Skills是软件架构的基础。理解Soft Skills才能知道好的设计是什么样的。 利用它才能给好的设计制造趋势。因此SDE II之后technical path最需要的是系统地学习Soft Skills(当然要走management path也得学)。 我遇到的大多数亚马逊成功的SDE III的Soft Skills都是比较强的。 尤其在沟通能力和处理人之间的矛盾上, 他们大多都很有天赋。 我这方面的天赋不强, 就只能作为技术来学了。
但是我觉得很多SDE III的职业发展的阻碍可能就是没有能够利用Soft Skills相对应的专业知识来有机制地设计架构。因为他们天赋好、有人格魅力, 所以利用直觉也是可以做出不错的架构的。 但是因为缺乏机制, 所以在遇到新的、复杂的、不符合常规的、不符合直觉的情况时, 往往会做出错误的选择。 直觉方面的训练和“容易懂”的意思可以参考Daniel Kahneman的《Thinking, Fast and Slow》。
10.6 我们还是得会写程序的
在亚马逊, 不管是当经理还是当SDE, 都是得会写程序的。写程序是最基层的建模方式。 做发开发不懂得写程序就好像厨师不知道每种食材的味道。
想要解决所在领域的商务问题, 得了解这个领域和它的问题, 用这些知识建模,用程序去创造自动化的方式去解决短期的商务问题, 并最后用架构来促进程序的进化、应对商务需求的变化。
最后我建议大家要养成办公桌上放一本《Cracking the Coding Interview》的习惯。谈工资谈不拢再加本《Elements of Programming Interviews》。
2#
热心的小回应  16级独孤 | 2020-12-29 23:38:11
匿了,因为西雅图总部这里amazon的中国人已经太多,上社区的也不在少数,还是尽量避免不要的麻烦。

主要说说码农呗,别的我也不清楚了。

和北美其他几家大公司(Google, Microsoft, Facebook) 比起来,Amazon算是比较辛苦的,百分之九十的组都要oncall,BP机一响就要随时爬起来工作。每层半个小时没回应的就会往上一层继续传递,从SDE,到manager,senior manager,director一直往上。不oncall的时候,工作量也是明显高于其它公司的,微软的朋友跟我说他们每年review的时候,员工对work and life balance都非常满意,因为他们只有life,没有work。就是因为这点,好多亚马逊的员工都跳槽去微软了。

亚马逊内部不同组之间的差别非常大。像AWS这样的组,有些都是两个人同时oncall,一天收好几个ticket,动不动就conference call了。最轻松的组,比较极端的情况oncall的人周末出来竟然连电脑和call机都不带,也是真放心啊><

组和组之间最大的差别来自于很多方面。工作强度上,因为亚马逊的系统是service call service这样的层状结构,如果底层的一个基础服务出了问题,那一整条链上的都会受到影响。所以越是靠底层的组,工作强度自然越大,比如S3, EC2这种。Manager的管理风格也占了很大因素,有的manager对手下逼得比较紧,活做不完会逼你加班,有的就比较nice,做不完拖一拖也无妨。但总体的反应都是,你永远有做不完的活。我知道这和国内软件行业的699没法比,但是每次遇到微软的人一聊天就吐的一口血…

就是因为工作强度大,所以人员流动也很明显。经常会有 “唉?怎么感觉一个人突然好久没见了”的感觉。然后系统里一查,头像黑掉了,或者是换组了。在一个组能呆到一年,已经算是老员工了。干到两年的,能排进所有员工的前百分之十。

公司在员工福利上一般般,还是没法和临近的微软比。所以从亚马逊跳去微软的人总给人一种脱离苦海,从国内翻身到美帝的优越感,也还是蛮拼的…

总的来说亚马逊的工作体验在业内一般般,因为太注重顾客体验了,造成的结果就是不得不从员工身上“剥削”。扩张的太迅速,造成办公环境拥挤,提供的设备越来越差,也直接导致过去三年SDE的员工满意率年年下降。但是作为一个国际化的大公司,在这里还是有很多可以学习的地方,身边还是有很多牛逼的人,这是小公司不能提供的。来这里学习非常好,想来这里创造一些东西也很好,但想混日子,还是到湖对岸的微软吧。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3118703
帖子:623848
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP