【社长说】今天是1024,怎么看都像程序员日。社长决定跟大家伙唠唠,为什么你身边的程序员头发少,赚的钱却比你多?原因很simple,加班呗!那为什么他们有那么多的班可以加呢?本期的文章是对一个资深程序员的深度访谈研究,希望社员们看完之后,能够对程序员多一些些理解。
笔者的朋友阿K是程序员,我们对他的印象是:总是在加班。周一到周五每天从早上十点工作到晚上十一二点,工作到凌晨两点的情况不少,周末在家加班也是常态。即使是法定节假日,也要把电脑带在身边,随时跟进工作群中信息,回应突发性的问题。
虽然在整个市场竞争日益激烈的当下,加班已经成为各行各业的常态,但是程序员的加班强度要大的多。这也是为什么前段时间关于程序员的“996,ICU”问题会引爆网络的重要原因。之前的很多讨论都集中于劳资关系和程序员的劳动权益保护,也有少数文章涉及到程序员行业本身的特质,比如工资高所以加班多,但是总的来说,真正去了解程序员这个行业,并分析程序员这个行业为什么加班多的文章很少。![]()
今天是程序员日,我们就来了解一下程序员这个行业,了解一下为什么程序员这个行业加班多。在讨论这个问题前,我们首先要明确的是,互联网行业是一个大的行业门类,主要包括基础层互联网企业、服务层互联网企业、终端层互联网企业。而终端互联网行业中又可分为移动互联网和PC互联网。不同类别的互联网行业虽然都需要程序员,这些程序员的工作也都有共通之处,但是因为不同类别的互联网行业特征不同,程序员加班情况也不同,这里仅仅讨论移动互联网行业的程序员为什么加班多这一问题。
1
4G时代移动互联网行业竞争白热化
移动互联网是指互联网的技术、平台、商业模式和应用与移动通信技术结合并实践的活动的总称。移动通信技术(也就是我们常说的4G和5G)的发展是决定移动互联网市场体量的重要因素。一旦我们拥有了新的移动通信技术,就意味着移动互联网市场的扩大。因为新的通信技术实现了网络容量进一步扩大和数据传输速率的进一步提升,一方面,这使很多新的技术的开发得以可能;另一方面,我们可以基于此开发人们的新需求。这两点,使得我们得以重构移动互联网市场。4G时代的开启为移动互联网的发展注入巨大的能量,在PC互联网已日趋饱和的情况下,4G的发展使得移动互联网呈现井喷式发展。2013年中国网民规模达6.18亿,手机网民达5亿。之后手机用户数量急剧上升,截至2018年12月,手机网民达8.17亿。这些都建立在4G技术发展的基础上。
![]()
问题是经过这么多年的开掘和竞争,4G时代的市场已经被瓜分得差不多了,移动互联网行业进入了竞争白热化阶段。在5G时代还没有真正到来之前,这种竞争白热化状态暂时不会被改变。在这一大的背景下,移动互联网公司必须加紧发条,提高程序的更新速度以提高自己的竞争力,否则很快就会被“PK”掉。
阿K对这一点深有感触。他原来在某手机公司上班。2014年到2016年属于这个公司的黄金期,公司整体的工作氛围轻松,福利也很好。但是到了2017年以后,整个市场竞争越来越激烈,公司没有及时转型,只是减少了员工福利但是没有提升工作进度,程序更新速度依然比较慢。很快这个手机公司就开始出现利润下降,上市失败,大面积裁员等现象。阿K也因此离开了这一家公司到了现在的这家科技公司。而阿K现在所在的科技公司,公司整体工作氛围十分紧张,每天都像战场一样。即使上了市,整个公司发展也依然十分艰辛。事实上,在这样的市场环境下,无论是企业还是程序员,都不得不加紧自己的发条,否则就要被市场淘汰。
2
中低级程序员竞争激烈,高级程序员稀缺
同在激烈竞争的市场环境下,不同程序员的加班原因却有不同,其中,中低级程序员和高级程序员的加班原因就有很大的差别。中低级程序员数量多,门槛相对较低,又要和不断增多的毕业生竞争,导致中低级程序员内部竞争激烈,不得不加班。高级程序员稀缺,在市场竞争激烈的情况下,公司的运转对高级程序员依赖大,高级程序员工资高,但工作繁重,不得不加班。中低级程序员加班多和我国互联网行业以及程序员培养所处的阶段有很大的关系。随着互联网在人们生活中的重要性不断增强,选择互联网相关专业的学生也越来越多。这使得互联网专业的毕业人数不断增多,从业人员的专业化程度越来越高,学历水平也越来越高。据统计,2014年进入到互联网行业的毕业生中,研究生以上学历的互联网从业人员占比达47.1%,MBA和博士分别为6%和2.9%。此外拥有海外教育背景的占43.5%。拥有计算机类专业背景的人居首位。互联网从业人员的数量增多,专业化增强,会导致互联网行业就业竞争日趋激烈。当越来越多的学生倾向于选择可能有高收益的计算机应用专业时,竞争激烈的程度只会增强,不会减弱。市场上既有的未能成功和即将成功转型的中低级程序员,要和逐渐增多的刚刚毕业的中低级程序员竞争,争夺有限的岗位,这必然会增加中低级程序员工作的强度。在互联网行业竞争激烈的当下,这一问题更加突出。
![]()
越来越多的毕业生从事程序员这个行业,同样会强化高级程序员的压力。不过对于高级程序员,大量新增的毕业生不会直接成为他们的竞争对手。一个高级程序员,不仅仅需要有专业知识,还需要在工作岗位积累项目经验,对整个互联网环境的复杂性有一定的理解,有整体性和系统性思维,有较强的知识迁移能力,统筹和管理项目的能力等等,这些都是评判一个高级程序员的重要指标。而这些都不是一个毕业生刚毕业就可以具备的。除了那些在学校就做过很多项目且十分优秀的毕业生以外,大多数毕业生都需要在工作岗位上摸爬滚打个三五年,才能成为高级程序员。这意味着从毕业生到高级程序员有一个时差。
而且由于互联网行业更新速度快,程序员知识更迭速度稍有落后,就可能被甩出通向高级程序员的跑道。也就是说,并不是所有程序员都能够实现转型。正是因为存在毕业生到高级程序员之间存在一个时差,而且有的中低级程序员需要更长的时间,也有很多并没有实现从中低级到高级的跨越,这使得我国高级程序员竞争环境相对缓和,但是却相对稀缺。在这样的情况下,为什么高级程序员也在加班,很多公司高级程序员加班强度更大呢?这又要说回市场环境了。在市场开拓期或者说市场环境较为宽松的时候,公司可以通过雇佣更多的中低级程序员,从而增加新的程序或者项目来增加利润。但是在竞争日渐激烈的市场环境下,企业更加依赖高级工程师,希望通过高级程序员作用的充分发挥,达到提升整个现有的程序或者项目运转的系统效率这一目标,以守住既有的市场,从而实现利润增长。这意味着公司会尽力提高高级程序员的薪水以留住稀缺的高级程序员,同时也会增加高级程序员的工作强度。在阿K所在的公司就出现了这样的情况:无论是高级程序员还是中低级程序员,加班强度都很大,而且程序员的级别越高,加班越狠。
3
移动互联网用户极易流失
在移动互联网行业,用户极易流失,为了留住用户,就需要加班加点及时回应用户的需求。在移动互联网行业,用户极易流失的原因如下:(一)同类app较多,同质性强,而且选择其他同类app的成本低,用户极易流失。一个重要的原因是,除了少数“巨头”程序以外,大部分程序的垄断性较弱,常用的视听类程序就有上十种,可替代性强(付费时代到来之后,垄断性开始增强,替代性弱化,这里更多讨论付费时代到来之前)。购物平台也十分多元。而且选择另外一种app,只要在应用市场免费下载就可以获得,其成本非常低。我们在用app的时候,在不同app之间换来换去的情况,比较普遍。这就使得移动互联网行业的用户竞争变得更加激烈,必须通过快速反馈用户需求和改进用户体验来留住用户。
(二)程序使用的频率大,间隔周期短,好的或不好的体验都容易被强化。我们知道衣服总是有季节性,而且一般隔几天或者一天穿一次。但是用户对于程序的“体验”更为持续,更为日常化,弥散在用户的日常生活中。当用户选择用这个程序时,每天,每一个或者两个小时,用户都在运用程序。好的体验会被不断强化,不好的体验亦是如此。
(三)在互联网的世界,用户彼此交换“用户体验”的速度极快。在某个服装店买衣服的服务体验不好,你最多给亲朋好友传一传,或者在店里们闹一闹。个体不好的用户体验扩散的范围非常有限。但是在互联网世界,用户反馈的方式更为多元,在不同的网络社区内,程序用户体验评论区等等,用户体验的分享非常及时,导致其扩散性也极强,尤其是一些较大的,事件型的问题。因此,一旦有不好的用户体验,如果不及时进行纠正,一经扩散,就很有可能导致大量客户的流失。
(四)程序员更新代码的周期短。为了不断完善用户体验,就要不断完善代码。而代码的生产和实物的生产不一样。实物生产,从收集需求到商品生产出来,需要一个比较长的周期。代码的生产周期要短的多。生产周期越短,说明回应用户诉求的速度越快,竞争优势就越明显,就越容易留住用户,反之就越容易流失客户。因此,在程序员这个行业,一旦有新的版本发布或者新的项目,基本上都需要加班。而且版本更新越快,加班就越频繁。
(五)移动互联网用户一般都在下班时间进行“消费”。用户使用程序以“购买”这种“体验”,并不需要选择特定的“营业”的时间。任何时候,任何地点,只要有网络,有充足的电量,程序都“营业”,用户就可以进行“消费”。而且大部分人集中消费的时间往往是下班时间,比如晚上6点到12点和周末。这一时期,程序触发最为频繁和集中,并发数最大,对于程序的运行效率要求最高,也是最容易出问题的时候。因此,程序运行最容易出现问题的时间往往是下班的时间,这也是用户流失的重要时间。这是程序员往往上班时间和下班时间都比较晚,节假日也要跟进问题的重要原因。
为了留住客户,提供高质量的“用户体验”,快速更新版本,快速修复bug,在下班时间及时回应用户的反馈,以快速及时回应用户的反馈,成为了保持程序竞争优势的关键。这是导致程序员节奏快,加班多的重要原因之一。
4
程序员与产品经理的“爱恨情仇”
程序是由一行行代码构成的,代码细节繁多,功能模块也多,任何一个功能模块出现问题都容易导致系统崩溃,从出现问题概率上讲要多很多。这意味着程序的运转是一个系统性较强且极为复杂的工程,牵一发而动全身。因此,程序的运转对组织部门不同部分的系统性协调的要求极高。而决定程序有效运行的主体,并不只有程序员。程序员只是程序“生产和运营”流水线上的一员。一个移动互联网公司,主要包括以下条线, 1)产品条线:产品经理、产品助理、设计师等。2)运营条线:产品运营、活动策划、会员运营、数据运营、(新)媒体运营、内容策划、编辑等。3)技术条线:架构师、前端工程师、开发工程师、测试工程师、运维工程师等。4)市场条线:渠道、推广、商务合作等。5)行政条线:HR、行政等。流水线上不同主体之间协调不顺畅,会加大具有系统性的程序良性运转的难度。在这条流水线上,产品经理和程序员的关系协调难度较大。笔者在网上看到了这样一个段子:“产品经理失踪了,程序员第一时间到警察局,报警警察对程序员说:你先冷静一下,你这样一直笑没办法做笔录”。网上这类调侃很多,大多反映的是程序员与产品经理之间的矛盾。为什么两者之间会存在如此大的矛盾?
![]()
我们首先来看两者的主要工作。产品经理主要负责发现和提取客户需求,而程序员是将产品经理提出的需求操作化。两者协调出现问题,一般包括两种情况:一种情况是,产品经理不考虑操作化的问题,“盲目”提需求和改需求。在实践中,并不是所有产品经理都懂技术。很多产品经理提需求的时候,并不考虑一个新的需求需要写多少代码,不考虑回应这个需求对于整个系统运行的影响。即使是学过技术的产品经理,也会因为远离编程太久,而技术的更迭速度较快,和技术距离越来越远。因此,产品经理不考虑操作性的问题较为普遍。
另一种情况是,并不是所有程序员都能够理解产品经理所提出的需求,将产品经理所提出的需求操作化。“高级程序员在看到一个需求的时候,总是能够快速在大脑里生成这个需求在现实生活中的映射。每当产品经理提一个需求的时候,高级程序员首先想到的就是,这个需求需要哪些数据库上的改动,对现有的逻辑有什么影响,需要提供多少接口,存在哪些可能的风险,以及需要多久的开发周期。普通程序员拿到需求以后,首先表现的是一脸懵,因为往往产品经理的文档写的非常长,有时还难以理解,普通程序员难以提取里面的关键点。所以这时就需要项目经理这种角色,提取需求,然后告诉他,提供什么接口,对数据库做什么修改”。但这也意味着又增加了一个沟通环节。其关键问题在于,提需求容易而操作需求太难。在大部分企业,提需求和操作需求的人是不同的主体的情况很普遍。不同的是,不同企业提需求的人和操作需求的人之间专业上的差距不同。两者的专业鸿沟越大,沟通难度就越大。而在互联网行业,恰好就存在这样的情况。代码编写是一个专业性较强和系统性较强的工作,一行代码错了,整个系统就没有办法良好运转,甚至没有办法运转。而提需求比较容易,互联网领域用户需求的变化很大。这些都会加大两者沟通的难度。在实践中,即使程序员理解产品经理的且产品经理提出的需求是合理的,产品经理和程序员也要就需求和需求的可行性问题进行长时间的沟通。在程序员不理解需求或者产品经理提出的需求不合理的情况下,这个沟通过程将会更长。两者达成一致之后,产品经理的工作似乎已经完成,但是程序员的工作才刚刚开始。如果项目完成或者版本更新的截止时间已经定下来了,为了在截止时间完成,程序员就不得不加班了。不仅如此,公司老总盲目提需求,也会进一步使得问题变得复杂。在互联网界,老总脑子一热,一拍脑袋,提出一个新的需求,而这个需求并不合理、甚至是伪需求的情况并不少见。此外,在程序员内部,找BUG的测试和解决BUG的开发之间同样存在各种沟通问题,两者之间的沟通不畅,同样会增加加班的可能性。
5
高工资=高加班强度
程序员加班多,最为直观的原因是这个行业的工资高。“在百度,月最低工资就是7k,一个普通程序猿很容易就能拿到20k以上的工资;阿里巴巴:13k~18k*15;腾讯12k~14k*16”。即使是一般的中小型企业,其工资也不低。笔者接触到的一些中小型互联网公司的程序员,很多都有10K~15k*15,一些高级工程师也有30k。在网上总是能够看到一些标题,即“某某公司为什么能给应届毕业生那么高的工资,程序员:工作量大,很忙。”把这句话反过来说,意思是程序员工作大,很忙是以公司给的工资很高为前提的。这是程序员加班多的一个基本前提。就这一点,阿K和我说,其实自己挺希望加班的。因为加班费是平常工作的两倍,法定节假日达到3倍。在日薪1000元左右的情况下,这笔账有的算。在前一个公司,有一段时间,大家都乐于加班。但是之后公司效益不好了,他们想加班要申请,而且还申请不到。加班费高,这种情况在行业里并不少见,有一位华为员工在论坛抱怨,“三月真是苦逼,华为基地加了6天班,看了下加班费,虽然有14000多,但还是感觉有点累,4月不想加班了”。网友直言,“还缺人不”,“加班到公司破产”。当然,没有加班费的情况,就另说了。
6
写在最后......
除了一些结构性原因以外,程序员加班多也有一些个人原因。阿K给笔者介绍了以下几种情况:第一,一些人喜欢加班。一类是技术狂;一类是没有社交活动,喜欢待在公司的人。第二,一些人干活拖拉。白天写会儿代码,逛会儿论坛,到了要完成的时候,才想着急匆匆写代码。第三,一些人不会识别需求的“轻重缓急”,没有设立优先级的意识,来一个问题处理一个问题,导致工作节奏混乱,效率不高。无论是结构性原因,还是个人原因,给我们的总体感觉是,程序员这个行业有其特有的行业特质,导致程序员加班的原因是多元的。强调这一点并不是要为企业主背书,也不是为“996+ICU”开脱,而是想要通过这些讨论,理解程序员行业的复杂性和程序员的真实处境。因为只有做到这一点,才能真正解程序员之困。在世界市场竞争愈发激烈的形势下,核心技术领域的竞争是决定中国能否在世界市场竞争中胜出的关键。而程序员是决定中国能否在核心技术领域竞争中获胜的主力。理解程序员,解程序员之困,对于中国的发展来说,至关重要。在程序员日,这篇文章算是做一点抛砖引玉的工作。
行业研习社独家稿件
作者:元一 社会科学工作者
编辑:Orez
行业研习社|独家原创 侵权必究 转载需注明“行业研习社”
关于行业研习社
我们是来自高校和科研院所的老师、博士生,以及从事具体行业的业余研究者,拥有不同的学科背景和知识背景,有丰富的田野调研或行业经验,希望通过这个平台,和大家一起绘制中国行业的图景。
欢迎来自各行各业的人投稿,分享你的行业评论,行业故事和行业体会。