My Top 100 Programming, Computer and Science Books: Part One
catonmat.net
catonmat.net
For example, surely he is going to recommend math books. It can be argued that most of the value of a math book is in its end-of-chapter exercise set, and that takes time. If discrete mathematics book A is more amenable to a 30 minute random page read and book B has a lot of insight in working through the questions after chapter 7, how can he reliably evaluate that, across a lot of published books in the area? And then jump to grammar, and then to programming languages, and then to best practices, and repeat that?
I mean, I love these posts, because they give me a list of books to research and "collect" in a wish list. But aren't they perpetuating the most cited books? Won't everyone end up thinking that the dragon book is great?
I'd much rather have a comparison of five good books on a given theme, with pros and cons.
EDIT: What would be great is, have several people at HN pick the subject area that they dominate, select about five books, and do a cross analysis (like, A is great for theory, B is a little bit weaker on that but a great introduction, and C has awesome exercises that compliment them. If that's too much, D is a very good summary of all three, without so much depth). That way we could all have a great, broad, crowdsourced set of book recommendations.
And "The New Turing Omnibus" seems really under-cited to me. Maybe same with the "The Little Schemer" (and successors like "The Seasoned Schemer").
That said, all these books also have necessary flaws. (After all, they're single-author and in print; you can't build on most without law enforcement trying to come after you.) A good review would list negatives as well as positives.
I did a degree in physics just for fun so I went through many math and physics books, but I'm really most passionate about computers, software development and programming so most of my recommendations are going to be on that.
I don't claim to have read every single book from cover to cover and worked through every problem but I can make educated recommendations, and I've gone through every book that I recommend. I've spent unreasonable amount of time looking for new books that are not top cited. Some of my recommendations will be top cited books but many won't be. Top cited books get my attention but they're not always good.
Talking about dragon book I'm probably not going to recommend it. It's not fun. You can't get things done with it in any reasonable amount of time. I've actually been thinking of writing my own book on compilers where you get things done quicker with less theory and it's fun. The problem with dragon book is that people recommend it just because they've heard of it. Hardly anyone has actually read it.
For the math books I'm not going to recommend standard text books much. My recommendations are going to be books such as Counterexamples in Topology, Counterexamples in Analysis. Those are super fun books to work through as counterexamples warp your mind a little bit, and you get that tiny adrenaline rush when you get it. Another example is To Mock a Mockingbird. It's not a text book, it's not a top cited book, but it's so fun. Another example Street-Fighting Mathematics.
For the physics books I'm also not going to recommend too many standard text books. I also won't recommend popular science books as they're mostly stupid and won't stretch your mind a little bit. They may blow your mind a little bit but they won't stretch your mind. Example physics book recommendations include Thermodynamics by Enrico Fermi, just beautiful explanations of the most the basic thermodynamic concepts. Another example is Quantum Paradoxes by Yakir Aharonov and Daniel Rohlich. I'll stop here as it's too many spoiler alerts. :)
Let's take a look at the books that I recommended in the first post.
1. The New Turing Omnibus - I read this book cover to cover in one evening. It's such a fun read and introduced so many concepts. I enjoyed one of the chapters about Busy Beaver Problem so much that I spent a few days implementing Busy Beaver in several languages and wrote a program that visualizes how the Beaver travels on the tape: http://www.catonmat.net/blog/busy-beaver/
2. The Little Book of Semaphores - I read this book back in 2002 or 2003 when it was just released in the 1st edition. I printed it for easier reading. I've a huge stack of printed pdf books and scientific papers (I just snapped some pics http://i.imgur.com/bjPgxMD.jpg, http://i.imgur.com/QJFumGl.jpg, http://i.imgur.com/FD2dx3L.jpg) and I just found the 1st editon of semaphores in my printed pdf stack (http://i.imgur.com/qe9hgHM.jpg). I worked through most of the problems.
3. Programming Pearls and More Programming Pearls - I just love the way Jon Bentley writes. I don't know what else to say. These two books really teach the basics of solving programming problems. It takes many years to master the basics in practice but these books teach the basics well. I once wrote a blog post (http://www.catonmat.net/blog/three-beautiful-quicksorts/) about Jon Bentley's chapter in Beautiful Code that he based on a chapter on quick sort in Programming Pearls.
4. The Little Schemer - I've gone through this book at least 5 times. Check out this photo that I just took of all the notes that I've made while reading it and the Seasoned/Reasoned Schemers (http://i.imgur.com/aeLEQh8.jpg). That is a lot of hours spent with these books. I enjoyed this book a lot and I copied out all the fun code examples and put them on GitHub (https://github.com/pkrumins/the-little-schemer), and I also wrote a blog post about deriving y-combinator based on one of the chapters in this book http://www.catonmat.net/blog/derivation-of-ycombinator/.
5a. The Elements of Style - I first heard about this book in 2006 or so when I got serious about becoming a great writer, started blogging and wanted to improve my communication skills. It's the most cited book and I gave in and bought it. It's really good because you can read it in a few hours and learn a lot. I follow many of the rules and guidelines in this book. I'm also going to recommend On Writing Well. Spoilers.
5b. The Elements of Programming Style - The Elements of Style + Brian Kernighan.
I wouldn't recommend a book that I don't trust is really well written. That just wouldn't be me. I stand behind my recommendations.
Sorry, I was just trying to send the message of "perhaps we should take these recommendations with a grain of salt". But we should be doing that with everything, don't we? All in all, any of your book recommendations that I can reasonably evaluate for having read the book myself, they all seem quite good.
Mind you, I'm a complete stranger commenting on your free job without a lot of care :) and written words lose the tone easily. Perhaps it's me, but I read your justifications and I'm afraid my comment might have struck you the wrong chord. I didn't mean to bother you, and I'm sorry if that's the case.
I hope I don't miss the subsequent posts of the list.
Kernighan and Plauger, Software Tools, had a very big influence on my coding style and appreciation for the Unix Way.
If you want to learn more about Lisp macros, the exuberant book Let Over Lambda by Doug Hoyte is a fun read.
The best book to learn how to implement Forth-like languages is Threaded Interpretive Languages by R. Loelige. Dated and long out of print, but worth getting. Plus, as a Byte Book, it has one of those classic Byte drawings on the cover.
T is to Scheme what Scheme is to Lisp (kind of), and The T Programming Language by Jonathan Rees is the kind of book that cleanses your soul.
Donald Knuth's The Stanford Graphbase contains literate programs for several elegant graph algorithms.
Jim Sather's Understanding the Apple IIe is a terrific description of a computer from the bottom up, and shows you how deep knowledge of the hardware enables you to write software that breaks all the rules (viz. the recent demo that gets 1024 colors on an IBM CGA adapter).
On a more personal note, Puzzled Programmers by Michael Wiesenberg was a book published by Microsoft Press in the late 1980s. It contained 15 problems reminiscent of what you can find nowadays on Project Euler -- math problems for computer solution, but where brute force search is not enough. I spent many hours on them when I was in high school.
https://www.info.ucl.ac.be/~pvr/book
I believe it's a terrific sequel to SICP, despite not using Lisp. The only little disappointment with the book is when they use Java as a canonical OO language to compare Oz/Mozart with. They should have used Smalltalk!
As a prequel to SICP, I love The Little Schemer.
I love The Art of Prolog too. As a modern successor to Prolog, https://probmods.org/ is awesome.
If we talk about theoretical CS, http://en.wikipedia.org/wiki/Computers_and_Intractability is terrific. Very short and elegant.
But I doubt you would gain anything from doing that. If you know Clojure you can pick up what you need of Scheme (new concepts get added as you progress throu the book) almost immediately. It really is not a book on Scheme, but of thinking about problems in a recursive way.
Some of the TCO stuff, may not translate well either. IMHO it would be distraction from what the book is about.
I actually wrote up a list for "college hires" last year if you need one https://medium.com/@the_ajohnston/three-books-developers-sho...
http://www.mdswanson.com/blog/2013/05/31/summer-reading-list...
I think many of us could do worse than to follow S&W's writing advice, but I also think the book is given more reverence than it's worth, maybe just because it's been a tradition in English education.
I never read The Elements of Programming Style but very early in my career I chanced into the single-page excerpt "Brian Kernighan's Programming Style Tips"[2] which has probably been the single most influential document on practical programming I've ever read.
Edit: Almost forgot, Programming Erlang by Joe Armstrong was also a landmark book for me, and if I were to redo my list I'd certainly add it.
[1] http://www.youell.com/matt/writing/?p=4 [2] http://ellard.org/dan/www/libsq/ref/style.html
[0] not "hackers" as in those who try to crack into systems, but rather as in those who enjoy writing professional, clever, and efficient code.
I don't know if I've ever really learned anything from Hacker's Delight, though. It's more of a cookbook. If I learned anything it's that a lot of dead CPU architectures were hard to program.
So I very much like this post and found several books to add to my reading list. :)
I did once blog about whether teams/departments should have a required reading list http://blog.flurdy.com/2011/04/required-reading.html . (Note that post was 4 years ago so the suggested list would have quite a few tweaks and was aimed at devs in my then niche)
It seems to be a common thing, which is a shame. I've always been fond of books, and unless you're pirating some classic texts and reading them as PDF's on your computer it feels like people miss out on a lot of quality content.
How often do you come across this? Admittedly, when I've been directly involved in interviewing this has almost always been for people under 25 coming into a junior level role.
And similarly unfortunately the majority I encounter don't read many if any books. If people only read books then that is perhaps an issue as well. And reading a specific technical book about a specific software version is also usually a waste of time in my opinion. Read howtos online and experiment away instead.
I do tend to interview more mid-to-senior level of which how they keep up to date is more relevant. I am not expecting new grads to have read the entire backlog of Pragmatic bookshelf if any. Nor am I expecting anyone to have read the bricks (gang of four, Fowler's application patterns etc) cover to cover. But for example seniors not having heard of these bricks or the Clean Code and Pragmatic Programmer books is a red flag. If they know of them but disagree with them then that is fine, but not heard of them at all is weird.
In a previous job they sent me Clean Code and a couple of other books in the post to read a few weeks before I started. Which was a good sign that I was joining the right company, even if I had already read them all previously :)
EDIT: I forgot to explain why it's such a good book: it teaches you how to think in Lisp. It doesn't focus at all in the syntax.
.------------------------------------.
| |
| This space reserved for |
| JELLY STAINS |
| |
`------------------------------------'Should make a good warm up for learning the likes of OCaml and Haskell
Also awesome to see The Little Schemer on here. That was also a book that was recommended in passing in my comparative language class and again I don't think people paid much attention to it. But I learned a lot from it as well.
I'm looking forward to following this list.
Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages
for people like me who spent most of their career with 1-2 languages this is very eye opening.
- 7 languages in 7 weeks, as it makes you know and understand decisions about inclusion/exclusion of some language features, for instance why/when to use dynamic typed languages vs statically typed - Programming Language Pragmatics, 'the bible' for those looking for understand programming language implementation
It was a textbook for a class I had on programming languages thou, and the class ended up not being the stuff I wanted to learn about so that may cloud my judgement.
Blasphemy.