期间:2004
隐喻的质疑
经常阅读我的作品的读者可能知道,我非常怀疑使用其他职业的隐喻来推理软件开发。华体会登录网址特别是,我认为工程学的比喻已经对我们的职业造成了损害——因为它鼓励了设计与施工分离.
当我在我们的伦敦办公室闲逛时,这个问题在精益制造的背景下出现了,这是一个在敏捷圈中经常使用的隐喻——尤其是被poppendieck.如果我不喜欢土木工程的隐喻推理,我是否更喜欢精益制造的隐喻推理?
更多的版本控制
作为一个一直使用版本控制的人,我认为它可以扩展到计算机使用的更多领域。除了软件开发人员,很少有计算机用户使用版本控制。然而,正如软件开发人员所知道的,版本控制是协作工作的一个很好的机制,它允许多人在一个软件系统上一起工作。版本控制被广泛使用的好处是什么?
多米尼加
我们最近进行了一年一度的潜水度假。每当我们这样做的时候,我们就会面临一个困境——我们要不要去萨巴我们喜欢的东西,还是要尝试新的东西?我们的答案是去萨巴和一个新的地方,这导致了一个更长的假期,弥补了从寒冷的东北部长途旅行。我们的新家是多米尼加。
OOPSLA 2004
我参加OOPSLA已经有十多年了。它已经成为我与许多朋友联系的地方,了解他们最近在做什么,并试图了解OO社区的发展方向。
之前清晰
清晰的代码是好的,但是你应该为了可测试性而牺牲清晰的代码吗?
柔软的范围
敏捷开发的一个基本原则是,需求更改不仅是预期的,而且是受欢迎的。当像Thoughtworks这样的外部公司为客户工作时,这就构成了一个特别的挑战。许多客户想要固定价格安排,这是固定的范围因为他们看到FixedScopeMirage.但是固定范围的合同与敏捷开发是完全不一致的,那么像我们这样的公司该怎么做呢?
本地运输主任
如果你一直在盯着我的同伴ThoughtBloggers你会知道它看起来我的一只捕鸟器烧断了保险丝,澳大利亚的阳光显然让这些瑞典模特晒得发毛。
乔恩的烦恼数据传输对象,但这并不是说dto是坏事,就像任何模式一样,它们在特定的上下文中是有用的。模式总是有两部分:如何和何时。您不仅需要知道如何实现它们,还需要知道何时使用它们,何时放弃它们。
静态变量替换
当我听我们的开发团队谈论他们的工作时,一个共同的主题是他们不喜欢静态的东西。通常,我们看到公共服务或组件保存在带有静态初始化式的静态变量中。静态的一个大问题(在大多数语言中)是不能使用多态性来用一个实现替换另一个实现。这一点让我们非常头疼,因为我们非常喜欢测试——为了进行良好的测试,能够用一个替换服务是很重要的服务存根.
Debian Java
在Debian上安装大多数东西都非常简单:apt-get安装包名称
.遗憾的是,Java是个例外,因为它不在基本的debian系统中。我最近在我的Debian Sid桌面下载并安装了java 1.5(或者5,或者他们现在叫它什么都行)。简单地说,程序是。
固定范围的海市蜃楼
许多公司喜欢写合同来确定范围和价格,因为他们认为这样可以降低风险。海市蜃楼说,他们的财务义务是固定的交易价格。如果他们没有得到满意的软件,那么就不会花费他们。
λ
随着人们对动态语言的兴趣日益浓厚,越来越多的人开始接触到一种名为Lambdas的编程概念(也称为闭包、匿名函数或块)。C/ c++ /Java/ c#语言背景的人没有lambda,因此不确定它们是什么。这里有一个简短的解释,那些在有它们的语言中做过大量编程的人不会觉得这很有趣。
麦哲伦子午线Gps
几年前的圣诞节辛迪给了我一个麦哲伦子午线黄金GPS设备。因为我比一般熊更擅长导航,所以我并不认为它是我真正需要的东西,而是一种可以玩耍的东西。从那以后,我发现它更像是一个有趣的玩具,而不是我真正经常使用的东西。
标准的故事点
最近,我听到了一些关于如何为使用极限编程的计划方法的多个团队制定标准故事点机制的问题。我们希望有几个团队都使用等价的故事点,这样一个团队的三个工作故事点就会与另一个团队相同。
我认为,最好的结果是价值有限,最坏的结果是危险。
是优化重构华体会app下载二维码
如果您做了更改来提高程序的性能,这是重构吗?华体会app下载二维码
重构的定义华体会app下载二维码
在我华体会app下载二维码重构的书,我给出了重构的几个定义。华体会app下载二维码
华体会app下载二维码重构的边界
最近有一些关于华体会app下载二维码重构邮件列表关于什么是重构,什么不是重构。华体会app下载二维码与这些讨论一样,争论一个大头针能容纳多少个天使总是有危险的,但思考边界确实有一些有用的目的。
快速失败
如果软件要走下坡路,吉姆在这个专栏中解释了为什么它应该尽可能快地崩溃。
声明排序是重构吗华体会app下载二维码
它是一个重构来改华体会app下载二维码变声明的顺序,如Java程序中的方法和字段?
Junit新实例
我经常会收到关于设计选择的问题JUnit测试框架——决定为每个运行的测试方法创建一个新对象。足以让我快速进入。(然而,我几乎不得不指出,我写关于JUnit的文章并不意味着我不认为其他形式的测试是重要的。有许多有用的测试活动,尽管JUnit及其近亲对其中许多活动都很有价值,但它并不是所有问题的解决方案。关于更多关于测试的博客,我建议你看看布雷特Pettichord,Brian Marick,詹姆斯·巴赫.您也不应该认为我关于xUnit测试的文章暗示重构、用例或使用牙线的重要性。)华体会app下载二维码
精致的细节
辛蒂很注意木工手艺的好坏。她会注意到所有我没有注意到的细节。她特别欣赏那些看起来不起眼,但实际上很难做好的事情。
测试资源池
我在翻一些旧笔记的时候,发现了里奇·加扎尼提给我的一个简单但有用的建议。
礼貌的实现
当您编写一个类时,您主要努力确保该类的特性对该类有意义。但是在某些情况下,添加一个特性使类符合更丰富的接口是有意义的。
开放的知识产权
在Thoughtworks工作让我感到舒适的原因有很多,主要是因为这里的大多数人与我有着广泛的共同原则。多年来引起一些争论的一个问题是我们对待自己知识产权的态度——本质上我们把知识产权给了别人。
Belkin Linux Kvm
(鼠标、Belkin KVM开关和Linux的问题)
断言免费测试
这是一个朋友的朋友的故事。我相信这一定是真的,至少在某个地方。
安装Debian
最近几个月,我开始了一场安装的狂欢DebianLinux。在过去的几个月里,我看到了很多新的环境出现在我的设置中。我买了一台安装了Windows XP的新台式电脑,一台安装了MacOS X的Powerbook笔记本电脑,还有一台安装了Windows XP的新工作笔记本电脑。所有这些都涉及到不同数量的工作,甚至我的工作笔记本电脑(它已经安装了Thoughtworks配置的Windows XP)也需要安装我在工作中使用的各种应用程序。
最重要的设计准则是什么?
每个人都有自己的重要设计准则。Scott专注于接口以及如何设计接口,使其易于正确使用,难于错误使用。
资产捕获
资产捕获是一种发展战略StranglerFigApplication.您可以将许多应用程序看作是管理一组关键资产。工资系统负责员工,交易系统负责交易,租赁系统负责租赁。要逐步切换到一个新系统,您可以从确定您将从新系统开始的资产子集开始。通常,最好的开始资产要么是简单资产(因为它们很快就会开始),要么是那些需要用旧系统特别难以处理的资产。
事件的拦截
您可以认为,许多后端应用程序主要通过被告知外部世界的重要事件来进行操作。事实上,事件驱动的企业应用程序的想法是一种看待事物的老方法——我第一次接触到它是在McMenamin和帕默在80年代中期。
阻气门图应用
当辛迪和我去澳大利亚时,我们在昆士兰海岸的雨林里呆了一段时间。这个地区的自然奇观之一是巨大的勒颈无花果.它们在树的上部树枝上播下种子,然后逐渐向下生长,直到扎根于土壤中。许多年过去了,它们长成了奇异而美丽的形状,与此同时,它们会勒死和杀死它们的宿主树。
被估计
如果您正在使用XP风格的计划,您需要从开发人员那里得到快速的一致估计。抛出评估可以让您快速判断开发人员是否对评估有相同的相似的观点(这样您就可以记下它并继续前进),或者是否存在分歧(当您需要讨论的时候)UserStory更多细节。
Uml素描工具
我画了很多UML图,但我不使用CASE工具。原因是我感兴趣的UmlAsSketch,不是所有的存储库的东西。到目前为止,我经常选择Visio。虽然Visio附带了UML模板,但我并不使用内置的模板——我更喜欢自带的模板帕维尔Hruby.
沉没成本驱动的架构华体会体育网页版入口
我发现这是一种很常见的建筑风格。您的公司购买了一些非常昂贵的基础设施软件。然后,您被告知必须在项目中使用它,即使它不适合该项目,并导致您付出额外的努力。花了那么多钱买的,你不希望它白白浪费掉吧?
Diff调试
最近,我在为一个写作项目编写示例代码时,遇到了一个失败的测试。“哎哟”,我想,“上周考试就通过了——怎么回事?”我没有试图在我面前的代码中找到错误,而是使用了我想称为差异调试的方法。
敏捷的交接
我看到的关于敏捷项目最常见的一个问题是,他们如何处理向另一个团队的移交。如果您的开发团队离开并将支持移交给支持团队,当敏捷项目往往产生的文档比计划驱动的过程少得多时,他们该如何应对?
集成数据库
集成数据库是充当多个应用程序的数据存储的数据库,因此可以跨这些应用程序集成数据ApplicationDatabase).
数据库类型
当我谈到数据库及其与应用程序的关系时,我发现区分两种类型的数据库很有用:ApplicationDatabase而且IntegrationDatabase.两者之间的区别在于数据库是否被控制和封装在单个数据库中ApplicationBoundary.
提问时间面板
我参加过很多会议的小组讨论,自己也组织了一些。当我组织一个时,我喜欢使用一种特殊的形式,以英国电视时事小组“提问时间”为基础。我做过几次,比起传统的面板,我更喜欢它。
一般建议的局限性
作为一名软件开发方面的作者和演讲者,我对我们的职业提出华体会登录网址了大量的一般性建议。无论是具体到说如何DecoratedCommand作品,还是像哲学一样思考你的SoftwareDevelopmentAttitude在美国,我制造的噪音没完没了。此外,我只是一个提供一般性建议的大型社区中的一员:作者、分析师、记者,这类建议的数量比任何人都多。
昨天的天气
这个原则说的是,你今天做的事和昨天做的一样多。在迭代项目中,你应该计划在这次迭代中做和上次迭代一样多的事情。这个术语来自于极限编程社区。
诉诸权威
我经常会遇到一些人,他们不仅不同意我所说的某些话,而且对我所说的话感到震惊。“像你这样的大师说了什么,很多人就会盲目地照你说的去做。”
范围
将一个范围的值处理为一个单独的对象,例如10月22-25日。
数量
处理尺寸数字,如:12英尺和9.99美元
设计死了吗?
对于许多短暂接触极限编程的人来说,XP似乎意味着软件设计的死亡。许多设计活动不仅被嘲笑为“大的预先设计”,而且像UML、灵活的框架、甚至模式这样的设计技术也被淡化或完全忽略。事实上,XP涉及到大量的设计,但其方式与已建立的软件过程不同。XP通过允许进化成为一种可行的设计策略的实践使进化设计的概念重新焕发活力。它还提供了新的挑战和技能,因为设计师需要学习如何进行简单的设计,如何使用重构来保持设计的整洁,以及如何以进化的风格使用模式。华体会app下载二维码
MDA:建模者的复仇还是UML的乌托邦?
在OOPSLA 2003上,Dave Thomas (OTI的创始人)对模型驱动架构进行了深思熟虑而有力的批判。华体会体育网页版入口在本专栏中,他解释了为什么他认为通用模型驱动方法可能失败,并指出UML和领域特定语言仍然有价值。
敏捷认证
敏捷方法是否应该有一个认证程序?
日本
我现在旅行回来了,为了回报我从邮件中得到的所有建议,这里是我在三周的日本之旅中的一些反思。
对所有人都是敏捷的
一般的开发人员可以使用敏捷方法吗?
代码示例
我写设计方面的文章,我的观点是,即使你在讨论一些抽象的设计模式,提供源代码示例也是有用的。当然,这可能会导致人们认为代码示例就是模式,但我认为这种风险被代码提供的精确性所压倒。有几次我不太确定一个想法,但一个代码示例帮助我澄清它。所以在我关于设计的写作中,我总是尝试提供代码示例。
华体会登录网址软件开发的态度
软件开发中的许多争论都是基于演讲华体会登录网址者是否具有DirectingAttitude或者一个EnablingAttitude.这些不同的态度影响着对语言、设计、工具、过程等的选择。
导演的态度
两种SoftwareDevelopmentAttitudes.指导态度的意思是,因为大多数开发人员都不是那么好(据说有50%的开发人员低于平均水平),我们需要指导他们做事的方式。这个方向是为了防止他们对所开发的系统造成伤害。通常,这种态度表现在阻止开发人员做某些事情的设计和工具中,限制了他们可以做的事情,使他们远离复杂的领域。
支持的态度
两种SoftwareDevelopmentAttitude赋能态度认为开发人员是负责任的专业人士,因此应给予他们做任何他们需要做的事情的自由。遵循这种态度的设计应该使东西易于使用,但应该假设开发人员知道他们在做什么,因此不努力防止某些东西被糟糕地使用。因此,这些工具可能会被滥用,但要抱着这样的态度:用户应该知道更多,如果他们不知道,他们就应该得到这些。
模块组装
模块化编程不只是对接口进行编程,它还包括将模块组装在一起,而不让各个模块知道它们正在与哪个具体模块进行通信。
数据模型
我早期最喜欢的一本书是Tsichritzis和Lochovsky关于数据模型的书。这本书讨论了思考数据的不同模型,特别是当时讨论最多的三个模型:RelationalDataModel,HierarchicDataModel而且NetworkDataModel.
公共Csharp字段
当我第一次接触c#时,我从一开始就喜欢上了属性的概念。c++ /Java的getX和setX约定对我来说总是相当愚蠢,编写它要自然得多obj。X= other.X
.提供带有get和set方法的属性,将公共约定转变为该语言的自然支持特性。
模型驱动架构华体会体育网页版入口
有些人认为模型驱动架构华体会体育网页版入口(MDA)将是软件开发中自汇编语言向第一个高级语言转移以来最大华体会登录网址的转变。另一些人则认为这只不过是《活案工具之夜》。我属于后者,但我觉得需要的不仅仅是一句花言巧语。
极低缺陷项目
当人们谈论极限编程在美国,他们经常关注它的适应性规划风格,或它的进化方法设计。我特别感兴趣的一个小但不断增长的趋势是,缺陷率非常低的XP项目数量虽少但在不断增长,我的意思是每个月少于一个生产缺陷。
装饰的命令
这是一种非常常见的模式,也非常简单,它实际上只是应用于命令的装饰器模式。我看到它经常被用在CommandOrientedInterface您还会听到这被称为拦截器和面向方面编程的一种形式。
控制容器的反转和依赖注入模式
在Java社区中出现了一种轻量级容器,它可以帮助将来自不同项目的组件组装成一个内聚的应用程序。在这些容器的底层是它们如何执行连接的通用模式,它们在非常通用的名称“控制反转”下引用这个概念。在本文中,我将以更具体的名称“依赖注入”深入研究该模式的工作原理,并将其与服务定位器替代方案进行对比。它们之间的选择没有将配置与使用分离的原则重要。
构建语言
Bruce Eckel的最近的帖子On ant和make促使我分享了一些关于构建语言的想法。ant和make都指定了构建的发生方式,它们是描述构建的语言。这两种方法都得到了广泛的应用并取得了成功。然而这两者都有局限性,在较大的系统中,经常会发现人们从其他程序生成ant/make文件。
数据库和构建时间
这是我最近发现的一个有趣的对比。两个大小相似(约100 KLOC)、环境相似(Java和. net)的企业应用程序项目。一个可以在一个小时内完成完整的构建和测试,另一个则需要2-3分钟。
使用Xml
XML出现已经有一段时间了,而且使用得很多——实际上比它应该使用的要多得多。与大多数工具一样,XML对某些事情很好,但对另一些事情则不行
华体会app下载二维码重构词语误用
“重构”曾经是一个只有少数人知道的术语,现在在计算机行业中被广泛使用华体会app下载二维码。我愿意认为我对此负有部分责任,并希望它能改善一些程序员的生活和一些企业的底线。(重要的是,我不是重构之父或发明者——我只是一个文档管理员。)华体会app下载二维码
对象和迭代
从面向对象开发的最开始,OO设计就与迭代和增量开发联系在一起。但正如许多人指出的,这两者之间并没有内在的联系。你可以在瀑布中实现OO,也可以在没有对象的情况下实现IID。那么,为什么两者联系如此紧密呢?
连续的设计
重构、JUnit等工具和极限编程(XP)等敏捷方法华体会app下载二维码的日益流行带来了一种新的设计风格。持续设计是使用重构来持续改进程序设计的过程。华体会app下载二维码在本专栏中,Jim讨论了他在持续设计方面的经验,特别是在国际化和事务等看起来很棘手的设计问题上。