Blog | Talks | Office hours | YouTube | EmacsCast | Bookshelf | Twitter | RSS
In the past I spent hours asking people to recommend me some books, in both real life and on the internet. I was starting to learn programming, so obviously I wanted to find The Bible, the best book for each of the aspects of coding. What is the best book about algorithms? Can you please recommend a book about Java? I’m looking for a good book that’ll teach me Django. Any suggestions?
When online courses and videos became widespread, I remember asking similar questions about courses and screencasts. Today our community at Hexlet.io is pretty big, and questions like this appear in our chats, social media, forums and blogs every day.
Of course, there are objectively good resources and not too good ones. “C Programming Language” is a great book, even if you don’t plan to program in C (let’s be honest — you probably don’t). O’Reilly books are usually pretty good. SICP is a must-read. Right.
But the thing is, if you go ahead and ask this question publicly, say, on Reddit or HackerNews, you’ll get plenty of answers. You probably won’t have a definitive answer in the end. Same if you just Google this question: many compelling answers, and you still have to decide.
The thing is — there is no Bible. No silver bullet. And if hundreds of people recommend a particular book, it only means there are higher than usual chances of that book working for you. It might not work for you at all, and that’s fine.
If you’re serious about learning something, you gotta take in plenty of information, read multiple books, listen to many people, watch lots of videos. Some of them will be subjectively bad, some — good. They will work together and help you understand ideas from different perspectives.
Think of this like trying to create a 3D model of an object. One book, one author, one approach is like taking one photo of that object. You get a lot of information (compared to nothing), but creating a good 3D model from a single 2D photo is hard, especially if this object is new, unknown and unexpected. You need at least few other photos, from different angles. Some photos will be so detailed and awesome, that they’ll contribute more than several other photos combined. This quality, level of contribution to the overall result is determined by compatibility between the photo and you. Your sensors, your brain, understands certain photos better than the others.
At some point you’ll get enough, so that new photos won’t make much of a difference anymore. There’ll be a point when you open another book and just don’t get anything new from it. This is how you know you got somewhere.
So, yeah, take some recommendations from people you trust, or just go ahead and get most upvoted books and resources along with some random picks. Nobody knows what is good for you. And only one person can know.
The best general advice, I guess, is to put some effort into knowing yourself first. Try to figure out what works better for you, that’s the only person who matters when it comes to education. Some people get the best results from thick, serious textbooks, some — from humorous, illustrated blogs, others — from videos. There is a guy who says “video is the worst medium for computer science education!” and gets hundreds of upvotes on Reddit? Well, who cares? Jacob from Wisconsin learns better with books and doesn’t get much from videos. Great, now what? This fact is useless to me, I want to know what works for me.
This is not “we’re all unique snow-flakes” type of bullshit. You are not unique, there are lots of people with very similar mindsets and mental structures when it comes to learning stuff. That’s not the point. The point is — unless you actively learn about yourself, you won’t know which non-unique group you belong to. Being unique or not is irrelevant.
— What is the best way to learn X?
— Know yourself first, then try whatever.