> " Do not copy and paste code. We all copy code, and we all like to see our programs work. Copy and paste is the fastest way to do that. But if you type in the program, even if you are copying it, you are forced to read every single character. This is the fastest way to learn the programming language. As you know, getting a single character wrong can mean the difference between a working and non-working program. "
I'd argue that it would be even better, if I wrote the program samples with pen in a real notebook. Using different colors and imitating syntax highlighting could be even better.
I've been planning to get a physical programming/cs notebook for years.
For the digital one, one can just copy and paste, use abbreviations, templates etc. so it doesn't take a lot of time.
Obviously the physical notes are only necessary in learning new and hard material. For example one might keep a notebook for C programming, Assembly, Basic Algorithms, Discrete Math etc.
I must admit that I've never tried to print my digital notes, which I keep in org-mode and export to pdf using tex. I guess that could also help for studying. You could take notes with hand, highlight things, put stickers on it etc.
I am planning to purchase a laser printer with refillable toners to print books, papers and my notes. I don't know why but having a physical copy of things help me learn them much easier. It could be that it is the only way I learned in school.
On a sidenote, during highschool I could only write essays with real pen and paper. But now I'm used to firing emacs and writing prose. Maybe I could also train myself to read textbooks on a computer efficiently.
* Better engagement in class vs typing in class
* Better short and long term retention of learned material
* Easier exam prep due to better retention
* Higher grades vs not doing this
* Able to share useful notes with others
In my business life, I've found similar benefits. The primary difficulty is forcing myself to follow the pattern. It's easy to think "I've got this" and not type up a set of notes.
I also had similar thoughts in college. I planned to scan my notes from time to time and thereby have them digitized. I never went through with it. The system that worked for me was to write a date on each paper, keep all notes in a stack, and organize them into topics in chronological order when needed.
I always struggle with physical organization, whether it be tidying up my room, or planning my days. I hope this will improve with age, but for now I try to work around my deficiencies. For example in college I never had the discipline to study everyday, although I almost never skipped a class and I always took notes. It wasn't that I wasn't interested in the things thought, but I just couldn't. I also cannot tidy up my room, although I know it would benefit me hugely. I always postpone getting a haircut, washing clothes etc. to the moment when it becomes absolutely unbearable.
So I don't think I'd have nearly enough willpower to take all my notes physically and then daily type them into the computer. In business life what I can do is to create a virtual filing system for organizing notes. For example I could divide the year in 52 weeks, open a folder for each of them, inside these folders I could open other folders for projects. I could then symlink those weekly folders into other directory listings for Clients and Projects etc. By doing this minimal work, I'd have a working system that would keep me out of my naturally inclined chaos. During internships I devised a similar system for email, and it had worked remarkably good.
Also, I became keenly aware of a nervous tic that was making me try to hit command-S on the notepaper.
In my experience, that almost always means "for sufficiently small values of 'learned'." These are the people who can glue stuff together and make something that seems to work, but are completely lost when it comes to debugging or even just writing original code.
It also helps me enormously to rename ALL variables and function names from examples. Yeah, it's a total pain and can even get confusing. But it keeps me actively engaged with the examples and makes a much clearer separation between USER-chosen names and actual LANGUAGE keywords!
I've come to learn that taking the initial extra time to write it out by hand is definitely better than having to spend more time trying to figure it out and fix it later.
> "You might well ask why you should study assembly language, given that I think you should avoid writing in it. I believe very strongly that the best programmers have a good understanding of how computer hardware works. I think this principle holds in most ﬁelds: the best drivers understand how automobiles work; the best musicians understand how their instrument works; etc."