Hi all, time for part 2 in the (what will probably be a 2 or 3 part) series of how I began learning Python and the methods/resources etc that I used in my journey. Saying as no on has left a comment in the last post (https://www.pythonforfinance.net/2018/12/21/learning-python-my-personal-journey/#more-16051), either positive or negative, I shall continue my rant until instructed otherwise!
As a quick summary of the main points touched on in the first post:
- It is VITAL to identify and select a project you wish to eventually create – something that really means something to you and excites you when you think about it.
- Steer clear of Codecademy as an early Python resource – Most of it is now behind a paywall and the whole concept of trapping you inside their sandboxed environment can end up causing added confusion rather than helping.
- Consider signing up to a quality MOOC beginner Python course – my recommendations are the two listed in the previous blog post. (I’m sure there are many other quality courses on offer out there, but those are the two I have experience with and they both did a good job of getting me from zero to “absolute beginner”)
I would advise that when approaching the MOOC courses mentioned above (or similar courses of your choosing), you approach them in a “serious” manner. That’s not to say don’t have fun with them, or don’t occasionally deviate from the curriculum to play around with your new found skills – but rather, make a deal with yourself that you won’t just skim through the materials, that you won’t just watch the videos and skip over any practical coding exercises and homeworks that actually require a bit of hard work and “brain sweat” to complete.
It’s amazing just how our brains can fool us into thinking we are learning, and fool us into thinking we “understand” something just because we are able to follow along with the logic presented to us by passively reading or listening to a video presentation on on a certain subject.
I GUARANTEE that something you THINK you understand well enough at the time of reading/listening/watching, will end up being something that you struggle massively to recall/use when it comes time to actually put it into practice to solve a previously unseen “problem”. The real learning occurs not when you are sat listening to the course lecture videos, or sat reading passively through code snippets and explanations – but rather when you sit with your “books closed” and a coding problem in front of you to solve!
ALL the research bears out and supports this fact absolutely unequivocally. The image below shows the relationship between the “Nature of Involvement” of a learning activity (i.e. whether it is “active” or “passive”), and the subsequent ability to recall the content of what you have learned 2 weeks after the event. It’s pretty self-explanatory and I’m not an educational psychologist by any means so I’ll just leave it at this…make sure you dedicate the majority of your time to learning ACTIVELY, not passively! It’s much more tiring and requires much more engagement but it is worth it 100 times over.

Once the above courses (or similar) have been worked through and completed, you’ll most likely find yourself in a situation whereby you now have a much better idea of what you can actually achieve and create with the use of Python. This is great, as it can generate renewed motivation in your mind – you’ll probably find yourself repeatedly adding on extra functionality or extra complexity to the “wish list” project you have been visualising in your mind as an end goal. You’ll start to think of all the great, amazing things you’re now about to produce…
Unfortunately, it doesn’t quite work like that; more often than not this turns out to be a make or break time for those learning how to program. The gulf in difficulty and scope of knowledge required between following and completing an online course with it’s “homework exercises” (and corresponding “hand holding” ethos) vs building a “non-trivial” product/program/application (whatever you want to call it) from scratch, is huge!
Don’t underestimate this fact…
I remember this part of my journey pretty well, and it tends to stick in my mind as being the most frustrating period I went through. It would go something like this:
- Congratulate myself in my head that I had finished two full MOOC courses and feel smug that I had now attained a fairly decent grasp of not only the required Python syntax, but also (to a lesser extent) a grasp of how, when and why to use various program “flow logic” – i.e. if/else logic, for/while loops etc.
- Feel even more smug that I felt I had a good idea of how and when to use the “main” built-in data types – (e.g. lists, tuples, ranges, dictionaries, Booleans etc).
- Think to myself that as I knew how to define and use my own (basic) functions, I could just combine them with the aforementioned knowledge of logic flow and relevant data types in order to create magic! No doubt I MUST be ready to go forth and tackle my main “wish list” project head on, right?
- I’d finally sit down in front of my laptop, open up my favourite IDE/text editor of the moment and then suddenly realise I didn’t actually have a clue where to even begin.
- I’d Google some key words describing what I thought I wanted to achieve and then spend hour after hour chasing down some maddening rabbit hole of stackoverflow posts and random programming blogs – each “answer” I came across causing me to have to further Google the meaning of specific terminology or how to import and use some random package that was mentioned and so on.
- After spending hours desperately trying to cobble together something…ANYTHING that even worked at all, or ran without errors, and more often than not failing, I would put my laptop to sleep and wander away more frustrated than ever.
This cycle of “motivation turned frustration” can really wear on you. It’s at this point that you realise just how vast the world of programming/software development/computer science really is. It can result in an absolutely crushing feeling that you’ll never get to where you want to be – “there’s too much to learn”, “its too complicated”, “it’s too difficult”- all these thoughts will enter your mind at one point or another.
As I mentioned previously, I believe that having a VERY strong desire to create your “wish list” project is what will get you through this period. For me it was to design, code and back test a systematic trading strategy. If it wasn’t for that end goal I would have probably fallen by the wayside at this point and not continued to torture myself.
I remember reading a great blog post that deals with this very stage of the learning process…It presents and explains the whole concept in a much more eloquent way than I ever could but the chart below gives the general idea and the corresponding blog post can be read here.

The above rant basically corresponds to the points on the chart shown as “cliff of confusion” and “desert of despair”. You WILL go through it, you WILL feel like giving up at some point, you WILL get through it if you just persevere. Trust me…
So how to get through it, I hear you ask. Well for me, it required taking a step back and accepting that I just wasn’t ready to start actually creating my “wish list” project. I decided to revisit the various MOOC providers I had used previously, see if I could find a slightly more advanced course than those I had taken before that also dealt with a subject area related to my particular end goal and required skill list.
It was at this point that I came across the MIT course offered on the EDX platform (www.edx.org):
Introduction to Computer Science and Programming Using Python
Provided by
Massachusetts Institute of Technology (MITx)
https://www.edx.org/course/introduction-to-computer-science-and-programming-using-python-0
I have to say that, hands down, this course did more to advance my python knowledge and skills than any other single resource I used over the whole 5 years that I have been learning. It is an absolutely awesome course that really opened my eyes to so many concepts and tools that I didn’t even know existed before taking it. If I could recommend just one course to complete, and spend quality time working through all the accompanying exercises and tests/quizzes, it would be this one. The only caveat I would mention is that it’s not really a proper “beginners” course per se. The learning curve is pretty steep from the outset – I found it pretty steep and that was after a good 5/6 months of consistent and dedicated time spent learning. Some of the “homeworks” drove me crazy and took me days and days of concerted effort and thought to complete.
That’s not a bad thing though – it’s not a steep learning curve in terms of additional “advanced syntax” or use of weird and wonderful advanced data structures or anything – the difficulty and complexity comes more in the form of “conceptual” thinking required. It very much is a course that teaches computer science concepts using Python as a “tool” to do so, rather than a course that concerns itself with teaching Python itself. You’ll see what I mean if and when you start to work through the online lessons…it really is an eye opener.
Once I had completed that MIT Course (and it took me a few weeks of solid effort to get through), I finally had enough tools in my toolbox to start creating python scripts that actually did something non-trivial and dare I say it, useful. Looking back, I now realise it was that course that supplied the paradigm shift I had been looking for – the very way I approached problems of a programming nature had shifted dramatically.
Ok so to quickly recap the main points of this blog series so far:
- It is VITAL to identify and select a project you wish to eventually create – something that really means something to you and excites you when you think about it.
- Steer clear of Codecademy as an early Python resource – Most of it is now behind a paywall and the whole concept of trapping you inside their sandboxed environment can end up causing added confusion rather than helping.
- Consider signing up to a quality MOOC beginner Python course – my recommendations are the two listed in the previous blog post. (I’m sure there are many other quality courses on offer out there, but those are the two I have experience with and they both did a good job of getting me from zero to “absolute beginner”).
- Approach the MOOC courses you decide to take in a “serious manner”. You’ll gain so much more if you solve the exercises and homeworks yourself, without searching for solutions etc on Google – it’ll take a lot longer, and take a lot more effort but that’s when the learning happens!! After all, you’re doing all this to learn right? Nothing worth having comes easy! 😉
- Prepare mentally for when you reach the inevitable “cliff of confusion” and “desert of despair” – both are surmountable with enough perseverance, hard work and simple belief in yourself!
- Be willing to take a step back and take stock of your situation objectively. You may need to revisit the process of following structured Python courses for a period, that perhaps don’t teach EXACTLY what it is your trying to focus on for your end goal. This is ok….don’t beat yourself up about it. Take a moment to appreciate how far you have come since you sat down on day 1. Perhaps even go back and attempt some of the exercises you completed in your previous MOOC courses – compare your new solution to your old one, both in terms of conceptual approach and code style or efficiency etc. I bet you surprise yourself.
(That reminds me actually – I highly recommend taking the time to archive and store all your code snippets/files that you create when completing the various MOOC homework/exercises etc. – it can be really enlightening to be able to look back at previous attempts and recall your thought process at the time of writing, and compare that to how you would approach the same problem now. Commenting your code is a life saver in this regard – so make sure you develop good habits regarding code commenting!)
I’ll leave it here for this post as it’s turning into a wall of text, and I’ll probably wrap up this series with a (shortish) 3rd installment in the next week or so.
Until then!
1 comment
Excellent. I came here from Twitter. You have well encapsulated all my struggles and frustrations. I teach Finance courses and have been trying to learn Python for Finance for the last few months going all over, without much progress. Finally I have found a path! A rare computer nerd who says that coding is hard, makes me ready for a long haul.