In some of my previous posts, I have mentioned the need for a good routine when it comes to learning code. But I want to take a moment to explain why a good routine is so important, and how you can go about creating one, which you actually stick too!
I will start by letting you in on a little secret. I have tried and failed to learn code a number of times in the past. Yes, I am not perfect.
Back in 2013, I tried to learn Web Development, that flopped. Again, I had another bash with C in the sweet summer of 2015. Guess what happen? Yes, another failed attempted.
Then, at the end of 2016, when my darling little boy came along, and I thought I would have another try. I soon realized the demands of a baby would force me into creating a good coding routine out of necessity. Otherwise, I didn’t have a hop in hell of finding the time to actually learning code.
And if you want to hear all about that experience you can check out my previous post.
This experience made me appreciate the importance of a great coding routine. You can learn and achieve anything if you are consistent. Being consistent will turn the unnatural feeling of writing code into something natural.
Take learning to drive as an example, on your first driving lesson you feel out of place and have to think about every little detail; the steering, the pedals, the clutch etc. But when you drive all the time you don’t have to think about any of that, it just comes NATURALLY.
That’s what you need and that’s what consistency provides. And the best way to achieve consistency is to have a great routine!
So how do you create the perfect routine?
Here’s a little warm-up exercise to get you started. Before you doing anything I recommend just taking a brief moment to assess your situation and reflect. By that, I mean addressing the things that may stop you from achieving your goal. Because these are the things that may throw you off your routine.
Take a moment to think realistically about the hurdles you may face, or even better, have faced in the past. Can you pick out anything that has or may cause you to fall off the wagon?
The reason I ask is that if you can identify, anticipate and accommodate for those initial hurdles you will be in a better starting position. In addition, it will also help you to build a routine that works for you.
As an example, if I look at my situation my biggest constraint is time. Working full-time and becoming a new dad saw my spare hours dwindle to basically zero. So I had to factor in my available time, this really forced me to think about when I could actually study programming.
You don’t just have to consider environmental factors, also think about yourself personally. Ask yourself how do you learn best? Do you need visual tutorials for example?
By asking these questions and taking a brief moment for self-reflection you are priming yourself for the very import next step. And that is your plan of attack!
I can pretty much guarantee you that any successful person in history had a plan for how they are going to achieve something. Whether it was a detailed document or a mental plan, they all have a clear vision for reaching their goals. That includes creating a great routine.
For the purpose of this post, I want to focus more developing a daily schedule, rather than a long-term plan.
However, I would strongly recommend having an overall plan for learning code. Something which sets out your high-level aims and objectives, and details how and when you plan to meet them. Plus any resources you intend to use. For me personally, just saying “I am going to learn code” didn’t cut the mustard as it didn’t provide any real structure. So I kept straying!
Your plan doesn’t have to be detailed, it just needs to provide structure, value and a clear vision. To help you build one I suggest checking out my post, The SECRET to starting your programming journey RIGHT
Back to your daily schedule…
At this point, you should have an idea of your various constraints and commitments, and you can start building a scheduled to work around them.
You can use various tools to help you create a schedule. You can opt for the basics of pen and paper, use your Google calendar, or even opt for an app such as Any.do. You may even just decide to keep to a mental scheduled. It really does depend on you.
Although, for the start, I would recommend creating something physical. Just until you cement your routine. For me, it was kind of a physiological thing. I discovered writing out my schedule made me more committed to it because it was something real and tangible to follow.
How you choose to create your schedule is up to you. If each day looks exactly the same you may not need all the bells and whistles, and a simple solution may suffice. But if you lead quite a complex life something more robust may be in order.
Of course, if you love technology, you may look for any excuse to use an app. I will say that tech has the added advantage of setting reminders and alarms, which serve as great prompts. Something good old fashion pen and paper can’t do.
Actually creating your schedule is fairly straightforward. You essentially just want to assign time slots to different tasks and activities you need to carry out each day or evening. If you need a guide feel free to have a look at my daily schedule.
Some quick tips to keep in mind…Be realistic with your time….And think long term.
You want to aim for consistency so don’t try and sprint to the finish. You will just be left burnt out and your routine will go down the pan.
Rather aim to do little and often, this will maintain your routine and also help build your programming knowledge. The worst thing you can do is leave gaps in your learning.
Full-time work and dad life means I am somewhat limited by what I can commit. And I have in the past pushed too hard with disastrous consequences. So I know the importance being realistic with your time. Getting there, in the end, is better than not getting there at all.
Finally, make sure to schedule downtime and fun. You need to give yourself opportunities to re-energize in order to stay productive. It also gives you something to look forward to. By actively scheduling downtime you allow yourself the tools to disconnect when you need to and remain focused when work needs to be done.
It’s all well and good creating a plan but the real issue comes when you have to stick to that plan! So, how do you do that exactly? Well, it’s simple, you just need to turn coding into a habit.
Habits are natural acts that we carry out without having to put too much thought into them. And that is precisely what you want when you’re learning to code. You don’t want to waste too much willpower just trying to force yourself to the computer. Because really, you’re going to need that willpower when your code won’t run.
By turning the act of sitting down and writing code into a habit you will make your routine easier to stick to, simply by turning it into a natural process.
How to building habits
On the basic level, habits are created through repetition. By doing the same thing over and over again it will eventually become a habit. So the first thing to embarrass is the mantra “code every day”.
This alone is probably the best piece of advice for a beginner. Not just because it will help build the habit but because the best way to learn anything is through consistent repetition.
Now the idea of coding every day may seem daunting. But don’t worry, there is a way to automate the process through the power of habit itself.
When I first started learning to code I read “The Power of Habit by Charles Duhigg” This book was recommended by so many people, who boasted its ability to build positive habits. So I gave it a try myself.
It offers a very simple explanation of how habits actually form. In essence, there are 3 key stages, which create a loop that nurtures a habit. When you understand these stages it will ease the task of building your own habits.
For me, my cue begins with me making a cup of coffee, plugging my headphones in, and doing a quick home workout. I guess you could argue that the cup of coffee is the cue, but this is all something I do in preparation so I like to lump it together.
The music puts me in the right frame of mind, and I find doing a workout takes less mental energy compared to coding so its easier to start my evening here.
My workout can be as simple as doing some push-ups. It’s just something to get the blood pumping. I find it fires me up, which is handy on those nights when I’m about to fall asleep on the sofa.
Next, is pretty obvious, I head over to my desk and get to work!
Finally my little reward. Appart from the satisfaction of a productive evening, I reward myself with a couple of biscuits. Yes, you read right, biscuits!
I am a bit of a biscuit fiend. I know it may not be the healthiest thing. But hey, I just did a workout so I am sure I can spare the calories.
For me though the big secret is music. I find music can change my state of mind. If I’m feeling particularly low energy than a great high-energy tune helps.
I suggest you have a little think about the cues and rewards you can put in place that might help build your habits.
Be aware that sometimes you do just need willpower. But hopefully, you will find building cues and rewards will make it a bit easier.
This might seem trivial and you may think it has nothing to do with actually building a routine, but I have personally found having a designated workspace makes a world of difference.
It really helps me to “get in the zone”. Maybe it’s a psychological thing, but when I am at my desk I mean business. I know that’s the place where work gets done. I struggle to focus working from the sofa or anywhere else. It’s just not the same.
Particularly when you have a child I feel this is a crucial detail. I love my little boy but I’m sure other parents can sympathize when I say, kids take over your home!
Honestly, sometimes it can feel like Toy’s R Us has just vomited all over our living room. It can feel a bit chaotic and overwhelming at times, especially when you’re living in a less than spacious flat.
So for me, having a little corner of the room that is my little domain is important. There I can focus.
You need to create your own programming domain, a designated “code den”. Technically this can be anywhere you feel comfortable, productive and able to work.
However, I’d would NOT recommend somewhere too comfortable, like a bed. If like me, you’re going to be grinding away at night, you’re almost guaranteed to fall asleep mid-code.
I’ve been there. I innocently thought nothing of it, until I fell asleep without realizing, and was woken up by a warm sensation on my leg. No, not what you’re thinking, I was just spilling my coffee. But I was lucky none went on my laptop!
One last piece of advice, tidy and prep your workspace at the end of each session.
I am not saying it has to be spotless, but it should be ready for you to be able to sit down and go the next evening. You don’t want to look over at your desk and think, “I’ve got to sort all that before I even start”.
Don’t create work before work.
The idea of having to spend time tidying and sorting before writing even one line of code is enough to put some people off. So just avoid it, and take a moment to prep your workspace for the next day. You have already done the hard job, this is a fairly easy and mundane task by comparison.
One of the big factors that can dismantle your routine is distractions. They are deadly!…to your routine.
Have you ever found yourself thinking, “I should have started an hour ago, ah well, what’s the point now, it’s too late”. And what do you suppose this biggest culprit is? MEDIA CONSUMPTION.
To be more specific, your TV, phone, tablet and games console. You probably don’t need telling that these gadgets are major distractions. An hour can fly by when you’re having a Netflix binge, scrolling through Facebook, or playing the latest online multiplayer.
Before I go any further, I am not saying you have to get rid of your phone, bin your games console or cancel you Netflix. You just need to minimize.
When your routine starts and your in “work mode”, go around and minimize those distractions. Turn off your TV, shut down any distracting tech, place your phone on the other side of the room. Just try to be proactive about removing and limiting temptation.
Don’t worry, I’m no saint! And this is still something I am trying to perfect. My biggest distraction is my phone, and like anyone else, I’m guilty of mindlessly scrolling through social media when I should be focusing. But I am getting better, and now I try to actively place my phone away from me.
However, my struggle comes when I want to listen to music because normally I use my phone. To work around this I have recently started listening through my laptop. That brings me to another distraction…THE INTERNET!
Luckily there are tools that can help. One I would suggest is StayFocusd. It is a Chrome browser extension which allows you to temporarily block yourself from any website. You can configure it to block certain sites and pages, as well as set a time limit.
This one is really just a quick tip that might help build your habits.
If you really struggle to get yourself in gear when the clock strike “work-time” try setting an alarm. Something loud and annoying that’s going to make you take notice. If it can get the adrenaline pumping already, great!
Having an extra nudge to get you started may just give you the kick you need. And it can also serve as a very useful cue to start your routine.
Although, just like the morning alarm it can be very tempting to hit the “snooze” button. To overcome this temptation you’re going to need some of that all-important willpower again.
You may find after multiple alarm bells you have cemented the habit and you can do away with the alarm. But it is really up to you. If you find it helpful and it doesn’t make you want to throw your phone across the room, then keep it.
I have waffled on about creating YOUR routine, but what about MINE?
Like many aspiring programmers learning to code, I currently work full-time in a job which is NOT related to programming. This means my coding routine has to be an evening one. And the real routine tends to start at 9.30pm.
Usually, by the time the baby has been put to bed and me and my wife have had some dinner it’s 8.30pm. Then I normally take an hour to wind down with my other half before I get to work.
This is the routine I set for myself and try to work to every single day. It does have some flexibility, I may swap over “Coding” and “Blogging”, or dedicate more time to one or the other depending on importance.
For example, if I feel I have neglected my studies and the blog is under control, I may spend more time coding vs blogging one night.
It’s important to know that this is a guide, while it’s what I strive for, every day may not be exactly the same. I may go for a run instead of a work out, I may read for a little longer or a little less, I may get so engrossed in code that I stay up passed 12:30am.
Then you have to factor in the unpredictability of a baby, who has no regard for my routine.
The important thing is to do the same stuff every night. That’s how your routine gets wired into your brain.
When your a parent and time is so tight I think it’s import to realize that you may not be able to stick to your times every night exactly. While I recommend setting times (just so you have a guide), don’t be discouraged if you can’t stick to them. Just keep hammering away until you find yourself doing the same things every night.
At the end of the day, as my good buddy Einstein so eloquently put it, time is relative. It doesn’t really matter if you start 20 mins late, as long as you follow your routine.
Like everyone, I have bad days and sometimes I may push myself a little too hard. But when this happens I take an evening to step back, prioritize and focus on completing the essential tasks. Then ultimately try to make sure I get an early night to recover.
I personally strive for a productive yet balanced life.
For me I think a successful routine comes down to 3 factors:
Learning something as confusing as programming can feel like an overly daunting task, especially when you are trying to learn on your own. But you can minimize the scale of the task by breaking it down and creating a PLAN! Now, I am not saying you have to create an extensive point by point action plan your boss would be proud of. But simply having an idea of what you’re going to do and how you are going to do it really helps.
You may be of the mindset that a plan is a waste of time. “I don’t need a plan, I will just do it! I will pick a programming language, gets some books and LEARN”, you might say.
You know what? I said the same thing a couple of years ago when I got my first programming book, Beginning Programming with C for Dummies. But I soon found this unstructured, “I will just do it” approach flopped.
That is not to say you can’t learn to program without a plan. You can, but you will find the journey is much smoother with one.
Luckily for some magical people, they can just get up and go. They are like a switch, the idea comes and they know exactly what to do. But for the rest of us mortals, it is not as easy, and the path isn’t so clear. That’s why having a plan is so helpful. It clears the air and lays out a straight forward path to follow.
As I mentioned at the start, you don’t have to write an extensive plan, and you can just plan it out in your head. However, I would recommend getting something on paper. This is because it will start turning your thoughts into action, and this is just one of the benefits. So what are the others?
I want to start by saying, DON’T SPEND AGES WRITING A PLAN. The plan is for YOUR BENEFIT so it just needs to highlight key aspects that YOU NEED. It doesn’t need explanations or fancy formatting, it just needs to be simple and to the point.
If you want, you can write your plan in Word, EverNote, Excel, or even just on an A4 sheet of paper. I quickly typed mine up in OneNote, just so I could view it or edit it anywhere.
You should also think of your plan as a live document. By that I mean, things are going to change as you progress, unforeseen circumstances will arise and stuff may warrant adding or amending. For example, your goal may change from App Developer to Web Developer, it may take longer to learn than anticipated, or you may even have a list of resources you’re adding to.
This is all the more reason for keeping your plan SIMPLE.
This is where you specify the language & skills you wish to learn, your main goal, and any objectives.
When specifying your main goal avoid setting a vague goal, like “learn code” or “learn Java”. While great goals, they are not very easy to quantify.
At which point can you cross out your goal to say “I know Java”? When you’re able to read the syntax? When you can write Java in your sleep? You see the problem. Side note – You don’t want to learn Java, you want to learn to program using Java. Knowing the syntax alone won’t allow you to create applications.
A more constructive goal would be to “build a video sharing app”. This goal gives more context, a clear target and it’s easy to quantify.
Now, for those of you with long term aspirations to become professional developers, by all means, include this as a goal. However, back it up with a medium term goal, like “creating a responsive client website”.
The reason I say this is because, at these early stages, these long term goals will seem so far off that it will feel like an abstract concept! You won’t really have a clear tangible vision to work towards like you would if your goal were to build an application. That’s why it’s a good idea to supplement this kind of goal with one that provides greater context and is within the realms of near term possibility.
I recommend setting a hierarchy of Aims, Goals, and Objectives. Your aim would be to become an Android Developer, your goal is to create a video sharing app, and your objective is to complete your Android Studio course.
Here is where you add deadlines for the goals and objective you just set.
I don’t like the word deadline, it seems so permanent, but where possible you should try to set absolute deadlines and stick to them. However, it is not realistic to say you should know exactly how long this journey will take. YOU’VE NEVER TAKEN IT BEFORE.
If you have never created an app, you are not going to know the length of time it will take to learn, let alone the time it will take to create one.
Therefore you should try to take deadlines with a pinch of salt. This is not a pass for laziness though! Don’t keep kicking that deadline down the road.
I just don’t want you fretting and spending ages trying to calculate the perfect deadline.
That said, there are times when you will have a better idea of the time it will take to achieve your goal. For example, if you are working through a Python course with 35 hrs of content, you can roughly work out the time it will take.
Just as the title says, “How” are you going to achieve your goal. In this section think about the resources you are going to use. In particular, are there any books you plan to read? And what platform will you use to learn? (Codecadmey, TreeHouse, Udemy).
As you progress you will find more and more resources. So it’s a good idea to build a list, which you can keep adding to and referring to.
You should also specify the amount of time you intend to dedicate to learning. I would strongly recommend spending some time each day. Really you should aim to code every day because this will cement your routine and get the code stuck in your head. You will see real benefits by fully immersing yourself in the code.
I understand not everyone will have the same amount of time. Some people have more commitments than others, but even dedicating an hour a day will add up. The important thing is consistency.
When you have a baby your life is no longer your own, and time and energy are very limited resources. However, by scheduling some time each evening after that wonderful little poop machine had gone to bed, I was able to learn. And more importantly, THE INFORMATION STUCK.
You don’t have to add this to your plan but it can be helpful to have a little reminder to keep you motivated. If your enthusiasm is starting to wane, reflect on why you started and it might just perk you up!
I touched on S.M.A.R.T goals earlier but I wanted to give you a bit more guidance.
Aka not vague! No, “I want to learn code”. Try and be as specific as possible. It needs to provide context and information so you know how to achieve it. Your overall aim can be vague…ish as long as your goals are specific to give you a clear understanding of how to reach them, and how they build to your overall aim.
This kind of ties into Specific and Time-based. Essentially, you need to have some way of measuring the goal so you know exactly if and when you have achieved it. For example, goals like, completing a Java course or building a website are very easy to measure.
Usually, this refers to all parties agreeing on the goal, but as it’s just you this one is simple. Just be decisive and have conviction in your goal.
Set incremental goals, within a reasonable time frame. Don’t go saying “I’m going to build an app that uses machine learning in a month” when you don’t know any code. This is a bit of an exaggerated goal, but it’s just to illustrate a point. Start with a goal to learn the basics and move up. Setting ridiculous and unrealistic goals will just leave you demoralized and frustrated.
You may hear stories of people learning code in 6 weeks and getting a job. But remember, we are not all in the same boat. Some find it easy to learn, some have good connections, some have more time. You know what’s realistic for you.
However, don’t sell yourself short. Dream BIG, but layout realistic steps that will eventually lead to that dream.
Make sure your goals have deadlines! Otherwise, you will have no sense of urgency and your goal will just roll down the road like a cliche tumble weed scene. Try to add specific dates where possible or at least the month and year.
Resist saying 6 weeks or 5 months. You may end up miss remembering your start date and subconsciously extending your deadline. Or by counting weeks you may discount self-proclaimed “bad” weeks, and find yourself saying “that doesn’t count, I didn’t really code that week”.
By saying June 2017, you will find that when you have a “bad” week you will work harder the following week to make up for the lost time.
There will only be 3 main reasons your plan goes awry.
When you miss your deadline rather than going into despair, ask yourself, which of the 3 reasons caused me to miss my deadline.
It can be a hard pill to swallow. But again, don’t despair, ask yourself “why?”. Did you lose motivation? Did you have a solid routine? Or are you having doubts?
Once you know the answers then you can set about tackling the problems. Maybe research techniques on motivation or building will power, or try implementing a different routine.
There are some great books and resources out there, which can help. One book I found really helpful was 7 Habits of Highly Effective People. I also tend to watch videos by Thomas Frank, he has some great tips on his YouTube channel. If you stay tuned I may even consolidate some of these resources into a post!
When you’re new to a subject, field or discipline it is really hard to form realistic expectations, and that’s not me pandering. You just don’t have any prior knowledge to base those expectations on.
So, in reality, the chances are high that you will set an unrealistic target. However, as you start working towards your goal, you will begin to build a more realistic picture. When this happens, there is no shame in adjusting your goal.
When I started I signed up for a Java course with 60+ hrs of content. I then sat down and worked out how long it would take me if I did X amount of hours a night, which I then used as the base of my goal. I soon realized that 60 hrs of content DOESN’T mean 60 hrs of work! The number of times I replayed videos and when back over concepts was insane.
Keep in mind that things don’t always go to plan. No matter how hard you try you can’t predict the future.
When unavoidable things get in the way there is only one thing you can do. Shake it off and go again!
I recently had the flu, and normally I would just power through. Although, I have never had the flu before, and DAMN, that wipes you out! I couldn’t really do anything for a week, which put me behind.
As demotivating as this was, I had to chalk it up to one of those things and push it out of my head. That way I could focus my energy on getting back on track.
A plan can really set you off on the right foot so make sure you take the time to create one, but not too much time. Keep it simple and focus on WHAT you are going to learn, WHEN you are going to learn it by, and HOW you are going to learn it. Also, make sure your goals and objectives are S.M.A.R.T so they are valuable and productive. Finally, don’t worry too much about not sticking to your plan. The chances are you will get derailed at some point. But just ask yourself why? Then, find the answers and jump straight back on the horse.
Thank you for reading, I hope this post has been of some help and good luck with your plan!