来源:新闻实验室(ID:newslab)

作者:聊科技的川叶

从上周开始,一批在中国各家互联网公司工作的程序员在代码托管平台GitHub上建立了项目996.ICU,向互联网公司的“996工作制”(朝九晚九,每周六天)等侵犯劳动者权利的企业制度发起了抗议,获得了程序员群体的大量支持。

然而,996.ICU这个项目的网站很快就被360、QQ、UC等国产浏览器以“非法信息”、“保障绿色上网”等理由屏蔽。

图片来自网友 @oiax

于是有人调侃:“中国程序员最大的困境就在于,昨天在 Github 上给反996项目加了星,今天就要加班给360浏览器、QQ浏览器、UC浏览器……更新屏蔽反996项目的网址。”

这句话只是一句玩笑,其实很不准确,现实恰恰相反,中国的程序员通常来说并不会直接负责这种工作,中国的大公司通常会把项目进行非常细致的拆解。

就拿这个功能来说,通常的实现方式是:应用的前端预留屏蔽的接口和界面功能,后端给出管理数据下发通道,再做一个供审核人员维护的数据管理后台。这样一来,没有哪个程序员具体地屏蔽了反996项目的网址,但几乎每个人又都参与了其中的一小部分。

如果你不是互联网行业的从业者,或者你即使在互联网行业工作,但对基层程序员的生存状态不太了解,那么你就是本文希望面向的读者。

“码农”和车间工人 真的挺接近了

让我们从中国的大公司一般如何开发一个浏览器说起。中国程序员的处境如何?这件事情为什么能够迅速传播和有众多响应?了解了这个具体的案例之后,可能会有更直观的理解。

浏览器本身属于技术较为复杂、开发成本很高的软件,但国产浏览器却为数众多。一种复杂、高成本的东西却出现了同质化竞争,这是为什么呢?

这是因为国产浏览器基本都使用了名为 Chromium 的浏览器内核或类似的内核,在它的基础上进行二次开发,所需的开发成本极大下降。Chromium 是 Google 公司基于另外一些开源软件开发的浏览器内核,它本身也是开源软件。

这样做其实是十分正确的。近几十年来信息技术能够突飞猛进,并且越来越多的人成为信息产业的消费者和劳动者,就是因为开源软件成为了互联网的基础设施。由于互联网的基础技术几乎都是开源的,重复的“发明轮子”毫无必要。这使得开发者可以专注于两个方向:对基础技术的深入研究,或对技术应用的开发。

中国的信息技术产业,特别是过去十多年崛起的一些大型互联网公司,他们的重点主要还是在对技术应用的开发上。过去十多年来,中国互联网产业的发展所提供的机会,使得业界认识到:投入到应用中的收益,显然比基础研究的收益更大。

随着这些基础的开源技术开发工具的进步,中国的程序员的入行门槛也越来越低,这和市场对程序员的需求数量越来越多这一趋势又是匹配的。随着资本参与互联网的大战,“快”成为互联网行业的共识。其实由于开源生态的存在,技术开发如今本身已经快得不能再快了,但市场竞争是残酷的,没有最快只有更快。

这就产生了一个矛盾:产业迅速膨胀,从业人员的水分也越来越高,但市场对公司的效率要求也越来越高。在这种态势下,技术应用方面的研发,很容易落入劳动密集型的实质当中。

难怪如今程序员往往自嘲为“码农”,意思是“写代码的农民工”。程序员褪去了“智力劳动者”的光环,似乎成为了和车间工人没太大区别的工种:无论是从工作的复杂程度来看,还是工作时长对工作的产出来看,都越来越接近了。

如果你自己尝试过学习一些网页开发基础,你也许会感叹自己和一个建筑工人、装修工人的工作状态有一些相似。

基层程序员的真实地位

当然,把程序员和传统的产业工人做类比其实并不完全正确,这主要是因为:脑力劳动,或者说智力和知识,在信息技术开发的工作中起的作用太大了。

前面讲到,以开源为基础的技术生态,造就了技术的自我迭代速度越来越快。信息技术本身是日新月异的,它是其使用者所创造,其使用者主导其发展方向,又驱使着使用者不断更新知识。

