
Reading is a Software Engineers most powerful weapon
I have been a little busy recently down here at UKFast, working on some ‘top secret’ projects soon to be unleashed upon the world. Whilst I obviously can’t divulge what these projects entail a lot of focus has gone into the way we design and write code. This got me thinking about what must be the core skills that every software developer should have and rehearse.
To me reading is by far the most important skill a developer should have. I am not talking about ploughing your way through a Java Developer’s Guide or PHP Cookbook. I am thinking more about books that make you think, that make you question and help you to understand real life scenarios and problems. Your language of choice is just a tool, like a pencil, a hammer or a finely tuned industrial laser cutter. Consider going to your local DIY or hardware store to purchase a hammer, you would expect the assistant to know exactly what hammers are available and to be able to roughly be able to guide you on their uses. You wouldn’t expect them to be able to forge a perfectly crafted sword in front of you. So why should a programmer read non language specific material?
I think that by highlighting here why I became a programmer should help to make my argument a little clearer. I was an 80s child and grew up in a time when computers exploded into mainstream society, my first experience of a computer was when my Dad brought home an Acorn BBC Microcomputer. I had great fun experimenting and writing little calculator programs in BASIC but I was far too young to appreciate the value of what I was doing. It was just a game. It wasn’t until many years later a Physics lecturer tasked me to build an accurate model of our solar system using FORTRAN 95. Then it clicked, a little light lit up… you can choose your own clichéd metaphor here! Modeling and problem solving, that is what programming is for.
OK, lets get back to my point, a developer needs to know far more than code syntax and control structures, they need to know how to embrace and break down a problem, how to relate it to real life situations and their own personal experiences. A developer’s primary goal should be to find a problem, solve it into a process then finally break that process down into the most efficient and simple solution possible. The second part of this is where reading is very important. The more detail and and depth a developer understands the problem they are attempting the more efficiently and accurately they will solve it. As an analogy you could be trying to describe the flow of an incompressible fluid, a secondary school algebra user would approximate their description using a simple Navier-Stokes equation, whilst a university physics student would accurately describe the flow using differential equations. Both appear to describe the situation but would you prefer an approximation or the exact answer?
Non-technical types find it hard to appreciate the level of understanding a developer must have to be able to solve the problem given to them. A good example would be if a developer were tasked to build a piece of accounting software. In order to create a solution, that developer must understand the full accounting process, to a level almost equivalent to that of a qualified accountant. When asked to add extra functionality to a piece of existing software a phrase I hear all too often is “Isn’t it just a case of adding another column to the database?” with a complete disregard of how this new piece of data interacts, and integrates with the current system.
Reading allows a developer to explore other points of view, other ways of approaching problems and alternate methods of tackling a solution. Reading a wide variety of material is essential for advancing a developer’s understanding of logic and problem solving. If you are a developer and want to explore logic theory more closely consider researching the works of Kurt Gödel.
I could go on for ages here discussing the different areas a developer should be well versed in, but I shall save that for another post. Instead I will pick a few books (there are many many more) I feel that every developer should have read (at least twice!)
- The Recursive Universe: Cosmic Complexity and the Limits of Scientific Knowledge – A fantastic exploration of Information Theory
- The Pragmatic Programmer – Full of great practical advice that you would never get taught on any computer science course.
- Who Moved My Cheese – Will encourage pro-active and innovative thought.
- Facts and Fallacies of Software Engineering – A great discussion of Agile programming techniques.
- On Intelligence – Understanding how the human brain works will enable a developer to refine their working methodology.
- The Mythical Man Month and Other Essays on Software Engineering – Efficient management of software projects.
Great insights. I always feel that the soft skills, which are so difficult to measure, will make or break a person’s career and is the difference between being good or great.
Great communication skills combined with strong analytical abilities can be hard to find. Reading, as you point out, is a building block essential for all engineers. Feel free to check out one of my recent blog posts that discusses a few of the things I feel are critical for having a great career:
http://johnfmoore.wordpress.com/2009/04/01/take-charge-of-your-career-and-become-indespensible/
John
http://johnfmoore.wordpress.com
I feel that experience has a lot to do with it. There is a massive bucket of software development platforms out there, being stuck with one of them simply isn’t enough to get a job done.