I’ve been enjoying Fluent Python and started looking for a nice book on SQLite, which made me wonder what great books there are in other areas that could help me be a more well-rounded developer.
The Little Schemer is a mind bender and short read. I would highly recommend it to any programer as something you should read ASAP. You’ll regret not reading it sooner if your unfamiliar with the concepts.
Structure and Interpretations of Computer Programs is very good. It was MITs old CS textbook, it’s still highly relevant. It takes a while to get through and you probably would get the most value out of it if you already have a lot of programming experience.
I also recommend Programming in Haskell by Graham Hutton 2nd Edition (Don’t get the 1st edition). It will warp you mind to think in a functional way. I would put it up there with K&R in terms of how well written it is.
I’m a student at a “Java school,” reading these has made me far better than my peers at programming.
Paul Graham has a lot of good essays on programming too, as well as life stuff.
The C Programming Language by Kerningham and Ritchie.
If you're interested in something closer to the hardware than Python, why not read about the language that implements Python?
It's a programming classic, very concise, easy to read and informative. It'll take you from basic control statements to eventually writing a memory allocator.
I spent the summer reading this book cover to cover. (I am not a particularly fast reader.) I absolutely adored it. Now I am eager to put what I've learned into practice.
I actually think that books which cover software engineering practices, rather than language specific books, have helped me the most. This is due to the fact that the concepts and principles you learn can be applied to many languages.
Two I've enjoyed are:
"The Pragmatic Programmer" by Andy Hunt and Dave Thomas
"Clean Architecture" by Robert C Martin
That being said, no harm in deep diving individual languages. Secrets of a JavaScript Ninja by John Resig was an excellent introduction to JavaScript!
You are unlikely to encounter Oberon in the wild, but this book is the clearest and most elegant exposition of a systems design I have seen. They walk through the code for a complete operating system from hardware drivers to file system, compiler, graphic user interface and everything else in less than 10,000 lines of code. The focus on modularity and minimalism is very refreshing.
Java: Even for an early version I still revisit [2] Kathy Sierra SCJP 6 book beside of new ones, a great reminder for core concepts and basics, also 'effective java' by Joshua Bloch
C: As HeckFeck mentioned it was fun to follow C Programming Language by Brian W. Kernighan, Dennis Ritchie
I've really enjoyed Programming Rust by Jason Orendorff and Jim Blandy as a good overview of Rust for an intermediate level programmer with experience in other languages.
Herlihy and Shavit's The Art of Multiprocessor Programming was fantastic for learning about parallel/concurrent algorithm and data structure design
I've been enjoying Practical Common Lisp. I don't think I'll ship any Lisp code for business purposes but it's been a lot of fun to tinker with and it's conceptually interesting. I think my Python programming ability has grown somewhat indirectly through learning more about Lisp programming.
Learn You a Haskell For Great Good (http://learnyouahaskell.com/).
Despite Haskell's reputation for its difficultly due to its strictness and fundamental differences with mainstream imperative languages, the book manages to smoothly introduce the purely functional paradigm with tons of effective and concise examples.
The book ends just where the infamous Monad is introduced and doesn't touch any of deeper capabilities of Haskell's type system, but still serves as a wonderful introduction to the language and pure functional programming. A lot of people mention SICP as the book that made them rethink/rediscover computer science, for me this book had the same effect.
Type-Driven Development with Idris. It’s a great introduction to dependently typed programming languages and type-driven development. Some knowledge of Haskell may be beneficial but isn’t required.
"The well grounded Rubyist" is a fantastic book to learn Ruby. Right balance of theory and practice. Easy to read and still offers a lot of depth about the internals of Ruby.
Structure and Interpretations of Computer Programs is very good. It was MITs old CS textbook, it’s still highly relevant. It takes a while to get through and you probably would get the most value out of it if you already have a lot of programming experience.
I also recommend Programming in Haskell by Graham Hutton 2nd Edition (Don’t get the 1st edition). It will warp you mind to think in a functional way. I would put it up there with K&R in terms of how well written it is.
I’m a student at a “Java school,” reading these has made me far better than my peers at programming.
Paul Graham has a lot of good essays on programming too, as well as life stuff.