面对一个需求,可能有几十种现成的技术方案可供选择,具体应该选择哪一种,就需要技术方面的知识和判断力。为什么国产浏览器会纷纷选择 Chromium 作为其内核,而不是其它呢?这个决定不是哪个公司的哪个程序员自己做出的,必定是有各个公司的技术委员会决议,或者技术经理、架构师论证过的。

虽然大家都是用的同样的内核,但我们看到各家的浏览器有其特色功能。这就不是程序员自己的主意了,而是产品经理的要求。为了统筹公司里的市场、产品设计、技术研发团队用在某个具体项目上的资源,大公司往往还设立项目经理岗位,做项目管理工作。

由此我们看到了基层程序员所负责的工作在互联网公司的结构中所处的地位。

产品设计部门一旦把需求确定下来,技术研发部门继而把技术实现方案确定下来,剩下的工作,就是经过详细的拆解,交给基层程序员,按部就班,一行代码一行代码地做出来了。

各种经理忙着开会,跨部门开会,部门内开会,把需求确定下来,再落实到产品设计和开发需求上来。一个基层程序员,还可能面临着每天三番五次开会,或者需求变来变去,留给自己清净写代码的时间未必是自己能掌控的。

程序员不是一个单一的群体

讲到这里,想必大家能够理解:996的问题所牵涉的,并不仅仅是劳动法的落实与否这样简单了。即使在程序员这个职业群体内部,面对这个问题,也可以看到几种明显的态度区别。

996的问题是这样一种结构和现实造成的——互联网行业高速发展,行业薪酬水平已经很高,这个行业的从业者很少有转行的动力,因为转行往往意味着明显的薪酬损失。而想在这个行业待下去,就必须在这个结构中找到最符合自身利益的位置。这样一来,基层员工对劳动时间或者强度的抱怨,往往很难得到“工友”的实际行动支持:公司的竞争力有赖于比隔壁公司工作得更努力,而公司的竞争力是保持较高薪酬的前提。

这个逻辑让我想起当年记者调查富士康,工人为什么普遍超负荷加班。许多工人都表示,宁愿自愿多加班赚钱,怕的是不让加班、无班可加。

但和富士康工人不同的是,程序员群体中的确有相当多的人给反996项目加了星(截至本文写作时已经有15万人以上)。说明程序员中有相当一部分人是明确反对加班的。

给对这件事情的主流态度分个类:

- 反对996;

- 虽然反对996但不认同采用强制措施;

- 支持合法996;

- 支持完全的市场决定劳动制度。

我的个人观察是:越是基层的程序员越是反对,越是高级的技术经理人越是倾向于支持,起码不完全反对。甚至还有程序员直接表示:反996就是一场闹剧。

所以,并不能把“程序员”看作是一种真正存在的群体标签。程序员只是代表一个工种,这个工种内部的阶层区别相当丰富。因此,不同的程序员基于自身利益的出发点,有不同的政治主张。

代际差异与时代变迁

十多年前,第一批进入互联网行业的劳动者都是年轻人。如今他们中的一小部分成为行业精英,另一部分面临着老龄化的问题。但如今新入行的95后,和当初的85后面对的社会基本面,以及他们的生活态度,都有很大的不同。

我们似乎总是可以看到一些企业管理者抱怨现在的年轻人不好管了,频繁跳槽之类的。而已经全部进入30岁的80后们,虽然比95后看起来似乎更能吃苦一点,但作为独生子女一代身上的负担之重,也是企业所不能避免的。

互联网行业在中国疾风骤雨的时代已经到了尾声,行业增长趋于平缓。在暴涨时期,企业之间白热化竞争、同质化竞争却惯性依旧。从业者对自身收益增长预期的放缓,在心理上还无法完全接受。

所以反996事件在这样一种历史背景下,可以说是一种必然。过去十几年,明里暗里的996公司其实很多,别说996了,“007”的情况也不是没有。可是为什么现在才有互联网行业的反996运动呢?说到底,还是劳动者的付出和收益已经不成比例,或者说对未来的期许已经大不如前。

