今日TW洞见
文章作者来自ThoughtWorks: 扎西。
本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司所有,任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布/发表。已经本网协议授权的媒体、网站,在使用时必须注明"内容来源:ThoughtWorks洞见",并指定原文链接,违者本网将依法追究责任。
相传达摩祖师面壁九年,功成坐化,少林僧众于其面壁之处获铁函一只,内有两部不世绝学:《易筋经》和《洗髓经》,易筋功法强筋健骨,洗髓心法采纳调息,故少林冠绝武林,为江湖称颂。
自软件江湖降世,功法、心法及门派层出不穷,各大公司年年招兵买马,意在争夺江湖头把交椅。然每每武林大会之季,仍有不少公司感慨人马多而不强,鱼龙混杂,江湖地位力有未逮。原因何在?究其根本乃是软件江湖快速膨胀,功法(编程语言,设计模式等)之类见效快,故而为世人推崇,而内功心法(思想,方法,习惯)非一年之功乃是经年累月之效因而鲜有问津。更有不少江湖骗子伪装得道大师,随意杜撰心法,更是造成不少初涉软件开发之人,走火入魔,饮恨江湖,从而导致世人对内功心法更加敬而远之。
世间繁杂在一定程度上掩盖了武林至尊绝学《洗髓经》的光彩,口口相传更是加深其神秘感,但这都改变不了其真正价值–洗髓是脱胎换骨,由内而外地强化自身功力,更是打通任督二脉,实现向真正的高手大师过渡。
软件开发也有一部内功绝学 –《重构》,它来自一位长相酷似达摩祖师的软件大师,Martin Fowler,关于这位大师的传奇经历此处不表,本文所要说的是他创立的软件开发内功心法–重构。
正如前文所说软件开发的内功心法其实讲的是软件开发者使用的方法,习惯和思想,与武功中的内功一样,长期的修炼能够让修炼者参悟到软件开发的不同境界。说到这里,有人会说真有这么神奇吗?回答是肯定,因为这样的修炼改变的是开发者的习惯,包括思考的习惯、设计的习惯和开发的习惯。这正是江湖流传的不二箴言:习惯决定成败。
重构改变了开发者的什么习惯?首先来看下重构是什么,重构是指不改变软件功能的前提下,通过代码调整来改善代码质量,提高代码的可维护性,使代码的架构更加趋于合理。一言以概之–改代码,有人会提出疑问,改代码我们也会啊,这有什么习惯可以改变的,重构并不是改一次代码,而是在开发的过程中频繁地进行代码调整,只要在开发中发现可以重构的点,就可以记录下来,然后进行重构,不只对现在正在开发,也可以是对之前完成的代码,这不是件容易的事,需要付出恒心和毅力。
可能有人担心重构会破坏代码原先的功能,OK,那就引入TDD和版本控制,TDD保证重构不破坏原有功能,而版本控制则保证出现了破坏原有功能的错误后能迅速回到原先正确的状态。
重构+TDD+版本控制,开发者一下就拥有了三件法宝来改善代码质量。恭喜你,你现在变成XP(极限编程)了,你的开发习惯一下就从瀑布迁移到了敏捷上,再加上经年累月的磨砺,OK,你自然而然地成了高质量代码的贡献者,是不是想想有点小激动呢?
内功心法大多分为若干层次,重构也是一样,分为几重境界。第一层是通达,即阅读性重构,如同打通全身经脉,消除代码中词不达意,表意不明,做到“信、达、雅”;第二层是凝炼,即结构性重构,如同气沉丹田,消弥杂念,剔除代码中的重复,提取职责单一的功能块,实现代码重用和逻辑清晰;第三层是突破,即设计性重构,如同打通任督二脉,重铸体内气血循环,在这一层次,经过前面的两层修炼,代码结构趋于合理,逻辑趋于清晰,此时可以考虑引入模式,完成质的跨越。
完成三重修炼,经历若干次周天循环,开发者的思考习惯就发生了变化,首先思考如何实例化需求,因为开发者通过修炼了解何种需求是有价值的;接下来就是如何在实现的过程思考合理的引入模式,因为开发者明白何种模式能够更适合,区分哪些是坏味道;并自然地写下清晰通顺的代码,因为那是每次重构时的条件反射,只是简单地表达出来。
在经历了重构带来的开发习惯和思考习惯的变化之后,那么在设计过程中就会将这些习惯融入其中,化为无形,设计出功能合理的软件产品。
习惯的改变使得开发者可以站在一个全新的角度看问题,正如练就洗髓经的武林高手能够无招胜有招,花对手万般招数于无形,因为他们看到了最核心价值的东西。
最后引用豆瓣上看到的一篇奇文中的一段来说明练好重构这门内功的重要性,因为它能让你成为真正读懂软件开发,学会软件开发,运用软件开发的高手:鸠摩智上少林寺挑衅,使遍七十二绝技,方丈群僧无不骇然。这时,小和尚虚竹跑过来,只瞅了一眼,就说:“这位大师用的明明是小无相功嘛。”鸠摩智慌了。一般人看到的是招数(各种花式的语法,模式),厉害的人看到的是内功(开发的思想,设计的思想)。
笔者仍属于只见树木不见林的开发凡人,因此谨以此文激励自己向高手的路上前进。