This year of university I have 9 exams in the May diet, all for different classes. Many of these classes have recommended or even mandatory reading. These are generally textbooks that cover topics in a similar way as the course lecturer wants us to think about them, which means they are very likely to provide useful knowledge during the exam for that class. This kind of usefulness is pretty obvious, the lecturer thinks these books are useful for understanding in the course, thus they pretty much are guaranteed to be so.

The topic I want to draw attention to is whether these technical textbooks are useful to software developers (and professionals in general). Obviously still being an undergrad I'm not exactly an expert, but I'd like to give a few thoughts on the topic.

Examples of the books I've been reading are Operating System Concepts (Silberschatz), Human-Computer Interaction (I. Scott Mackenzie), and Software Engineering (Sommerville). The first I read pretty much cover-to-cover, the second I have read specific chapters from, and the last I have been cherry-picking sections from as I feel I have a greater overall understanding of the subject matter.

As I've been reading these I've swithered between the ideas that these books are really useful for the future, and that they aren't. After thinking about it for a little while, I came down on one side. I decided that these books ARE useful, not because of the practical applications of the topics discussed (which are useful) but because of the way they fill in gaps in your knowledge.

They reduce the ability of someone else (for example in your workplace) to take a problem out of your domain of expertise. As I discussed in this post about how much a developer should know about operating systems, the more you know about the software stack level below your "normal" one, the more understanding of your "normal" level you will have. By reading these books, it becomes much easier to keep a firm grasp on "where you are" with regards to a problem in software.

I realised that this concept generalises to the layer above, as well as below. You can reason about problems in both directions, for example "Am I having problems coding this system because the OS has poor support for the features I need, or because my project's software architecture is not sophisticated and flexible enough?".

Being able to understand the warning signs and give a convincing argument about WHY a particular direction of development is good is what I believe reading these technical textbooks provides - which is why I do believe reading them is very important for a software developer.

I look forward to reading them in the future of my volition, rather than under the time constraints of exams.