Archive for the ‘Books’ Category

Software Patterns and the Dovetail Joint

Thursday, August 13th, 2009

I picked up my long-unread copy of Emergent Design by Scott L Brain.  I’m not too far in yet, but something he wrote about software patterns struck me in a way that hadn’t before.  He mentions that other professions all have their own patterns. Doctors, Lawyers and Carpenters, for example.  That made me think of the joints used by carpenters, like the dovetail example on the left[1].

Disclaimer: I’m no carpenter

Just like software patterns, carpentry joints aren’t a drop in solution.  Joints are a well understood carpentry pattern but they still must be used in context.  The type of wood being joined constrains the joint you can use, the desired appearance constrains which joints can be used, the use of the jointed pieces further constrains the choice of joint.  Further, the thickness of the wood will determine the size of the dovetails for example.  The constraints go on an on.

The difference between carpentry and software development is that the understanding of which joint to choose has been developed and refined by master craftsmen for thousands of years!  You can now buy laminate flooring that just clicks together – but it took the legacy of many, many craftsman hours to make that a possibility.

The take away for me is the re-enforcement of the truth: we’re still the software pioneers.  We’re still lashing bits of code together with rope, we can’t quite get a catalog of time-tested, tried and true joints.  We know enough to know there must be better ways of doing things, we just don’t have a clue of what they are yet.

Software development might just be about pioneer spirit, and anyone who tells you they’ve got it sorted is probably trying to sell snake oil to the prospectors.

[1] Image used under the terms of the Creative Commons Attribution 2.5 Licence – Author: Dumitru Rotari

Learning to learn

Saturday, August 8th, 2009

I like to think that one of my strengths is my willingness to pro-actively learn new things.  Recently I have been trying to learn about learning by reading the excellent Pragmatic Thinking and Learning by Andy Hunt of The Pragmatic Programmer fame (which remains one of my favourite books of all time).

A lot of the content in PTL wasn’t that new to me, as I have previously read several of the books that Andy has read and references from the text.  That said, I definitely learned new things and deepened my understanding about certain areas.

Constant learning is definitely a incredibly valuable thing, I look for it in every potential new hire I interview.  But continually learning in the same habitual way may not be the optimal strategy.  If you apply the agile development approaches to how we learn it suggests that you should retrospect at what works, what doesn’t and that we should be prepared to try different things to see if they work better (rinse and repeat).

Though I’m not a novice at learning, I am a novice at learning using new tools and techniques: when was the last time you learned how to learn in a new way?  So how do I move froward from here?  According to the book, what I need is some novice/advanced beginner handrails to hold whilst I improve.  Different to the other books that I have read around this subject, PTL brings a consolidated set of next-steps in the context of the life of a software developer.

This is the initial list of things I am going to start:

  • Read more deliberately using the SQR3 technique, then blog about what I have learned.
    • Read PTL again, this time, read it deliberately.
    • Re-read Domain-Driven Design deliberately.
  • Increase my blogging frequency – hopefully doing more often will make me quicker.
  • Review my blog posts once in a while – do I still agree? what have I learned since?
  • Try mindmaps again having deepened my understanding about how they might help me learn/understand.
    • Redraw mindmaps every now and then – let some mental mushing happen – see what my brain has subconsciously come up with.

Ever more things will come up as I continually learn and continually learn to learn.  I’m still on that journey that started the best part of 33 years ago and one that I hope doesn’t stop for a very long time yet.

Objective-C having read a pocket reference

Saturday, August 8th, 2009

On the way back from a long-weekend on Vancouver Island we had a little time to kill whilst waiting for our ferry home.  There was a Chapters store nearby, so that was an easy mascre of half and hour.  After browsing for a while and noting possible future purchases I purchased Objective-C Pocket Reference.  At 122 small pages it was a quick read and covered he basics of Objective-C’s syntax and detailed various fundamental aspects of the Cocoa and GNUStep and the various differences betwen them.

I got from it pretty much what I was hoping: an easily digestible introduction into Objective-C.  I had previously read a bunch on the web, but I always find reading books, rather than reading a screen, to be far more effective for myself.  I had many different questions answered from an attempted iPhone coding session a few months ago.

I have been nudging some of the guys at work to start an Objective-C/iPhone/Mac programming study group. This book will be very useful for the novices in the group (myself included) to quickly look up the fundamentals and work through the syntax impedance as they try and push a new language into their Java brains – this was definitely a sticking point with the Erlang study group we had for a while.

In summary, a great, concise reference – just like the title suggests.  It appears that the reviewers on Amazon also agree.