在一个理想的世界里,程序员们对新技术痴迷、利用业余时间研究创造,推动了技术的发展,所以把更多的业余时间留给程序员,更有利于产业的发展;在现实中,绝大多数程序员上班如“搬砖”,是一份养家糊口的职业。企业为了最大化人力产出,使用996作为一种管理手段,既压缩了人力成本,又满足了单个员工对自身薪酬的要求——但就无法满足员工对健康和生活的要求了。

在一个市场决定论者的眼里,反对或是支持996都是一个伪命题。因为如果996制度既不能满足市场需求,又不能满足劳动者的利益诉求,那公司也就不能从中获利,自然就会消失。但在一个社会责任论者眼里,社会的结构性压迫是单纯依靠市场无法消除的,必须有法治的正义作为保障,因此《劳动法》作为兜底是必需的。

代码、传播和声音

但是,对于绝大部分程序员来说,社会历史背景、公司管理、市场经济的理论,都不是他们熟悉的东西,他们的教育经历中缺少这方面的知识。

于是我们看到,他们在抗议的时候借助的是另一种他们熟悉的东西——像GPL、MIT License之类“开源软件许可协议”。

开源许可证是授权开发者使用软件源代码的一种合同,你必须同意条款,才能使用它。于是,有人建议和起草了反996工作制的“开源许可证”,希望能以此影响业界对996的态度。

围绕该不该用“开源许可证”反对996,程序员基于政治立场的不同,当然也有不同的声音。但程序员对开源软件的生态其实都比较熟悉,大多数人并不会幻想这种许可证真的可以让996成为历史。

试图把反对996的这种声音,植入到开源软件的生态中,不得不说这是非常有意思的想法。因为开源软件本身就是一种传播媒介,一个开源项目会衍生出更多的开源项目,就像生物演化一样,形成丰富的分支。而许可证作为其唯一稳定继承的信息,会因这个项目自身的价值而被放大传播。

于是,代码和开源软件生态,成为一种表达意见的信息载体。

其实这并不新鲜,开源软件的许可协议诞生之初,很大一部分原因就是开源软件的最初倡导者们为了表达开源、自由软件的主张而设计的。

历史有其自身的结构和循环。在理想主义的背景下,开源软件运动创造的生态使得中国的开发者可以迅速开发软件应用,形成大公司之间的白热化竞争、狼性文化,进而产生了996的问题。

而如今,一些中国的程序员希望通过开源软件内置反996条款的许可证,来传播反对996的声音,对抗一种结构性的压迫。

另一些程序员,他们有的成为公司中高层,权衡着996的利弊,掌控着对千万名程序员的业余时间的控制权;有的自己创业或成为独立开发者,24小时心里都是工作,但具体时间自己灵活掌握;有的远渡重洋,去一个没有996的地方继续搬砖,成为当地的高收入者。

有能力的人是有选择的,自然可以自扫门前雪。但一个文明的社会,需要给所有人发出声音的渠道,更不能抹煞一个群体发出声音所做出的尝试。我想,与争论996是不是合理的相比,倾听他人、理解他人,整个社会的信息和声音的传播渠道的畅通无阻,才是更重要的。

