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.