草庐IT

为什么开发人员离开谷歌

路遥 2023-03-28 原文
​作者 | 路遥

审校 | 云昭

谷歌是一个有“钱”景的地方,平均年薪达到了16万美元以上,同时还提供免费食品、医疗保健福利、育儿假、退休福利甚至理发服务。开发者究竟是出于哪些原因选择离开呢?

1、精英间的较量

谷歌的员工可以算是“精英中的精英”,他们来自世界各地,并且拥有的能力和智慧都是顶尖的,然而,却厌倦了等级制度和内部斗争。

前谷歌员工迈克尔·林奇 (Michael Lynch) 表示,他尽最大努力留在公司,但没有做到。没有晋升的余地。谷歌前产品营销经理克里斯托·布里克 (Krystal Brik) 在辞去年薪 6 位数的工作时也有同样的感受。不仅仅是迈克尔和克里斯塔尔,数百名前谷歌员工都表示公司内部有一种“纸牌屋”式的政治风格。

2、疯狂的竞争

一旦员工进入谷歌,就会按照他们所处的级别进行排序,L5是 “高级软件工程师”,从这个级别开始,对能力的要求也更加严格,同时竞争也将变得非常激烈。想要晋升到L6,一般情况下需要5年左右的时间,最快也至少要3年,而且还要保证在这几年的时间里,你已经开始管理团队了,并且所在的团队也要稳定受重视才有可能顺利晋升。

在谷歌,有很多人在L5的位置上呆了10多年,都没有晋升到L6。

当升到L8级时,就成为“首席工程师”,到了L9,你就是“杰出的软件工程师”。L10成为Google Fellow,如果你能升到L11,你就和Sanjay Ghemawat和Jeff Dean一样重要,但这个级别又会让大部分员工望而却步。

3、员工感觉不到被重视

如果处于L5或L6,并且处于不同的职位上,比如做的是业务而不是开发,那么注定要失败,因为开发的薪水更高,同时想要更换职位也非常难,就算换了也会被降级。

低于L5的员工,通常会做一些平凡的工作,例如删除YouTube视频之类的,此外,他们的贡献对谷歌的产品影响也不大,因为该公司规模庞大,拥有数千名员工和分支机构,许多员工为了更好的职业选择和发展而离开谷歌。

4、艰难的招聘过程

许多申请者发现谷歌的面试过程漫长又繁琐,非常具有挑战性。

通常谷歌面试过程会持续两到三个月,包括四到九次面试。这比许多其他公司要长得多。

此外,谷歌的一些招聘人员组织不善,不遵循良好做法。公司的招聘工具ATS和gHire,有时功能不足,这个阶段就员工就已经被不好的体验所影响了,后面的工作也会有所波及。

5、对工资不满意

谷歌的年度员工调查显示,约46%的受访员工表示,与其他公司的同类职位相比,Google薪酬具有竞争力,比例按年下降12个百分点;56%的人表示他们薪酬公平公正,按年下降8个百分点;约64%的员工表示,他们的绩效反映在薪酬中,按年下降了3个百分点。

薪酬是谷歌高管近期面对的重要问题。在去年12月的全体员工大会上,谷歌薪酬副总裁弗兰克·瓦格纳(Frank Wagner)回应了通胀高企的担忧,以及该公司是否会提供加薪等问题。瓦格纳表示,谷歌不会因为通胀而全面加薪。

6、福利的陷阱

谷歌前员工Ken在TikTok上揭露了这家公司的福利陷阱,包括美食、通勤、免费Wi-Fi和室内游戏都有猫腻。

根据Ken的说法,这些纯粹是为了吸引员工而进行的营销。谷歌每天供应三餐,但在下午6点到6.30之间不供应晚餐。员工吃完这三顿饭时,已经是晚上7点了,他们下班时间可能就要延长。

从SF到谷歌营地往返需要1小时,班车有免费Wi-Fi。员工在公交车上除了工作之外别无他法。如果加上额外的用餐时间和2小时的通勤时间,员工通常会比平时多工作3小时。

7、工作压力

Payscale.com对工作场所压力的研究表明,53%的谷歌员工认为他们的工作压力极大。

许多前员工开玩笑说,谷歌的行为就像一个苛刻的女朋友。尽管公司提供各种缓解压力的方法,如按摩、冥想室和保险治疗,但当员工经常因紧迫的截止日期而皱眉时,这能多大帮助呢?当整个团队都努力工作以赶上最后期限时,去冥想室放松一下是行不通的。

谷歌员工平均坚持1.9年,在这短短的时间里,许多员工经历了一段突然把梦想变成童话的痛苦经历。

其实在国内大厂,开发者也面临着同样的困境,高强度的工作、职位的瓶颈、激烈的竞争等等再加上当下内卷且低迷的环境影响,都成为了开发人员离开大厂的因素。

当然,这些经历并不全是坏事,你可能会获得更受欢迎创新力和创造力。大多数员工在离开大厂后都表现得非常好,他们在那里积累了经验,也对他们的生活产生了重大影响。

原文链接:https://medium.com/gitconnected/why-developers-leave-google-5c4037b39e0a

有关为什么开发人员离开谷歌的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  3. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  4. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  5. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  6. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  7. ruby - 如何离开加入Arel? - 2

    Arel3.0.2提供了两个类来指定连接类型:Arel::Nodes::InnerJoin和Arel::Nodes::OuterJoin并使用InnerJoin默认。foo=Arel::Table.new('foo')bar=Arel::Table.new('bar')foo.join(bar,Arel::Nodes::InnerJoin)#innerfoo.join(bar,Arel::Nodes::OuterJoin)#outerfoo.join(bar,???)#left如果要生成左连接,如何连接两个表? 最佳答案 你可以使用

  8. ruby - ruby 中的 TOPLEVEL_BINDING 是什么? - 2

    它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput

  9. ruby - Infinity 和 NaN 的类型是什么? - 2

    我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串

  10. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

随机推荐