我们为什么加班

来源:互联网 发布:刻章软件 编辑:程序博客网 时间:2024/05/18 17:01

不论在中国还是在外国,程序员应该是加班最厉害的工种之一吧,而且程序员都很反感加班(没几个喜欢加班的)。关于加班问题,一直在想,我们为什么加班,怎样才可以不加班或者少加班。
    首先,可能是不加班干不完。 这要看加班的原因是什么:
   a) 额外紧急任务。这种情况也应该是任何人都必须无条件接受的,因为各个行业各种工作都会有这种情况,你不可能找到一种没有紧急任务的工作;可能是软件行业有太多任务是紧急的,但是否真正紧急呢?有一种情况是很紧急的,那就是重大BUG,影响生产系统运营的。但为什么会有这样的BUG必须要我们加班去处理呢?没有BUG是不可能的,是不是不加班来修复BUG就不行呢?如果在设计之初就考虑到一些意外问题,系统可以很快自动修复,是不是我们不是非要加班才能解决,至少可以少加班一些呢?
   b) 非紧急,主动计划外工作。这种加班,其实是一种良性的加班,是主动提高或主动工作的一种方式。这种加班应该受到鼓励,而且加班者本身是主动的,也没有对加班的反感,比如主动提高产品性能,提高产品易用性,增强产品功能等一系列提高产品质量的工作(还有没事儿也加班的,就是喜欢加班,或者认为只有加班才能体现他是个忙人吧)。如果哪个哥们儿失恋了,心里很难过,加班也是一种不错的打发时间的方式。喝酒,既花钱又伤身体;而且在心情不好的时候身体会分泌很强的毒素,对身体非常不好;这时加班去干活儿,干累了躺下就睡,也不错嘛(玩笑,别拍!)。
   c) 计划内任务。这种情况是最复杂的。
   首先,为什么不加班完不成? 可能:
(1)计划合理性误差,比如任务量比估计任务量稍多出10%左右,这种加班应该是一种正常的情况,有不应该有任何人对这种正常加班报怨什么,但评估较难,这个根据计划制定者、任务执行者都有关系,这种情况下的加班也是很自然、正常、都可以接受的;
  (2)计划明显不合理(初期对风险评估不充分,甚至没有评估)。这种情况下,应该是意外的加班,而同时计划的制定者应该承担一定责任,因为是计划的不合理给项目带来了风险,使项目的可控性较差,有可能会造成项目的延期,导致用户的不满。也不能排除有些领导贪功心切,制定了不切实际的计划,让下属买单的情况,这种情况显然是“杯具”。
  (3)任务执行者明显没有尽职尽责,生产力明显低于预期水平,并且对风险没有提出异义。这种加班,只能归结为个人原因,因为任务执行力低于正常水平,需要提高生产力;加班,埋怨谁呢?
  (4)任务量大,但可以有明显改进生产质量的手段而没有采用,或者根本没有采取提高工作效率的手段,比如一些重复性的工作可以通过脚本或工具软件明显提高,并可以很快完成的,但即一直手工完成,产生加班。当这种加班较多时,就必须认真考虑做事的方式和手段,如何通过提高工作效率来减少加班;
   “提高工作效率、改善生活质量”。这是公司的宗旨,且不说公司如何来履行它,但它却是我最认同的一句话,也是一直坚持的工作宗旨。虽然如何提高工作效率都不可能避免加班,但至少可以减少加班,节约生产时间,增加生活时间,提高生活质量。提高工作效率是根据工作性质不同,不断从细节上改进的过程,至少可以从某些方面考虑:
    1)从背景上讲,尽量做到“知己知彼”。孙子兵法之所以流行,是因为它所蕴含的哲理不仅仅适用于军事。这一点是在项目计划的制定阶段要充分考虑的,计划的制定者要知道任务的难度、工作量及风险,还要知道执行者的工作能力;任务的执行者, 也需要知道任务相对于自己的工作量及风险,才能随时知道自己的位置,如同走在一段陌生的路上,随时知道自己走了多远,距离目标还有多远,什么时候才能完成;
   2) 在工具上,要用好工具。“工欲善其事,必先利其器”、“磨刀不误砍引柴工”说的都是这个道理。这个工具包括各方面的,比如邮件系统、记事本、搜索引擎、编辑工具等,选择最适合自己的工具。这个要不断搜索,不断学习,多多交流,敏捷开发中的结对编程,就可以起到这个交流的作用,我是深有体会。因为每个人工作方式都不太一样,使用的工具也不尽相同,在结对编程时可以互相学习,择其善都而从之嘛。
  3)在过程上,提高自动化程度。自动化的提高应该在工作的各个方面,如网络设置自动化(经常变换工作环境的,可以通过一些设置切换工具自动切换网络设置,不用手动设置路由、IP等参数)、自动化编辑(选择合适的编辑器或IDE,可以提高编码速度和质量,包括智能感知、自动注释、自动格式化、重构等常用功能)、自动化构建、自动化部署等。DRY(Don’t Repeat Yourself)原则也就是说的这个道理,不要让自己总是重复做同样的事情,充分发挥计算机的优势,帮助我们做更多的事。

   4)在方法上,持续学习。方法总比问题多,我们只有不断学习,不断提高自己的知识和能力,才能不断使用更好的方法来完成任务,好的方法的标准就是更好的生产力。

  5)在执行上,提高软件质量。这个涉及知识、技术、方法学等各个方面,也涉及到软件开发的各个过程,不仅包括设计、代码的质量,同样包括文档的质量。软件质量提高了,我们可以节约出很多调试BUG的时间,因为前期解决BUG比上线后解决BUG的成本低太多了;高质量的文档可以节约大量交流的时间,使交流的双向性在很多情况下变成“单向收费”,特别是对于项目组庞大、人员流动性强的团队。
  6)事后总结。在学校的高中阶段,中国一直有个被普遍使用的模式,就是前两年把三年的课程讲完,第三年全部用来复习。其实这个复习就是事后的一个总结,之所以花这么长时间来总结是有它的道理的,只有不断的总结才能不断提高。总结就是一个思考、提高的过程,甚至比学习新的内容还要有价值。

“提高工作效率”是一种思想,是一种意识,需要工作的同时时刻提醒自己。

原创粉丝点击