曾以为懂的基础
徐昊
被拉了过来,没别的说,压榨,于是,两天都在让他给大家上课。
培训的内容之一是OO训练营,这是ThoughtWorks内部的一个传统培训项目,我也曾做过讲师。之前的训练营,更多的是为了介绍一些基础的概念,比如面向对象,比如设计模式。这个训练营是改造过的,面向的主要是ThoughtWorks内部员工,这些人都有基本的概念,所以,侧重点要调整一下。
确实,当侧重点一调整,问题就暴露出来了。参加这次培训的多是一些毕业生或是加入公司时间不长的同事,之前都看过不少书,这次训练营在一些他们以为懂了的地方给了他们下马威。
- 封装
面向对象最基本的特征是封装,说起来,大家都明白。真的懂了吗?代码写出来就是一大堆getter,内部细节换了个面孔全都暴露出来了。许多设计原则都是与封装紧密相关,比如SRP,比如OCP。封装不好也是一种坏味道,可以指导着我们向着好代码前进。我承认,识别封装的坏味道比识别重复要求高。
- 重构
重构不是老马的书,不是IDE上的菜单。重构需要不破坏测试的小步前进。说到重构,其实,很多人脑子里想的是重写。一对pair中死在了在“重构”的路上:时间到,他们的代码没有到达“重构”的终点,又退不回来。于是,接下来的演示,徐昊重构了他们的代码,每一步都很小,不会进退两难。他的演示让我看到,有时我的步子还不够小。
- 划分任务
TDD简单得令人发指,红——绿——重构。但这真的就是TDD的全部了吗?这只是形。知道了TDD节奏,却依然下不了手的,大有人在。解决问题的方案,说白了,就是拆。把需求拆解成更小的任务,何愁无解。多大的任务算小,可以测试。把问题分解成小任务,才会能做到心里有数,才不会让“剩余的10%”和“前面的90%”用同样甚至更多的时间完成。大事化小是需要能力的,这是很多人过不了TDD这关的真正原因。只是,大多数人连划分任务的习惯都没有。
- 模式
模式俨然已是大路货,不知道模式都不好意思和人打招呼。但什么时候使用模式却不见得人人知晓。现实问题和书上总有差异,当问题摆在面前,狼烟四起的坏味道告诉我们,许多人对此视而不见。有时,嗅觉,比招式更重要。
因为有先发优势,徐昊在训练营里讲的大多数东西,我是心里有数的。在别人忙着用左脑思考的时候,我在用右脑做着综合,思路得到了一次清理,也看到自己在日常工作中还有许多能够提高的细节。
被培训可比培训感觉好多了。