Like other comments have mentioned, applying what you learn is also important for recollecting information after any reasonable period. If something's not used by at a later point, is there really a point to remember it? Of course, there's the joy of remembering things just for the sake of it which I'm not discounting. But party trick trivia for some reason has always lasted longer in memory than essentials :-) beats me as to why.
1) doing a project 2) taking notes 3) simply reading
Best if you can do all 3 in reverse. There's just no substitution for the creative spark and contact with hard reality that doing a project gives you. Any ambiguities, misunderstandings, and missed information are almost guaranteed to be ironed out with a wisely chosen project.
- Read the content - Make 1 / 2 sentence question, or just write the title - Do something else (coding) for 10 mins - Come back to it, if you cant remember it, read it again, if I can remember it, keep reading.
At the end of the day, review the notes, and move all the bullet points to another list.
Come back to it tomorrow.
Keep sorting and moving content up and down the lists until your remember it.
I use the mac notes app for this, because then it auto-syncs with my ipad and phone. If I'm on the train, or in the uber, I can get my phone out and do a quick memory jog
This is exactly what I did when I read Modern Compiler Implementation in ML by Andrew Appel. This was the course I used http://www.cs.cmu.edu/~janh/courses/411/17/schedule.html though it was an earlier version. Afterwards I collected a lot of compiler optimization notes, like here https://www.cs.cmu.edu/~15745/syllabus.html
Think up idea No idea how to implement it Look at university lecture notes for background material Read lecture notes, read assigned text Implement idea while I read the text and notes Notice my implementation is poorly inefficient Read more advanced notes/papers to optimize Rewrite idea, success!
Thing we call knowledge will go away, we will always check books and websites if we are not using it frequently. I really like what Einstein said: Never memorize something that you can look up!
In the case of compilers, I recommend you build one, or at least deeply consider how you would, as a driver to put the information into use. An an exercise, you could think about what language would put as many concepts in the textbook into use as possible.
Learning occurs when we relate new material to what we already know. Build your own internal knowledge map.
You really want to know it. Do a project with it.
I study... It's not the tests that help me remember things, it's the studying and working with them.