Archive for the 'design' Category

Using source control tools on huge projects

Joel Spolsky’s latest entry is an interesting view into source management for a large project. My first reaction (uninformed) to the large number of sub-branches was “yuck!”. For example, it may be weeks or months before a feature from Team A is visible by Team B. But this blog entry argues that waiting until the feature is tested before being visible to other teams is more important than the delay.
http://www.joelonsoftware.com/items/2006/11/29.html

Joshua Bloch is a Ninja

InfoQ has a great format for video/podcast content - recordings synced with transcriptions or slides. I started watching Joshua Bloch’s Javapolis presentation on API design. “But I don’t design APIs or frameworks…” Um, do you program? Bloch starts with the adage that thinking in terms of API design improves code quality - “Good code is modular - each module has an API”.

I have found this to be extremely true, and the more I’ve learned about API design, the more my own code quality has improved. Learning the principles of design-by-contract for example, had a tremendous impact on my code. A longer summary is in order once I can digest the entire presentation.

There is an incredible amount of content online like this these days - ninja-quality speakers, slide-sets included. Makes one think you could assemble your own mini-conference (minus the networking of course) in your pajamas. Anyone up for an API design discussion session over beers after watching this?

*bonus - a great interview/concurrent transcription with DHH on the future of Rails.

Sources Leaked

Two of my favorite blog aggregators (after Central Standard Tech of course) are the Thoughtworks blogs, and the ObjectMentor blogs. Thoughtworks tends to range a little more afield, but has some strong contributors in Jay Fields, Obie Fernandez, George Malamidis, Neal Ford, and of course Martin Fowler. Lot of Ruby there… The ObjectMentor blogs have less content, but are more focused.

The Lost Craftsman Articles

I’ve bemoaned the loss of Software Development magazine. Sometimes a spy in the field has to rely on anything he can get his hands on. Being that SD was free and good made this easy, and kept those bean-counters back at central intel off my back. I always read Robert Martin’s ‘Craftsman’ articles as if he was sending secret coded messages to me:

‘Field agent black - pay attention to my missives, and you’ll be amply rewarded with real software construction nuggets you can apply to stay alive in an ever-more-hostile development environment.’

Characters like the green-but-hungry Alphonse, seductive Jasmine, and the mysterious Mr. C face real-world problems, and describe their solutions in a conversational style complete with real code examples. Ahh pseudonyms, I could so relate!

Thankfully, the entire series is posted here (click the craftsman link). 49 installments in all! Act now before some bean-counter realizes the profit potential of these sold as a single volume. Forget dailylit - start working through the craftsman now.

Misuse of Interchange Types Opens Portal to Hell

Interesting piece on interface design, masquerading as an article advocating premature optimization. Yeah, that’s what I thought - ‘isn’t premature opt. the root of all evil? - we’ve ground whole battalions of spies against the rogue regimes it can create!’

The article focuses on interchange types in an API, and the tradeoffs associated. An interchange type is a caller/callee-neutral data type that neither caller/callee is likely to actually have or want to use, but to which both can easily convert.

The interchange type seems appealing - apparently clean, general, but there’s a good warning here: ‘you should still ensure that you make smart tradeoffs. Sometimes there are alternate input or output formats that your callers are more likely to use’. Hmmm - let’s see - design is about smart tradeoffs… Be client/user-focused… So simple, and yet it can sometimes take Bondian discipline to keep these in mind.

Don’t worry - premature optimization is still evil.

Design Open-ness and the Bell Curve

Here at license2code headquarters, we’ve been considering a spy vs. spy series, where we’d battle black vs. white spy over a variety of software topics. Skill sharpening, issue exploration, and in the end, a better understanding of the inevitable gray zone aspects. Open-Designed Inheritance and the ‘final’ keyword in java topped the list of topics.

And leave it to a real rockstar to steal our thunder… Read more »