axetroy/blog

程序员,我们都是夜归人

Opened this issue · 0 comments

从以前旧博客迁移至此
2016-05-16 00:05:35

转自瞬息之间写的程序员,我们都是夜归人

音响随机播放着音乐,偶然跳出一首《都是夜归人》的乐曲,让我不禁想起程序员这个群体,夜归人也是不少的啊。恩,我这里说的「夜归」正是指的加班,进入这个行业,成为程序员谁没加过班呢,所以我们都是夜归人啊。

加班是一个行业竞争激烈的表现,回想下读中学时虽不加班却要加课,因为高考的竞争很激烈啊。加班也是一个行业兴旺的表现,你看产能过剩的行业连工都不开了,哪里还需要加班。这些是加班的行业宏观原因,那么于个人微观来说,为什么需要加班呢?

能力不足

新入行的程序员加班的最多,很大一个原因是能力是不足以满足工作的需要,这里说的是整体的比例而言,不针对个体。我刚毕业工作时也是天天加班的,原因正是发现为了应对工作,需要学习的东西太多,边学边做,效率也不够高,自然无法闲庭信步,只能加班加点。

大学里专业上的东西学得宽,学得泛,而且离工作实际需要还存在一道从理论到实践之间的鸿沟。所以对于刚入行的程序员就需要短期内快速地跨越这道鸿沟,不得已加班加点的学和做,一旦跨越过后后面还需要经常的加班原因可能就出在其他方面了。

应对能力不足导致的加班,除了自己认了还能埋怨谁呢,同一所学校同一个专业同一届毕业的学生,能力强弱有时也是相差也很悬殊。我承认大学里也是放松了自己,曾经埋下的坑,后来也是慢慢自己来填的,努力要趁早啊。

环境制约

这里指工作环境的一些制约因素,比如:早年我在客户现场做项目,客户都是朝九晚五制,他们白天经常要过来和你讨论碰到的一些问题或需求,有时还要接接维护项目的技术支持电话,渐渐就发现在客户上班的朝九晚五期间基本就没法专心的写程序。所以当时我开发一般都放在晚上 6 点到 10 点之间,十点半是末班车再回去。

另外一种情况是,以前做传统企业应用,要全国各地四处出差,而系统上线和数据割接什么的也只能在半夜三更来做。从夜深人静到天空泛白,在卖豆浆包子的早餐车旁和来上班的人群短暂相聚,再交错而过,走回公司的出租屋,倒头便睡。

一次一个省级的大系统做全面割接,这样的日子持续了将近一个月,让我不禁开始思考起了这样工作和生活着的意义。这就是环境的现实,要么去适应当前的环境,要么去改变环境,这二者皆不易,还有第三条路就是换个环境,然后我便换了个。

公司制度

我理解加班很多时候来自一种需要,而这种需要可能来自很多方面的原因,但如果有公司把加班作为一项制度固化下来,那真是再糟糕不过了。

我以前曾有同事呆过一家把加班作为一种长期制度的公司,从周一到周四每晚都是固定加班到晚 9 点后,周末则临时决定是否加班。这咋一看比起如今的 「996」的强度是不如的,但有些公司的 996 可能是按需的并非一项固定制度。让你有事没事都必须呆到晚上 9 点后,而且公司内部网络控制严格的连外网都访问不了,当时 iPhone 尚未诞生,移动互联网不知为何物,这样的加班真是无聊透顶。

十年过去,似乎这样愚蠢的公司制度还是不少。近期听闻一朋友所在的成都某游戏公司也差不多,虽然没有明确规定加班是公司制度,但考核员工绩效的主要标准就是看考勤表的工作时长。这样的潜规则比明制度更可恶,不过上有政策下有对策,住公司附近的员工 6 点一下班就闪人,晚上十一、二点后再到公司打卡。

