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.
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.
- 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
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!
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.htmlThing 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.