How do you read programming books?

I have more half-finished programming books than any other category. In fact with books in general I’m a bit of a completionist, tending to finish them even if I’m bored or otherwise struggling. The reason I operate differently with programming books is that I feel obliged to work through most of the code content on the computer, usually by reconstructing the code myself after reading a major section or chapter. This is time-consuming enough to be daunting, though, and I more often than not move on before finishing.

This issue doesn’t arise with more general dev/tech-related books - eg. I’ve just finished Ousterhout’s A Philosophy of Software Design in a few nights, reading it like a novel.

I have tried similarly ‘reading’ programming books away from the computer, but find I forget most of what I’ve read too quickly for it to seem worthwhile. Probably what I should do is be a bit selective - read and maybe take a few notes on specific aspects of the code that I want to follow up on in more detail later. I might try that with a couple of my half-finished Elixir books :wink:

Anyone else suffer from incompleted programming book syndrome?

14 Likes

I have it very similar. I feel like whenever I need to understand a topic better, I rush and buy a book about it. Or whenever PragProg releases something Elixir related or interesting in some other way, I do the same.
Then after reading few chapters, I just skim the rest of the book to get some kind of overview to know where to look if I need more information.

I think that once someone has a lot of experience and just need to know the language/tool/… specifics, traditional style of book can be too verbose. But I buy them anyway. :man_shrugging: It’s some kind of addiction, I guess. :grin:

That’s why I really liked the Build a Weather Station with Elixir and Nerves: Visualize Your Sensor Data with Phoenix and Grafana by Alexander Koutmos, Bruce A. Tate, Frank Hunleth book. It was short and dense enough to keep me entertained and finish it without forcing myself into it. :slight_smile:

3 Likes

Yes those short books, kind of like extended tutorials, are tractable with a detailed-reading approach.

I remember trying a more ‘novel-reading’ approach with Steve Klabnik’s Rust book. I found it well-written and easy to read. But when I closed it after some 500-odd pages, I had no more idea how to write Rust than I had on page 1. I think that experience amplified my tendency to get bogged down with ‘working through’, rather than just reading.

3 Likes

I usually read digital copies of programming books, so that I can quickly switch between a page of the book and my text editor. The exercises and projects contained in a book are the most important parts, and that’s where the bulk of my learning takes place. Often I don’t find the exposition of some piece of code very helpful, rather running it myself and making small changes is how I come to understand it.

I don’t remember if it’s the textbook Computer Systems: A Programmer’s Perspective, or from a lecture in the corresponding CMU course, but the recommendation was to read each chapter of the book three times. John Carmack has similar advice about going through books “at least twice”, Thoughts of a programmer

Reading a book by itself never improved my programming ability, working through the problems in a book or writing a project inspired by a book has.

10 Likes

Split view pdf / terminal+tmux+neovim I try and follow along in the terminal with the book. I’m currently reading “Haskell Programming from first principles” in my .hs files I use comments to take notes as I go along with the author it’s kind of like a jupyter notebook and has worked really well for me. My notes for Haskell are organized as - 0. Operators, 1. Data Types, 2. Expressions, 3. Functions, 4. Recursion, 5. (Purely Functional) Data Structures, 6. (Haskell) Algorithms… This helps me focus on specific objectives “learning x by x”.

2 Likes

this is a good tip tbh

3 Likes

A good programming book encourages you to open your programming IDE and actually type the code, to experiment, think or thicker. Reading books also allows you to understand and develop a common language with your collogues.

4 Likes

I try to be methodical when reading - by taking notes or highlighting things and then going over those items later. I also try to make sure I understand everything before moving to the next chapter - this doesn’t mean I have to remember it all, just understand what’s going on before moving on. I will happily read a chapter more than once if it feels like something hasn’t made sense.

I will also only read books that appear to be on my wavelength - there’s no point trying to read a book if you just don’t click with it. This is also one of the reasons I prefer professionally published books, they’re usually of a decent quality and an editor has usually made sure the information is accessible and easy to understand. Reading a book is a big investment of time, hence I prefer the highest quality if at all possible.

I have more tips here: My best tips on learning/reading/studying!

Something I have found though (and I wonder if any of you have too) is that I find it harder to get into the mindset to read, and I think this is because of how our brains are changing thanks to social media/dopamine hits. I read recently that young people can only concentrate for short bursts now, I find that worrying.

There is a way around it but it takes some discipline. From my post above:

With this technique and enough discipline (i.e continuously over a few days) you can get back into studying/reading… just like we did in the old days :lol:

(If anyone tries it, let me know what you think!)

12 Likes

I used to have a piles of unfinished programming books until I changed my reading style.

What I used to do is, get ebooks and have the book open on one monitor and a repl/ide on the other. However, that often led me google for related things and move away from the flow.