996和被辞退,二选一相关推荐

  1. 996 成福报?让员工二选一:996 或 11/11/6

    一个在下班路上猝死, 一个转正不久的跳楼, 一个网上发帖遭开除, -- 在一波接一波的吐槽声中,某司似乎有调整了-- 某司或取消 11/11/6,改用 996 近日有媒体报道,某司市场部门的部分小组工 ...

  2. FPGA(3)验证数字逻辑(与门、与非门、二选一数据选择器、2-4译码器、半加器、全加器)

    目录 一.验证与门 二.验证与非门 三.验证二选一数据选择器 四.验证2-4译码器 五.验证半加器 六.验证全加器 0.初始化定义 1.第一个半加器 2.第二个半加器 3.得到最终进位Co 代码 0决 ...

  3. JS流程控制语句 二选一 (if...else语句) 语法: if(条件) { 条件成立时执行的代码} else {条件不成立时执行的代码}...

    二选一 (if...else语句) if...else语句是在指定的条件成立时执行代码,在条件不成立时执行else后的代码. 语法: if(条件) { 条件成立时执行的代码} else {条件不成立时 ...

  4. 表单验证自定义二选一

    联系方式二选一 let validateRemindPhone = (rule, value, callback) => { //验证手机号码 const {remindEmail} = thi ...

  5. sencha touch Model validations 自定义验证 二选一输入验证、重复验证、时间验证、比较验证、条件验证(2015-1-14)...

    项目初始化时执行以下代码 1 //重写模型,方便进行自定义验证 2 Ext.define("Ext.zh.data.Model", { 3 override: "Ext. ...

  6. Verilog二选一数据选择器

    //二选一数据选择器module mux2_1(a0,a1,s,f) input a0,a1,s; output f;//默认是wire(线)变量 assign f=(s)?a1:a0;//assig ...

  7. (73)多路选择器(二选一)

    (73)多路选择器(二选一) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)多路选择器(二选一) 5)技术交流 6)参考资料 2 FPGA入门与提升课程介绍 1)F ...

  8. (128)FPGA面试题-用一个二选一的MUX和一个非门实现异或

    1.1 FPGA面试题-用一个二选一的MUX和一个非门实现异或 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-用一个二选一的MUX和一个非门实现异或: ...

  9. 家乐福举报山姆涉嫌“二选一”背后 会员店需要的不是模仿能力

    每到双11,关于"二选一"的话题就会被提及.值得注意的是,在愈加公平的竞争环境下,"二选一"的现象在电商行业有所缓解.而今年双11,这股风刮到了会员店这边. 日 ...

  10. 被指涉嫌“二选一” 山姆回应:欢迎良性竞争

    10月25日消息,日前,家乐福会员店对外发布公告称,开业第一天,竞争对手施压供应商回购买空了相关商品,使得不少会员无法购买.目前,家乐福已经向相关部门举报. 家乐福会员店称,在开业第一天,竞争对手施压 ...

最新文章

  1. Markdown 修改图片的尺寸
  2. 如何快速让你的站点进入灰白哀悼模式?
  3. mysql备份与还原
  4. 68. Leetcode 669. 修剪二叉搜索树 (二叉搜索树-基本操作类)
  5. 使用 AngularJS 和 Electron 构建桌面应用
  6. 使用 CSS 用户选择控制选择
  7. leetcode50:Pow(x, n)详解——pygo
  8. PyTorch 深度学习模型压缩开源库(含量化、剪枝、轻量化结构、BN融合)
  9. Java中哪些可以作为GC Roots
  10. 2017.8.5 One-Dimensional 思考记录
  11. 加速Qt在线更新--使用traefik-1.7.24(不支持traefik-2.0以上版本
  12. mysql数据表设计 对应成二维数组_结果集数据怎么转换成二维数组
  13. Jmeter使用教程
  14. 全国乡镇边界及名称的下载与格式转换方法(水经注万能地图X3.1+CASS10.1.5组合拳)
  15. 【保姆级教程】VMware+CentOS 7 配置静态IP(小名已排雷,放心跟着教程走)
  16. 基于STM32的EtherCAT从站IO讲解
  17. https://wenku.baidu.com/view/35c88b375acfa1c7aa00ccca.html--swot
  18. 巅峰极客2022初赛 部分题解
  19. 视频在html不能播放器,网页无插件直播H265编码视频播放器EasyPlayer网页播放器不能播放怎么处理?...
  20. 【得物技术】浅尝UI自动化之Airtest实践

热门文章

  1. Dockerfile构建PHP镜像
  2. 为什么说ReasonReact是编写React的最佳方式?
  3. Android 底部导航栏添加消息数目提示
  4. FZU 1075 分解素因子【数论/唯一分解定理/分解素因子裸模板】
  5. uva 11400 - Lighting System Design(动态规划 最长上升子序列问题变型)
  6. VC++ 监控指定目录改变
  7. Eclipse 安装插件(aptana、svn 、git、Java EE、JSHint)
  8. 与1000天的我约定
  9. matlab搜索路径
  10. 【OpenCV】函数imread的使用之通道数变化