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