I have always loved to read, but my experience with technical books is more complicated than with other kinds of reading.
When I first started to code, I found reading programming books boring. It seemed like many of them were just repeating documentation.
I was mostly learning by practicing then: reading and writing code, googling and reading language documentation. I still read some books on software development every once a while, but I tended to choose the more "stable" and general-purpose ones, like "Code Complete", "The Mythical Man-Month" or "Joel on Software" (which are great). I thought that most of the books will get outdated soon, so I haven't read any books on the languages I used.
Several years and jobs passed, but I was still mostly learning by coding on the job, reading blog posts, and working on my pet projects.
Later, I had a very busy couple of years: maternity leave + part-time work, then full-time work + learning to drive. When I was able to return to a more steady schedule, I gained a great will to learn and fill blanks in my knowledge, but still hadn't much spare time to learn.
Around that time I stumbled upon a Sandi Metz's book "Practical Object-Oriented Design in Ruby". I decided that reading will be a nice way to complement my professional life. It took me a long time to finish the book (like 3 months :D), though it is really interesting. After reading POODR and doing some research I realized that actually there are many great books that don't get outdated instantaneously. Later I've built a habit and started reading much faster (which is a topic for another post I'm working on).
What I like about the books is: they provide structured knowledge. You don't need to search for the information on the topic each time. If you have a spare half an hour or even less, you can just return to the book and start reading. Over time you will notice how much knowledge you've got.
I found reading highly effective when accompanied by practice at work. It helped me to fill a lot of blanks in my knowledge and even gain more confidence. I would definitely advise my previous self to start reading tech books earlier in my career.
What about you? Do you see reading software development books as an effective way to learn?
Top comments (43)
I absolutely love programming books. I even more love the general purpose books (like mythical man month - a book still on my book pile).
The best multi purpose software engineering/programming books I've read were:
Language specific:
Still on my pile:
This is an insight that gets lost among the (here I go again) flood of Learn Framework X Version 8.6.5 books that get churned out - one for each major publisher for every damn iteration every library.
A good programming book should teach the long-lived abstractions that much of our industry is built on. Things like object orientation, functional programming, modular programming, the Web, HTTP, REST, command query responsibility seperation, event sourcing. These are things that have been around for a very, very long time and are not going to go out of fashion.
What you should not read books about is some highly contingent currently used implementation of the above. This is what Stack Overflow is for. But by knowing what abstractions are used when talking about and designing software you'll have a much better chance of understanding (and so using) the latest tools.
I still ❤️ The Mythical Man Month, which is a ridiculously old book. I'd recommend reading REST in Practice too.
But if I was recommending one incredible book on programming it would be Land of Lisp. It's not the best programming book. It's not the best Lisp book if you want to learn Lisp. But it's definitely more fun than I've had reading any other programming book. You'll learn a lot. Maybe not things you wanted to know or needed to know, but at least you'll enjoy yourself.
A small taster - keep scrolling! 😉
Great points, David.
I also found it useful to read books on fundamental topics (like oop, patterns, fp, ddd) applied to the languages I use. It helps a lot to get into the topic and start using what I've learned.
Of course, I don't limit myself to only books using "my" languages, especially when getting familiar with the topic.
It's true! I'm not at all experienced with Java, C#, Python, C and C++ - but I find it really important to be able to read those languages just to understand code examples in books.
Especially Java - it's like a lingua franca for developers. Still hate it though 😁.
(I wasn't going to mention DDD, but since you did: I find the Eric Evans book amazing even though I can never manage to finish it...)
Can relate :D I'm currently reading "Working Effectively with Legacy Code" by Michael Feathers and it's full of examples in Java and C++ (and I'm a rubyist). So Java is the easier one :)
As for the DDD, I have one of the big DDD books in paper (not the Evans' one) and am not sure if I'll ever finish it, but I do read bits of it from time to time. Another problem is that it's in Russian and I have to sometimes search the terms to find out what the translator meant and if the translation is correct.
I found useful to read at least "DDD quickly" to get into the topic. There's also a book "DDD distilled".
Never heard about "Land of Lisp" book before, but the Music Video on the website is awesome 😀
I have learned programming with books, mostly due to bad internet conditions. I still have an extensive library of them and I prefer them over video courses. I love reading so that may have played a major part.
I remember downloading the php documentation instead of using an online one due to the slow (and limited) internet 😬. But I was in a hurry to learn and also easily distracted, so was jumping from code to docs and so on. Especially at the job which I started without extensive programming knowledge. That's one of the reasons why I was not learning much by reading books.
I'm a big fan of reading software books. Once I completed my coding bootcamp, I really wasn't sure how to learn outside of that environment. I realized that I was seeking some structure or guidance, and I found that immediately in one of the books I read. It felt a lot better to me than reading a bunch of blog posts or following video tutorials, too, for whatever reason. Might just be my learning style?
I was sure reading (docs, articles) is my learning style, but Barbara Oakley (in her MOOC) taught me that for more effective learning we should combine learning styles. Since then I even sometimes watch video courses, though it's hard cause I get easily distracted.
I HATE reading books on software development. Every one I've tried has seemed dry and boring.
I'm one of those people that learn by doing, screwing up, googling and then trying again.. the structured approach to books probably makes more sense in a logical flow kind of way.. but just generally makes me want to poke myself in the eye as an excuse to stop reading.
I personally never completely read a programming book. I at most, scroll super fast and read "diagonally" to get the main point. I just love to start by doing something, tweak it, tinker it, think why it works, how it works, how it could be better, is it similar to anything I know?.
When I was a beginner I used to watch a lot of tutorial videos but now I find it too slow and inefficient.
Now I usually just scrolls the docs, read an article or watch a talk on 1.5X speed
Once I started listening on 1.5-2x, it's hard to go back!
I have had the same experience: learning on the job or from pet projects, I felt more comfortable with language documentation (and even the C++ spec) than books that re-hash the documentation and are often written with beginners in mind.
The first titles to break that pattern for me were the "Effective C++" books by Scott Meyers, which are aimed at advanced practitioners. I'll always want more of those, for other languages. "JavaScript: The Good Parts" by Douglas Crockford is another example that comes to mind.
There are a few other exceptions, and what characterizes them is that they're not trying to teach a language or framework. An oft-cited example of that would be "The Pragmatic Programmer", but the one book I recommend most often is "Working Effectively with Legacy Code" by Michael C. Feathers, which is about testing. For C++ programmers, "C++ Coding Standards" by Herb Sutter and Andrei Alexandrescu is useful for working in a homogenous team.
I have finished Working Effectively with Legacy Code" this year. It's a great book, especially for those who work with C++ or Java. It's less hands-on for a ruby developer (like me) but is still an interesting and useful read.
It doesn't really address any particular language, though? I'm a PHP developer, and it's fundamentally changed how I work.
Great article! i agree in the idea of pairing the work and reading a book about that task im doing, because doing it in a test lab or only reading the book is for me hard, because i have no real reference and i acquire the knoledge in a more superficial level. in other words: i need the war to become better!
I started my career after reading a book!
I believe, reading technical books is a must-have skill for any programmer who wants to be distinguished in the industry. It provides you with the in-depth knowledge, that courses (videos) can't cover. The benefits of reading technical books are related to how our brains work during reading, which I think related to how the developer's brain should work.
I think the biggest problem with language books is that they written by software engineers with 30+ years of experience. Their perspective is totally different from a beginner. So the pace is usually not the best.
I've read a few books where the first chapter is about OOP, objects and classes, before getting into the basics like variables, conditions, etc.
I don't read much books now other than reference a thing here and there.
For me the biggest takeaway in books was that they had a nice progressive learning, good examples, and structured mini projects. Those books are counted with one hand.