I wrote this in 2017 for a friend who went through courses and had trouble actually recalling or appyling the things that were learned.
Learn to Freakin’ Code By Freakin’ Coding
getting the most out of the large investment of time learning to code which you’ll never get back
A dear friend of mine is ridiculously consistent with some habits. He goes to bed at around the same time everyday. Of course he’s an early riser. Every homework assignment, exam, and other related documentation for every subject in his academic career since high school is organized and kept.
When this dear old friend learned bootstrap, he went through the first couple chapters of the book mostly by taking notes in a notebook. Why not? Being thorough, consistent, and diligent with important things in his life is habit. This meticulous approach has worked so far.
I was pushed to write this blog post after seeing this post on Reddit:
Why This “Learning Cover to Cover, no Code” or “Content Only” Approach Doesn’t Work
Consider a course/class in World History. You need to:
- remember useless facts to recall for points on exams, only to forget most of the facts soon afterwards.
- remember details in history that ‘just happen’ without realizing the ‘why’ or ‘how’ of things.
- realize that unless your career goal is to become a military tactician, useful knowledge of World War two can never “be applied”. Details of history are based on the reactions of a group of people in certain situations. History can’t really be “tested” (some groups of people will fight back if pushed, other groups will leave the country, find another one, screw over its inhabitants, and take over #murica).
Why Computer Science Demands More
Consider what it takes to write a simple program for a calculator. You need to:
- remember important specification details of the language you will be developing in (declaring variables, taking in user input, how to write functions, catching errors…).
- apply knowledge of the specification to design your code (each calculator operation should be in its own function/method, the calculator should handle variables of a particular data type…).
- write tests to verify your knowledge and the quality of the code so that your program mostly works the way it should.
When it comes to Software Engineering, there’s a lot more thinking, applying, and making connections than there is “just doing”.
When writing code, you’re thinking about its design, applying your knowledge, and validating your knowledge by testing your software.
When you’re “learning” from a book without applying that knowledge, you’re spending way too much time writing down more than enough information you need. You’re never taking the time to make the connections in your head. You’re essentially conducting yourself the same way you were in that useless history class. This approach is not learning; it’s remembering.
Seriously, stop making note taking and passive listening a large part of your learning. Start freakin’ coding.
Other Benefits of Doing Real Work
By creating and coding to learn, you’ll:
- produce content that you can refer to for reference on specific things (taking user input, error handling). Note: copy and pasting is generally bad since you won’t be reinforcing your knowledge, but having simple code samples to look over will save you so much time.
- have multiple projects and/or pieces of work that can be put towards a portfolio.
- be able to share your knowledge in a way that is understandable, digestible, easily referenced, and actually useful to others. This is huge. I know I’m not alone when it comes to taking useless notes that I won’t understand soon after recording them.
If you value your time, please try not to learn about programming/web development/whatever WITHOUT coding.
The fastest way to grow and recall information is doing!