How do you improve the productivity of software developers?
在过去几年里，已经有很多讨论关于Web 2.0，无论这个概念，它的值作为新词。我在这种参与是有限的，我已经阅读并在话题听到的Tim O'Reilly，在他组织了一次研讨会参加了。有很多困惑摆在那里，但是，所以我想它的时候，我做妄图以减少混乱。（由于我解释添了很多的这个，如果我们不同意任何事情，你应该相信他。）
我有创造的习惯新词■要描述的东西，我在软件开发中看到的。这其中包括在这一领域的作家共同的习惯，对于软件开发仍然缺乏很多有用的行话。一个与建设行话的问题是，条款很容易受到失去其意义，在语义扩散的过程 - 用另一个潜在的除了我们的行话。
1: a new word, usage, or expression.
2: a meaningless word coined by a psychotic.
内部DSL（通常称为嵌入式DSL）是一种DomainSpecificLanguage即现有主机的语言里面写。这是多种编程语言群体的思维的常用方法 - 尤其是Lisp的社会。它现在获得了大量的关注，DSL的是在快速成长的Ruby社区思想的一种常见方式。
如果你关心你做什么，你关心它越来越好。这涉及反映你是如何做的事情，并尝试新的技术，看看他们是否让你更好的。即使别人推荐新技术, only way you know if they work for you is by trying them out yourself and seeing if they improve your performance.
One of the longest running arguments on object-oriented circles is the debate betweenOpenInheritanceand Designed Inheritance.The principle of Designed Inheritance is probably best summed up byJosh Bloch: "Design and document for inheritance or else prohibit it".With this approach you take care to decide which methods can be inherited andSealthe others to stop them being overridden.
According to the current board of the Agile Alliance, agile methodshave "crossed the chasm", which I think means they are becoming more widespread.While this has its advantages, it also brings problems.As a methodology or design approach becomes fashionable, then we see a lot people using it, or teaching it, who are focusing on the fashion rather than the real details.This can lead to reports of things done in agile's name which are a polar opposite to the principles of movement's founders.
I've said before (in an earlier version of this page) thatI cannot understand how a voting machine without a clear, auditable paper trail could be considered acceptable for voting.Some further support for this view is arecent studyat Princeton showing how easy it is to subvert common voting machines.(viaGlenn Vanderburg)
Recently Apple announced theTime Machine, which is the ability to go back in time and see all the alterations to your files, including finding deleted files.For some of us intense geeks, this is not a new feature.Like others, I put my entire working directory under version control, originally CVS nowSubversion, and have thus had the ability to easily look at all the changes to everything I work on.It's such a useful feature that I've wondered before about what it would be like to haveMoreVersionControl, and perhaps Time Machine is a step in that direction.
A while ago Jon Udell characterizedtwo modes of public speaking:
- Scripted: where you write out pretty much exactly what you are going to say and either read or memorize it.
- Slide-driven: where you produce detailed slides and use them to drive what you say.
Most of my public talks these days use a third mode - extemporary speaking.In this style I begin with little more than a rough outline of my talk, and compose everything else as I go.
I've spent a lot of my writing energy writing patterns.From time to time I get asked questions about why I do that and what makes a good pattern.This is a brief article about how I look at patterns with my suggestions for people who are interested in writing patterns themselves.
When the topic ofDomainSpecificLanguagecomes up, one of the common puzzles is exactly what is or isn't a DSL.The trouble is that there is no precise definition for a DSL and there is a large gray area between DSLs and other things.
When someone is looking at what makes up a top-class enterprise software developer, often the conversation may turn to knowledge of frameworks and languages, or perhaps the ability to understand complicated algorithms and data structures.For me, one of the most important traits in a programmer, or indeed in a development team, is something that I'll call Customer Affinity.This is the interest and closeness that the developers have in the business problem that the software is addressing, and in the people who live in that business world.
A historical overview of how GUI archiectures have evolved, with a particular attention to how Model-View-Controller has been seen by different groups over the years.Ties into my presentation patterns from a historical perspective.
For the last four years ThoughtWorks has operated a lab in Bangalore India to support our software development projects in North America and Europe.Traditional approaches to offshore development are based on plan-driven methodologies, but we are very firmly in the agile camp.Here I discuss our experiences and lessons learned in doing offshore agile development.So far we've discovered that we can make it work, although the benefits are still open to debate.(Although this article was last updated in 2006, I our visited our offshore work in 2011 and found the lessons to still be relevant and thus the article did not need a further significant revision.)
Narrative overview of patterns in user interfaces.Discusses how and why to separate domain logic from the presentation and how layers of data are separated and synchronized.
In the newly formed Rails community, the word 'enterprise' is becoming a dirty word.For many people the Rails framework, with its aggressive simplicity, is the antithesis of over-complex'enterprisey'frameworks.
In February 2001 a group of seventeen software pundits got together in Snowbird UT to discuss the growing field of what used to be called lightweight methods.We decide to use the term agile to describe this new breed of敏捷 methods。We also wrote theManifesto for Agile Software Development, setting out the values and principles of these agile processes.我是这些自当选梦想家之一，从那以后遇到很多问题关于这个群体的起源和敏捷联盟的成立以后。这是我的那些事件的回忆。
最近博客圈的争论是由尼古拉斯·卡尔的入门自称“造成death of wikipedia“（是的，我知道我的反应是缓慢的，但我没有足够的时间来写，而在路上）。他最初的职位让我觉得相当奇怪，他说，维基百科是死于因物品0.01％有一个相当温和的保护这就像说民主是在当镇雇用一名警察。
本文讨论了不断变化的服务提供商和消费者的社会一些挑战。它描述了一些当服务供应商改变他们的合同的部分地区，特别是文档架构，并确定了两个很好理解的策略所发生的耦合问题 - 将架构扩展点和执行“刚刚够”收到信息的验证 - 为缓解这些问题。这两种策略有助于保护消费者改变运营商协议，但他们都没有给出任何供应商洞察正在使用它的方式和它必须保持它的发展的义务。借鉴这些缓解策略之一的基于断言的语言 - 在“刚好够用”验证策略 - 文章则介绍了“消费者驱动的契约”模式，该模式灌输有识之士提供到他们的消费者的义务，并重点服务演变各地 the delivery of the key business functionality demanded by consumers.
今年年初，我做了很多的旅行，所以我的写作地完全停止。我回到家在几个星期前，希望能得到很多写作完成。嗯，我已经做了一些，但事情一直上来让我走：手术从事故中删除插针，潦。但最大的生产力杀手一直自己造成的 - 购买一台新电脑。
持续集成是一种软件开发实践，团队成员经常每天至少合并他们的工作，通常每个人整合 - 导致每天多个集成。每个集成是通过自动化的构建（包括测试），以检测积分误差尽可能快地验证。许多团队发现这个方法会导致significantly reduced integration problems and allows a team to develop cohesive software more rapidly.This article is a quick overview of Continuous Integration summarizing the technique and its current usage.
For the last month or so I've been hanging out in our UK office, catching up with various UK ThoughtWorkers.I was intending to visit some of our client projects, but just catching up with people in and around the office has kept me pretty busy (it's also wiped out any book writing progress, but that can wait till I get back home.)
You can tell them by the twitch in the left hand side of the mouth when they see a getter method, there's swift pull on their battleaxe and a satisfied cry as another getter is hewn unmercifully from a class which immediately swoons in an ecstasy of gratefulness at the manly Getter Eradicator's feet.
A code smell is a surface indication that usually corresponds to a deeper problem in the system.The term was first coined by Kent Beck while helping me with my188足球比分直播book.
Constructor initialization is an approach where you pass in all the collaborators that the object needs in the creation method of the object.It is an alternative toSetterInitialization。
One of the side-effects of my success as a writer is that I've become a minor geek celebrity.It is very minor, usually only taking effect in geek conferences (although I have had people wander up to me in a restaurent a couple of times in San Francisco.) Before it happened I really didn't think much about it, other than a mild hankering after fame.Now it's happened I'm more aware of it - and all in all I hate it.
One of the longest running ways to think about an enterprise application is as a system that reacts to events from the outside world.This is a way of thinking that became established in the structured design community in the second half of the 80's.You hear of it now under the banner of "Event-Driven Architecture".In the mid 2000's I started collecting some patterns for these kinds of systems, but haven't since been able to turn them into anything more substantial.Despite their rough and ready nature, I do think they provide some useful ideas around the nature of Event Collaboration, introducing the term “Event Sourcing”, using Parallel Models to represent hypothetical states of the world, and how domain logic can be organized using an Agreement Dispatcher.
A pattern narrative that looks at how events can be used as the focus for how a system operates and collaborates with peers.Summarizes how you represent events, how to use events to integrate between systems and using event sourcing in the architecture of a system.
Narrative of patterns useful for accounting.Contains basic representations of accounts, entries and transactions, together with an overview of patterns for making accounting adjustments.
XUnit is the family name given to bunch of testing frameworks that have become widely known amongst software developers.The name is a derivation ofJUnit,the first of these to be widely known.
Gerard Meszaros isworking on a bookto capture patterns for using the variousXunitframeworks.One of the awkward things he's run into is the various names for stubs, mocks, fakes, dummies, and other things that people use to stub out parts of a system for testing.To deal with this he's come up with his own vocabulary which I think is worth spreading further.
What do people mean when they say a method doesn't change the observable state of an object?
There's been a long-running, if low-key, argument between the advocates of Design by Contract (DbC) and Test Driven Development (TDD).I'm not going to delve into that right now, but I will pass on an idea to merge the two that came up when I was talking withDaniel Jackson。
Both Java and C# share the same model of pure interface types.You declare a pure interface by going
interface Mailable, then you can declare you implement it with
class Customer implements Mailable(in Java).A class may implement any number of pure interfaces.One of the things this model ignores is that you haveimplicitinterfaces whenever you have a class.