听人说了一个词儿,叫作“Comfirtable Zone”,中文是“舒适区”。
  这个词儿让我瞬间联系到程序员的能力边界问题,我画了能力拓展模型图。如下:
 


  我觉得这个能力拓展模型,适用于一个人的方方面面,但这次我打算只拿程序员来扯一下。

  能力拓展模型

  图中左侧是我们的现状,最内层的原型是我们感到舒适的区域,我称之为“舒适区”。
  以程序员为例,当程序员的技术能力和解决问题的能力达到一定水平之后,就能够轻松胜任某些开发任务,解决特定实际问题,给用户带来某方面的便利。他的能力与他接触到的问题匹配,此时程序员处于舒适区。这个舒适区的大小是由他解决问题能力的大小定义和界定的。
  当问题超出程序员先有技能和经验说明,他能看到并了解,但还不能解决。那这些问题就是这个程序员随时可能面对的挑战区,也就是图中的黄色圆型。
  图中的大片的红色区域,对程序员来讲,就是未知区域,未知即迷茫,未知即痛苦。这个区域往往是程序员看不清或看不到的,是百慕大三角的一片未知而神秘的区域,贸然跳入,可能折戟沉沙铩羽而归。
  假如一个程序员愿意跳出舒适区,踏入挑战区,接受一定的不适,那他就能够有机会拓展他的能力,将自己的舒适区扩展得更大,他的能力模型就变成上图右侧部分,舒适区变大,挑战区变大,痛苦区变大,这也是符合人类认知规律的:知道的越多,不知道的也越多。
  如果一个程序员连轻微不适都不愿意接受,那他就会渐渐固步自封,落后于别人,落后于时代,渐渐被这个日新月异的时代所抛弃,成为一个别人眼中没什么用的老家伙。

  在开发过程中扩展舒适区

  一个程序员的能力,是可以通过锻炼不断变强的。就像人的肌肉,一段时间让锻炼强度超负荷一点,适应了,习惯了,肌肉变得比原来强了,就再超负荷一点,通过这样的螺旋式递进,肌肉就会越来越强。程序员也是一样的,你的学习能力、代码能力、设计能力、沟通能力、管理能力等等,都是可以通过锻炼来加强的(我们得考虑一个人适合做什么,如果他没有某方面的才干,虽然通过锻炼也可以加强,但违背天性的事儿通常为事倍功半)。
  在软件开发过程中,一个程序员,他会什么语言懂什么框架水平如何,自己心里有数,项目经理通过他的表现也认为自己心里有数。那么在有新的项目要做时,通常的做法是,哪个程序员熟悉实现Tx任务相关的技术,就让这个程序员做Tx任务,这通常又是出于交付期、生产率、成本等各方面的考虑。
  在这种情况下,每个人都做自己驾轻就熟的事情,对整个项目来讲,自然是最经济的。可是对程序员自己来讲,却是不经济的。因为你无法接受新的挑战,你的能力边界的拓展就会很慢。所以,合理的情况是,项目经理在划分任务时,要对程序员负责,既给一个程序员能轻松完成的任务,也要给他需要费点儿劲儿才能完成的任务,通过具有挑战性的任务来锻炼这个程序员,让他更好更快的成长。但是这样做的管理成本太高,所以,现实当中,很少公司的项目经理会主动这么做(没合适人手take某个任务时会被动这么做)。
  鉴于这种现实,作为程序员自己,如果你想更快地成长,就要表现得勇敢一些,主动走到挑战区域,去抢具有挑战性的任务。(如果不好意思主动,也可以在有挑战性的任务落在自己头上时屁颠屁颠地接受。)一旦你拿到了对你来讲具有挑战性的任务,那你就赚到了。没错,我是故意这么说的,你赚到了。虽然你会为此殚精竭虑,虽然你可能为此加班,虽然你可能为此在别人看不见的地方付出,但是你拥有了机会和更多可能性,如果你顺利完成了,那你的舒适区会扩大,你接触新挑战的机会也会变大,你就进入了良性循环,你会越来越强大。你终将走上七龙珠中悟空的变身之路,成为赛亚人,超级赛亚人,超级赛亚人2,超级赛亚人3,……直到成为超级赛亚人之神。
  想想看,这是多么美好的事!
  So,某个技术没搞过?不是问题。某个语言没学过?不是问题。软件结构太复杂,一时掌控不了?不是问题。业务不熟悉?不是问题。如果你觉得这些是问题,OK,请坐看云起,等待时光带走一切然后把你丢在原地。

  在渴望成就自我的程序员眼里,问题即机会。只有抓住机会,我们解决问题的能力才会在痛苦的历练中像雪球一样越滚越大。