前言

整个2019年,我做的所有公开演讲只有一个主题:中国软件业的基本功太差了

这种基本功的缺失是全方位的。早在几乎20年前,刚被引入中国的CMM就已经明确指出,软件研发需要4大基本能力:需求管理,项目管理,配置管理,质量保障。然而快20年过去了,这4项基本能力在中国IT业仍然普遍缺失。需求的获取、分析、承载和传递,项目范围估算、进度管控、风险控制,代码版本控制、团队协同方式,软件测试、软件验收……几乎在各个环节上,行业中大部分企业都表现出能力不足、没有章法、全凭本能做事。其结果自然也就是“软件危机”——软件开发的效率和质量无法满足社会经济对软件的要求。

(考虑到CMM从2001年引入之初就已经指出这4大基本能力的重要性、并承诺提升行业在这些方面的能力,并且考虑到中国有如此众多的IT企业通过了CMM认证,全行业直到今天仍然面临如此普遍的基本能力缺失,我必须说,这是一个令人费解的现象。不同的人可能对此有不同的解读。)

然后,听过我的演讲之后,就有一些热心的(或者换个说法,起哄架秧子的)听众朋友说:你说中国软件业的基本功太差,那你倒是教教我们,怎么能把基本功练好?

好吧,作为一个老程序员,我知道程序员的基本功应该怎么练。于是我在CodingDojo网站上找了三道Kata题目:最最简单的FizzBuzz、有点难度的“参数解析”、以及以前在ThoughtWorks我们经常用的面试题“火星探索”。然后我花了半天时间,围绕着这三道题目设计了14个练习点——基本上就是“来吧,今天的任务就是再练一遍”这样的设计。说到底,最重要的、也是大多数人最缺乏的,是多次重复的练习。

当然了,选这三道题目也是因为我对它们非常熟悉:这几道题目,是过去我在ThoughtWorks时给应届毕业生做编程训练的常用题目。我清楚初学者在一点点打磨编程基本功的时候会遇到哪些挑战,我也知道这几道题目的练习能在每个节点给初学者提供什么帮助。照着这个我们已经反复验证过的套路来练习,初学者可以在1到2个月时间内打下比较扎实的编程基本功。

(说到编程的基本功,我认为,集中体现在测试驱动开发(TDD)这一实践上。过去十几年中,我看过很多围绕TDD的争论。然而残酷的现实是:除了TDD之外,没有任何一种方法、一种实践,能够系统地、有效地、可重复地被相当大量的编程初学者掌握,从而使他们能够写出高质量的、具备良好可测试性的、有充分单元测试覆盖的代码——尽管所有的软件工程教材都说“单元测试是软件开发的重要环节”,但行业里真正把单元测试做起来的团队都凤毛麟角,这难道不是个很值得回味的现象吗?)

这就是“程序员练功房”最初的雏形。第一期的练功房之后,我的老朋友,极客学院的Ice和韩晗联系了我,开始跟我一起完善和推广这个课程。我们把14天的课程扩展到了21天、然后又扩展到28天——还好,仍然在1个月内。截至2019年10月,我们已经一起开了5期练功房课程(包括为企业定制的内训版本),受训学员超过2500人——半年内2500人学TDD,这也算是敏捷传入中国十多年来前所未见的盛景了。

每一期练功房,我都会和学员做大量的互动。指导他们做练习的同时,我也不断收集他们的困惑、他们的进展、以及他们分享的故事。几期之后,我感觉已经积累了很多素材,可以把练功房的过程以一种更传统、更具象的形式呈现出来,让更多的人了解这种“非传统”的学习方式。

于是,这就是摆在你面前的这本书了。我仍然尽量保持练功房的节奏感,整本书分为28天:做6个任务,然后1天休息——读一些与练功房不直接相关的闲书。阅读本书最好的方式,就是跟着任务的节奏:每天打开一个任务,按照任务的要求练习。最复杂的练习应该不会超过2小时,大部分练习应该在1小时能完成。28天之后,你就能练完整个课程。到那时回顾,你应该能感受到自己的进步。

总而言之一句话:功不练不成。练功房已经为你准备好了,就请你开练吧!

你可能感兴趣的:(前言)