Several sites I have been reading over the last week have used the analogy of the “Cargo Cult” in relation to software engineering. This phenomenon appeared during WWII when isolated islands in the pacific were used as bases for American forces. The islanders (who had never been exposed to westerners) were astonished to see that these visitors could call on the power of their ancestors to bring riches (in the form of cargo dropped from supply planes) to the islands. In response, the islanders assumed that the behaviours of the visitors were what had caused their ancestors to favor them and began mimicing them; even going as far as fashioning full-size planes out of straw, using coconut radios, and drilling in home-made uniforms with stick rifles.
We can divide the actors in this little drama into two camps: the people who know what’s happening, and the people who are copying the people who know what’s happening. Guy Kawasaki describes this in his book “Rules for Revolutionaries” via the anecdote “Monkeys don’t become Gorillas by copying what Gorillas do”. There’s a certain amount of this in every industry (which is a terrifying thought everytime I visit a doctor or dentist), and it definitely occurs in the software industry. Every developer I know has a story of the guy/girl they worked with who had absolutely no idea what they were doing but somehow managed to talk their way into a job, copy enough example code off the internet, and keep themselves in a paycheck until someone important realises they can’t do what they say they can. Some developers tell these stories, never realising that they’re the star in someone else’s story. (I really hope this doesn’t come back to haunt me…)
The difference between the developers who tell the stories and the frauds is that the storytellers are open to the possibility that there is a right way to do things. The problem being, they don’t realise that their way isn’t the right way. “The Pragmatic Programmer” is a book designed to take a developer at any given level and give them the values and concepts that should, with enough practice, turn them into masters of their craft. In essence it’s a book about introspective learning; regularly analysing your behaviours in order to spend your time doing only what is useful, and picking up new knowledge on the way.
Andrew Hunt and David Thomas have written an incredibly densely packed book. Every page has a lesson to teach, and all of the lessons are worth learning. Some samples:
- Eliminate effects between unrelated things – This is the principle of “Orthogonal code“. A functional unit should do what it says on the tin without affecting the state of something else unnecessarially. Imagine every time you started your car it also deflated the rear tires?
- Invest regularly in your knowledge portfolio – As per Eric Sink’s Career Calculus, in terms of your skill and long term career prospects the only thing you really have control over is the amount you choose to learn. Read more books, learn new languages (computer and human), and use every opportunity possible to learn from those more talented or learned then yourself.
- Criticially analyze what you read and hear – Truth can get skewed behind bias, emotion, sarcasm, and pure misdirection. Take the time for analysis before rushing headstrong into a problem with only half the picture.
- Costly tools don’t produce better designs – Expensive tools make pretty diagrams and make certain tasks much easier, but the fundamental design is done by humans. You can’t get a world class design from someone who doesn’t understand the problem domain, or who simply doesn’t have the skill no matter what tool they’re using.
This is a book which definitely merits a read and is something that could be referenced over and over. The book provides several exercises at the end of each chapter to test the topics covered which are interesting and challenging. Some of the information is common sense repackaged into a pithy phrase, but there is such a volume of sense provided that it is something of benefit to even the most experienced developer. The Pragmatic Programmer group produce a range of books on various engineering topics which I have been recommended from a variety of sources. Worth checking out.