本文是Uncle Bob对软件行业由来已久的三个颇具争议的问题的回应。其中有小部分与其它一些篇章太有相关性,不易阅读,译者未将其纳入本文之中。有兴趣的朋友可以参考Uncle Bob原文。
TDD
这个世上还有人还觉得TDD会导致开发速度减慢的话,就好像是活在石器时代的人一样。对不起,不过这可是事实。TDD不会令你变慢,它只会使你加快。
好吧,
TDD
可不是我的信仰,它只是我的准则之一。就像会计师的复式簿记技术,或是手术台上的无菌操作。专业人士采纳这些准则是因为他们明白深层的原因,并且在运用这些的过程中也直接获益。
我本人就经历了TDD给我的工作所带来的极大效用,而且也看到它在别人身上的果效。我自身经历也
看到过TDD帮助程序员构想他们的设计;我自身经历也看到过它对各种方案的描述方式;我自身经历也看到过测试所带来的解耦;我自身经历也看到过TDD人修改、清理他们代码时候的有恃无恐。
客观的说,我不觉得TDD总是合适的。有些情形下我也会打破规则在测试之前先写代码。我会把这些情形写在另篇blog里。不过,相比之下这种情况很少。一般来说,对我对大家TDD都是让你更快、更好、更确信的方法。
总而言之是清晰的。TDD是种专业化的准则;TDD实际奏效;TDD让你更快;TDD不会过时。那些从没试过TDD的人,却声称TDD会减慢他们的速度,纯属有意忽视。我不在意你的名字是Don Knuth、Jamie Zawinski、Peter Seibel还是Peter Pan。实际的尝试尝试吧,然后你才有评判的权利。
让我换个方式。我现在直接针对那些声称
TDD
会令他们减慢的人,你真的是这么优秀的开发人员甚至于都不用从头到尾检查所写的代码吗?如果让你充分发挥才能,比起可执行的测试来说,你还能想出别的更好的办法来检查你的代码吗?比起测试优先来说,你能找到一个更好的方法来保证你一定会写出测试代码吗?
如果可以的话,我是愿闻其详。不过,不要告诉我你只是写了一点儿单元测试。别告诉我说你是人工检查代码的。别告诉我说你是做设计的,所以不用编写测试代码。那些都是石器时代的观念了。我知道,我也曾经经历过那个遥远的年代。
信奉设计模式
Tim Bray说过:
经验告诉我没有比信奉设计模式更能为大型软件项目带来灾难的了。
他当然是对的。信奉设计模式是一只危害团队的害群之马,而且会扼杀稚嫩的项目于摇篮之中。让我们先搞清楚这信奉的到底是什么。信奉设计模式就是秉着认为使用设计模式总是好的的满腔热情。
是这样的,这些设计模式不好,也不坏。它们就是它们。设定好某种特定的软件设计情形下,可能会有某个模式适合而且有益。某些模式可能会有害。很可能现在为止所编目的众多设计模式中没有一个是足够贴切以至于你可以合上书本,然后问题就迎刃而解了。
也有另一种认同--不要用设计模式。你不去使用模式。模式就是僵化的。如果某种模式恰好解决当下问题,那肯定会非常容易看出来。没错,一般来说,没完成代码你是不会认出这个模式来的。你回头看了看代码,然后认出来:“噢,这是个装饰模式!(Decorator)”
我是说设计模式无用吗?
绝不!我希望你们都读一读设计模式的相关书籍。我希望你们从里到外的理解这些模式。如果我点到“访问者(Visitor)”,我希望你能够不假思索的在白板上划出此种模式的所有不同形式。我期待你能正确的理解其中的名词和角色。我期待你理解模式。
不过我不想让你们使用模式,不想让你们相信模式,不想你把模式当成是种信仰。我期待当它们出现的时候你们能够认出它们来,而且在代码中做出规范化标示来,这样其他人也能认出它们。
设计模式有巨大的果效。他们有称谓。读代码的时候你就会发现“组合(Composite)”,如果作者也是按“组合”模式的规则来安排代码的名词和角色的话,你马上就能明白这部分代码的功能。非常强大!
线程同步最小化
头一篇Duct Tape的blog中我说了这样的话:
我发现自己很烦感Joel的观点。他说大多数程序员都不够聪明,他们用不来泛型、设计模式、多线程、COM、等等。我不认为是这样的。我觉得程序员不够聪明去使用这些工具很可能是因为他们在程序员学习期学的不够聪明。
Tim回应说:
...多线程是问题的一部分,但不是解决方案的一部分。基本上没有应用程序开发人员能很好的理解线程,以至于可以避免出现死锁、争用,还有发指的曾出不穷的bug。而COM则是我职业生涯惨遭的最滥的一坨垃圾之一。
线程同步真的是问题的一部分吗?是的!同步确实是问题的一大部分。没错,同步的第一准则是:不要。第二准则是:真的,不要。
问题是有时候你没有选择。这些情况下,你毫无疑问的必须要用同步,你应该从里到外的搞清楚它。
我完完全全的拒绝认同忽视是最佳的防护。我拒绝认同缺少技能会变成个优势。所以我希望你们明白线程同步。我希望我一喊出“哲学家就餐问题”你就能跑到白板上写出所有不同的解决方案。如果我大叫“死锁”,我希望你马上指出原因以及解决办法。
是这样的。如果你希望避免使用什么,先彻头彻尾的理解它吧。
(原文链接网址:
http://blog.objectmentor.com/articles/2009/10/06/echoes-from-the-stone-age
; Robert C. Martin
的英文
blog
网址:
http://www.butunclebob.com/ArticleS.UncleBob
)
本文作者Robert C. Martin
Robert C. Martin
是Object Mentor
公司总裁,面向对象设计、模式、UML
、敏捷方法学和极限编程领域内的资深顾问。他不仅是Jolt
获奖图书《敏捷软件开发:原则、模式与实践》(中文版)(《敏捷软件开发》(英文影印版))的作者,还是畅销书Designing Object-Oriented C++ Applications Using the Booch Method
的作者。Martin
是Pattern Languages of Program Design 3
和More C++ Gems
的主编,并与James Newkirk
合著了XP in Practice
。他是国际程序员大会上著名的发言人,并在C++ Report
杂志担任过4
年的编辑。
分享到:
相关推荐
《石器时代服务端工具全集》是一款专为《石器时代》游戏设计的综合性管理软件,它提供了全面的功能,让玩家和服务器管理员能够轻松编辑、添加和管理游戏中的各种元素,包括物品、NPC(非玩家角色)以及服务器的数据...
《石器时代转宠模拟器——深入解析"CalcDev_olderqpm_石器时代_石器时代转宠模拟_stoneage_"》 在网络游戏的历史长河中,《石器时代》是一款具有里程碑意义的作品,其独特的游戏设定和丰富的宠物系统吸引了无数玩家...
石器时代客户端8.5dell源码,可以开发编译石器时代客户端文件
石器时代2.0-3.0登录器制作工具,内含登录器以及MAX文件制作工具
最新石器时代8.0源码。内含最新编写的拦截工具
《石器时代Linux 8.0商业服务端详解》 石器时代,一款承载着无数玩家回忆的网络游戏,自发布以来便备受喜爱。随着技术的进步,游戏也不断更新迭代,来到了Linux 8.0版本。这个名为“lr.zip_stone age 8.0_石器_石器...
《石器时代CC服务端详解》 在网络游戏的历史长河中,《石器时代》是一款具有里程碑意义的游戏,它引领了一代人的回忆与热爱。而"CC服务端"则是这款经典游戏的重要组成部分,对于理解并运行《石器时代》的游戏环境至...
石器时代8.0GM系统整套源码,提供给大家学习使用。可编译哦。
《石器时代2.5源代码》是一份珍贵的编程资源,主要涵盖了2.5版本至3.0版本之间的开发工作。源代码是程序设计的基础,它揭示了软件内部的工作原理,为开发者提供了深入理解软件架构、算法和逻辑的机会。这份源代码...
《易语言石器时代图片提取技术详解》 在计算机编程领域,图像处理是一项重要的技能,尤其是在游戏开发中。本文将详细解析"易语言石器时代图片提取"这一技术,包括其核心概念、流程以及实现方法。 易语言是中国自主...
《石器代码查询器:揭秘石器时代的编程奥秘》 在互联网的早期阶段,有一款游戏犹如一颗璀璨的明珠,吸引着众多玩家的目光,那就是《石器时代》。这款经典的游戏不仅以其独特的画风和丰富的游戏性赢得了玩家们的喜爱...
石器时代7.5服务端 可直接使用 ./saac ./acwk -a localhost -c 123 ./gmvs
石器时代架设视频教程
《转身点数计算器B7(石器时代)》是一款专为石器时代游戏爱好者设计的实用工具,旨在帮助玩家更精确地计算角色的转身点数。在石器时代这款游戏中,角色的成长和能力提升往往与“转身”这一概念密切相关。转身不仅仅...
《石器时代2.5服务端精简源码解析与编译指南》 "石器时代2.5服务端精简源码"是一份专为游戏爱好者和开发者提供的珍贵资源,它基于经典的网络游戏《石器时代》的2.5版本,经过精心优化,便于在GCC环境下进行编译和...
《石器时代MM脚本》是一组专门针对经典网络游戏《石器时代》设计的游戏辅助脚本。《石器时代》是一款历史悠久的大型多人在线角色扮演游戏(MMORPG),以其独特的史前文明背景和可爱的Q版角色吸引了大量的玩家。这些...
石器时代姐姐编辑器,极度好用,谁用谁知道
石器时代1.82版本win单机服务端,可以直接运行进入游戏。这个保存好多年的老物了。想研究的可以下载玩玩
《石器时代8.0(繁体)服务端SAAC源码》是一个关于经典网络游戏《石器时代》的源代码包。《石器时代》是一款深受玩家喜爱的大型多人在线角色扮演游戏(MMORPG),其背景设定在遥远的史前时代,也就是所谓的"石器时代...
《完整的石器时代的源代码》是一款开放的学习资源,它提供了游戏开发的全面视角,特别是对于那些对编程和游戏设计有兴趣的人来说,这是一个极好的学习平台。源代码是软件开发的核心,它揭示了游戏背后的逻辑和机制,...