zettelkasten 1 The fastest, most effective way to learn a new programming language any language “Systems are for people who care about winning repeatedly Goals are for people who care about winning on.
The fastest, most effective way to learn a new programming language - any language “Systems are for people who care about winning repeatedly Goals are for people who care about winning once” James Clear Copyright 2020 Introduction How this program is organized Section What is the Master Learning Method? Section Activate your Mindset Section Acquire Your Sources Create Your Plan Section Filter Your Sources Build a Knowledge Chart Develop Measurable Goals Update Your Plan Section Gather Your Tools Section Execute Your Plan Build Your Master Mind Map Directed Learning Testing to Find Gaps in Your Knowledge How to Take Good Notes Section Critique The Process in the Retrospective Section Bonus Section Bonus Section Bonus Section 3 Write this last You’re about to embark on an amazing, and sometimes frustrating journey Hook the reader Tell a story about the reader’s current pain Tell them what they’ll learn Describe the author’s background/origin 4.5 What this is and what it is not Set up the book with a call to action Introduction Technology is accelerating the creation (and destruction) of careers Data Science is the fastest growing technology field right now, but the professional title of Data Scientist has really only been around since 2008 (https:// en.wikipedia.org/wiki/Data_science) Think about it A high-paying career that touches nearly every industry is only 12 years old If you wanted to pursue a career in Data Science, four years of college may not be the answer Selfeducation may be the best answer A 2016 Stackoverflow.com poll reported that 69.1% of software developers appear to be self-taught Like most of the people that responded to that Stackoverflow.com poll, I’m a self-taught Web Developer I’ve learned by trial and error, practice, and a whole lot of reading, but no formal education Sure I went to college, but not for Web Development I’ve had a long career working for some of the most iconic companies in the US - all because I was self-taught Years ago, I started looking for a new role as a Web Developer, and kept getting passed over I had no problems in the interview process, but as a Developer, you’re often asked to perform some sort of coding exercise to show your knowledge Despite my years of experience, I failed the coding exercise almost every time Something was wrong with my knowledge I had to figure out what I was missing Being passed over for a role you felt you were perfect for is very humbling You start to question your skills Occasionally you’ll question your entire career You analyze every part of the interview process and try to figure out what went wrong Looking back on the roles offered to me in the past, I realized that in every interview that resulted in a job offer, I didn’t have to a technical skills test, or white boarding exercise I decided to look at what I knew and how well I knew it I realized there were a lot of holes in my skillset I needed to rethink the way I learned to code There’s a term to describe what I was experiencing It’s called “The Illusion of Competence” I had convinced myself that I was proficient in skills that I only read about I believed that if I memorized a few key terms, I could easily the work After all, I’ve been doing this for over 15 years now Needless to say, I was wrong I had to figure this out My career depended on it I needed to go back to the beginning It’s a funny thing about learning I was never taught how to learn We're taught in school reading, writing, arithmetic, science, computers, history, and a host of subjects, but rarely are we taught the best way to learn this information, let alone how to master it, or even retain it How you get the most out of a programming book? Clearly just reading it isn’t enough Memorization is good for vocabulary, but programming is much more involved than just reciting definitions of words You’re taught rote memorization in school, and even the critical thinking essays involve mostly just recalling facts I realized that the skills needed to be a programmer go much deeper than just learning information It also requires abstract thinking - the ability to take multiple concepts and combine them to create something new I decided to start with learning how to learn I spent years researching and experimenting with learning techniques I studied all the experts I mention throughout this program I read research papers, blogs, and gathered information from the 300+ books I have in my library This program is the result of that work, and I’m thrilled to share it with you What Makes the Program Different This program won’t teach you a new programming language This program is much more than just a tutorial I will teach you the fastest, most effective way to learn a new programming language - any language Whether you’re completely new to programming, or you’ve learned a language (or two), this program will teach you valuable skills in knowledge building The techniques mapped out in this program have helped me learn valuable coding skills that have landed me jobs that pay well over six figures I truly believe that if I just taught you JavaScript or Python, I’d be doing you a disservice This is probably the one tool in your arsenal that won’t be obsolete in a matter of months If you can learn new skills while excelling in your career, you’ll never be “obsolete”, and your skills will always be in demand Inside the Master Learning Method, you’ll learn: • Why your mindset determines whether you succeed or fail • Where to find the best free learning materials • The best methods for note taking • Apps and online tools to use to capture your knowledge • How to “deconstruct” a programming language so it’s easier to learn • Why just using memorization to learn is a waste of time • How teaching others what you’ve just learned is the best way to retain information • The best place to go for help when you’re stuck The Master Learning Method is the foundation for learning a programming language in the fastest, most effective way When you complete the program you’ll be a Minimum Viable Expert (MVE) in your chosen programming language An MVE has the “bare minimum” level of knowledge to be considered an expert on that subject This is your target performance level The path to become an MVE consists of phases: First we activate our mindset Once we’re in the right frame of mind, we need to acquire our learning resources Once we’ve gathered our knowledge sources, we focus on creating a schema for learning Now that we have a plan, we gather the tools we need to succeed Now the magic happens in the execution phase Finally, we review how effective our system is through a retrospective A note about affiliate links This program contains affiliate links It's a small attempt to modestly profit from a free offer Every program or tool recommended in this system is one that I personally have used and found effective Feel free to type the web sites into your browser if you don't feel comfortable using the affiliate links I won't be offended Section - Master Your Mindset “Begin with the end in mind” Peter Senge If you've ever taken a course or read a book on productivity or reaching your goals, you've probably heard that understanding your "why" is a powerful motivator Why you want to learn a programming language? Will it get you that promotion, or let you start that business? Will it let you finally be able to build that app you’ve thought about for years? Your motivation for learning this new skill or subject is the drive that will keep you going It's the fuel for your fire Your "why" is the anchor for the Master Learning Method - it's the cornerstone of your Mindset Why your Mindset is so important You may have heard the phrase "Growth Mindset" Experts agree that it's the key to learning new concepts, but what is a Growth Mindset, and why is it important to gaining knowledge? A Growth Mindset is the belief that people are are always capable of learning new things Our minds aren't fixed Our minds are created so that throughout our lives, new experiences will continuously change us and we will grow from them Embracing this concept is essential in 10 you’ll probably start to see some repetition of terms or concepts The more repetition you see, the more likely that concept is a major component of understanding that programming language The Benchmark/Exclude method Benchmarking is finding the common ways to which people learn a skill or subject, which can help you define a default strategy One thing to is to look at a curriculum used in schools to teach that subject It can be a syllabus from a class There are now free courses online offered from major institutions like MIT The site edX.org has a free course on JavaScript basics I used the syllabus to populate my Knowledge Chart Look for patterns and overlap - this will help identify major components of the topic 19 How to write code: syntax, semantics, and resource management The language's paradigm: object-oriented, functional, logic, etc The artifact ecosystem: how to build and run executables and how to use libraries Tooling: editors, compilers, debuggers, linters Develop Measurable Goals Now that you have some idea as to what you need to learn, let’s talk about goals and deadlines C Northcote Parkinson coined “Parkinson’s Law” that states, “Work expands to fill the time available for its completion” In other words, without a sense of urgency and a deadline, a task will last as long as you let it So we need goals and deadlines Your learning goals need to be specific and easy to measure So, can you be specific about learning a programming language that you don’t know? Clearly it won’t be an exact science, but with your Learning Roadmap you can see what lies ahead and block some time to work on it Timebox Sprints For most people, focusing on a single task for a long period of time isn’t easy I’m no exception I’ve developed a process that I call “Timebox Sprints” to help me focus and stay on task I take a piece of paper, or some digital method of entry and add the date, the time, a section for an objective (just a sentence), a larger section for “actions”, and a final section for “outcomes” (once again, just a sentence) The idea is simple State your intention in the objective section, something like “learn what a function is in JavaScript” Set a timer or alarm for 50 minutes Do whatever it takes to reach your objective Write down in the 20 “actions” section what you did In this case, you’d actually write about what a JavaScript function is You’d add any sources you read, or websites you visited You’d complete the objective When the time is up, you enter in a statement into the “outcomes” section Did you complete your objective? Did you reach your goal? Do you feel like you understand the objective? If yes, write that down If no, you have a decision to make Do you just need more time to reach the objective, or would another method be more effective This part is really a “gut” feeling If you’re not comfortable with the resources you used to complete the objective, perhaps you need to try other sources You can set up another Timebox Sprint to research the objective and find other sources of information Compare the new sources of information with the one you used Are there differences? Are there too many similarities? If there are, you need to keep searching If the source you’ve found seems like it’s written in a way you understand better than the first source, try reaching the objective with the new information Timing You’ll want to try to space out your Timebox Sprints The important thing is that you learn the objective and understand it on a level that an expert would know it That kind of understanding takes time You may even need to schedule another round of Sprints to practice some of the coding principles Remember, the Procedures in your Knowledge Chart are things you should know well enough that they seem to be almost second nature If you were asked to write a function, you should be able to type out the structure for a function with little to no effort What have we learned? 21 Section - Tools Section Overview Tools The tools you’ll need fall into categories Note taking tools Memory aid tools Programming tools Creation tools Note Taking Tools Evernote Bear Notion Programming Tools VS Code Eclipse Codepen.io Codesandbox JSBin.com Creation Tools GitHub.com 22 Hosting sites Medium.com - blogging WordPress.com - blogging Youtube.com - videos Tools like Trello are great for things like this, but the one drawback of Trello is the inability to show large blocks of text in the default view Speare is an app similar to Trello that is designed to support writing It has multiple boards like Trello, but each item in the board is meant to be large blocks of text Speare is also designed for writers You can take the contents of each board and compile them into a single text document What have we learned? 23 Section - Execution Section Overview Execution How to take good notes How to remember what you learn for the long term E is for Execution Now that you’ve got your Master Mind Map, and the tools you need to learn your programming language, let’s get to work Here’s where the bulk of the work will happen Becoming a Minimum Viable Expert (MVE) in a programming language means going through distinct stages Education experts have created these stages to guide you through the process of mastering a subject Remember Understand Apply Analyze Evaluate Create Now it’s time to take your Knowledge Chart and build your Mind Map Mind maps are great tools for brainstorming They’re also good for triggering memory recall That’s how we’ll be using it There’s many tools you can 24 use to create a mind map, but pencil and paper work also This is basically a visual representation of an outline Your subject is the “parent” and the “children” branch off of the parent Think of a family tree Your mind map can be any shape and the children can be spread out in any direction The Master Mind Map A very small version of the Master Mind Map I’ve created for Metalearning a programming language The program used was WriteMapper Metalearning - draw a map (Done) Focus - sharpen the knife (schedule time and milestones) Directness - go straight ahead 25 Drill - attack your weakest point Retrieval - Test to Learn Feedback - Don’t dodge the punches Retention - Don’t fill a leaky bucket (spaced repetition) - talentCards Intuition - dig deeper before building up Experimentation - step outside your comfort zone Methods for reading - retention and understanding Learning a programming language is a combination of focused thinking recalling facts, and diffused thinking - creatively solving a problem You’re literally creating something new while trying to remember key terms and processes from the language you’re learning That’s why having a system to learn a new programming language is essential - it’s much more than memorization The notes you take for reading should be added to your knowledge category chart you created before making your mind map Now it’s time to answer the question how you learn the language Remember, this process is for learning the language as quickly and efficiently as possible, so you need to know the different strategies you can use to achieve that Our first strategy is Directed Learning In Ultralearning, Directness is the main principle used to learn Directed Learning is the concept of emphasizing learning concepts closely tied to what you’re trying to achieve If you’re learning a language to write an app, you would focus on learning those concepts and patterns that would specifically help you 26 write that app Let’s imagine you are trying to learn to code to build an app Let’s say that app is a new concept similar to Facebook Your Directed Learning would focus on things like learning how to code user authentication, image manipulation, messaging, and user interactions like “friending” and other communications If you’re learning a language to start your career, you’ll use Directed Learning to learn the language while learning some of the common functionality you’d be coding You wouldn’t just learn how to connect to a database, you’d learn how to connect to a database and retrieve records and display them on the screen You’re going to learn the language faster because you’re not only learning basic terms and principles, but how to actually apply those concepts in a practical situation Directed Learning prevents the possibility of just learning things theoretically Just like there’s no shortage of information on learning a programming language, there’s no shortage of web sites that offer free skills tests In this part of the process, you’ll actually use those tests to your advantage to gauge your learning progress Remember, the key to effective learning is to be active in the process The online tests, and even the coding exercises you’ll find online and in the sources you use are essential in becoming an expert in that language Take them regularly If you have trouble on them, try to make note of what parts are causing you problems Go back and actively try to fill in those blanks The SQ3R method of learning from reading typically consists of steps Survey, Question, Record, Review, Recite We’re going to modify it slightly to support actively experimenting with the code 27 The first step is to survey or skim the book you’re about to read Take a look at the chapter names Read the back cover and jacket Read about the author You only need to take about minutes to this, but just by doing this you’ll have a good idea of the content The second step is to generate questions Take a look at each chapter and ask what the chapter is about Ask how the information in the chapter helps you learn the subject These questions should be documented in your note-taking system Now you’re ready to actively read Pay attention to the questions you wrote down and try to answer them as you read If there’s any new terminology you don’t know - write it down along with the definition in the Facts part of your knowledge category chart If the source has coding exercises, don’t just read them and move on The coding exercises are the work you need to to reach understanding The exercises are a jumping point for you to explore the new language and what you can with it As you’re practicing the coding exercises, you’re also working on items in the Procedures section Any new chunks of code you learn, you should add them into the Procedures section If you add comments to the code (you’ll typically learn how to add comments to code in the basics of the language), you can explain the function and what it’s doing Now you’re ready to “retrieve” You should try to think about the information you’ve learned as if you’re teaching it to someone else To truly master a concept, you should be able to explain the concept to a year old, a 15 year old, and a 25 year old in a manner that each can understand 28 Another method for learning is spaced repetition Spaced repetition is the simple act of reviewing information at spaced intervals Think flash cards As you’re writing down your questions and answering them, you could take those questions and put them on flash cards In the Tools section, I mentioned TalentCards TalentCards is a great service to create digital flash cards that also has the benefit of using spaced repetition Spaced repetition forces you to recall information long after you’ve first encountered it Increasing the space between repetitions as you go actually benefits cementing the information in your long-term memory One option for the retrieval process is to actively make videos where you teach the concepts Not only is it good practice, but you can refer to the videos later, and even post them to YouTube You could later refer to your YouTube tutorials in job interviews Blogging your progress is another way to be active in your education Once again, the benefit of blogging about what you’ve learned is that it can be a benefit in job interviews I once had a potential employer visit my blog and tell me that one of my articles helped cement the job offer because we shared the same philosophy on User Experience The final step is the Review Once you finish reading, try to summarize the key points of the lesson in your own words What have we learned? 29 Section - Retrospective The Retrospective The final step in the Master Learning Method is the Retrospective If you’re familiar with Agile Development you know about the Retrospective (Retro) In the Retro, we review what went wrong, what went well, what to start, what to continue, and what to stop Perhaps parts of the Method worked better for you than others Maybe you found other ways of taking notes These are all things to think about in your Retro If you document what went well and what didn’t you can use that knowledge to tweak the Method and make it your own Create fast feedback loops Bonus #1 By now you should have a solid understanding of at least one programming language In the bonus material, you’re given the blueprint to take what you know about this new language you’ve learned, and apply it to nearly any programming language You know all the basics of programming that are common amongst all languages You can take those skills and continue your path to greater knowledge Bonus #2 In the bonus materials you’re also given the blueprint to take the Method and apply it to any topic you wish to master You’re not limited to programming The tools and procedures in this program can be applied to learning any complex subject 30 Bonus #3 This bonus goes over the development concept of the Agile Methodology It will cover why it’s important to know, how it works, and what you need to know about it to land a job on a team that uses it What have we learned? 31 Conclusion 32 33