New Reading Material - Algorithms, Hardware, Haskell and More...
I've been wrapping up my rereading of classic C++ books mentioned in a previous post here and looking into, and starting, some new reading material recently.
I don't like immersing myself in a single book for many hours a day, but instead I try and read a little bit (maybe 15-60 minutes) each day and let the information soak in. I think I learn better this way, it gives me exposure to a number of topics at once and keeps things fresh and fun with variety.
I've started reading "Computer Organization and Design" by Patterson and Hennessy. As time goes by, I'm finding myself increasingly interested in hardware - how processors and other components really work. The prime driver being curiosity - I want to know the hardware implications of the code I write. Also, it seems I'm increasingly hearing respected people in the industry saying things like "Want Fast C++? Know your hardware!". (That was a really interesting CppCon 2016 talk by the way).
I've also been reading "Learn You a Haskell for Great Good" in attempts to better understand functional programming. This came about a couple of ways: (1) I hear people in the industry often mention functional programming and I've had no experience with it. For that reason alone, it's been something on my radar to learn about for a while. And, (2), while trying to better understand template-metaprogramming (like when studying "Modern C++ Design"), it was recently recommended to me by a couple of favorite colleagues that knowing a functional language helps (hi Jason!) and specifically that "Learn You a Haskell for Great Good" was a helpful resource (hi Nathan!).
I usually attend my local C++ Meetup every month. It's run by an awesome ex-coworker of mine (hi Gina!). We've had some really great meetups lately. January's meetup focused on this Google Interview problem. It made me realize I'm a little rusty with algorithms, so I've picked up a copy of "Introduction to Algorithms". This book was actually used in my Algorithms class in college, but that was an edition or two ago, so I've picked up the latest edition and have been reacquainting myself with it.
Unintentionally, I happened to come across "The Mythical Man-Month: Essays on Software Engineering" recently. I've always heard about this book as an industry classic but never got around to reading it. Coming across it, I thought "what better time than now to read this?". One of the reasons behind this year long sabbatical is for reflection on my experiences in this industry. I suspect reflection on the industry, other's experiences and what they've learned is a lot of what this book is about.
"Design Patterns: Elements of Reusable Object Oriented Software" is an absolute classic. It's a book I've studied on and off for years. Patterns rule. I know a lot of them, but it's easy to become rusty over time - especially the ones you don't often use - so I've been going back through some of the ones I'm hazy on. It doesn't take much time at all to read a section on a specific pattern and become reacquainted with it.
And I'm still reading a little of the Stroustrup book "The C++ Programming Language" (4th Edition) each day. This book is huge at 1,367 pages. Similar to the Design Patterns book, I already know a lot of this information but it's good to recollect and reinforce features of the language I might not use so often.