I’ve been programming computers for a long while now. Far longer than I’ve not been programming.

Much of what you do on a day-to-day basis when you’re programming — whether for work or play — is generally done in a seat-of-the-pants kind of way. Most of the people I’ve worked with professionally haven’t been “classically trained” as programmers; they’ve come from all walks of life from geology to English majors.

People think of programmers as scientists because it’s “computer science” and it’s widely considered a hard thing to learn. My experience in the real world is different. It’s more of a practiced art than what you’re lead to believe. Coming up the ranks of programming seems to be much more like apprenticing than classical study. There are tons of algorithms and data structures that you learn in school or similar study (assuming you went that route), but in the general case you wind up using a mere fraction of all of that. 95% of what you use are arrays and hash tables. The rest is abstracted away as façades. Databases and libraries of algorithms that were written to make your life easy hide the complexity.

Underlying it all though is the hard science of how it all works. How the libraries work. How the databases work. How, at the hardware level, it all functions.

This is a series that I want to start on that. It’s been a long while since I cracked open the tomes of knowledge that is the Art of Computer Programming series.

For no really good reason I decided to search on Amazon today. I realized that part 4A (Combinatorial Algorithms) has been out for a few years now. Sure, they’re expensive books, but they in many ways define the field.

I also have a surprise for next time.  :-)