“Reading?”, you inquire. “I didn’t get into computer science to read!”
Yes yes, reading is scary. But it’s profoundly important if you want to be a better programmer. Contrary to what some may think, you can’t learn everything from writing code and doing Leetcode problems.
Reading can give you insight into the minds of the greatest programmers who ever lived. Reading can teach you the lessons learned through struggle and strife. Reading can help you fill in the inevitable gaps of your programming knowledge.
You can have all the raw talent, all the problem solving, technical kick ass skill in the world, but without reading, you won’t have the knowledge to really make an impact.
What Should I Read?
Well, for one you’re reading this blog. That’s a good start! But don’t stop here. I try to link to other blogs when possible. Follow those links and read those posts.
A few blogs that I really like are Coding Horror, Joel on Software, Steve Yegge, The Old New Thing, Lambda the Ultimate, Alexis King and Paul Graham.
You don’t have to read all of these, but maybe spend some time perusing old articles and see what you find. Blogs are great because they offer little snippets of wisdom and opinions. I’ve learned a lot from reading old Joel Spolsky and Jeff Atwood posts.
If I had to give a few good starter ones, I love The Magpie Developer, Exploding Offer Season, Parse Don’t Validate, Steve Yegge’s Platforms Rant, and How to Get Startup Ideas.
Oooh even scarier. Books. Next thing it’s novels and then it’s just a slippery slope to a career in literary criticism. Don’t worry, I promise I won’t recommend Wuthering Heights.
In all seriousness, books are so important. Y’know those textbooks that professors put on the syllabus that nobody reads? They’re filled with super useful information!
Of course, you don’t have to read them through. I don’t think I’ve read any pure computer science book cover to cover. Skim them from time to time and see if you pick up some stuff.
Other than textbooks, there’s quite a few amazing books on programming. Jeff Atwood’s recommended reading is a good start. I’d also include Coders at Work which is an excellent series of interviews with top programmers, The Soul of a New Machine which is a great historical perspective on building computers in the 70’s, and Smart and Gets Things Done an amazing book on hiring good developers1 by Joel Spolsky
Of course, there’s the granddaddy of all computer science books, The Art of Computer Programming. It’s very math heavy and suuuuuper dense but hey, if you can make it through even a few pages, you’ll learn a lot.
Want a great way to learn more? Unsubscribe from /r/funny and all the other inane default subreddits, then subscribe to a bunch of programming subreddits. At least you’ll be wasting time learning something.
The other interesting site is Hacker News. HN is a kinda reddit clone run by YCombinator, a famous startup accelerator. It’s mostly tech news based and has a very interesting, very unique culture. Some people find it interesting and full of lively, intellectual debate. Others find it simultaneously cynical and extremely naive, with overly aggressive or dismissive comments interweaved with posts on the next shiny new thing.
The truth is that both are true. Communities resist general categorization3 as their inhabitants are constantly changing. One can never step into the same subreddit twice. Go read it for yourself and decide.
If you lean more academic, papers are a great resource. Reading papers can often be hard for students—even I struggle with it. Just remember that you don’t have to read papers cover to cover. Even if you read just 20% of a paper, that’s still better than 0%.
There’s quite a few classic papers. I love Reflections On Trusting Trust, No Silver Bullet, the Bitcoin paper, and On The Cruelty of Really Teaching Computer Science.
If you want to stay up on the cutting edge, you can always read the proceedings for various conferences such as PLDI, SIGGRAPH, OOPSLA and so on.
While reading all of these wonderful sources, it’s important to keep a sense of skepticism. Programming is a subject that has a lot of strong opinions and strong personalities. It’s very easy to read something and think that this is the absolute truth and that things must be done this way. It’s also very easy to read a different thing the next week and decide that this is the real absolute truth and that things must be done this way. You see?
Keep an open mind, read everything in good faith, but don’t take any of it as gospel.
Ultimately nobody is completely right. Everybody has only the tiniest fraction of the total collective programming experience. We all have different backgrounds, different language preferences, different ways of thinking. Reading and writing is what allows us to share these different experiences and thereby improve the entire programming community in the process. Without reading, you’re stuck with only your limited experiences and your limited knowledge. With reading, you can erase these limits.