The worst professor I had at University once gave some great advice “by failing to prepare, you are preparing to fail.” Although, I think he stole that advice from Benjamin Franklin, so I'll still say they are the worst. But, the advice was solid and will be the core message for this post.
To set myself and hopefully others up to succeed, I’m going to show you how to build a plan for learning to code. I’ll show you what I am doing to stay motivated, what resources I’m using, the barriers I know I need to overcome and the structure of my plan.
Before I breakdown my plan for learning to code, I think it will help you to understand my journey. So you can see that anyone can start their journey no matter their past. Why? Because my past is diverse and I’m not letting that stop me from being who I want to be. So you shouldn’t either.
My Story
Ten years ago: Sitting in a lecture theater learning about creative writing, listening to that same professor.
Eight years ago: Sitting in a dull office, entering data into spreadsheets for a Fortune 500 company.
Six years ago: Career change one. Went back to University to do my Masters in Marketing.
Four years ago: Spending 12 hours a day at work consulting for massive companies and clients. I actually enjoyed this, but I was burning out.
Two years ago: I started at another Fortune 500 company marketing some of the biggest brands in the world. Less Excel more Powerpoint. I started dabbling in Python.
One month ago: Decided it was time to get serious about learning to code.
As you can see I’ve had a less than linear career. I’ve been in 3 different industries. Gone to University twice (for very different degrees). And I’m still not 100% sure what I want. But what I do know is that I want to approach learning to code seriously.
I’ve decided for now, to go down the self-learning path as it only requires me to invest time, not money and it lets me trial if I do enjoy coding. I have done some research on Bootcamps, and it is worth looking into if you know you want to make this your career. I may still pursue this avenue.
With all that in mind, let’s start looking into how to build a plan to successfully help you learn to code.
Step 1: Start with why
I’ve talked about why I’m learning to code and the reasons you should too. If you’re on the fence about learning I suggest you give it a read. Also, look at freecodecamps blog that has tons of stories on why people learned to code.
The first time I tried learning to code I didn’t have a solid why. I learned the hard way that not having a why can stall your progress. Your why can be to get a developer job, to make games or to automate jobs at work but make sure you start why and then build a plan. As learning to code will take time, you'll go through periods of low motivation and if you don’t have a solid why you'll stop.
There are no correct answers to why you want to learn to code. Everyone is different. So identify your own specific reason that will motivate you to keep going. A reason that forces you to ask yourself whether the actions you are taking are pushing you towards your goal.
My, why is I want to build products. I want to be able to quickly and cheaply build products that I can test, fail and learn from as I work towards creating a passive income. So I asked myself the following questions:
- What technology do I need to learn to build these products?
- Do these skills have longevity (will they allow me to keep up with the latest trends)?
- Do I want to be part of this community moving forward?
Once I answered those questions I could start planning my learning path, so I can move from tutorials and hand-holding courses to building my own products.
So, make sure you have a good reason why you want to learn to code.
Step 2: Identify your potential blockers to learning
If there is one thing I learned from my first attempt at learning to code, it is that I can be my own biggest blocker.
I never really felt like “I could do coding”. I thought that part of the world was reserved for special people with different brains to mine. If you’re in a similar place, hopefully this article helps you move past this barrier and towards starting your own coding journey.
Popular literature tells us there are two types of mindsets, fixed and growth When you believe you can get smarter, and you understand that putting in extra time and effort, can lead to higher achievement. You have a growth mindset. Whilst fixed is the opposite.
Previously I had a fixed mindset when it came to coding. I had built a narrative up in my head. I had been making excuses like I’m not smart enough or that I had already committed to a career change, a second change would put me back further in the rat race. Now while some of these thoughts might have been true, most of the assumptions I was making weren’t based on facts.
What I came to realize about being my own biggest blocker was I was worrying about all the wrong things. Things like this intimidating post on how to become a web developer. Or questioning whether my ideas were any good. When what I should have been doing is starting and finding out for myself.
I needed to block out my blockers. Sometimes that meant I had to not listen to my parents who wanted me to take the safe track. I had to vet my assumptions and I also had to realize others were doing it with no experience.
Ultimately what shifted my mindset was the book ‘A mind for Numbers’. This book's author Dr. Oakley went from a fixed mindset that she couldn’t do math to a growth mindset that if she broke the problems down and took her time she could do math. Now she has a PhD in Mathematics. Oakley used different techniques and tactics that I’ll write about later that helped her overcome her fixed mindset and will help me too. The key takeaway is that with the right mindset you can achieve whatever you want.
For me, the lesson learned was there is no perfect way to learn. There are no prototypical coders. Most of the things I was telling myself were myths. What you need are just two things. To start and to have a plan. With that in mind, I’m going to break down how I’m starting and the steps I’m taking to reach my goal of launching a product.
Step 3: The Plan
My goal of learning to code is to build things. Specifically, I want to build a chrome extension, a web-based simulation game and a runway calculator for people exploring coding Bootcamps. These are my big goals. I believe it is important to have big goals so you can track how you are progressing towards them.
By knowing my goals, I know before I can launch these products, I need to build the products. Before I can build them I need to learn how to build them.
Breaking your goal down into blocks.
I know my end goal, what I need to do is break that goal down into smaller chunks. So I have mini-goals I can work toward. So I did my research to know what I needed to learn to achieve my stretch goal. A simple google search and some reading helped me find this out.
My research led me to breaking my goals into technology chunks that I need to learn to achieve my big goals.
So if your goal for coding is to make a game, you would research the language you need to learn to make a game and what else you need to understand. So you might need to learn C#, how to animate sprites, how to add music and then how to test your game before you publish.
For my big goal, these technologies are my mini-goals. Within my mini-goals, I have set mini-mini goals to build projects to reinforce my learning. These little projects, I’ve just taken from what I’ve read about other people's coding journeys. For example, I’ve taken the idea of making mail sign up animations in the CSS stack from this post on dev.to.
Projects are a fantastic way to learn. They work for a few reasons.
- They test what you actually know vs. what you think you know.
- They force you to combine what you have been learning and to put it all together.
- No one is holding your hand, you have to think for yourself.
- They take you from passive learning to active learning.
So, before I can make my mini-projects I need to learn the basics of the technologies. So let me tell you where I will be planning on learning them.
Resources
After a lot of exploration and research, which was initially a blocker don’t fall into this trap just pick something and start, I’m going to use freecodecamp’s curriculum for HTML and CSS. It is perfect because it has all of the technologies I want to learn. It is also one of the most recommended resources and it’s free.
For JavaScript, I will be combining freecodecamps curriculum which has a strong focus on data structures and algorithms (important for job interviews). The other resource is Wes Bos's beginner JavaScript course as he is awesome at explaining concepts to beginners and his course is very practical, it has you building projects throughout.
Another resource I will be using is Wes Bos JavaScript 30, which is 30 JavaScript projects in 30 days and it is free. I won’t be doing all of them and have selected a few that interest me.
If you can’t find a linear website like freecodecamp, check out Udemy for a course that might teach you to make the product you want.
Now I have a plan and a plan is great. But, ultimately it comes down to putting in continuous effort.
Step 4: Finding time to continually learn (500 hrs…)
James Clear the author of Atomic Habits, believes goals are great but without a system to achieve them they are not likely to be achieved. So I will walk you through how I am going to build a system to achieve my goals.
Through having to learn as I changed careers, organizations, and Python I have learned the best system is often the simplest. So, the best system is to track your progress over time. Therefore, the system I will be using to track whether I am learning development every single day is hours spent learning. The reason I am tracking hours is that it easily lets me measure input.
Tracking input(time) rather than outputs(projects, getting a job etc.) also lets me see how much input leads to you achieving your outputs. Rather than just measuring my output without understanding how much effort was required to achieve it.
Specifically, the two areas I will measure will be total hours ~500 and days coding. Now, this number will differ from person to person so I encourage you to set your own. You can use my tracking sheet here, to track your own hours. By putting this target up it helps you realize the level of commitment needed to get there.
What I mean by commitment is the number of hours you will need to dedicate towards hitting your goal. For example, let’s say your target is 500 hours and you are planning on coding for 1 hour per day, well then it would take 500 days to reach your goal. From experience, I know that consistency is the key. That is trying to code daily is more effective than big blocks of say 10 hours, 1 day a week. Hence why I will be tracking consecutive days also.
Below is a handy table that helps you visualize and understand how the time you dedicate affects the time to reach your goals.
Let’s start with the reason for 500 hours, I decided on this number as the average Bootcamp runs for 12 weeks. I assumed 8 hours a day (7 days a week). This means you will be coding for 672 hours over 12 weeks. As I have some coding experience and don’t need the job search parts of a Bootcamp, I’ve reduced the total time to a nice round 500 hours.
I’m sure a lot of people reading this might be thinking, that sounds incorrect and that you don’t need that much time. That might be true for some. But, what I’ve learned from experience is input is equal to output. There are no shortcuts when learning to code. Despite what Google searches might tell you. There is a reason why Obama had a plaque on his desk saying ‘hard things are hard’. This process will take a substantial investment of time.
Now my numbers might not be accurate, I might get to product launch in less or more hours. Regardless of that, it is important to note that we set KPIs in our working lives all the time. Yet, we don’t often set them in our daily lives. We make loose statements like, I’ll start running more or I’ll eat healthier. By setting a KPI and measuring how much time I’m spending coding, I will have an objective view of my progress.
Thus, I am taking the 18 hours a week option, especially since as the time of writing this we are in quarantine due to the coronavirus. So I have a lot of time indoors the next few weeks. I will be doing 2 hours a night Monday - Friday and 4 hours a day on the weekends. I’ve created a habit tracker that I can log my start and end times and some notes on how I felt I went during that time.
What this ultimately means is I will be turning ‘me time’ from Netflix and chill into time to work on developing myself exactly as it sounds ‘me time’.
Step 5: Build your own Plan
I hope that my story has helped provide some inspiration for you to also take up learning to code on your own. Yet, I encourage you to build your own plan. Set your own goals and go after your why. Don’t fall into the trap of following others like I did the first time. Just because someone is telling you block-chain is the next big thing or you see an article hyping up data science does not mean you need to go down that path. You’ll be more successful in going after your why, than chasing money. As I’ve learned money doesn’t motivate me to study after a full day of 9-5 work.
Have a growth mindset, know that you can do it. If you put the effort in. Forget about what you know now, focus on what you’re going to learn to be the person you want to be in the future. Break your goal down, so it isn’t so far away or ambiguous. 500 hours sounds like a lot but 18 hours a week sounds better. Being a Web Developer is abstract, but learning HTML, then CSS, then JavaScript is much more manageable.
Focus on continuous investment and continuous effort. Know that at times it will be tough, but also know that you can get through it with hard work. Keep reminding yourself of why you're doing it and celebrate the successes along the way.
Finally, just start. This journey is going to be a marathon, not a sprint. I’m approaching it with the mindset that this effort will bring me opportunity and happiness.
A checklist for creating your own plan
To summarize the steps I’ve taken, to help you break down your own plan.
- Find your why
- Identify your blockers - vet them
- Set your big goals
- Break your learning down into chunks that work towards you big goals
- Set a learning plan to unlock continues effort
- Start
Final thoughts
It may seem like a lot of work to set up your plan, but as my professor said “by failing to prepare, you are preparing to fail.” So take the time and prepare by going through these steps to set up a plan for success. You’ll be better off in the long run.
I’m looking forward to hopefully sharing my successes with you. If you choose to follow these steps in building your plan and have any questions, please chat with me about it here. I’d love to see others' plans to see how I could improve my own.