首先,假设这个程序员是一位职场新手甲。他刚大学毕业,没有工做经验。来自产品的需求,他要理解好久才能作。而后开发的过程当中会遇到各类问题,若是经验不足以支撑他快速完成任务,那么只能求助于网络,书籍,熟人。若是这些都帮助不了他。他须要求助于同事。可是次数频繁,同事会厌倦于帮他解答;他也会羞于咨询。这时,他一天下来,基本都会卡在一个很简单的问题上。下班了,他尚未完成任务。没错,他须要加班了,由于他的编程能力很是差。 程序员
大概没有人会知道他是由于须要处理一个并不是高科技的问题。不懂技术的上司觉得他是个勤奋的员工,很是看重他。但是,这什么进度仍是会这么慢呢?创业的公司可等不起。这一切,若是招到一个有经验的开发人员,这一切的加班彷佛都不须要。 编程
好吧,公司开除了这名程序员或者他因“我的缘由”辞职了或者公司再招到一个相对有经验的程序员乙。固然,有经验的代价就是公司要付双倍的薪水。全部以前的需求在他这边都没有遇到过加班的状况。他是一名很是有经验的程序员,他在过去的二年时间一直在处理相关的开发工做。到这边来,全部的问题都是小意思。他的优秀表现让公司惊喜和意外,公司以为即便再招十个以前的员工也比不过他一我的。因此,双倍的薪水又有什么呢? 网络
一段时间后,公司开始提各类各样的需求,他终于开始加班了。加班不是由于某段时间需求的总量多了。而是由于随着公司的快速发展,需求也愈来愈多样化。他的知识储备不足以令他总能轻松应付。他变得和第一个程序员同样,也加班了。只不过加班的缘由不同,第一个程序员是由于一些代码的调试的缘由,而这位有经验的程序员是由于一些从没据说过的技术。他的加班让公司一样对他很重视,甚至认为是一位好伙伴。 学习
与此同时,公司在招他的时候也招进来了一名优秀的毕业生。他一样是一名没有经验的程序员,可是他有很好的学习能力。开发进度缓慢让产品人员和运营人员都难以接受。可是他总能在最后关头交付代码,尽管上线后须要修修补补。他常常加班来学习以便攻克技术难点,公司对加班的员工表示欢迎,由于没有人让他们加班,也不须要给他们加班费或者调休。公司为全部加班的人员提供良好的晚餐。他能够接大大小小的各类需求,只是,开发时间要比较长。可是他不会遇到那种代码调试不经过的简单的问题。相比程序员乙,程序员丙因为常常拖慢进度常常被产品和运营建议开除或者调岗。 测试
但是后来,公司对他欣赏有加。缘由有二:一是他终于能够用和程序员乙接近的时间来作任务;二是在程序员乙那里看似不可能的任务,程序员丙总能在最近关头给出解决方案和代码,只是时间比较长。产品和运营的观点发生了改变,向公司建议开除程序员乙。程序员丙是一个学习型的员工,时间让他有经验后,他成长成为一名更优秀的员工。 spa
公司有过教训后,终于不惜花重金去请各类优秀的程序员。由于只要有一名这样的程序员,就能够少请许多败坏项目的程序员。因而,公司有了程序员丁。他在过去的一段时间里有着不错的工做经历,帮助过所在的公司完成了各类重大的项目解决了至关多的行业技术难点。他的到来为公司带来了很好的活力,全部以前遇到的问题都不复存在。他成为了全部程序员的主管。后来,他仍是加班了。由于公司的良好发展,因而聘请了更多的产品和运营。开发团队忙不过来了,他做为主管要求你们一块儿加班。 调试
为了缓解这种局面,他向公司申请增长程序员。公司答应了并再招了二各分别相似乙和丙的程序员,没错,公司不会再招聘相似甲的程序员。团队不须要加班了。 项目管理
好景持续不长久,一段时间后,加班的状况再次出现了,由于竞争对手的努力,让产品和运营提出更多的需求。他发现产品和运营的需求源源不断地输入。但是有些需求可能用户永远用不到或者三天后就变化了。为了解决这种局面,他找来领导和各部门的负责人来商讨解决的办法。有人提出走敏捷开发。公司决定新成立一个小团队来作测试。因而公司每个敏捷开发团队成立了。时间证实了,这个新团队终于能够不加班了。而对需求的完成整体让产品和运营满意。 开发
乐观的局面总不能持续好久,由于线上出了一个令用户急剧降低的bug。他们须要加班通宵,或者回退代码,或者修复这个bug。没有使用很好的版本回退办法,只能是一场恶梦。持续集成和自动发布加入到他们的团队。没错,程序员丁开始在团队里实施很是好的项目管理的方案。起码发新版后,非工做时间在线上出bug,任何有权限的人员均可以轻松地一键回退。剩下的,上班再说。 产品
... ...
这就是我要讲的程序员为何要加班的几个故事,欢迎各位补充。之后我也会补充更多的故事。其实全部的后面都不重要,我只但愿各位创业者,在招聘程序员时,避免遇到程序员甲,争取找到程序员丁。做为开发人员的咱们,也要努力成为程序员丁,保证本身的职场竞争力。仍是那句话,软件开发不是高科技的东西,这世上并无软件科学家一说。咱们能作的是让开发更像一门艺术。