Because SMART just isn’t clever enough
Everyone knows about SMART goals right? No? Specific, measurable, attainable, the other two which no one can ever remember off the top of their head. Smarter takes it one step further for a system of learning which is efficient at its core and proven to yield results.
“S” is for Specific.
“M” is for Measurable.
“A” is for Attainable.
“R” is for Relevant.
“T” is for Time-specific.
“E” is for Evaluate. Sometimes goals will change from time to time. Constant evaluation of your goals is essential to reaching your goals.
“R” is for Revise. After evaluation, you should re-do the goals that need changing and continue the SMARTER goal-setting process.
How would this work for learning to program then?
Specific regards the end result. What do we want to achieve from the learning specifically? It would be no good to say for example “I want to learn how to program.” It is too broad and too much to achieve and as a result makes it almost impossible to know when you have succeeded. Sure we want to be able to program, but when can we say that we have the ability to program effectively? To put this into context imagine if someone were learning an instrument: it would be silly to say I want to learn an instrument, what level do you want to learn to? It is a simple question but one which is often neglected. So there are two possible goals you could choose to adopt. The first is to have the goal of learning an instrument to a certain grade, this works too with languages and most other formal learning. For programming, the only formal education level you might find though would be university grade submission. “I want to learn programming to a passing grade level of a computer science graduate student.” It is not so easy to get a syllabus or have a context of our grade in this case, but it is not impossible. The second way to assign a specific goal would be to give ourselves something which we would like to be able to create, a website with a fully automated backend web app which users can use to do X, Y, and Z for example. Again it is very specific, and there is a definite end result to reach, this is important to begin with, as it helps with motivation and rewarding yourself in the interim of learning.
Measurable helps as you need to see progress and also when you are not doing too well. This is why the growth of online learning platforms is such an incredible advancement to lifelong learners in any field. How you measure your progress is important as it helps you to know both when you have learned a particular part of a skill and what you might need to revise and learn further. In any case, we need to build our learning path to include factors which we can test out on, to check we really understand the material. It is not beneficial to cheat your way out here, if you find you cannot perform a certain part of the code, then you should check that you fully understand the parts leading up to this. Cheating will only lead to much bigger problems later on.
Attainable, if you are cheating, then you are finding your current track is too hard. Learning and effort are actually naturally going to be working against your own tendency to want to stop and look for an easy way out. You need to set your learning goals at a level which is demanding enough not to be boring, but not so hard as to feel impossible. You need the little wins throughout to keep motivation and release the endorphins that make the process that much more enjoyable. If the goals are too low though, the sense of achievement is not there, and it can actually work against you in the long run.
Relevant again makes sense. Learning topics that are relevant to the specific end goal. There are a lot of things which you could learn about any particular topic, which is great when you want to become an absolute expert in a subject. To stay on track and learn programming, we need to condense what we are learning into relevant topics which will eventually lead us forward toward the goal in hand. This keeps us on track and removes noise from the learning path and so inevitably makes the process more efficient. You also have to see the relevance of the task at hand, if you know that learning this will get you a desired relevant outcome, your motivation will pull you through most of the arduous pain of learning harder things that are going to be working against you.
Time-specific; goals need to be time specific. As humans, we all have a tendency to put off important things in lieu of easier options. By putting a time limit on the goal, you force a constraint and put yourself under a bit of pressure to meet the deadlines at hand. This is a good thing, having some amount of stress makes the learning process all that more effective as you can see where you need to get to and how much time you have to get there, but most importantly you can see an end date, so long as you keep to the schedule. Having this in place stops you procrastinating on the learning and can show you when you are starting to derail, so you have the chance to self-correct. Of all these points the time constraint is arguably the most important. It forces you to put this task into your priorities and leads to habit adoption. You will have to practice for a certain amount of time per day to be able to attain the goal at hand.
Evaluate, you should dedicate time to checking how you are doing throughout this process. We are in it for a longer time period than what normally we are used to, and we have no one on our backs but ourselves. This makes it very easy to lose momentum and simply stop. It will be hard, of this there is no doubt, but it will be worth it. The best motivation would be to check how much time you have already put into the learning of the skill. If you stop now, when you have not actually learned it to a practical level. Then every single hour will have been wasted and could have been used in a different way. Unfortunately, there are a great many people out there who have fallen prey to this. It is your time, get fully on board or don’t start. As Yoda would say “Do or do not, there is no try.” Factor in regular checks and see if you are on track or whether you need to step up your learning plan.
Revise the systems you use according to what you are finding from your evaluation. If you are failing to pick up a key aspect try a different form of learning it. Next week we will cover the best ways of making the information stick and learning techniques, but for now, let’s look at what we are going to do to learn programming from scratch.
How does this look
Specifically, what do we want to achieve
We want to learn how to code, to an intermediate level. So we need to crack the basics of coding and stand on our own two feet to be able to make some programs of our very own past the simple following of tutorials. So our specific goal might be:
Over the course of 16 weeks, we will be able to code in Python, with an understanding of computer science and programming.
To be able to think and solve programming problems which we can finally use towards creating our own project. We will measure the progress by testing our skills by building more and more complex apps along the way.
You have the what, now the how
So now we have the what we are going to do… How are we going to bring all this together?
The first point is we are learning Python for all the reasons outlined before «link to old blog post». To begin the learning, we should start by following a structured course which introduces the concepts and is immediately practical. For this reason, I will use PyCharm EDU and to first begin and run through the Introduction to Python. By joining up to Stepik, I can also run the Adaptive Python course. This should give a nice basis to work on the foundations. I will also augment this learning with 3 other sources at the same time.
What this does:
1. It makes sure any gaps are covered.
2. It helps with rote learning as I will be likely covering some of the same material.
3. The material that overlaps will likely be core material, and so I will have the chance to really learn it.
4. Each method will cover the core material in a different manner, which is a good way to help both understanding and retention.
PyCharm Edu with Stepik’s Adaptive Python course, for the core course and foundations.
CS50 Harvard University’s foundation computer science course, for computer science and algorithm learning. Introduction to Interactive Programming in Python from MIT for a different approach to learning Python and computer science theory.
Headfirst Learn Programming and Headfirst Learn Python, for an overall textbook learning experience, it has a lot of exercises which will help with the practice aspect of learning.
This already seems like a lot to take on, the CS50 course alone is said to take over 8 weeks with a recommended 8 hours per week advised for study, that alone is 64 hours, minimum. To get through either of the books I expect would be another 30 hours, so 60 hours in total. Another 60 hours say, for the Introduction to Interactive Programming in Python. The adaptive Learning course for Python is also ongoing which is why it makes it an incredible resource to have as a foundation for the whole learning path. As we run through the other courses, this resource should adapt and help us to see where then we have missing information. For the courses themselves then we need to dedicate 184 hours. For the adaptive learning, we should try and do an equivalent amount so again 64 hours. This leaves us with 248 hours of learning ahead of us to really learn how to program.
We have given ourselves 16 weeks so how much time then every day does this mean we need to dedicate to this pursuit? 248 divided by 16 = 15.5 hours per week, if we learn every day then that is 2.2 hours per day, take into account breaks every 90 minutes it is about 2.5 hours per day. Or in real terms 2 episodes of Game of Thrones. Do you struggle to watch 2 episodes of Game of Thrones in a night? Probably not, or to watch an epic film? Again it is almost no trouble, the trick really is to enjoy it, the time will go much faster than you imagine and at the end of this, 16 weeks from now, you will have an incredible skill to add to your repertoire, one which will undoubtedly be of value throughout the rest of your life. We will cover study habits and effective study in next week’s post, but for now, you should consider: Can you do this? Can you find within your day 2.5 hours for study? A commute on the train to and from work perhaps might cover you. If you can find currently wasted time, it is for you to now try and become productive with it. Remember I have 2 kids, a dog, and a full-time job, plus I will need to report on this as I learn. Sure there are a lot of excuses that we can make, but this is a choice, and once you have learned that you can literally learn any new skill you want, the world suddenly becomes a lot more accessible. You just need to know how to do it. Knowing too how much time you need to dedicate to the study of the topic means you can play around with the times and give yourself rest days, which are also important.
How this could look in a week.
Monday: 2 hours Adaptive Python
Tuesday: 3 hours Headfirst Learn how to program
Wednesday: 4 hours theory CS50
Thursday: 4 hours Adaptive Python
Friday: Rest day
Saturday: Rest day
Sunday: 4 hours Introduction to Interactive Programming in Python
As an example, this would give you 2 days off where you would not need to do any kind of study, but also would mean for 3 days 4 hours would be taken up. There is no one best way, and you should find a way which works best for you. The important part is hitting the quota of study hours as once you fall out of sync with this – getting back on track is almost impossible. Similarly, there are a lot of other materials out there so learn coding in a different way. The problem with this is you can take on too many different resources, which can distract you from learning from one source sufficiently. What I mean is: It is better to follow one course through to the end properly, than to have 8 or 9 courses half finished. I have limited my plan to the 4 sources, though I am sure there are hundreds of really good courses out there; these I can see complementing each other for a fully rounded learning experience. It is worth looking for yourself if any of these don’t suit your style (see the previous Blog post) and choosing no more than 4 to follow consecutively.
Don’t forget to evaluate and review how you are getting on as it is important to understand if you need to adapt your learning or if you are feeling overwhelmed. No one will do this for you and it is a big part of why most people drop out of learning. You are responsible for how you get on with your learning, so take this chance to do everything in your power to change your circumstances for the better. After all, it is only 16 weeks right?!
We can begin with a much smaller goal, which will fit into this bigger goal. Study the first chapter of the HeadFirst Learning How to Program, take the first weeks CS50 course and Introduction to Interactive Programming in Python. Use the remaining time on practicing in the adaptive learning course on PyCharm Edu.