阅读更多

5顶
1踩

非技术

原创新闻 如何避免软件行业的薪资天花板?

2015-07-09 11:27 by 副主编 mengyidan1988 评论(4) 有8442人浏览



【编者按】当程序员到了一定的阶段,通常都会有一个瓶颈期,随之的薪水也是难再有很好地提升,不妨看下一位谷歌工程师、创业者Ross Williamson在面临这些困境时的解决之道。

以下为译文:

在18个月前,我重新回到了技术员工队伍,我遇到了几个问题:
  • 没有人关心我曾是Google的工程师,以及我创业时推出过两个非常有技术性的产品。面试时,我依旧要在白板上写代码。
  • 我之前的薪水对于本地的科技市场太高了。

今天,我很高兴自己被雇佣了,困难都是暂时的。但我写了这篇文章,主要是让你明白本地科技市场。

把软件工程作为职场生涯的开始,你需要知道,2015年计算机工程师的起薪是62553美元。如果你工作在一个顶尖的工程公司:Google、Apple、Facebook等,会生活的很不错。在这些公司,高级软件工程师每年可以期望拿2~300K,这满足了大多数人的所需。另外,你无需在学校里花费额外的时间,或者长时间工作。

但是,如果你不是居住在硅谷或者工作于上面那些顶尖的公司怎么办?谷歌提供的薪酬已经是行业百分之前十了,但如果你只能找到能薪酬竞争力处在百分之五十的公司呢?

很多人成为了高级软件工程师之后会卡住,他们在5~10年后依然是一个高级开发者。对于大多数人来说,卡住就卡吧!他们喜欢编码,并且不想管理人,以及薪水看起来还不错。在美国,一名高级软件开发者的平均工资为106,575美元,这相当于中上层人的收入。但是,如果你想突破这一层怎么办?你如何突破薪水天花板呢?

当离开谷歌3年后,我第一次遇到了这个问题,而我选择了创业。接着3年后,我重新以员工的身份再次回归。

面试过程
我在小城镇面试初创公司和周边大公司时,没有人会因我的经历而给我加钱,我在谷歌工作过、创业、推出过2个技术性的产品完全不起作用。他们还让我通过白板写代码,并问我一些关于算法的问题,以及试图评价我的编码技能。我无法接受这些。正如之前说的那样,软件工程师的技术面试被打破。我们专注的领域,会对此前已经完成或实现的慢慢淡忘。事实上,我曾经通过了谷歌让人绞尽脑汁的面试题,可这些如果不是用于面试,你就不会再遇到。

无论如何,我还是受到了惩罚。我几乎忘掉了所有的算法和《Cracking the Coding Interview: 150 Programming Questions and Solutions》。在这个过程中,我搞砸了几个面试,不过最终我还是获得了一份好工作且不需要搬家,那还是在3个月以后。我比较了下搬家的时间和找工作的3个月时间,选择了后者。

如果你打算在一家软件公司工作,面试过程你是逃避不了的。也许有一天技术面试会自我修复,公司停止这种面试人的方式,我觉得十年内不会看得到。

谷歌和微软就一直在宣扬这种恶习——那种智商题目和二分查找之类的问题,对这类业内通行的软件工程师面试过程我非常的鄙视。除非一个新的热门公司出现,成为最顶尖的公司,且不要面试应聘者,这个行业可能会有所改变。

我要求的薪水太高了
本地的招聘者看到我以前的工资就开始犹豫了。可笑的是,当找工作时,在创业3年间并领取过工资,也没有涨薪水。即使是3年前的工资水平,这对于本地的高科技市场仍然过高。我不想再去参加面试,除非是有招聘者给出一个差不多薪水。如果他们对我要求的薪水不惊慌,我会同意参加一个技术性的面试。

我毕业后就到了谷歌工作,从未想过会有今天这样的情况。我认为在谷歌的工作经历会一直对我的职业生涯有帮助,并不会阻碍我。我真是服了,人们看到我简历上的谷歌,就会把我从名单中移除,因为太贵了。

