Research & Planning  “If you fail to plan, you are planning to fail.” Benjamin Franklin As I’ve stated previously, you need to have a learning strategy and well-developed plan before you start programming. One of the top reasons why people give up on their coding journey is from failing to plan their pathway. This is precisely why it took me years to buckle down and get to the point where I was hirable as a developer. Please learn from my experience and take some time to map out your path first. This chapter will cover some basic steps you should take before putting together your curriculum and diving into the code.  Step 1: Finding Your Why Knowing why you want to learn programming is the first step in your journey. You might be thinking, “That’s easy! I want to get a good job and make lots of money.” While those are great goals, those reasons alone lack emotion, and feelings are what drive our ac- tions. You need to take a step back to figure out what is beyond your mission-oriented goals to discover your real motivations, be- cause that is what will keep you going when you want to give up. Simon Sinek, author of Start with Why and Find Your Why, recommends that in order to find your ‘why’, you should ask yourself lots of ‘what’ questions instead of ‘why’ questions because they are easier to answer. Try starting off with the following questions: •What gets you out of bed in the morning? •What makes you want to be a software developer? •What kind of life do you really want to live? •What would your ideal day look like when you are working as a programmer? Every time you write an answer, you should naturally come up with more questions. Keep going until you start to uncover the emotions underlying your reasons. This process should take less than 30 minutes if you are completely undistracted. If you are a creative or crafty person, you may want to create a vision board to remember their why. Or, you could do what I did and create another version of this where I hung a motivating picture on my fridge or next to a quote and a list of my goals and why statements. I like the simplicity and constant visual reminder of my intrinsic motivations and what I want to accomplish. Please do not skip this step! If you do not do this now, you may find it challenging to communicate your purpose or goals to oth- ers when you are looking for a job or stay motivated in the long term.  Step 2: Industry Research To get to the point where you are fully ready to set goals, first you need to do some research on your own. The purpose of this step is to help you understand what types of jobs are available and what technologies you will need to learn to get hired for one of those jobs. Job markets can vary by location and company type, so learning one set of technologies is not right for everyone. First, start writing down some information that you already know about your wants and needs in a job position. Here are some good questions to get you started: •Where do I want to live (if open to relocation)? •How far can I commute? •What salary and benefits do I want? •What are my ideal work hours? •What kind of environment do I want to work in? •Is there a vertical I am drawn to in the tech industry – mobile apps, websites, etc.? •Based on the information in Chapter 1, is there a certain company environment I would prefer working in? It may seem trivial to write down things you might already know in your head, but, from my experience, this is a very important step to help you realize what you actually want out of a job. Be sure to distinguish the job factors you want to have from those that are non- negotiable. Once you have the above information, you can start to research and find companies that come as close to what you want as pos- sible. How do you research for these jobs? Use whatever job websites are popular in your area. Here are some ideas to start with: In- deed, Glassdoor, LinkedIn, Github Jobs, Stack Overflow Jobs, government job boards, and language or technology specific job boards (e.g. Vue Jobs). If you know of any companies in your area, you can search their websites’ career pages for postings as well. You can also attend local meetup groups and ask other professionals in your network about which technologies are the most in- demand in your area, but take these kinds of recommendations with a grain of salt. Individuals are usually biased towards the spe- cific tech stacks that they work in. What terms should you be searching for on these websites? Words or phrases like software developer, web/mobile developer, software engineer, and programmer. Look at the job details and bookmark or save links to any jobs that fit your criteria. Do not worry if the requirements do not match your current skill set or years of experience the purpose of this exercise is purely for re- search. As you dive in, seek out positions that include the word “junior” and skip over any that say “senior” or “lead”, they might have specialized skills that you will not need to learn until later on in your career. Once you have a solid list of positions that interest you, highlight the technologies, languages (Python, JavaScript, C#, Swift, etc.), and any relevant terms that are listed in the job details or requirements section. You will see that there are several commonalities be- tween most of the job postings. Now, take a look at the Stack Overflow survey (the current one is from 2020 – https://insights.stackoverflow.com/survey/2020#technology-programming-scripting-and-markup-languages-professional-developers) and compare the languages you see on the survey. Most of them should be on that list. If any language is not on the Stack Overflow survey, or is at the very bottom, I recommend removing it from your list. In that case, that particular language is very likely com- pany-spe-cific and will limit your job options if you pursue learning it. You can do the same thing to narrow down your choices of frameworks, tools, and databases: go to the link above and replace the hashtag and words after it with, #technology-web-frameworks- pro-fession-devel-ers2,ers2, #technology-other-frameworks-libraries-and-tools-professional-developers3, and then #technology- databases-professional-developers4. Keep removing any of the less popular tools and technologies from your lists until you are left with a few items in each category. Once you have your chosen few languages, take note of which ones you saw the most often in the job postings that fit your cri- teria. Write down the number of times next to each item if you can. These lists will be the basis for your curriculum.  Step 3: Goal Setting The third step is to write out your goals. You do not need goals for your whole career, but you do need an idea of what type of job and company you are looking for so you can customize your learning and portfolio accordingly. After reading the previous chapters and doing some of your own research, you should already have the information you need to write out your goals. It is very common to change your mind as you try out different types of programming and figure out what you like to do. As you learn more, your goals will likely evolve and change over time, and that’s okay! The most important thing is that your goals align with your ”why” statements.. When thinking about your goals, consider your answers to the following questions: •What kind of apps do you want to make? •Do you want a job in the industry or work for yourself? What kinds of things are you passionate about: education, cut- ting-edge technology, robots, fashion? •How much money do you need to make? •How many months/years do you want (or need) to accomplish this? You should review your goals every time you feel unmotivated to study or experience any other of coding’s many frustrations. From my experience, many people consider giving up from time to time and remembering your goals and your ”why” – or having someone else who can remind you of them – can be what keeps you going. For me, there came a point in my life when I knew that I was fed up with myself and my situation enough that I was going to achieve my goals no matter what. I let the people close to me know what I was setting out to do and I felt accountable to both myself and them to pull through. I had a bad track record of quitting in the past, so I made it a point to set goals and broadcast them on my blog and elsewhere to help me persevere. With where I am now, I am so happy that I did.  Step 4: Choose a Stack It is time to choose a tech stack! What language, frameworks, and tools do you want to start learning? Your mission as learner is to become as much of an expert as possible in one tech stack: Learn one programming language, two frameworks, one database (if you are not learning only front-end), and whatever tools are necessary to build apps in those frameworks. For example, if you are going to learn Python, then you might want to choose to learn Django and Flask as your frameworks and Postgres as your database. If you learn full- stack JavaScript, you might choose to learn Vue or React as well as Node.js with a standard back-end framework like Express. If you only want to focus on the front-end, then you could learn both Vue and React and dive into some UX and layouts instead of a database. Which one should you choose? You will have to ultimately decide that for yourself, but here are some tips I have compiled from my experience: Mentorship: If you are one of the lucky ones who already has friends or family who are willing to help you learn, then sometimes the best option is to start learning whatever language and type of development that they can teach you from their experience. For example, if your cousin is a C# developer and willing to teach you how to code, then pick up C# first. You will receive invaluable training from a professional who works in C# every day. Specific Goal: If you are in the group of people who has a specific goal in mind, such as, ”I want to build mobile games,” or, ”I want to learn web development,” then you should learn the most popular language and tools to help you achieve that goal. For some types of games that means learning iOS’ Swift or Android’s Kotlin or, maybe, C# for PC gaming. Freelancing: If you want to be a freelancer for anything beyond simple websites, I recommend that you work at a tech company first for at least a year. This will give you real-world experience in how tech is used and it will be much easier to build client projects and find better clients to begin with. Also, I recommend taking a freelancing course, like one I took by Real Tough Candy. (I am not sponsored, but I have gone through her freelancing course in the past). Remem- ber that freelancing is language-agnostic. You can learn any language and tools to be a freelancer, and will become an expert in whatever area of development you choose. Job Market Demand: You may be fortunate enough to live or have connections at certain companies in an area that has a shortage of a certain type of developer, like PHP, C#, or something similar. This is may be music to your ears and could be a good opportunity for getting your first development job. If you decide to base your learning on what’s in de- mand, make sure that the programming language and tools you are learning aren’t too niche. That might cause prob- lems for you if you end up having to broaden the scope of your job search. Always try to learn a general purpose, popular language first. It will provide you with your greatest chance of success starting out in the industry. Other: If you do not fall into one of the above categories, here’s my advice for you. Based on experiences of members of my coding group, my own countless hours of research, and trial and error, I recommend learning the language JavaScript first. It is, compared to many other languages, easy to learn, versatile, and includes a wide range of job op- portunities from building mobile apps to full-stack web development.  Benefits of Learning JavaScript & Web Development First “Any application that can be written in JavaScript, will eventually be written in JavaScript.” Jeff Atwood, codinghorror.com Because I just recommended JavaScript, I want to cover some of the reasons why. Like I mentioned above, there are a lot of pro- gramming languages and a lot of people who will tell you to learn one over another. Comparatively speaking, most of them are not better or worse than one another, they are simply different. With a barrage of competing opinions, it is not easy to pick just one, and, if you heed everyone’s advice you will get nowhere. In case you weren’t convinced, here are some facts about JavaScript: Popular: For seven years now, JavaScript has been ranked the most popular programming language in the world by a wide margin (source, Stack Overflow Developer Survey 2019). – Note: I’m only comparing JavaScript to other general purpose, standard programming languages. Versatile: JavaScript is really ubiquitous now. It is popularly used for building web, mobile, TV, and desktop appli- cations and for server-side development with Node.js. It can also be used for building various IoT devices, for smart homes, automation, robotics, etc., and you don’t have to be good with design to learn JavaScript, although that option is available . Beginner-friendly: It is one of the easiest languages to learn as it abstracts a lot of the complexity of what goes on inside the computer (memory, threading, etc.) away from you. On top of that, you can use it right away in simple web pages and see your code run in the browser, giving you instant feedback that can help you build your confidence and better understand how the code works. Community: JavaScript has a massive community comprised of millions of people from all over the world. It is the largest and most active online community according to Github’s yearly report, providing you with extensive learning materials, mentors, and other resources. Jobs: Every company that does anything with the web uses JavaScript, which is virtually all of them! Most companies that use Python, PHP, Java, and other languages also use JavaScript.. According to Indeed, the world’s largest job search platform, JavaScript is the second most hirable programming language (this information is based on 2018 job search re- sults from Indeed.com). Once you learn one language, it is much easier to learn the second since you already know the concepts of programming. I used front-end development with JavaScript as an entry point into the field and then moved on to programming various types of appli- cations in several different languages. I eventually wound up doing machine learning and working for a blockchain company. There are many companies that will hire you as long as you have experience in any language, regardless of what their in-house tech stack is. I want to reiterate that this book contains a roadmap for people learning to code and is language-agnostic. If you choose to learn a different language and other technologies, that is totally fine, just do not waste time wallowing in indecision. Pick a language and ecosystem and stick with it. Learn, get a job, and then set a new goal.  Conclusion Action Steps: 1.Write down your ”why” and put it somewhere you will see it. 2.Do some industry research. 3.Use that knowledge from your research to set goals. 4.Choose a tech stack to learn.