开发人员个人的敏捷实践指南
《敏捷技能修炼:敏捷软件开发与设计的最佳实践》推荐序(By 徐毅)
软件行业一直有这样的传说,认为同等经验的两个不同程序员,在效率和质量上可能会有10倍的差距。不同的说法很多,具体的倍数差距也各不一样,但都证明了一点,不同人的编程生产力确实存在着巨大的差距。而且,一般来说,那些在单位时间内能够写出更多代码的程序员,他们的代码质量相对更低且更容易出错。我们不由得要问,大家都是写代码的,造成如此巨大差距的原因何在?
俗话说“失之毫厘,谬以千里”,对于程序员这个职业来说,若失去良好的编程习惯,那么谬的就是效率、成效和质量。养成良好的编程习惯无比重要,而其中最重要的就是一定要有设计意识,好的程序员不仅仅只是意识低下的键盘、鼠标输入器,而是要将优秀的设计思想和对实现对象的理解融入其中,从而开发出高质量、简洁的代码。
本 书的几位作者在书中和大家分享了他们高效软件开发的经验,给大家提供了4个撬动敏捷软件开发的“小舵板”:意图导向编程、分离构造与使用、测试先行,以及 Shalloway原则。无须从一开始就考虑全盘实践所有的敏捷编码原则,只要从这些小细节入手,就能够逐渐地产生大变化。阿基米德曾说过,“给我一个支 点,我就能撬动地球。”而这些小细节,就是敏捷程序员撬动高质量软件开发的支点。
不管读者是已经有多年的编程经验还是刚刚入行开始 写代码,都可以从此书中有所收获。亡羊补牢为时未晚,现在开始永远都不迟。本书的内容也非常耐读易懂,4位作者就像是循循善诱的老师,带着大家一步一步地 体会其中的实践过程。他们总是从一个具体的问题出发,讨论有哪些方法可以实现,使用“小舵板”的方式又有什么样的好处,而使用对比的方式则有助于大家加深 对这些编码原则的理解。
文中绝大部分内容都是开发人员凭一己之力即可以做到的,只有ATDD和CI需要有其他同事和相应工具的支持才行,这意味着本书的确就是一部开发人员个人的敏捷实践指南。而根据“一万小时天才理论”的说法,任何人都得经过一万小时(即10年每天3小时)才能达到世界级水准。如果我说这本书能够帮助大家事半功倍可能略嫌夸张,但遵循作者们的建议,至少也能够少走弯路,按正常的速度成为高手。
近 些年来,我一直在从事敏捷教练和顾问的工作,协助一些组织、部门、团队和个人使用敏捷方法和实践。在与软件开发中不同角色的交流合作中,在和不同的软件开 发思想、方法论的实践者和积极推动者的交流中,我发现,IT行业其实相当“喜新厌旧”,各种新概念、新方法论、新思想层出不穷,而在这其中唯一不变的就是 我们对高质量代码的追求。而这本书的内容,即便到了将来,敏捷可能不再热门的时候,也依然适用,因为它讲的就是如何写出高质量代码的技巧和习惯。
书写高质量代码,是每一个软件人的责任。如今有很多团队,他们耗费大量的时间纠缠于所谓的“遗留系统”,为其进行后续开发和维护。这一切都是代码质量低下惹的祸,不管是从创建代码的第一天起,还是在修改代码的每一次,软件缺陷就已经悄悄地扎下了根。其 实代码就像是土壤,盐碱地里种不出好粮食,不勤耕细作同样也种不出好粮食,而这一切就需要我们能够了解土壤自身的情况以及耕种所需要顾及的各个方面。代码 也一样,你熟悉你的代码吗?面对满目疮痍的遗留代码,你会拿着化肥、杀虫剂、催产素等一大堆化学制品往上面泼,只为了能够继续生产出“可运行”的产品功能 吗?着手开发代码之前,你清楚它的脾性吗?知道种植庄稼需要什么样的环境和呵护吗?你会不断地甚至优先地进行检查吗?你会设立可视化手段持续地监控其健康 指标吗?你会选择好的种子和作物吗?
当然,书写高质量代码也不仅仅是个人层面的事情,它也关系到组织和企业软件研发的延续性。铁打的营盘流水的兵,人员流动对企业来说是常事,而代码则屹立不动、不断延续,直到某一天产品也寿终正寝的时刻便化为灰烬。阅读和修改晦涩难懂的代码,总是比阅读、修改简单易懂的代码来得困难,耗时也更多,出错的概率也更高,这一切也都意味着更高的时间和资金成本。当然,除了可读性,代码的设计和结构也很重要,影响范围和效果也更大。
遇 到丑陋的代码,我们的第一反应可能是躲避,也可能是“那就改掉呗”。然而,“冰冻三尺非一日之寒”,恶劣代码的形成也不是一朝一夕的,要扭转局面需要比制 造局面更坚强的毅力。而在这一切背后,是人的习惯和思维定势,需要创建出一种鼓励产出优良代码、鼓励形成良好习惯的环境,从而培育出更良好的代码,维持可 持续的研发速度,不为缺陷修复所累。每一位程序员都应该阅读此书,学习“小舵板”,持之以恒地磨练。研发经理也应该阅读此书,以此为标准,创造出所需的环境并鼓励团队和个人加以实践。
“己所不欲,勿施于人”,没有人愿意维护难以理解、难以修改、难以增加功能的代码,那么也应该所有人都努力督促自己不写出这样的代码。就让我们从现在开始,努力地写高质量代码吧!
徐毅
诺基亚敏捷及精益教练
Agile China 2012大会执行副主席
Scrum Gathering Shanghai 2011及2012核心组织者
-------------------------------------
Alan Shalloway,Net Objectives公司创始人及CEO。Alan有40多年工作经验,他是计算机软件行业,特别是精益、看板、产品系列管理、scrum和敏捷设计方面的思想领导者。是 《Design Patterns Explained: A New Perspective on Object-Oriented Design》(Jolt获奖作品)和《Lean-Agile Pocket Guide for Scrum Teams》的主要作者。
Scott Bain,在计算机技术方面有将近40年经验,从事过软件开发、软件工程、框架设计等方面的工作。Scott也曾经从事课堂和远程教学等教育活动,包括课程的设计、实施培训和相关管理,给用户提供认证培训和终端用户培训。他是《Emergent Design: The Evolutionary Nature of Professional Software Development》的作者,此书荣获了Jolt生产力奖。
Ken Pugh, Net Objectives公司高级咨询师。凭借多年的丰富经验,他提供培训和辅导,帮助公司向精益-敏捷转型。他热衷于研究沟通(特别是有效地传递需求)、业务价值交付,以及用精益原则来快速进行高质量的交付。此外,他还写过好几本编程书籍,包括获得2006年Jolt大奖的《Prefactoring: Extreme Abstraction, Extreme Separation, Extreme Readability》。
Amir Kolsky,Net Objectives的资深咨询师、教练和培训师。Amir从事计算机科学领域已经超过25年了。他在IBM研究院工作过10年,此外有9年时间在各种大小类型的公司担任过首席架构师和首席技术官等职位。他从2000年开始接触敏捷开发。目前Amir作为敏捷教练和讲师,提供关于精益和敏捷软件流程、工具和实践、Scrum、极限编程、设计模式以及测试驱动开发方面的培训。
豆瓣收藏:http://book.douban.com/subject/11614307/