在上一篇中我们提到,程序员在工作中遇到的很多问题,大多不是程序问题,辛苦而低效的工作,多数是由偶然复杂度导致的。那这个由于偶然复杂度造成的差距会有多大呢?
1975 年,弗雷德里克·布鲁克斯(Frederick Brooks)出版了软件行业的名著《人月神话》,他给出了一个统计结果,优秀程序员的开发效率是普通程序员的 10 倍。40 多年过去了,这个数字得到了行业的普遍认同。
成为 10x
程序员是很多程序员的追求。但工作产出并不只是由写代码的效率决定的,一些不恰当工作方法很大程度上影响着你的产出。
作为一个程序员,该如何更高效地工作,怎样才能把时间和精力尽可能地放在处理本质复杂度的事情上,减少在偶然复杂度上的消耗。
一个思考框架
- Where are we?(我们现在在哪?)
- Where are we going?(我们要到哪儿去?)
- How can we get there?(我们如何到达那里?)
这是一个很经典的思考框架,这个框架帮我们确定的是 现状、目标和路径。大部分只能回答第一个问题,就是现状,例如:我现在的技术很菜。或者我有一定的工作经验,但是工作中用到的东西不够系统。
有相对清晰目标的人,才会进入到第三个问题,而茫然的同学,则无从下手。
如果你对未来没有定位,是茫然的,尽管你也知道努力,但劲要往哪里使呢? 如果方向不对,那么越使劲儿,可能会在错误的路上跑的越远。南辕北辙的道理大家都懂,但是具体到自己的发展上,能真正体会并且实践的却是少数。
如果一个人能够清晰地回答出这三个问题,通常意味着他对要做的事有着清晰的认识。
这个框架虽然看似简单,但却非常有效,它已经成为我工具箱里一件非常称手的思考工具。
以后再遇到产品经理澄清需求的时候不妨用这个框架思考一下:
当前系统的现状?
这个需求要达到的目?
如何才能达成这个目标?
只有想清楚了这些根本问题,我们做起事情来才能得心应手,不至于软件做完了,达不到目标,然后再返工。在我的职业生涯里这种例子比比皆是。
四个思考原则
给出思考框架是为了让你明白为什么要提出问题,而具体问题要怎么问,就可以遵循下面这四项原则:
- 以终为始;
- 任务分解;
- 沟通反馈;
- 自动化;
下面我分别来介绍一个这四个原则;
以终为始:就是在工作的一开始就确定好自己的目标。我们需要看到的是真正的目标,而不是把别人交代给我们的工作当作目标。你可以看出这个原则是在帮助我们回答思考框架中,Where are we going?(我们要到哪儿去?)这个问题。
任务分解: 是将大目标拆分成一个一个可行的执行任务,工作分解得越细致,我们便越能更好地掌控工作,它是帮助我们回答思维框架中,How can we get there?(我们如何到达那里?)的问题。
如果说前两个原则是要在动手之前做的分析,那后面两个原则就是在通往目标的道路上,为我们保驾护航,因为在实际工作中,我们少不了与人和机器打交道。
沟通反馈:是为了疏通与其他人交互的渠道。一方面,我们保证信息能够传达出去,减少因为理解偏差造成的工作疏漏;另一方面,也要保证我们能够准确接收外部信息,以免因为自我感觉良好,阻碍了进步。
自动化:就是将繁琐的工作通过自动化的方式交给机器执行,这是我们程序员本职工作的一部分,我们擅长的是为其他人打造自动化的服务,但自己的工作却应用得不够,这也是我们工作中最值得优化的部分。
这四个原则互相配合,形成了一个对事情的衡量标准。总体上可以保证我的工作是有效的,在明确目标和完成目标的过程中,都可以尽量减少偶然复杂度。