我24岁进入谷歌是否就达到了我职业生涯的最高点?

现在,我终于明白为什么年龄较大的程序员抱怨科技界肆虐的年龄歧视。年轻的从业者更廉价,而程序员的工作效率是非常难衡量的,所以大多数的公司选择了更便宜的那一个。
引用
那么,我们该如何处理此类问题呢?更有经验的程序员在找工作时,如何避免薪水的天花板呢?

我见过最好的解决办法是James Whittaker的一本书《Career Superpowers》。
James是我在谷歌的老领导,他曾来回在谷歌(4次)和微软(3次)之间跳槽,每次薪水都要涨一倍,在我看来,实际工作方面并没有什么改变。

这本书的场景还是有局限的(专业性强),并不具有广泛性。许多的软件开发者都像躲避瘟疫一样远离QA ,而James 有目的性地选择了这个职业。他知道QA相比普通的软件开发者是更容易脱颖而出的。他首先通过了国家权威机构的测试和QA,开始是去了一家测试公司,后来进入了谷歌担任测试主管,然后在微软担任副总裁。他的优势就在于专业性强。

从这个角度看,我简历的问题是——太一般。当然,我在谷歌工作过,并开了一家公司,可我的简历基本上只能看到「Web/Mobile软件开发者」。

我知道所有的谷歌专利技术,但这些在现实世界并不管用。结果是,我和一个刚毕业的孩子并没有什么明显的区别,除了一个高级的职称而已。另外,在大多数公司,更多的经验也不会被看重,因为开发者的生产力没法衡量或评估。

我工作的这个行业,真是糟糕透了!

那么,我现在继续做开发者,同样的事情会不会再次发生?一个办法就是摆脱软件,进入管理或项目管理。但是我喜欢编程,我想绝大多数程序员和我一样吧。

相反,我已经采取了James Whittaker的做法。我花费了6~8个月的时间学习Graphics、OpenGL和WebGL。大多数人不懂3D Graphics,另外我们已经发现与Graphics相关的工作也超难招人。越少人知道这个事情,对我越有好处。

另一方面,未来我找工作将会变得更加困难,因为Graphics相关的工作明显要比Web要少好多。这就是一场赌 博,可我愿意。大多时候,你想要获得更高的薪水,可选择的工作就越少。

在接下来的几年,我们一起看看我这么做的结果吧!

题图来自:Steve Cadman

关于作者:
[url]Ross Williamson[/url],ThinkFaster创始人,十年的软件开发经验。曾在谷歌工作3年,主要工作是Chrome浏览器,以及Google+和Webmaster Tools的Web性能,接着创立了初创公司ThinkFaster。

英文原文:How to avoid the software salary ceiling(责编/钱曙光)
  • 大小: 372.5 KB
5
1
评论 共 4 条 请登录后发表评论
4 楼 补魔党 2015-07-14 14:40
如何突破。就是转行
3 楼 wangyan2009 2015-07-11 23:14
感觉做软件开发确实是像lz所说的这样,我做开发也5年了,今年在公司参加了几场面试,来面试的好几个都是十几年工作经验的人,但公司出的笔试题确都是一些概念基础题+算法题,什么二叉树呀,动态规划呀之类的,白板上写段代码呀,有些在之前公司都是技术总监的职位了,因为要的工资太高,公司一般会拒绝,像lz所说,如果想继续做技术的话,也许选一门工作机会比较少但会的人也很少的技术去占研一下也是不错的选择,毕竟就像lz所说,真正喜欢做技术的人是不太喜欢做管理的,也并不是所有的人适合做管理的。
2 楼 雪飘寒 2015-07-09 17:20
引用
如果他们对我要求的薪水不惊慌,我会同意参加一个技术性的面试。


