有人在Quora上提了这样一个问题:Why does it seem that so many companies treat programmers so poorly? 为什么看起来许多公司对程序员都不太好?许多具有多年软件研发经验、团队管理经验的程序员、技术经理给出了各自的回答。InfoQ也采访了多位国内的技术高管,试图对这一问题进行深入剖析。
程序员的价值很难被量化
Clayton Badeaux是一位具有20多年经验的软件工程师和架构师。他有着管理和技术两方面的背景,在他看来,这个原因更多与程序员的价值很难被量化有关。
如果我跑去市场部,并对他们说:“给这个功能一个销售增长预测”,他们会给出固定的时间和收入,比如15万/年。然后我拿着同一个功能跑去问程序员:“开发这个功能需要多少时间?”在好的情况下,他们可以在几周或几个月内做出来。但即使在给定的时间和预算内把功能做出来,也未必能够满足市场部给出的预期。但市场部不会因此受到责备,在企业主看来,功能是程序员交付的,如果销售不如预期,多半是程序员的错。
这个观点非常形象地解答了现阶段软件工程师在企业内的困境。
另一个关键问题是,程序员的薪资很高。在企业主眼里,他们通常并不关心公司的业务发展,而是把一半时间花在了软件运营上,还有另一半时间用来添加新功能。在他们看来,程序员只不过是 IT 的延伸,但 IT 却是企业主最不喜欢的烧钱“无底洞”,因为 IT 预算会一直增加。他们并不知道只有通过扩展 IT 才能带来业务的增长,他们只知道花在 IT 上的钱一天比一天多。
另外在他看来,企业主们最不喜欢或者说最提防程序员的一点是:假如你让程序员过得不开心了,他们分分钟走人都算好的了,甚至可以把你的业务给搅黄了(删库跑路警告)。
他指出,企业主对研发工程师们的看法,跟汽车制造商对机械工程师的看法是一样的。任何行业内拿着高薪资、坐在办公室里的人员都不那么被老板们所喜欢。如果你问企业高层,他们是否在软件开发和 IT 上花了很多钱,他们更可能会跟你吐苦水而不是炫耀自己的研发投入。
他认为,企业主之所以不喜欢程序员,通常是因为难以在企业和程序员之间建立价值联系。事实上,程序员是一种有价值但难以量化的资源,也很难使用类似的产品来替代。如果公司对程序员不好,他们就不会对公司忠诚。对于公司来说,程序员是巨大的风险,但也是公司的重要资产。
对于企业主来说,程序员是最让他们头疼的人,也难怪他们会不喜欢程序员。但企业主却别无选择,他们不得不去招聘程序员,对他们好,这样他们才能知道你想要什么,把你的需求转化成软件,避免让你更头疼。
不过反过来也是一样的。对于程序员来说,企业主也是让他们最头疼的人。因为他们觉得企业主无法理解程序员的工作,不知道如何最大化他们的价值。
企业管理层的偏见
James English 是一位从业多年的软件研发人员,做过多年的经理和程序员。他是这样看待这个问题的:
“很多管理者——特别是公司的高管,认为 IT 部门是公司烧钱的无底洞。但这与事实有很大的偏差,这也反应了很多管理者的执念和偏见。公司高管认为自己比公司的其他员工更有价值,能够给公司带来更多的收入。但说实话,管理层本身才是公司烧钱的地方。”
编程和软件工程是需要高技能和注意力高度集中的职业。要想精通这些技能需要多年的学习和实践,通常需要牺牲大量的个人时间来更新技能和学习最新的技术。如今,对于大多数公司来说,即使它们不销售软件产品或者服务,如果没有 IT 部门,也很难发展得很好。在某些方面,IT 是现代企业的支柱,它为每一个部门提供服务和支持。这个观点也与目前的中台概念颇为吻合。
有些管理工作也需要高度集中的注意力,有些还需要很多技能才能做好。与软件研发技能所不同的是,很多管理技能都是可以在工作中学到的,是每天例行公事并从导师那里获得建议的自然结果。有些人会阅读管理类书籍,有些人则不会。然而,管理工作并不像大多数 IT 工作那样需要持续不断的高强度技能和知识积累,(在很多情况下) 也不需要牺牲大量的个人时间。
他表示并不是要诋毁管理这一职业。他曾经也是一名经理,管理工作给他带来了很多挑战 (和压力)。他指出,管理层将 IT 看作是烧钱无底洞,并对程序员的薪水虎视眈眈恨不得拦腰砍半,这很不公平。
他举了一个例子,相信这个例子很多程序员也都有过类似经历:
“当我还是一名程序员的时候,我记得有一位客户 (另一家公司的经理) 表示,他不相信完成一项特定的软件开发任务需要超过一天的时间。他的原话是:“不就是敲几下键盘的事吗?”不幸的是,抱持这种态度的人比你想象得要多得多。现在仍然有很多管理人员认为软件开发是一种流水线式的工作。他们没有意识到这些工作需要多少技能、创造力和学习 (官方的或非官方的)。虽然这种情况正在好转,但在很多公司里这仍然是个问题。”
同样的工作也分三六九等
Richard Leddy 是一位具有超过 35 年编程经验的软件工程师和顾问。他认为同样的软件研发工作也是有等级之分的,当你作为合同工、正式员工和顾问时,遇到的是截然不同的对待。
“举一个例子,在很久以前 (大概在 80 年代) 我认识一个人,他在旧金山的一家银行做软件开发,工作上受到了非常严格的控制。与此同时,该银行聘请了一名顾问与他做同样的工作。顾问赚了更多的钱,想什么时候来就什么时候来,并且对事情的进展有一些发言权。这名顾问还获得了更多的尊重,但他却一无所有。
另一个例子:我曾经在旧金山一家著名的游戏公司做合同工。这家公司将合同工视为二等人。如果公司有聚会,你必须佩戴工牌才能参加。漂亮的姑娘们高昂着头,在派对上与帅气的小伙子们亲切交谈,她们恶狠狠地看着那些被拒之门外的合同工。这家公司创造了一种势利文化。可想而知,后来这家公司的规模缩小了不少。”
他表示,很多人对于技术工种天然就抱着这样的态度。在他曾供职的公司里,漂亮的女接线员根本瞧不起他,认为他只是一个给她们开发系统的程序员。她们打扮得花枝招展,莺莺燕燕,在休息的时候抽着烟,当作为程序员的他经过时还会说一些嘲讽的话。企业的文化都是上行下效的,当企业的高层们不重视程序员时,你也就没法指望其他部门对于程序员有多少尊重。
在他成为一名顾问以后,他发现企业主们关于薪酬的咨询更加“诚实”。许多企业高管具备非常强烈的自我意识,并认为程序员不需要得到多高的报酬。他们认为自己光靠四处走动、自我感觉良好就能获取自己所需、高出别人一等的能力与价值。他的建议是,程序员们在签合同的时候找一个律师,以避免自己的利益受到损害。
警惕被更廉价的外包所取代
Charles Luck 的整个职业生涯都贡献给了华尔街的投行,他是一位有着 30 年大型机开发经验的 57 岁大龄程序员。
起初,他所在的团队有超过 500 名程序员,平均年薪超过 10 万美元,再加上健康福利、带薪假期、人寿保险等等,薪资成本支出之巨可以想象。
后来,公司内部有人表示要摆脱大型机。这个人让麦肯锡做了一项调研,然后“退休”或解雇了 400 名程序员,成功把部门、成本缩减到了一定规模,最终这个人成了公司的 CIO。
剩下的 100 名程序员需要做原先 500 名程序员做的工作,为此他们度过了 10 年的不眠夜(加班)。到最后,部门里留下的全是廉价且能力一般的印度程序员。他们负责运行的系统处理着数十亿美元的交易。
他拿亲身经历举了个例子:
“在公司高层的眼里,我是一名 57 岁的老程序员(年龄大、薪酬高、性价比低)。最近公司在印度的班加罗尔招聘了 40 名新程序员,几天之后,他们把我叫到办公室,说我的职位被取消了。新招的程序员在印度远程办公,都不需要为他们办签证。签好协议后,我拿着遣散费(或者什么都不带)就回家了。”
他用自身经历告诉其他程序员,无论你在什么公司工作,无论你认为自己的公司有多好,都要小心。公司对股东负有受托责任,在你上头的那些人只关心自己的利益。程序员变得越来越便宜了,所以请把自负放在一边。大型机程序员的短缺现在由印度人补上,印度在大量培养能够用 COBOL 编程的高中毕业生,垄断了这个市场。我们(美国的大龄程序员)已经流离失所了。
如果你刚好到了 50 岁的坎,而且没有工作,就会受到年龄歧视。一些过滤算法甚至会直接将你的工作申请过滤掉。各种权威人士会告诉你,重新定义自己,学习一些新的东西。但在学成之后,你又大了两岁,成为了这个新领域的入门级的申请人。祝你好运!
饱和竞争、能力不足都是原因
作为一名工作时间超过 40 年的软件研发人员,Matthew Park Moore 的观点更为中正。他认为公司对程序员不好的原因有很多。
“有很多公司对所有人都不好,并非只对程序员不好。
有些程序员善于抱怨,有些耸人听闻的故事只是他们为了泄愤而捏造出来的。”
第一,这与金钱有很大的关系。当你不得不花 1 高价聘请一名程序员时,你会想办法节省开支。一个简单的办法就是要求程序员每周工作 80 小时,感觉就像用同样的钱招到了两个程序员 (但事实并非如此,不过经理们可以自欺欺人一阵子了)。
程序员是难以管理的一个群体,很多人对权威不屑一顾。大多数程序员都认为自己很聪明,他们必须自信、不墨守成规、善于进行横向思考,这样才能做好编程工作。
第二,编程工作是很难被安排的。程序员通常会花几周时间诊断一个 bug,然后修改一两行代码就可以把它修复。有时候,他们会花几个小时诊断一个 bug,然后得出结论:需要重写整个系统。没有人能对成本或交付日期做出可靠的估计。你怎么可能对老板这样说:“我每年需要一千万来开发一个系统。我不知道确切需要多长时间,也不知道是否会成功。”
第三,竞争很激烈。现在每一所大学都有计算机系,每个学院每年都有数百名计算机应届生毕业。他们当中有很多人能力不足,只能接受廉价的工作。因此,公司会雇佣这些人,或者至少利用他们来威胁有经验的程序员。
第四,软件开发行业需要天赋。没有天赋的人会奋斗得很辛苦,而且通常不能成为成功的程序员。大学里没有人会告诉你这些,但没有这些天赋你也能拿到计算机学位。因此,这些新手在放弃并转行之前,都会在一些编程岗位上挣扎,最后走向失败。他们的怨恨是可以被理解的,他们倾向于指责公司对他们不好。
软件行业竞争很激烈,很少有公司能够很悠闲地开发软件。新的财政年度即将来临,如果你没能赶上,竞争对手就会。管理层除了从程序员身上榨取更多的劳力外,几乎没有别的办法。
大多数经理不是程序员出身,也不懂编程。大多数升到管理层的程序员在这方面做得也并不好。因此,软件公司往往管理不善。
大多数经理都没有意识到对系统做出一些变更将会带来怎样的影响。对系统的一些更改看起来微不足道,但可能需要重写所有东西。经理想要的东西看起来很简单,所以它必须是简单的,如果有程序员说做不到,那说明他能力不够,或者他不诚实。如果你不了解细节,并且已经因为上面的一些原因开始憎恨程序员,就会很容易相信这是事实。
中国公司怎么看
针对这个话题,InfoQ 采访了国内一些技术团队的负责人,针对类似问题出现的本质、程序员的价值该如何衡量、程序员在什么情况下会感到不被重视、技术团队如何避免类似情况发生做了咨询。
黄勇,特赞 CTO,InfoQ 签约作者:
程序员待遇一般,往往是因为公司的业务一般。 反过来说,公司业务增长和收入提升,程序员待遇也会同步提升。我认为,程序员不仅需要关注技术本身,也要关注技术如何支撑业务得到更好的增长。
不能带来业务层面收益的程序员,可从对技术团队自身所产生的贡献角度来衡量,比如,针对一些技术攻坚或流程优化等工作,为团队提高工程效能,具体说来,可从当前现状如何,具体解决了什么问题,未来提升到怎样的水平,这些方面加以评估。
程序员感到被冷落,有两方面原因造成,一是程序员的自身价值难以释放,同时业务对技术价值无感知,二是大量程序员聚焦于技术本身,而对业务缺乏更多的关注。所以说,一方面需要让业务更多的了解技术,让业务感知技术的价值,另一方面需要激励程序员深入业务,并灵活选择合理的技术去支撑业务。
我们会将程序员分成两大类:一类是专家型程序员,让他们组建成「技术委员会」,负责技术整体架构和研发流程,以及对技术团队提供能力输出;另一类是业务型程序员,让他们深入业务,并带领项目团队,按照技术团队所制定的技术规范和流程进行高效研发,同时为业务带来直接支撑。
郭炜,易观 CTO,TGO 会员:
程序员的待遇是和他给公司带来的价值相关,如果程序员只把自己定义”码农“,那么他的待遇一定是一般的,因为这和施工人员没有区别。如果想提高自己的待遇,那么程序员除了自己的工作,要从”前台“来看,利用后台的编程能力完成前台的需求。这也就是最近”中台“这么火的原因,我的观点是未来的”中台工程师“是最值钱的 ,因为他们对业务有深入的理解,利用后台的技能高效地完成了”前台“的业务。整体来讲,待遇不是公司给的,是自己“挣”出来的。
程序员觉得受到了冷落,大部分是因为程序员成为了“码农”,每个程序员做的事情和本人对业务的理解以及业务结果都没有关系。程序员缺乏对业务的理解和影响力,这种情况让公司觉得这些人是可替换的,所以被“冷落”,因此很多时候换一个更便宜的技术对公司没有任何影响。要解决这个问题,就要程序员做到业务里去,对业务深刻理解,而不是写了程序就完了,对于这个程序对业务的影响,业务当中的作用,如何更好地提高业务有更好的想法。这样,程序员才可以得到公司的重视。程序员不要把自己当做“后台”,应该把自己当做“中台”,思想应该在“前台”,落地在“后台”。
我非常认同亚马逊的“Working Backward”的程序员文化,所有的程序员做的事情是要和最终某个业务挂钩的,建立起挂钩关系是技术管理者的的职责。不一定是收入或者活跃用户这样的指标,而是和这个功能的留存、使用率这样的产品指标。将产品指标作为桥梁,再变成 CEO 和合伙人可以理解的业务指标。具体可以参考极客时间《技术领导力 300 讲》相关课程。建立起可衡量的技术价值,是技术管理者的职责。
易观的技术团队理念是“未来科技开箱即用”,既要重视先进性技术,又要”开箱即用“。在这个思路下,整体架构上是”一横 N 纵“,一横是技术管理以及工程院,这个组织开发最新的技术赋能给各产品纵线,每个程序员是要看技术的先进性以及建立的技术门槛被产品线使用的情况。N 纵是多个产品线,每个程序员都会扛产品使用的指标,快速和产品、运营一起成长起来。这也是易观从一个传统公司升级为技术公司的秘诀之一。从公司角度来讲,也非常理解每一个程序员岗位给公司的价值,根据技术、业务角度也可考核可衡量每一个程序员的价值,让每个程序员都有活力做自己想做的事情。解决技术问题,不要用技术角度来考虑,从管理、架构的角度来解决这个问题是正解。
池建强,极客邦总裁,Mactalk 公众号作者:
我认为程序员是这个时代很好的职业,从最现实的薪酬角度来看,跟很多行业相比,互联网行业依然是高薪行业。比如前不久猎聘发布的 2019 年一季度中高端人才报告中的数据就显示,互联网行业中高端人才的平均年薪从 2018 年同期的 20.65 万元同比增长到了 23.42 万元,位居全行业第二,仅次于金融行业。
当然,现在的经济形势下,程序员的薪酬开始回归理性,不像前两年那样,人工智能和区块链领域的工程师动辄百万年薪。即便如此,程序员依然称得上是一个高薪职业,并且,优秀程序员的薪酬上限非常高。一个建筑设计行业的总工程师,每年风里雨里,工地奔波,年薪也就 50 万,院长干脆限薪 80 万,你们感受一下。但是在互联网行业,一个好的技术人员年薪可以做到一百万甚至几百万,如果运气好公司上市了,成为亿万富翁也是可能的。你身边或者你的前辈中应该有不少这样的例子。
在产品、技术、数据和算法主导的互联网领域,大部分好公司都是极其重视研发力量的。工程师在公司的地位也很高,看看华为阿里腾讯这样的顶级公司,无论是研发投入,还是工程师的薪酬,包括他们承担的职责,完全不会有冷落和不受重视的感觉。什么公司会出现这种情况呢?对技术力量没有认知的公司,比如认为流量比产品更重要,营销大于技术,只想收割用户而不想提供优质服务的……这样的公司也很难长久。
不过各家公司的业务和基因不同,有的公司更重视设计,有的是产品主导,有的奉行工程师文化,有的则更注重营销,在这些公司里,程序员受重视的程度是不同的,但不至于到冷落的地步。如果一家公司不重视技术,作为程序员,还是远离为妙。
程序员的价值体现其实是很容易衡量的,他们研发的底层技术服务是不是稳定高效,基于底层服务构建的产品是不是好用,bug 是不是少,功能丰富不丰富等等,这是最直接的价值体现,也是程序员的本职工作。如果公司基于这个产品获得了直接的商业价值,比如赚了几个亿,那程序员肯定是功不可没,这是他们商业价值的体现。
如果公司并没有基于这个产品赚钱,比如一个服务是免费的,但是通过免费服务获得了其他的商业收入,类似广告,商务项目等的功能,那就是程序员的间接价值体现。没有这些技术人,商业本身就是无本之木,无水之源。
如果一个公司的业务因为产品烂技术差,造成损失甚至倒闭了,这是程序员的问题。如果程序员根据公司的业务需求完成了产品构建,最终业务方向或战略出了问题,其实和技术人员也没什么关系。
极客邦本身就是做技术社区,为技术人提供产品和服务的,所以我们从构建研发团队之初,就非常重视工程师文化。工程师对技术和产品的参与度很高,加上我们本来就做技术社区、极客时间、技术大会等,技术福利和沟通讨论的机制也很好。整个团队又秉承了极客邦公开透明、诚实正直、乐于服务的企业文化,导致这个团队一直维持了非常好的工作效率,技术过硬,能打硬仗,能够承担重要的任务。
我非常高兴能和这样的团队一起战斗和生活。
|