没有那么简单

@2012-11-24

最近这两周写了一个任务调度器,主要是为了满足线上任务调度使用的(当然有一些现成的任务调度器比如oozie或者是azkaban, 至于为什么需要实现自己一个任务调度器,就是另外一回事了)。调度器上线这段时间发生了很多问题,各种各样,大部分都不是技术问题,更多的是没有某些功能或者是线上操作失误等等(有时候是因为想更新版本)。回想起当初设计阶段自信满满的样子,不禁感叹:”完成一件事情没有那么简单“。

原来天真地以为,作为一个程序员编写好代码就是一切,以最快的速度和相对不错的质量完成任务。而事实上程序员的工作远不仅如此,除了编写代码之外还需要有很多事情需要处理,比如编写使用文档,部署上线,了解用户反馈,做性能测试和分析,对比效果等等,而这些事情所花的时间不一定比设计以及编写代码时间少,并且重要性上也不一定低于设计编码。按照我的理解,一个比较成功的open source project,从design到beta version release时间1年就算是比较长的时间了,而后期的改进以及文档建设以及追踪可能会超过3-5年才可能被大多数人接受和使用。以go为例吧,在go talk里面rob pike应该是谈到初次开始编写go是在2007年,2008年go first version才release,而到现在go有相对部分人和公司在使用(可能我会记错,如果这样的话请包含,就看个大概吧)。

当然除了编码这件事情之外,还有很多其他事情也是同样的道理。通常来说, 大部分事情都没有你想像的那么简单 ,因为有太多与之相关的事情。如果你觉得完成这件事情非常简单的话,通常有三种可能:1)你真的很牛把所有事情都想清楚了。必须承认这种人是存在的。2)你可能对这件事情的核心把握非常清楚,了解这件事情的关键,觉得这件事情总最复杂的部分自己是可以搞定的,但是却没有考虑到这件事情相关的方方面面。3)你没有理解这件事情。大部分人都是属于类型2的(me too),认为 这件事情最复杂的部分我都可以搞定,所以这件事情我可以搞定 ,对于像我这样的技术人员来说甚至有这样的逻辑: 这件事情中最复杂的 技术 部分我都可以搞定,所以这件事情我可以搞定。醒醒吧,回想一下自己经历过的项目里面,有多少项目失败是因为技术问题没有搞定的?

其实我想要说的东西也非常简单,就是很多事情没有你想的那么简单。如果你觉得很简单的话,那么请再想想有什么问题是没有考虑到的,或者是让同事们一起看看给点意见。即使这样事情还是失败的话,得到的经验教训会相对深刻并且更加有价值。

如果老大能在你犯错误的时候还帮你背黑锅,那么你是幸福的。因为这样的老大更加懂得怎么给你自由帮助你成长