I’ve previously written about how to teach yourself to be a test developer. That post included an extensive reading list. It assumed that you were a tester and wanted to learn to be a test dev. What if you are a new CS grad and you just got hired as a test developer? What should you read to get a leg up on the competition? What follows is my list of recommendations. Some of this list assumes you’ll be working in C++. If you are going to be working in C# or Java or some other language, you’ll have to make substitutions.
I’m not a big advocate of formalized testing skills. There are those who think there is as much to learn about testing as there is about design and development. I don’t happen to subscribe to that philosophy. Testing isn’t trivial, but I’m not convinced it is rocket science either.
My only recommendation in this area is James Whittaker’s How To Break Software. This book is very practical. Not a lot of theory but it will give you a good, working knowledge of how to test software.
With a CS degree you should have learned the basics of programming. I liken this to learning a written language. You know what sentences, verbs, and nouns are. This makes you capable of writing but doesn’t make you a good writer. School projects tend to be small and throw-away. You don’t often have to deal with large code bases and the quality of the code itself is often not related to the grade achieved.
The Practice of Programming by Kernighan and Pike. This gives you a lot of tips on how to write good software. Short and meaty. A great book.
Refactoring by Martin Fowler. This book consists of two parts. The first part explains the concept of refactoring. How and when to make pre-existing software better. The second part is a lexicon of refactoring patterns. These are recommendations to handle specific situations in code. The latter half of the book I find less useful. Feel free to skip it. However, the first half is extremely useful. Make sure to read this.
Design Patterns by Gamma et al. Also known as the “Gang of Four” book. The most enlightening part of the book is the first few chapters. It shows how to design an editor using an object-oriented approach. I personally found this to be an “a-ha” moment. If you didn’t cover design patterns in school, read this book.
Design Patterns Explained by Alan Shalloway. Great explanation of practical use of design patterns. Read this before you start designing programs. You’ll find yourself writing better code and you’ll find maintenance a whole lot easier.
Advanced C++ Skills:
These books will help you go beyond the basics. Going back to my written language example, consider this to be like gaining a strong vocabulary. You can communicate your ideas with just basic vocab words but to communicate the nuance, you need a deeper understanding of the language.
Effective C++ by Scott Meyers. If you feel comfortable with C++, this is a great next book. It will help you to avoid many of the gotchas in C++. This book will help you be a better programmer at the syntax level and have a much deeper understanding of the language as a whole. Skip the More Effective C++ book though. It’s not a bad book but there are better uses for your time.
Inside the C++ Object Model by Stanley Lippman. Deep explanation of how C++ works under the covers. If you want to be a coding guru, give this book some of your time.
These are my recommendations. There are certainly books that I missed. What recommendations do you have?