Nowadays I buy paperbacks and when reading i go to a different table armed only with paper and pencil, and it works for me. I have finished more programming books in recent times than ever before.

5 Likes

This is great advice! Also why I love my Kindle and really appreciate books written with e-readers in mind, such as the Ecto book (here’s my review of it: Programming Ecto (Pragprog) - #40 by AstonJ).

Oh no, your review might have induced me to pick up another book! Sounds pretty enticing.

I find the various responses here interesting. Perhaps not surprising for an engineer-oriented readership, most are ‘tactical’ (that’s not quite the right description, but I need more coffee to come up with something better). I personally don’t have tactical issues ie. paper book vs ereader (both, depending) or how to stay undistracted (I tackled that years ago when first afflicted with rss-feeds semi-addiction), or social media (long-time refusenik) . It’s more a kind of philosophical issue. With all other book categories I have 2 modes (or more precisely a continuum with 2 poles): breadth vs depth. Some books I’ll read in armchair ‘breadth’ mode for general insight and background. Some I’ll ‘study’. Or I’ll approach the same book both ways.

I find both important, but for some reason I’m propelled almost involuntarily into depth/study mode with programming books.The time-consuming nature of that limits my range of familiarity more than I’d like (hence the unfinished pile …). I’d like to try and at least read some of my slush pile this year without getting entirely captured by the quicksand of study mode.

Taking notes mechanically really helps. There are scientific researches showing that the act of writing by hand have a complete different stimulus on the brain than typing.
Of course, there are people that can study and learn just fine by taking notes on a computer, you can try to understand what works best for you, but I would suggest taking notes by hand as you’ll take advantage of the various stimulus it generates.

Not all books worth a reading.
Also not all books were written to be read from cover to cover, you don’t need to read books sequentially and some subjects can be worse to understand if you read this way.

There is also difference about reading and studying.
Reading can be totally passive or a little bit active if you’re highlighting and taking some notes.
But studying is 100% active. Studying means reading the same page multiple times, taking notes using your own words, and working through all the exercises.

Again, not all books worth being studied, some of them are there to be read and that’s all.
A book like the mentioned Computer Systems: A Programmer’s Perspective are the kind of books that have to be studied for you to take out the most of it. Each exercise are there for a reason, and when you just skip exercises you’re literally skipping learning.
Some books are even worse, such as SICP, because some teachings and explanations are included in the exercise description, if you skipped the exercise you’ll have just skipped a detailed explanation about something important.

I was a Chemistry teacher for some years, and I could see things like this all the time. Most students don’t read books at all, and when they do they just skip the exercises.
If it’s a good book, exercises are there for a reason as I’ve said, if they weren’t needed, they would not be there, trust me.

Some exercises are designed to be solved in 5 or 10 minutes. But some exercises are designed to be solved in hours, days or weeks. Most people will try to solve something for some minutes (or seconds) and they will give up either skipping the exercise or by looking for the answer. Even though hours, days or weeks sounds a lot to spend on a single exercise, there is something about creating new neural connections by thinking of something for a really long time that you’ll never know or never understand until you actually try it.
If you think about it, some physicists and mathematicians take years or decades working on a single problem or theorem, but the student don’t want to work 30 minutes on a single problem.
Working hard on hard problems are the only way for you to actually develop the ability to solve problems by yourself, I mean to create new solutions.

You’ll only need to study this hard on very deep topics, like the mentioned book for Computer Architecture, or a book on Algorithms, Math, Chemistry, etc. Not all topics require this much dedication as you can be a very good software engineer without being a specialist on everything.

So, not all books worth being studied, specially this way, some of them requires a brief reading and some books are meant to be used as a reference, meaning that you only need to know which book contains which information, so you know where to look for when you need that information.

There are also useful techniques about reading and studying, out of my head* I can remember about two good books that “teaches” how to study a book, they are How to Read a Book by Mortimer Adler and The Intellectual Life by Ag Sertillanges.
The Intellectual Life is a very catholic book, as Sertillanges was a priest, but you can easily “handwave” the religion and benefit from the specific knowledge.
There is also the book and course from Barbara Oakley “Learning How to Learn” that can help.

The fact is that nowadays schools don’t teaches how to read, how to study or even how to think. In most places you’re literally ordered to copy something down from the chalkboard.
A book like “How to Read a Book” sounds like a joke until you actually read it and discover that you didn’t knew how to read.

I think that the secret is knowing how to use your time effectively. I’m not saying that you need to be productive all the time, GTD or something. I don’t do that myself. But you need to choose which books you’ll just read, and each books you’ll study, and specially which books you’ll completely ignore.
A good way to know if you have to ignore a book is skimming through it and knowing how to analise a book structure, table of contents and index. Those are things that a book like “How to Read a Book” will teach you.
Looking at the exercises can also be a good indicator, if the book have exercises or projects that sounds something that you would like to learn, that’s an indicator that you might benefit from the book.

Finally summing up things are a good exercise. You already did that before when you were taking notes using your own words. Now you might want to summarise it further or maybe:

  • Pick a 3x5 cards to write summaries about key points, or write cheat sheets
  • Write blog posts about it
  • Teach someone about what you just have studied

Teaching or talking about something requires a good level of understanding about the topic, or else you’ll not be able to put it in your own words, that’s why taking notes using your own words instead of just copying it down from one source to another is a useful technique for study.

If the book have diagrams or drawings like a Systems Design book, try to write the same diagram without looking or without looking too much, it’s the equivalent of writing using your own words.
This is close to another technique called active recall, normally used by engineering and medical students.

Sorry if some of those tips are too much specific for harder or complex subjects. “Programming book” is quite generic and it can range for an Algorithms book full of mathematical definitions, to a simple book presenting a programming language syntax. One requires you to study, the other one is just a reading and reference.

Edit: * for “out of my head” I mean thinking briefly about it, I forgot the correct English term used for it.

6 Likes

I am checking whole book like quick reading about 1 or 2 hours, and try to create a simple project and apply the simple properties from the book. For me the best way create the project is the best to become talented developer.

After many years suffering of the same disease I decided that learning a programming language is not a matter of weeks but of many months.

So I don’t care anymore longer to rush to page 250 and then be proud to rush only 250 more.

At this very moment I am reading Elixir in Action and the same time I am exercising the Elixir track on exercist.org .After three months I am now on page 150 but now I do know some Elixir idiom.

1 Like

I personally like to use books as quick guides to get a general understanding of the topic, I guess you can call it skimming.

Then if the topic is hard I either read the book to learn it, or just use Google and try learning on my own. :slight_smile:

1 Like

As there are different kinds of books, it’s important to make the distinction first. This is how I read technical books and even here I must make a distinction. There are books that require for me to practice, to type it out.

I read fiction books on my phone mostly and take notes and bookmarks. I read technical books on my laptop.

I started tracking what I read and when. For that I’m using Zim Wiki.

Zim has a todo functionally which is really useful. Let me show you a screenshot of how it looks:

Zim has an index- a tree structures for notes. Here I organize all the books I’m reading.
In the note itself I create a todo for each chapter, when I finish it I write the finish date.
I copy interesting chunks from books, sometimes I add my own observations, I also add tags.
One of the tags I add is ‘Bug’, where I write down the problem I encounter, and later I add a solution.

All that is useful because I can later use search to quickly find how I solved a bug or some interesting piece of information.

As I want to learn Emacs, in the far future I’m planning on using Org mode instead of Zim.


There are other things I do when I read. Mainly:

  1. The jump ahead technique.
    I try to guess where the author is going and try to get there first and then compare my solutions.
    It also gives some boost to my brain to be more active and pay more attention.
  2. Free recall
    I try (not always) after finishing a chapter or even a page to sit down with a blank piece of paper and write all I could remember from it.
  3. Tweaking
    When I work out the code I usually ask myself what if questions.
  4. I sometimes come up with questions/quizes which I add to Anki.
    I feel like this could be a really serious learning technique if the questions are well-thought out and provoke thinking rather than just remembering the answer. In reality it’s a mix of both.
3 Likes

I try to just read the book like a novel unless I see something that I would really like to try immediately on the computer.

My goal with reading the book is not to be able to write code without having to look up the documentation, it is to have the correct language for looking up the documentation.

Speaking the same language as the documentation and blog-post authors is HUGE. This is also the main benefit I get from listening to Podcasts.

If you google “pick correct function based on inputs” you will have a lot less success than if you google “match function head arguments”. Even if you found the correct thing while using the wrong vocabulary, your mind will be taken off the problem you are trying to solve because you will need to translate between what you thought the thing was called to what the documentation actually calls it.

2 Likes

Stopped using paperbacks and hardcovers long time ago, too expensive to import.

Tried the Kindle and other android tablets too, the problem of focus is real with any internet connected devices.

A good size should be between 10-13 inches, those are the most expensive ones but they allow you to read and annotate PDFs with “moderate” ease.

rEmarkable and Kobo have E Ink devices on those categories.

They’re limited when it comes to hardware and features, that’s a plus if you just wanna read and annotate tho.

2 Likes

I like to type all code examples in my editor and eval in an iex session via vim-slime. I’m currently working through Programming Elixir and really enjoying the code exercises

I’ve also started buying paper books again because it keeps me focused on one book at a time

1 Like

this, especially when moving too often from one place to another

1 Like