期间:2007
测试癌症
当我的职业变成全职作者时,我经常担心自己会远离日常软件开发的现实。华体会登录网址我见过其他知名人物与现实失去联系,我担心同样的命运。我最大的阻力来自Thoughtworks,它就像现实的常规剂量,让我脚踏实地。
Thoughtworks还充当了该领域想法的来源,我喜欢写同事们发现和开发的有用的东西。通常这些都是有帮助的想法,我希望我的一些读者能够使用。我今天的主题不是一个令人愉快的话题。这是一个问题,一个我们没有答案的问题。
本代码
我现在写的产品代码不多,但我还是要花几个小时写代码。这种代码是一种特殊形式的代码,用于解释书中的思想。书本上的代码不太像真正的代码,在编写它时需要考虑一些不同的因素。
Groovy和JRuby
目前,关于Groovy和JRuby作为运行在Java虚拟机上的脚本语言的相对优点,存在着相当大的争论。好奇的人想知道——这些语言中哪一种会赢得即将到来的语言战争?人们想知道为一个项目选择哪种语言,或者致力于学习哪种语言。
Alt.NET相依
上周末我参加了Alt.NET会议。这是我在博客圈观察了很长一段时间的一群人第一次有名字的聚会。一群长期使用微软技术的用户,他们认为自己的开发理念已经与微软公认的正统理念脱节。虽然有些人考虑过离开,但这群人渴望留下来,并试图影响微软的世界。
没有重装银弹
OOPSLA 2007年会议在弗雷德·布鲁克斯的著名论文《无银弹》发表20周年之际举行。为了纪念这一点,我们举办了一个回顾小组,包括布鲁克斯先生。我很幸运,被邀请加入了这个小组,尽管我怀疑他们对我最终做出的贡献有多大的期待。
实现轮式溜冰鞋
敏捷开发的一个关键特性是弄清楚如何让一个系统只使用一小部分功能。我们根据软件提供的商业价值来开发软件,我们越快上线,我们就越快获得至少部分商业价值。
时区不确定性
我当时在波士顿,正准备飞往我们在卡尔加里的办公室。我看我的日历,看看我是否有一个会议。第一次是在上午10点半——很酷,不用早上匆忙起床。
客户忠诚度的软件
上周,我在卡尔加里的办公室与我们最信任的技术主管之一John Kordyback进行了一次很好的交谈。他研究并深入研究了许多旅游忠诚软件系统(常旅客/睡眠者等),我们讨论了这些东西的本质,以及如何以更富有成效的方式思考它们。
改变接口是重构吗华体会app下载二维码
更改部分代码的接口是一种重构吗?华体会app下载二维码
一种语言
我们应该在我们的开发工作中只使用一种语言吗?
Ui模式解读
2006年夏天,我做了大量的工作UI模式.从那以后,我的主要写作重心已经转移到(虽然不是很明显)DomainSpecificLanguages.在这个页面上,我会把我喜欢的与那部作品相关的文章的链接记录下来。
设计耐力假说
为了设计好软件值得付出努力吗?
双工的书
上周我得到了我的签名系列的最新一本书:xUnit测试模式杰拉德Meszaros。我和杰拉德一起断断续续工作了好几年,所以我对它的内容相当熟悉,但不知怎么的,看到实体副本让我相当震惊。不知怎么的,我并没有意识到这本书有多大——883页,是我的系列书中最大的一本。
Ruby微软
在RailsConf2007关于JRuby有很多激动人心的事情。这个小团队接手了一个死气沉沉的项目,并把它变成了JVM上Ruby平台的一流实现。他们得到了很多喝彩,这是他们应得的。
因此,有了JRuby,焦点就转移到了另一个通用的托管代码运行时——。net。微软对Ruby的意图目前还不太清楚。他们已经宣布Ruby是Silverlight的脚本语言——但这仍然留下了许多悬而未决的问题。这是ruby语言的完整实现,还是某种形式的ruby ++——ruby的增强子集?
RailsConf 2007
我不像以前那样参加那么多的会议了,但这样做的好处是我有时间去参加我喜欢的会议。我一直都特别喜欢Ruby社区,所以我参加了今年的RailsConf。
你好,杯子
当我探索外部的解析器生成器工具时DomainSpecificLanguage年代,我说HelloAntlr而且HelloSablecc.如果您花了很多时间研究解析器生成器,那么您就无法真正避免研究老的中坚力量lex和yacc(或者它们的gnu对应的flex和bison)。我想探索lex和yacc的操作方式,但我的C太生疏了。正如埃里克·伽马(Erich Gamma)所讽刺的那样,我太懒了,连自己的垃圾都懒得倒。幸运的是,有一个Java yaccish系统的实现,这正是我所需要的。
翻译
把你富有成效的时间浪费在阅读这个博客上是一回事,但有些人也喜欢翻译它。我要欢迎一位泰语翻译这是由Wee Witthawaskul领导的团队所做的。大约15年前,我作为一个典型的西方背包客去过泰国。在曼谷乘坐河上巴士,在Pai附近徒步旅行,在Ko Pi Pi浮潜,还有一些美味的食物,这些都是我美好的回忆。我第一次见到Wee是在他和Ralph Johnson一起工作的时候,他现在和我一起在Thoughtworks工作。
输出构建目标
在过去的几天里,我一直在审阅我的同事Julian Simpson撰写的一篇关于重构ant文件的文章。华体会app下载二维码Julian是我们的“部署人员”之一,他负责将我们面向敏捷的工作习惯应用到系统的部署中。在做这件事的过程中,朱利安遇到了太多的麻烦蚂蚁构建脚本。他的文章很好地描述了他最喜欢的一些清理混乱的方法。
等待头
我是一个超级粉丝持续集成,这是一个相对简单的实践,但对大多数开发团队来说却有很大的不同。然而,像大多数实践一样,它也有它的缺陷,有改进的机会。保罗·杜瓦尔的作者。soon-to-be-standard书在这个问题上,指出其中一个是最近的。如果提交构建中断,整个团队都会受到影响,并且在修复之前可能会变慢。
灵活的Antlr代
我一直在探索外部dsl的各种替代语言和语法。我的主要工具之一是Antlr.通过这种探索,我有一个具有多个相似语法文件的项目,我想在其中运行相同的东西,但使用不同的语法。虽然我现在只有几个语法文件,但我很可能最终会有几十个。
净污秽
最近的争吵结束了给凯西·西拉的死亡威胁一直在我读的博客里徘徊我写这篇文章的事实表明它引发了我自己的一些想法。
埋置辅助
最近几周,我一直在研究编译器-编译器工具。这些工具的一个共同特征是,它们有一个语法文件,其核心是对一种语言的语法的生成规则的描述。除了描述语法之外,该文件还向解析器提供关于如何在识别语言元素时处理语言的信息。在大多数编译器-编译器工具中,这些指令在语法中表示为操作——通常这些操作在高级语言中被编码为代码片段。
Transactionless
几年前,我和几个在eBay工作的朋友聊天。听到人们在高容量网站上使用的技术总是很有趣,但也许最有趣的花边新闻之一是eBay几乎从不使用数据库事务。
你好Antlr
后说HelloSablecc我也想试试Antlr,这是Java领域的另一个编译器-编译器。和上面的条目一样,这只是让Antlr使用非常简单的“hello world”风格语法。
末日的裂缝
这是我和同事丹·诺斯为QCon 2007做的主题演讲。我们都认为开发人员和他们的客户/用户之间的差距是软件开发中最大的问题。华体会登录网址(我们称之为鸿沟,但这个词已经被过度使用了。)在这里,我们谈谈这个差距,为什么它很重要,以及我们需要做什么来跨越它。特别地,我们认为中介业务分析师的传统角色就像一个渡口,而我们真正需要的是一个桥梁,使开发人员和他们的客户之间能够直接联系(并且分析人员可以构建和维护这个桥梁)。这是我最喜欢的联合主题演讲之一,因为我认为这个话题非常重要,也因为丹是如此令人振奋的共同演讲者。
可修改性:或者说敏捷中是否存在设计
2007年伦敦QCon的组织者,让我做一个关于建筑可修改性的会议。华体会体育网页版入口我想,比起听我说,观众可能更喜欢听Thoughtworks的一些架构师,我通常会重新包装他们的想法:Dave Farley,伊恩·卡特赖特,弗雷德·乔治。,Erik Doernenberg,丹尼尔Terhorst-North.InfoQ现在上传了一段视频。
面向语言的编程和语言工作台
我和Neal Ford一起为服务器端Java研讨会做的主题演讲。我们将关注领域特定语言的发展趋势、存在什么样的语言以及它们为什么有趣。如果你想找一个关于这个主题的演讲,那么我更喜欢JAOO的视频,但这个视频扩展了一些主题,因为Neal的存在更有趣。如果你能找到一种方法提取音频流,它也将只工作良好的音频。
你好Sablecc
我最近对SableCC做了少量的研究。要运行“Hello World”样式的解析器需要付出一些努力,所以我想在这里做一些注释,说明我是如何使它工作的。我并不是说这是最好的方法,但如果你想要使用它,它可能是有用的。
JRuby速度
昨天我需要摆弄一下速度,以便探索一些关于模板和宏的东西。我喜欢velocity的简单模板语言,但这是我在一些Java或。net工作的上下文中没有使用它的时候之一。在这一点上,处理速度变得有点痛苦,因为您必须设置上下文并在Java中运行处理器。
同形异义词类型实例
“《战争与和平》是一本很棒的书。
“让我看看…可惜这本书的封面这么破。”
两个句子,每个句子都用了“book”这个词。我们每天浏览这样的组合,却没有注意到“book”这个词在这些句子中的意思完全不同。
类实例变量
在了解对象时,您通常了解到它们可以捕获两种数据:实例和类。实例变量是最常见的情况,数据随对象的每个实例而变化。类变量通常称为静态变量,在类的所有实例之间共享。每个实例都指向相同的值,所有人都可以看到任何更改。类变量比实例变量常见得多,特别是可变类变量。
Atom提要
(更新为Sam Ruby说服我在约会时使用二次精度。)
模拟没有存根
术语“模拟对象”已经成为一个流行的术语,用来描述模拟真实对象进行测试的特殊情况对象。大多数语言环境现在都有框架,可以很容易地创建模拟对象。然而,通常没有意识到的是,模拟对象只是特殊情况测试对象的一种形式,它支持不同风格的测试。在本文中,我将解释模拟对象是如何工作的,它们如何鼓励基于行为验证的测试,以及周围的社区如何使用它们开发不同风格的测试。