有的公司,加班是一种制度;有的公司,不加班是一种福利。确实有在招聘宣传上看到把不加班当作一种福利来宣传的公司。如果你不幸处在把加班当作制度的公司,我的建议是离开也请趁早啊。

进度压力

因项目进度压力导致的加班看起来似乎合理,但不合理的地方是为何进度总有压力?这取决于项目的上线或交付时间点是如何确定的?有些是 Boss 头脑一热胸脯一拍就定下了,这类 Deadline 相对来说还有可转圜的余地,另外一类则更难转圜。

我曾参与浙江电信的一个项目,当时它刚接手了联通 CDMA 的业务和用户并在建设 3G 网络。它在浙江卫视先打了广告明确在某月某日开始营业接受 3G 业务放号。之后它们才对后台的支撑系统招标建设,这基本就确定了严格的系统上线 Deadline 且几无转圜余地。

知乎上有个问题:程序员如何不加班?最高票的回答是:换个好的项目经理来控制进度,给每个人安排合适的任务。可见很多程序员都认为加班是因为进度控制和任务安排不合理导致的,而进度管理正是软件工程的难点之一,这个问题真的只是换个好的项目经理就能有解了?

进度问题本质是一个时间估算问题,一群程序员组成一个团队一起做一个项目,项目经理拆解了任务,每个程序员就需要对任务做一个工作量估算。这里重要的不是你需要做得有多快,重要的是你对自己的工作能力和工作量有个合理地估计。也就是给你一个任务,你要知道如果你用正常工作时间大概会花多久,而不是拍脑袋捶胸脯打保票下决心说要不吃不喝不眠不休保证完成任务。只有团队中每个人都能正确的估计时间,才能让团队的进度合理。但是能做到正确估计时间的,不论对程序员还是项目经理都是极难的。

在我没开始写作前,看到像本篇这样长度的文章总以为作者可能灵感一闪,一挥而就,快则个把小时,慢则至多两小时。毕竟当年我们高考语文时两小时不仅要做完所有题目,还要写篇作文,所以会觉得两小时已是至多了。等我自己开始真正持续写作后,才发现自己的估算错的离谱。

像这样一篇文章,两三千字,先不说创作,只说打完这些字你能估算准确自己需要多少时间么?(这里默默估算十秒)我们看下国际通用打字速度等级划分:

  • 学手 10-30 字/分钟
  • 聊手 30-60 字/分钟
  • 录手 60-90 字/分钟
  • 锐手 90-120 字/分钟
  • 高手 120-150 字/分钟
  • 专业 150-240 字/分钟

我 2000 年开始用 QQ 打字聊天,打字经验 16 年,用拼音输入法,实际速度也就是聊手水平,平均 50 字/分钟。而未经刻意训练的大部分人可能都是这个水平而已,所以一篇三千字的文章光把它输入成文字按这个速度就需要一小时,而实际的构思创作时间一般是这个好几倍。如果写的还是技术文章,我通常还爱画技术图示(一图胜千言啊),画图还需要额外的时间。所以这样一篇文章 3、4 小时算快得,5、6 小时很正常,7、8 小时也不坏。

你看自己的估算都如此不靠谱,所以一些项目经理才会把程序员的估算粗暴的乘以二或三,这样估算下来的项目进度你觉得能靠谱嘛,换个好的项目经理就能靠谱了?在埋怨项目进度不合理前,程序员需要先把自己写程序的时间估算准确了,有效的方式是通过「时间记录法」持续记录和跟踪自己的时间消耗,这真得可以有效地提高自己对时间的敏感度和估算准确度。

个人爱好

真的有人爱好加班么?我想没有,也许爱好的是其他,只是表象体现在了加班上,加的虽然是班,过的却是自己的人生。这点我想你们懂的。

...

加班对某些公司可能是一种制度,对个人可能是一种态度;不加班对某些公司可能是一种福利,对个人可能是一种能力。

最后,写完本文真实耗时 4 小时 40 分钟。