How Much Should A Software Engineer Know About Operating Systems?
This weekend I was reading Operating System Concepts, 9th Edition, commonly known as 'The Dinosaur Book'. It seems to be well regarded as THE book on operating systems for undergraduates. I've been reading it maniacally since I have an open-book test for my OS class on Monday, and the course is entirely based on this book.
I've been really enjoying reading it (and not in a Stockholm syndrome kind of way), but it got me thinking about how many of my class mates will NOT be enjoying reading it, and probably aren't reading it at all. This train of thought led me to wondering about how much of this knowledge the average software engineer (or developer) has.
Do they know about preemptive vs nonpreemptive process and thread scheduling? Do they know their page replacement algorithms, or how modern operating systems make use of virtual memory? How often do they consider thrashing while developing? Do they need to?
These are questions that I don't have the answers to, as I most certainly don't have enough experience interacting with the 'average' engineer in my area. Not to mention the higher-tier areas where everyone is a super-engineer.
A couple months ago there was a guest on Scott Hanselman's HanselMinutes podcast who mentioned that he thought every developer should have a working knowledge of the 'level below' their regular work, and AT LEAST be aware of the issues of the level below that. If my memory serves me right, by levels he meant how abstracted the level of work is from the bare metal of the machine.
I think the vast majority of developers will find that the operating system is either the level directly below their level of work (and thus should have a working knowledge of it), or the level below that (and thus should be aware of what it concerns). This makes sense since I think you'd be hard pressed to find a developer that wasn't at least somewhat aware of process scheduling and possibly parallel processing.
I'm interested in what you, the reader, have to say about this though. Have you read Operating System Concepts? Did you find it useful? How much do you know about operating systems, and how much would you say your colleagues know?
If you enjoyed this post, please check out my other blog posts.