Preparation for Learning  Learning to code takes more than just a creating a curriculum to follow. This chapter will guide you through preparing systems, set- ting aside time, and organizing your digital and mental space for learning to code.  Time Calculations How long will it take to learn to code? That depends on many factors, including what you are trying to learn, where you are starting from, your ability to focus, your ability or willingness to network, and how much time you can spend every week. One thing to remember is that there is no definite amount of time to learn. Books or courses that say, “learn this language in 24 hours” or “become an XYZ language developer in one month” are laughably unrealistic. You must go at the pace that you can han- dle while creating a solid foundation of programming skills for yourself. Take your time and learn the fundamentals well– it will pay dividends. The first step is deciding how much time per week you can allot to your learning. Consider that you will probably need 700- 1000+ hours of total learning time to become proficient enough to get a job, so if you study roughly 20 hours per week, it could take about 9-12 months to land your first role. Once you calculate the hours, break it down and compare it to your original timeframe for reaching your goal, then ask yourself if that is reasonable or not. You might have to adjust your hours accordingly. Next, take out your calendar and block off that time in your weekly schedule as the “no matter what, I am doing this” time, and structure it to suit your needs. You could block off a few hours per day, or do longer chunks on your days off or during the weekend, or both. If you cannot spend at least 10 hours per week studying and coding, it may be very difficult for you to become skilled enough to land a job in a reasonable amount of time. I am not trying to dissuade you from learning if you have less time to spend, but I want to help you set your expectations correctly. If this is something you really want to do, you will make the time. I know parents who worked multiple jobs who taught them- selves to code, and know that you can too, no matter what your situation. When I started, it took me years of dabbling to finally focus my efforts and commit to what I wanted to do. Once I dedicated over 20 hours per week studying, my career took off very quickly.  Note-taking It can be incredibly helpful to take notes while you learn so you can document your “aha” moments and keep track of what you are learning so you can review it later. Coding involves many complex processes, and without regular review, it is difficult to retain all of the concepts. You should take notes as you learn in just one place. Many students have both paper and digital notebooks with notes in each of them, which can make it extremely hard to stay organized. To get the most out of your time, I would strongly recommend keeping a digital notebook where you can sort and search entries, and store relevant links like video tutorials and images such as diagrams or screenshots. Here are some digital note-taking option:: •Evernote – cross-platform, great free tier •Bear – Mac only, $1.99 per month, very easy to use, beautiful interface •Joplin – free, privacy-focused, cross-platform Another option, and what I have been using recently, is using a tablet with a pen like an iPad or Surface pro. These allow you to handwrite notes, organize them into folders, and still search through text. I also like that tablets make it easy to draw diagrams and illustrations while I am writing, so it’s the best of both worlds.  Spaced Repetition Learning This is an optional step, but can be a great addition to note-taking. Wikipedia’s definition of spaced repetition is “a learning tech- nique that incorporates increasing intervals of time between subsequent review of previously learned material in order to exploit the psychological spacing effect.” This concept consists of sets of digital flashcards that are shown to you more often if you are struggling and less often if you are getting them correct (you self-select if you got the answer correct, of course). When I was starting out, I felt overwhelmed by the material, and spaced repetition learning helped me immensely in retaining the information I was learning. It especially helped me during interviews when I was asked about my understanding of techno- logical concepts and terms. I even surprised a few interviewers with my compelling verbiage. There are many spaced repetition learning programs and apps, so find the one that works best for you. These are the ones I have personally tried and recommend: •Ankiweb (ankiweb.com) •Mem.dev (https://mem.dev) One great thing about these flashcard decks is that they are shareable. If you create decks as you go, go ahead and post them on- line for other people to learn from, too. It is a great feeling to be able to give back to the community even while you are just starting out.  Planning Sessions To stay on target, you will need to have periodic planning sessions throughout your learning process. I personally use the method- ology from the book, Getting Things Done by David Allen. He details how to set aside time for weekly and monthly planning, as well as clean up your to-do lists. If you do not want to read the book, here is a simple breakdown of how to effectively plan. 1.Block out a time every week when you know you will be available and without distractions. It usually takes me about an hour to do my planning, but you can adjust the time depending on your preferences. 2.Each week, you should look at the list of things you have to learn and plan what you are going to try to accomplish for that week. 3.Throughout the week, you will come across many concepts you do not understand, topics you are interested in, or other random to-dos. Instead of letting all of these ”extras” distract you, write all of them down in an “inbox” in one of your digital notebooks or list apps.. During your next weekly planning meeting, you will want to review these inbox items and put them on your to-do list for the week, toss them, or put them in a ”someday/maybe” pile. 4.If you have monthly planning sessions, that is a good time to go through the ”someday/maybe” pile.  Study Sessions Every time you sit down to study, you should already know what you are going to be doing according to your plan, which is a huge time saver. It can easily take 30 minutes or more to get your mind in gear and figure out what to work on if you have not planned properly, and that could be an extra 3.5 hours each week you could have spent studying. Planning is important at the beginning, but when you are wrapping up each session, it can be very helpful to keep a short project log. This log is the place for you to jot down a few short notes about what you worked on that session, any struggles you had, and where you left off. This gives you peace of mind so you can close all of your tabs in your browser and your mind without worry. Your project log will be there the next time you sit down to code and you can pick up right where you left off instead of spending extra time reflecting and trying to remember exactly what you went over the last session. If you are a tab hoarder like me, it might be useful to create a bookmarks folder for coding and then use the option ”bookmark all tabs”, which is available in all modern browsers. You can use this method to save all your tabs in a bookmark folder arranged by date or topic for easy reference later. Study sessions can be any length of time, but it is best to make them at least an hour long to account for ramp up time – things like setting up your computer, opening the right applications, getting in the zone, etc. If you have less than an hour to spend, it might be better to catch up on your backlog of articles and videos, or go through individual challenges on sites like freeCodeCamp and Code Wars. While you are studying, it is extraordinarily important to stay focused, which can be challenging knowing that distracting web- sites are just a few clicks away. If you find yourself getting distracted while you are studying, try using a browser blocker plugin like StayFocused (Chrome) or LeechBlock (Firefox). You can set the amount of time you want the distracting websites blocked for, and even schedule weekly block times. Some of the websites I regularly block are social media sites like Twitter and Facebook, email clients, and forum sites like reddit. If you find yourself heavily distracted by apps as well, I recommend trying out Freedom – which is what I currently use – that blocks apps and web traffic across all of your desktop and mobile devices. If you have trouble focusing, I highly recommend reading the book, Deep Work: Rules for Focused Success in a Distracted World, by Cal Newport. He tells about his personal journey to learn to focus and gives practical advice for building up the amount of time you are able to focus for. Having the capability to focus for several hours at a time – sometimes called “being in the zone” – is extremely important as a software developer. You will be trying to solve technical problems in creative ways, which is not easily done when you’re unfocused. TIP: Timers and the Pomodoro Technique Motivational speaker and productivity guru, Mel Robbins, has a wildly successful campaign called ”The Five Second Rule” where she encourages people to simply start counting to five every time they do not feel motivated to complete a task. Why is this simple act so popular and successful? Because timers work. Research shows that if you do not feel like doing something, you can start a timer for a few minutes, and once the timer finishes, you are almost guaranteed to continue working on or finish the task at hand. This works because you see results which give you a rewarding feeling in your brain along with a renewed sense of motivation, thus, making you want to keep taking action to receive more positive stimuli. The Pomodoro technique is a method of setting a timer for a certain timeframe, traditionally 25 minutes, and then taking a break for a shorter amount of time, usually five minutes. Forming a habit where you are focused for an amount of time, then take a break can lead to increased productivity. You can play around with the amount of time to see what’s right for you. Personally, I used to set my work timer for 50 minutes and the break timer to 10 minutes. Now that I have an Apple Watch, it goes off every hour to remind me to stand up and walk around so I only use my timer for work and I never stop it until I’m done or need a longer break. If you search online for Pomodoro timers, you will find plenty of options that you can use for free. Digital Organization You will find out quickly that you need to have folders on your computer for photos, code files, and related items. It is good to come up with a labeling system and naming conventions for your folders and files in the beginning so you can easily navigate them as you go. I have one master folder where I put all my coding projects called “code”, and have various trees of subfolders for different types of projects and computer languages. I also keep client work separate from personal projects. You can create whatever file structure works for you, just make sure to do it early on. It is also a good idea to schedule time every week to look over your notes and clean up anything that is out of place or irrelevant.  Motivation When aspiring developers go back to school or enroll in a coding bootcamp (and spend a lot of money to do so) that alone can be enough to motivate them to study and persevere. In a more formal program, they will usually have a mentor there to push them along, but in the case of self-learning, however, you may need extra help staying motivated. Here are some suggestions: •Keep your goals and ”reasons” where you can see them often. This could be near your study area, on the fridge, or writ- ten on a greaseboard.. I had sticky notes all over my apartment to keep me focused on my goals while I was learning. •You can make friends with people who are also learning by going to your local coding meetups, or finding online groups to participate in. Some really good ones are freeCodeCamp (local meetups and awesome online community), Girl Develop It (yes, it is for guys too), and Coder Newbie (online community). I link these and many more in the re- sources for this book on my website. •Don’t do it alone! Find a group or an accountability partner in one of the previously mentioned groups. You can check in on each other asynchronously so you do not have to schedule meeting with each other every week. The important thing is consistency. •Announce what you are doing online to help keep you accountable and working through times when you want to give up. •Put some money where your mouth is. Pledge to donate a sum of money if you fail to meet your goal or sign up for an accountability app that will donate your money for you. Money is a great motivator but it doesn’t have to be just cash: it could be a chore or anything else depending on your circumstances. •Read the suggested materials in the motivation section on my website when you need a pick-me-up.  TIP: Avoiding Burnout Psychology Today defines burnout as, ”a state of emotional, mental, and often physical exhaustion brought on by prolonged or re- peated stress.” Burnout is when you feel drained and lethargic, like you cannot continue. Sadly, this is a very common occurrence in programming so do not feel like you are alone if it happens to you. If you do start to feel burned out, I recommend that you take a step back and review how you are spending your time. If you are overworking yourself, put some parameters in place to achieve better balance depending on the root cause of the burnout. If the problem comes from coding problems that you are struggling to solve, take a break from that and work on a different activity. If you are building an app for example, start working through some coding challenges like the ones on HackerRank or reading some cod- ing articles. This will offer you the opportunity to mentally distance yourself from the frustrating situation, but still be able to im- prove your overall knowledge and coding skills. Feelings of burnout should be taken seriously and handled appropriately, or your mental health and ability to stay focused and motivated will suffer. Some other tactics I employ when I feel burned out is to schedule walks throughout the day where I focus on my breathing and leave my phone at home. I also like to watch motivational videos – especially Arnold Schwarzenegger ones on YouTube – to help me regain my drive. Unless you make the decision that coding is truly not for you, keep learning and persevering, even if you need to slow your pace. If you get burned out and do not handle it properly, then you might quit learning to code before you have given it a real shot, which I think would be a tragedy. Conclusion Start off with some simple planning and organize your notes system, inboxes, etc. and do not feel overwhelmed by the amount of preparation and material to learn. Do not forget to participate in the community and read through the motivational resources on my website, or reach out to others when you need some encouragement. Action Steps:  1.Calculate the total amount of time needed. 2.Figure out where and how to take notes. 3.Use spaced repetition learning. 4.Schedule planning and study sessions. 5.Use motivational techniques when necessary.