几个月前，我买了Google Nexus 7 tablet。我想等到我使用的设备为前一段时间我发表我的经验是，但该策略的缺点是，我现在谈论已被取代平板电脑。这就是说，我会通过我的意见，无论如何，因为它们仍可能帮助他人考虑自己的未来平板电脑的选择。
我Eurogames的粉丝 - 的平易近人的风格，但周到的棋盘游戏。我很喜欢，因为你通常可以学习和游戏在一个晚上，但他们提供足够的战略利益打了很多次。我有时会问更多关于他们，什么和我最喜欢的是什么。因此，这里是一个简短的文章，解释他们和我书架上的游戏的交互式列表。
当你写对一个网页测试，您需要参考该网页中的元素，以点击链接，并确定钱包显示的。但是，如果你写的操作HTML元素测试直接在您的测试将是脆的用户界面的变化。一个页面对象封装一个HTML页面,或片段,智慧h an application-specific API, allowing you to manipulate page elements without digging around in the HTML.
Tell-Don't-Ask is a principle that helps people remember that object-orientation is about bundling data with the functions that operate on that data.It reminds us that rather than asking an object for data and acting on that data, we should instead tell an object what to do.This encourages to move behavior into an object to go with the data.
My keynote at Goto Amsterdam in 2013.As usual it follows my 'Software Design in the 21st Century' template with a pair of short talks.I begin with talking about无结构数据结构, explaining why there is always an implicit schema and the consequences of that.Second up (at25m24s) I talk about the敏捷的精髓software developmentand the敏捷流畅model。
Given-When-Then is a style of representing tests - or as its advocates would say - specifying a system's behavior usingSpecificationByExample。It's an approach developed byDaniel Terhorst-Northand Chris Matts as part ofBehavior-Driven Development(BDD).It appears as a structuring approach for many testing frameworks such as Cucumber.You can also look at it as a reformulation of theFour-Phase Testpattern.
In an interview with InformIT I give my (rather skewed) view of why I like working at ThoughtWorks.We talk about how I got there, why I stay, and what people can do to join and prosper at our interesting company.
One of the problems with aFluentInterfaceis that it results in some odd looking methods.Consider this example:
We need to support privacy, not for those of us who have "nothing to hide", but for bothersome people like investigative journalists and activists, without which our democracy would crumble
A common feature in software systems is to allow users to define their own fields in data structures.Consider an address book - there's a host of things that you might want to add.With new social networks popping up every day, users might want to add a new field for a Bunglr id to their contacts.
Story points are a common name for sizing stories in agile projects.Combined withXpVelocitythey provide a technique to aid planning by providing a forecast of when stories can be completed.
Story counting is a technique for planning and estimation.Similarly toStoryPointsit works withXpVelocityto help you figure out how many stories you can deliver in a fixed period of time.It differs, however, in that you just consider the number of stories per unit of time and (mostly) ignore their relative sizes.
Extreme Programming (XP) is a software development methodology developed primarily byKent Beck。XP was one of the first敏捷 methods, indeed XP was the dominant agile method in the late 90s and early 00s before Scrum became dominant as the noughties passed.Many people (including myself) consider XP to be the primary catalyst that got attention to agile methods, and superior to Scrum as a base for starting out in agile development.
"Cloud" has become a very over-hyped term over the last few years.One of the characteristics of over-hyped words is that they have little or no definition to them (yesNosqlDefinitionI'm looking at you).
As it turns out there is an excellent definition of cloud computing available, from none other thatNIST。It's available by a wonderfully short and easy to understandstandards document(no, I'm not kidding).
Automated configuration tools (such asCFEngine,Puppet, orChef) allow you to specify how servers should be configured, and bring new and existing machines into compliance.This helps to avoid the problem of fragileSnowflakeServers。Such tools can createPhoenixServersthat can be torn down and rebuilt at will.An Immutable Server is the logical conclusion of this approach, a server that once deployed, is never modified, merely replaced with a new updated instance.
Automated configuration tools (such asCFEngine,Puppet, orChef) allow you to avoidSnowflakeServersby providing recipes to describe the configuration of elements of a server.Configuration synchronization continually applies these specifications, either on a regular schedule or when it changes, to server instances throughout their lifetime.If someone makes a change to a server outside the tool, it will be reverted to the centrally specified configuration the next time the server is synchronized.If some configuration change is needed, it's made in the configuration specification (recipes, manifests, or whatever the particular configuration tool calls it), and is then applied to all relevant servers across the infrastructure.
移动交通比仍然是一个小的一部分 traditional web, but its share is growing, so we need to think about our strategy for developing effective mobile applications.We discuss thinking about a product vision, separating the styles of user engagement into "Lean-forward", "Lean-back", and "Look-down" styles;while integrating them into atransmedia application。We talk about why its more important to focus on value than on traffic, the laser and cover-your-bases platform strategies, and opine that Android, iOS, and the Web are the three viable platform choices.Giles finishes with a case-study of our work with a major airline.
Flowing JSON data structures through a server is something I'm seeing more these days.JSON documents can be persisted directly, either by using anAggregateOrientedDatabaseor aserialized LOBin a relational database.JSON documents can also be served directly to web browsers or used to transfer data to server-side page renderers.When JSON is being used in this way, I hear people saying that using an object-oriented language gets in the way because the JSON needs to be translated into objects only to be rendered out again - a waste of programming effort .I agree with the point about waste, but I argue that it's not a problem with objects but a failure to understand encapsulation.
Continuous Delivery is a software development discipline where you build software in such a way that the software can be released to production at any time.
You’re doing continuous delivery when:
- Your software is deployable throughout its lifecycle
- Your team prioritizes keeping the software deployable over working on new features
- Anybody can get fast, automated feedback on the production readiness of their systems any time somebody makes a change to them
- You can perform push-button deployments of any version of the software to any environment on demand
One of the challenges of an automated build and test environment is you want your build to be fast, so that you can get fast feedback, but comprehensive tests take a long time to run.A deployment pipeline is a way to deal with this by breaking up your build into stages.Each stage provides increasing confidence, usually at the cost of extra time.Early stages can find most problems yielding faster feedback, while later stages provide slower and more through probing.Deployment pipelines are a central part ofContinuousDelivery。
The Dependency Inversion Principle (DIP) has been around since the early '90s, even so it seems easy to forget in the middle of solving a problem.After a few definitions, I'll present a number of applications of the DIP I've personally used on real projects so you'll have some examples from which to form your own conclusions.
Velocity is a notion that helps calibrate a plan by tying broad statements of effort into elapsed time.Velocity is a statement of how much stuff a team (or a person if it's personal velocity) gets done in a time period.You should usually determine velocity by measuring how much got done in past periods, following the principle ofYesterdaysWeather。A typical approach is to average the velocity the past three time periods to determine velocity for future time periods.Velocity was originally formed as partExtremeProgrammingbut has since spread and is now used widely in敏捷 software developmentof all flavors.
ThoughtWorks的 put together a PDF eBook on estimation in agile projects.It starts of with a reprinting of myPurposeOfEstimationbliki, then includes essays on how to estimate both using story points and counting stories.
User-journey tests are a form ofBusinessFacingTest, designed to simulate a typical user's "journey" through the system.Such a test will typically cover a user's entire interaction the system in order to achieve some goal.They act as one path in a use case.
Story tests areBusinessFacingTestsused to describe and verify the software delivered as part of aUserStory。When a story is elaborated the team creates several story tests that act as acceptance criteria for the story.The story tests can be combined into a regression suite for the software and provide traceability from the requirements (user stories) to tests and (through execution) to the behavior of the system.Story tests are usuallyBroadStackTests。
A business-facing test is a test that's intended to be used as an aid to communicating with the non-programming members of a development team such as customers, users, business analysts and the like.When automated, they describe the system in domain-oriented terms, ignoring the component architecture of the system itself.Business-facing tests are often used as acceptance criteria, having such tests pass indicates the system provides the functionality that the customer expects.
User Stories are chunks of desired behavior of a software system.They are widely used in agile software approaches to divide up a large amount of functionality into smaller pieces for planning purposes.You also hear the same concept referred to as afeature, but the term "story" or "user story" has become prevalent in agile circles these days.
A component test is a test that limits the scope of the exercised software to a portion of the system under test.It is in contrast to aBroadStackTestthat's intended to exercise as much of the system as is reasonable.
A broad-stack test is a test that exercises most of the parts of a large application.It's often referred to as an端至端测试or全栈测试。It lies in contrast to aComponentTest, which only exercises a well-defined part of a system.
The Ruby Rogues are a popular podcast where a regular panel discusses topics in the Ruby programming community.They have a regular book club and recently selectedEAA的对as their featured book.Consequently they asked me to appear as a guest on their show to discuss the book and the patterns that it describes, in particular the interesting relationship between these patterns and the Rails framework.
My first encounter with agile software development was working with Kent Beck at the极限编程的曙光。One of the things that impressed me about that project was the way we went about planning.This included an approach to estimating which was both lightweight yet more effective than what I'd seen before.Over a decade has now passed, and now there is an argument amongst experienced agilsts about whether estimation is worth doing at all, or indeed is actively harmful .I think that to answer this question we have to look to what purpose the estimates will be used for.
In many organizations, it's expected that any persistent data will be stored in relational databases that are managed by a central database management group.There are various reasons for such central control, usually centered around usingIntegrationDatabases。Central data groups worry about keeping out malformed data, queries that can slow down important shared resources, and consistent data models across the enterprise.
Worthy these aims may be, but one consequence of them is considerable ceremony about storing data.I often hear complaints about change orders that take weeks to add a column to a database.For modern application developers, used to short-cycle evolutionary design, such ceremony is too slow, not to mention too annoying.
So application development groups tell me of usingNoSQL数据库to do an end-run around the DBAs.It helps that they are using a "mere datastore" here, not a "proper database".That way the DBAs can be kept out of the loop, often not told or happy to not care.
Management love their metrics.The thinking goes something like this, "We need a number to measure how we’re doing. Numbers focus people and help us measure success." Whilst well intentioned, management by numbers unintuitively leads to problematic behavior and ultimately detracts from broader project and organizational goals.Metrics inherently aren’t a bad thing;just often, inappropriately used.This essay demonstrates many of the issues caused by management’s traditional use of metrics and offers an alternative to address these dysfunctions.
I gave a talk at a ThoughtWorks event in San Francisco, using my usual会谈套房style.For this one the segments cover how and when to use schemaless data structures, why consistency in NoSQL databases is more than just ACID versus BASE, and the economic justification for well-designed software.
Sales commissions are almost universally used in the software business, as in all business sectors.They are liked because they align incentives between sales staff and the companies that employ them.Nevertheless there are serious problems with the sales commission model, problems that led ThoughtWorks to get rid of all sales commissions in 2013.
Increasingly web developers are using languages likeCoffeeScript的andSCSSthat compile to other textual source languages that execute in the browser.Such source-to-source compilers (also called transpilers ) are not new,Cfront的被广泛使用在早期的c++属te target C code.But for me there is a difference that picks out CoffeeScript and SCSS as透明compilers
Recently we returned to one of our favorite places in the world,萨巴- a very small island in the Caribbean, close to St Martin.In many ways the best things about Saba are the things it doesn't have.There are no beaches, no golf courses, no casinos.The mass tourism and resort complexes that litter so much of the Caribbean have ignored Saba since it's too small and too hilly.As a result the island is wonderfully quiet and relaxed.
"Big Data" has leapt rapidly into one of the most hyped terms in our industry, yet the hype should not blind people to the fact that this is a genuinely important shift about the role of data in the world.The amount, speed, and value of data sources is rapidly increasing.数据 management has to change in five broad areas:萃取of data from a wider range of sources, changes to the后勤of data management with new database and integration approaches, the use of敏捷principles in running analytics projects, an emphasis on techniques for data解释to separate signal from noise, and the importance of well-designed可视化to make that signal more comprehensible.Summing up this means we don't need big analytics projects, instead we want the new data thinking to permeate our regular work.
I was programming away and wanted to add an empty line above where I was currently typing.The editor I was using doesn't have this feature built-in, and I'd finally had this desire enough that I really wanted it.I did a quick google search, found a few lines of code, pasted them into my startup file, executed them, and lo I could now create empty lines above with a single keystroke.It took just a couple of minutes, I didn't have to install any plugins, or restart the editor - this is normal everyday business for an emacs user.
In recent years, there's been an increasing amount of talk about the advantages of schemaless data.Being schemaless is one of the main reasons for interest inNoSQL数据库。But there are many subtleties involved in schemalessness, both with respect to databases and in-memory data structures.These subtleties are present both in the meaning of schemaless and in the advantages and disadvantages of using a schemaless approach.