作者自身就认为技术的工资低,要想突破瓶颈,还得其他方式,比如创业
1 楼 会飞的鱼丨丨 2015-07-09 14:58
    

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Oracle 12c 新特性 --- Oracle Data Guard Broker 支持执行DGMGRL命令脚本

    概念 This feature enables command scripts to be executed through the Oracle Data Guard broker DGMGRL command-line interface; much like in SQL*Plus. DGMGRL commands, SQL commands using the broker SQL c...

  • Datagrip如何导入数据库脚本

    idea数据库管理工具DataGRIP导入SQL脚本文件

  • datagrid之查询

    一.目标 点击左侧tree菜单,右侧Tab页显示datagrid查询出来的数据 二.具体操作 1.先创建一个存放书籍的界面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/h.

  • 配置dgmgrl

    一、修改dg_broker 为true SQL> show parameter dg_broker_start NAME         TYPE  VALUE ------------------------------------ ----------- ------------------------------ dg_broker_start        boolean  FAL

  • DGMGRL管理Data Guard

    Data Guard ManaGeR command-Line interface 1.环境:Primary Database: ningPhysical Standby Database: test2.修改初始化参数dg_b...

  • Data Guard (DGMGRL常用命令)

    SHOW CONFIGURATION; 显示配置 SHOW CONFIGURATION VERBOSE; SHOW DATABASE cdb1 示数据库信息 SHOW DATABASE VERBOSE cdb1_stby sendQentries:发送队列条目 SHOW DATABASE cdb1 sendQentries; sql 'alter system switch logfile'; STATUS:CURRENT: 当前正在写入联机...

  • 【Asp.Net】在DataGrid里添加行脚本代码的方法

    代码填写在DataGrid的ItemDataBound事件里: 1if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)2{3e.Item.Attributes["OnMouseOver"]="style.cursor='h...

  • 纯脚本搞掂DataGrid表表头不动,表身滚动。

     function ScrollDataGrid()         {             var tb = document.getElementById("tbHeader");             var dg = document.getElementById("dgSearchResult");                          if(dg!= null)   

  • js之datagrid

    1 js中的datagrid需要添加两个css和两个js, 如: 顺序不要颠倒,不然会出错。 而且需要将jsp语法去掉,例如去掉: 2js中的datagrid是从后台得到json类型的数据,json类型的数据必须是像这样:{total:"10",rows:[{a:"a",b:"b"},{d:"d",e:"e"}]} 从后台传递过来的json数据类型,通

  • 对Datagrid添加删除确认的脚本

           private void dgTeam_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)  {   if(e.Item.ItemType==ListItemType.AlternatingItem || e.Item.ItemType==ListItemType.Item) 

  • MySQL下执行*.sql文件

    首要步骤(一般可省略): 开启mysql服务(默认是开机时就自动运行了): 控制面板-->管理工具-->服务,在里面找到名称为mysql的项,双击就可看它的服务状态是启动还是停止,把它设为启动 连接mysql: 在命令行下输入 mysql -h localhost -u root -p回车,然后输入密码即可;或直接运行mysql自带的连接工具,然后输入密码即可. 1.编写sql脚...

  • DataGrip 批量执行sql脚本

    DataGrip的功能很全,可以批量执行sql脚本,记录一下 1.打开Files视图 2.选择脚本所在文件夹 3.多选或单选脚本右键点击Run 如果是tab、vw等后缀名结尾,右键没有Run,datagrip识别不出sql脚本 可以打开Setting,添加识别为sql脚本类型的后缀名 4.选择目标数据库,可以多个,然后Run执行 ...

  • web.config的设置,数据库连接语句(基本)!

    1、:一定要注意大小写! 2、在节点中 节选自web.config:                                 调用:  protected static string strconn= ConfigurationSettings.AppSettings["strcon"];

  • 网页上地区选择的炮制方法!

         //!!!    var s=["s1","s2","s3"];var opt0 = ["省份","地级市","市、县级市、县"];function setup(){ for(i=0;i  document.getElementById(s[i]).onchange=new Function("change("+(i+1)+")"); change(0);}//    

Global site tag (gtag.js) - Google Analytics