1 note &
History repeating
On the Sunday after the Scottish Ruby Conference this year, I found myself hungover and starstruck in the company of some of the smartest developers I know (and some I was just meeting for the first time). I say this not to kiss ass, but to set the scene and lend weight to what follows.
The topic of conversation fell upon the tendency of younger developers in general, and the Rails community in particular, to invent some hot new coolness that is actually just a wheel reinvented. Some were arguing that this was borne of ignorance (willful or otherwise), others that it was because of the lack of willing to use languages other than Ruby. Personally, in my own limited experience, I think that it is probably a mix of both, but leaning more towards the former.
It’s a well-know phrase/cliche in the Unix world that,
“Those who do not understand Unix are condemned to reinvent it, poorly.” Henry Spencer
This is as true in software development as a whole as it is to Unix in particular, and something that I have often wondered how to counteract in my own development. So I (eventually) asked the question I ask most coders I meet that are further along the road than me,
“How do I, as a novice developer, get the knowledge of history that you guys have achieved through living and working it?”.
I have decided to share the answers I received, both from the original question and from the follow-up tweet I sent, as there is some real gold here.
First and foremost, and perhaps to be expected from software craftsmen, was the advice to sit with better coders and learn firsthand from them. However, not all of us have access to such a resource. Furthermore, in Software Craftsmanship, the onus for learning is placed on the apprentice and not the master (or at least on the individual rather than those he/she learns from). As such many books were suggested, the list of the recurring and noteworthy has now been moved to a post of its own for ease of use.
Of these books, I’ve already read The Pragmatic Programmer, which lit the fire in the first place and cannot be recommended highly nor often enough, and The Passionate Programmer, which is an excellent companion to The Pragmatic Programmer. I’ve also read Uncle Bob’s Clean Code book and am now following up with the PPP book (it was recommended to me that I read them in this order). However, I think I’m going to put the PPP book down for just now and read Apprenticeship Patterns first. This book, I hope, will give me the foundation for the rest of the books. The reason that I’m reading them as it were. I then plan on reading The Art Of Unix Programming as it contains a lot of good history as well as good advice. I’ll then return to the PPP book.
Throughout all this reading, I’m going to attempt the SICP lectures as well, as they are supposed to be as much practical as theory. However, better folk than me have tried and faltered, so I’ll need to wait and see how I get on.
Anyway, I hope that you get something out of this. Please post comments with any books/resources that have helped you, or even just argue the merits or otherwise of the suggestions made here.
For my part, I will continue to blog as I go on with these books and related learning.
Finally thanks (in no particular order) go to Steven Baker, Jeremy Hinegardner, Chris McGrath, Alan Francis, Graeme Mathieson, Joe O’Brien, Jim Weirich, Randall Thomas and Bruce Williams for their input and patience in the face of many a noob question.