Depending on where you go to school, your degree in computer science can be useful for a lot of goals – becoming a professional developer, going into finance or biotech, getting a Ph.D. in computer science, becoming an IT project manager, or even something barely related to computer science. The one thing a CS degree is almost useless for is practical training in how to build production-quality software. The curriculum at most universities, especially the “top tier” universities, is (rightly) focused on an academic grounding in the field, not a practical guide to building great software.
I’ve been trying to teach undergrads about this gap between a Computer Science degree and professional software development in a talk that I’ve given twice now, once at Princeton and once at Carnegie Mellon. The kids seem to like it, and the number one question I get is for the reading list I mention.
My list is intentionally brief. Anyone with a degree and some spare time should be able to make it through the entire set in under six months. If you haven't read these books, and I mean all of these books, you are probably building bad software. When people talk about the 10:1 productivity difference between great developers and average developers, well, you're on the "1" side of that ratio. Take the time to read through these and everyone impacted by your software will benefit.
Just for the sake of your ease in reading, I’ve taken this list and broken it up over several posts. I’ll post the first portion of the list, code construction and design, tomorrow, followed by a few books on complementary skills, then books on software engineering management, and finish up with a short bonus of fun and engaging books that help fill the gap between a degree in computer science and professional software development.