程序员的能力拓展模型
听人提及一个术语“Comfortable Zone”,中文为“舒适区”。这个词让我立刻联想到程序员的能力边界问题,为此我绘制了能力拓展模型图。
我认为这个能力拓展模型适用于个人的各个方面,不过此次我仅聚焦于程序员展开探讨。
能力拓展模型
舒适区
图中左侧代表我们的现状,最内层的圆形区域是我们感觉舒适的范围,我将其称为“舒适区”。以程序员为例,当程序员的技术能力和解决问题的能力达到一定水准后,能够轻松应对某些开发任务,解决特定的实际问题,为用户带来特定方面的便利。此时,他的能力与所接触的问题相匹配,该程序员便处于舒适区。舒适区的大小由其解决问题的能力所界定。
挑战区
当问题超出程序员现有的技能和经验范畴,但他能够察觉并了解这些问题,却暂时无法解决时,这些问题就构成了该程序员随时可能面临的挑战区,即图中的黄色圆形区域。
未知区
图中大片的红色区域,对于程序员而言,是未知区域。未知意味着迷茫和痛苦。这个区域往往是程序员难以看清或根本看不到的,如同百慕大三角一般神秘未知。贸然进入这个区域,可能会遭遇挫折,无功而返。
能力拓展
假如程序员愿意跳出舒适区,踏入挑战区,忍受一定程度的不适,那么他就有机会拓展自身能力,使舒适区得以扩大。此时,他的能力模型就会变为上图右侧部分,舒适区、挑战区和痛苦区都会相应变大,这也符合人类的认知规律:知道得越多,未知的领域也就越多。相反,如果程序员连轻微的不适都不愿承受,就会逐渐固步自封,落后于他人和时代,最终被这个日新月异的时代所淘汰,成为他人眼中无用之人。
在开发过程中扩展舒适区
能力可锻炼提升
程序员的能力可以通过锻炼不断增强。这如同锻炼肌肉,在一段时间内让锻炼强度略微超出负荷,待身体适应后,肌肉会比原来更强壮,之后再增加负荷,通过这种螺旋式递进,肌肉会越来越发达。程序员的学习能力、代码能力、设计能力、沟通能力、管理能力等,都可以通过锻炼得到提升。当然,我们也需要考虑个人的天赋,如果一个人在某方面缺乏才干,虽然通过锻炼也能有所提高,但往往会事倍功半。
传统任务分配的利弊
在软件开发过程中,程序员对自己掌握的语言、熟悉的框架以及自身水平都心中有数,项目经理也会根据程序员的表现来评估其能力。在安排新项目时,通常会让熟悉相关技术的程序员负责相应任务,这主要是出于交付期、生产率、成本等多方面的考虑。从整个项目的角度来看,让每个人做自己擅长的事情是最经济的选择。然而,对于程序员个人而言,这种方式并不利于能力的提升。因为在这种情况下,程序员无法接受新的挑战,能力边界的拓展会非常缓慢。
合理的任务分配
理想情况下,项目经理在分配任务时,应该对程序员负责,既要分配轻松完成的任务,也要安排具有一定挑战性的任务,通过这些挑战来锻炼程序员,促进其更好更快地成长。但这种做法的管理成本较高,因此在现实中,很少有公司的项目经理会主动这样做,通常只有在没有合适人手承担某些任务时才会被动采用。
程序员的主动选择
鉴于这种现实情况,程序员若想更快地成长,就需要表现得更加勇敢,主动进入挑战区,争取具有挑战性的任务。即便不好意思主动争取,当有挑战性的任务降临到自己头上时,也应欣然接受。一旦获得具有挑战性的任务,就意味着获得了宝贵的机会。虽然完成任务可能会让你殚精竭虑、加班加点,甚至在无人知晓的地方默默付出,但你也获得了更多的可能性。如果顺利完成任务,舒适区将会扩大,接触新挑战的机会也会增加,从而进入良性循环,变得越来越强大,如同《七龙珠》中的悟空,不断变身升级,最终成为超级强者。
正视问题与机会
在渴望成就自我的程序员眼中,问题即机会。只有抓住机会,我们解决问题的能力才会在痛苦的历练中不断增强,如同雪球越滚越大。所以,遇到未曾接触过的技术、没学过的语言、复杂的软件结构或不熟悉的业务,都不应视为阻碍。若将这些视为问题而退缩,就只能坐看时光流逝,最终被时代抛弃。