Hi all – here is the last in what has turned out to be a 3 part “series” of posts, dealing with my journey (so far) of learning Python – how I went about it and what resources I ended up using.
The first two posts can be found here – post1 and post2.
As a quick recap of the main points highlighted 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.
Saying as it’s not mentioned explicitly above (it was in the second post) – I HIGHLY recommend the MIT course offered through the edX MOOc platform:
Introduction to Computer Science and Programming Using Python
So with those points covered so far out of the way, where do we go from here?
Well first I think it’s probably useful to take stock of where we ARE, as only then can we really answer the question of the “best” next steps to take. Now, in an ideal world, simply spending the time required to complete the courses and exercises mentioned above (or similar courses of your own choosing) would result in one having gained a level of knowledge and comfort whereby they were able to go forth and start creating relatively complex applications, programs and pieces of “mini”-software; at least “relatively complex” when compared to our ability at the start of the whole learning process.
The reality however is unfortunately slightly more complex than that; everyone learns at different speeds and develops new skills in differing orders and to differing levels of mastery. What one person can comfortably achieve or create with Python at this stage will be different from what another person could, even given that they followed exactly the same learning path and timeline of courses etc.
I mention this point for several reasons:
- It’s important to see this as a journey of personal growth – sure, it’s nice to share experiences with others (and I actively encourage you to interact with other novice and experienced coders whenever you can) but you shouldn’t generate negativity for yourself by comparing your progress to those around you. There are going to be people who race ahead of you in terms of ability, and there will be those who struggle a hell of a lot more than you did. So gauge your success not by your performance vs others, but by your growth vs your starting point, along with the sense of pride in all the work you have put in thus far. Not many people stick with learning a difficult new skill so you’ve already done more than most!
- At this point in the learning process it becomes more difficult for me to describe a particular path in terms of “do this, then do that, then do the other…” as you will all have not only different ability levels at this point, but also different end goals in mind; I’m guessing if we could draw up a list of all the different “wish list” projects all the readers had in mind they would be more than a little diverse in nature. This leads me to point 3.
- Coding or programming or whatever you want to call this kind of area if insanely wide in scope – EVERYTHING is done on computers these days – web development, software development, machine learning/artificial intelligence, data analysis/data science, general office work automation, quantitative finance/trading, risk management, bioinformatics, medical research etc – you get the point – the list is endless. You can apply your programming skills to literally any topic of interest to you. What you will find is that, sure there is SOME overlap in required knowledge and skill sets between many of the areas of application, but often it feels like the similarities are few in comparison to the differences. So realise this fact, and understand that as soon as you head down a particular path, you will very soon have to learn how to use a whole myriad of domain specific frameworks and packages/modules. And if you want to jump over to another “area” of interest for a bit of variety, well….you guessed it!! A whole load more domain specific resources that you will have to become familiar with and learn how to use.This is just how it is – don’t let it overwhelm you…Rome wasn’t built in a day and if you chip away at the process – you’ll sooner or later find your “groove”.
The points above lead me to the main point I want to make in this article – people have to realise that learning how to program doesn’t mean practicing until you can write code from memory so that you don’t have to “cheat” by searching for syntax examples and example solutions online at sites like www.stackoverflow.com. The way we “learn” at school often tends to drill into us a belief that “learning” something means studying a subject by cramming as many facts and techniques into our “medium-term” memory as possible, leading up to a specific event date whereby we are then expected to regurgitate said facts or apply said techniques to certain problem sets from memory i.e. without access to any kind of reminders or formula sheets etc.
Well in my view, this paradigm of “learning” is pretty bad if the end goal is “long-term” retention of said knowledge – but that’s another story. The way it relates to us here, is that it helps highlight the fact that we’re not studying Python in order to pass some exam; searching stackoverflow or going back to the Python documentation to verify correct syntax or correct usage mid way through typing a line of code or using a function or certain datatype etc is MORE than acceptable. In fact it’s actively encouraged to a certain extent.
At this stage of your journey one of THE most valuable and important skills to develop is that related to effective “Googling” – “Google-fu” some call it. It’s defined as follows:
“Google-fu is defined as “skill in using search engines (especially Google) to quickly find useful information on the Internet.” It is a somewhat tongue-in-cheek reference to kung-fu, which is generally perceived as requiring a high degree of skill to master in the western hemisphere.”
The reason for this, or at least one of the reasons, is that as you move further and further down your particular path – your specific issues or problems that you come across will also become more particular to your situation. There wont be some nicely structured and presented MOOC course that deals with solving your current problem or how to deal with whatever specific error message you are currently trying to debug.
This is when you need to join the “real programmers” and learn to find and use the handful of useful resources that are helpful IN THIS PARTICULAR instance, amongst the VAST sea of general resources available.
Learn how to write a well thought out, well structured, compliant question on www.stackoverflow.com – many new programmers report that they regularly meet levels of hostility etc on the site if and when their question is deemed incorrectly formatted or flagged as a “duplicate” of a question that already exists on the site etc.
Please don’t let this reputation put you off – it is a FANTASTIC resource if you use it correctly – the levels of knowledge some of the guys on that site is just incredible. Make sure you read this post: https://stackoverflow.com/help/how-to-ask and then if you follow those instructions you should be fine and dandy!
The second part of the puzzle at this stage, along with nurturing your “Google-fu” skills – is to realise that although you know a “little about a little” at this stage, in reality the Python ecosystem is absolutely HUGE and if you have a certain problem you want to solve, or you ever sit up from your screen and think “hey wouldn’t it be great if there was a way I could do ‘xyz'”, more often than not someone has not only had that same thought, but actually gone and done something about it by creating a whole module/package that deals with that subject area.
Honestly – it’s amazing how wide and deep the Python module ecosystem is – check out https://pypi.org/ to browse the 164,062 projects currently documented there. You should never be “reinventing the wheel” with Python – at least not in this stage of your journey. It’s a much more valuable skills to work on your ability to identify what kind of things are and aren’t possible with Python, and also the “why” related to whether it is or isn’t. This will allow you to get a good grasp of what things are available in the various “non-core” python packages and how and when to use them.
Moving on slightly, the only thing I have left to mention is that I also eventually integrated the usage of various “paid for” courses into my learning resources – some may or may not like the business model etc. but I found Udemy (https://www.udemy.com/) to be a reasonably good resource for courses that dealt with slightly more “personalised” or “specific” subject areas than those provided by the major MOOC providers. The tip here is never pay full price for a course – the “full price” price is nonsense and there are regular and repeated sales that offer most courses for prices in the region of $10-25. In fact it seems like the sales are on more often than not – I have bought a considerable amount of courses over the years and never once paid more than $25 for any of them. So bare that in mind.
Lastly – it has come to my attention that the comments section is not working correctly on the site – an attempt to leave a comment results in an error message. Just wanted to say I am working on getting this fixed, and if anyone needs or wants to send me a message, you can always use the contact form on the “Contact Us” page found on the top navbar menu.
Cheers all – until next time!
Testing the comment section!
I just wanted to say that was a relief for me, at the same time that finding your blog at this present time was a coincidence, to see that there are more guys facing the same challenge than me.
I am a full time trader for a brazilian hedge fund with a background in physics. For quite some time, doing things with a ‘fundamental’ point of view worked well. Ive been doing this since I came to work for the trading desk after a role on the back office of the same company. My computing skills from college showed to be of quite value for the guys on the front desk, even though such computing skills were very limited at the time.
After a couple of months of discomfort with my current approach, I found relief on the systematic trading approach of investing. I read almost everything that the big names of this approach published and decide (as well as got a waiver from my PM to put the fundamentals aside and focus on systematizing my decisions).
As the author (and the rest of us on the same boat), I now understand that the road is very very long, but we meet good people and material along the way. This blog is for sure one of them. I’ve been trying to follow the examples presented by the author since they are basically simple examples of everything im trying to do here. Also, i met the MIT introductory course which seems quite valuable as well, so even if the author decide to stop posting new stuff, my visit already paid off.
Keep up with the good work, chief. Your job is twice as hard as ours (we just need to perform on our particular tasks, you need to do so and also write your posts), and you are doing it greatly.
Hi Luiz, glad to hear you are finding the material on the site useful! It is indeed a long, long road to walk down…I wish you luck on your journey! Keep us updated as to how you are progressing…
this blog is lit!!!!!!!
thanks s666 for putting aside your busy time for helping people like us.
we are honored,humbled and grateful for everything you do to help us!
Hi Naseef – many thanks for the kind words! It’s very nice of you to say, and it’s great to hear that people find my site of some use 😉