|Don't ask to ask, just ask|
What was the book?
There is a good chance that it was a reference aimed at beginners that was being reviewed - yet again - to clarify his understanding.
A very good strategy for mastering topics like programming and math that build on themselves is to constantly, whenever you see something that you do not fully understand, go back and find out what is going on. In the process of reviewing from a position of more wisdom you get opportunity to clear up initial misunderstandings and to condense your internal model of the problem to something cleaner.
As The path to mastery indicates, this is a point I learned from math. As a math student I looked incredibly lazy. I came to class, but didn't take notes. I didn't study before tests. But I aced the subject!
What was my secret?
Well first of all I read each day's material in the text before I went to class. I came to class prepared, I knew what I had not understood in the text. I listened closely, not taking notes so that I could give full attention to the lecture. When the professor came to something that I did not understand (particularly if it was on my mental list of things to check on and they didn't clear it up), I asked. Not surprisingly, it turned out that if I did not understand after having read the book and seeing the lecture, the other students generally didn't understand either. So my questions were useful for everyone.
And then when I read, every time I felt the slightest hesitation about something, I double checked. I went back to where the point was first explained and reviewed there and then.
When the end of the course came there was no need to study, I generally knew the subject cold and so made sure that I had sleep instead.
So I came to class without paper, took no notes, and did not study for the tests. I was missing the external signs of discipline. But was I truly undisciplined?
This only works in some subjects. But it works well in math, and seems to in programming...