程序员加班的真正原因是什么?

167 阅读7分钟

真正原因就是上班时间在写Bug,所以下班时间就用于加班。

言归正传,真正原因得分阶段来说:

  • 刚毕业:不熟、提升、努力
  • 3~5年:赚钱、高薪、工作量大、瓶颈性
  • 5~10年:为加班而加班、白天摸鱼晚上加班
  • 10年以上:没有加班的概念
  • 当下:不加班就可能被裁员

一般刚毕业出来工作,大多数加班是因为的确自己想学知识,想提升自己,技术和业务不熟出的问题也会比较多,程序提升的空间也很大,所以会常常加班。

到了工作3~5年,这段时间也是程序员工作的黄金期,或者说赚钱的黄金期。所以一般选择工作也是选择高薪的工作,而高薪换来的自然就是高工作量,所以加班自然也会多。我自己在这个阶段也是经常加班,我记得一次加班第二天就是中秋节,结果我们整组人加班到第二天10点,然后出了公司吃了个早饭,各自回家睡觉去了,中秋节就这么睡过去了。另外在这个阶段,差不多就会碰到自己职业的瓶颈期了,这会自己会想着提升自己,但又找不到方向,所以只要一有空就会花时间看视频或者文章寻找自己的方向。

再到5~10年的阶段,这个阶段为了加班而加班的时间会比较多。比如做给领导看,领导做给老板看;再比如加班赚取调休或加班费;再比如白天摸鱼,晚上加班。加班的机会和原因很多,但正当的加班还是比较少的。

再往后就是10年以上了,这个阶段的加班就不叫加班了,基本上这个阶段的程序员要不就是管理层了,这会就没有加班的概念了,不论周一、周日都是在上班,有没有大伙伴们有类似的经历,提交的加班申请被驳回,理由是管理层没有加班概念。如果没有管理层可能就是延续上一阶段的状态了。

而当下的加班或许更多的就是因为大环境不好,大多数程序员都是工作在科技互联网行来,而目前大家都面临的同一个问题就是裁员、失业、35+危机。不加班等于没活干,等于不融入团队、公司文化、等于没有责任心、不敬业,没事都得找找事做。

外因

目前全球经济下行,最初主要是互联网行业后面各行各业都如此。科技巨头们普遍收缩,包括IBM、Google、字节、阿里、腾讯等等,微软自然也在其中。

据统计2024年共有429家科技公司,裁员13.6万人,其中裁员最多的戴尔、英特尔、特斯拉合计解雇员工5.55万人。

图片来源:jin10.com

  • 微软2025年上半年累计裁员约一万人以上,其中7月2日爆出来的消息是拟裁员9000名员工。
  • 字节跳动今年7月启动第三轮全球裁员
  • 2025年6月,Google裁撤智能电视团队约25%人员
  • IBM 8000名员工将被解雇
  • 阿里巴巴截至2025年3月,员工总数较上一财年减少8万人左右

如果不加班每天按时上下班,那么下一个被裁的人可能就是你了。所以还得表现出自己有事做,得想办法找事做。当然最好的结果是公司在找事做,找到新的风口或者程序员自己在风口启动自己的B计划,这样自己的人生或职业才有了保障。

当前最大的风口,无疑就是AI。 站在这个风口,普通人也能被时代的风托一把飞起来。对我们35岁以上的职场人来说,精力、时间都比不上年轻人卷,但我们可以靠方向对、工具新,把杠杆撬得更远。

内因

写出来的程序的确会存在Bug,虽然已经考虑到方方面面,测试团队认认真真的测试过了,但程序上线还是会出Bug。

程序员圈子一般自嘲自己不写bug那公司就会干掉我,我也没有存在的价值了。虽然是自嘲,也是无奈,但更多的还是希望自己程序是无bug 的。

首先来看看 Bug 的由来,

"Bug" 一词最早可以追溯到计算机科学的早期。1947 年,美国计算机科学家格蕾丝·霍普(Grace Hopper)在哈佛大学的 Mark II 计算机中发现了一只飞蛾卡在继电器中,导致计算机无法正常工作。她将这只飞蛾贴在日志本上,并写道:“First actual case of bug being found”(首次发现实际的 Bug)。从此,"Bug" 一词被广泛用于描述计算机系统中的错误。

"Bug" 通常指软件、硬件或系统中的错误、缺陷或故障。它的来源一般有复杂性问题、编程错误、设计缺陷、需求误解、环境问题、时间压力等。

软件开发并不简单

软件开发本身就是一个非常复杂的过程。一个软件系统可能包含成千上万行代码,涉及多个模块和功能。

下图是历史上最庞大的代码库代码行数,排在最下面的是 Google:

Google 全家桶代码行数大概在:20亿左右

微软 Windows11 代码行数在:1亿左右

即使是最有经验的程序员,也很难在第一次写代码时就考虑到所有可能的情况。比如,用户可能会输入一些奇怪的数据,或者在某些极端情况下系统会崩溃,这些都需要在开发过程中逐步发现和修复。

假如一个简单的计算器代码,也就是加、减、乘、除的功能,那么正常的计算都是没问题的。

但是如果用户输入非数字:如果用户输入的不是数字,程序会崩溃。

除以零:如果用户选择除法并且第二个数字是零,程序会崩溃。

这时就会产生 bug,就需要修改 bug 了。

即使修复了上述问题,程序仍然可能存在其他潜在的 bug或边界情况。比如输入超长数值、输入负数(当前程序员有考虑到负数)等等。

除了软件本身存在的复杂度来说,还有另外一些因素。

软件需求不完善或误解

软件需求根据产品人员、业务复杂度相关,随着项目的深入和产品的熟悉,认知加深,会发现需求不完善的问题,此时需求需要完善。这就意味着程序员需要不断地调整代码,以满足这些变化。即使需求没有变,开发者对用户需求的理解有误,导致开发的功能与用户期望不符。

Bug发现者经验

一般来说发现 bug 最多的应该就是测试。虽然测试是发现Bug的重要手段,但测试覆盖率永远不可能达到100%。程序中有无数的分支也就是无数的可能性,开发自己单元测试都可能无法覆盖 100%。再加上用户硬件、系统、网络及数据都会有差异这个覆盖 100%就更难了。随着经验的积累,自动化测试和手动测试只能覆盖一部分场景,很多Bug只有在实际使用中才会暴露出来。所以,即使测试通过了,也不代表代码就没有问题。

代码质量

代码质量也是一个问题。为了赶进度,程序员可能会写一些“临时性”代码,这些代码可能在短期内有效,但随着项目的扩展,可能会引发新的Bug。这就需要程序员在后续的开发中逐步优化和修复。

另外如在并发的业务中开发人员使用了 Java HashMap 在多线程环境下是非线程安全的,如果多个线程同时修改同一个 HashMap,可能会导致数据不一致 使业务异常。这种 Bug 与开发者的经验与能力都有关联。

AI的入场不但可以改变程序Bug量,还可以提升代码的质量和效率。