A bit about 1 1/2 year ago, I started to teach myself programming with Python. Today I feel confident to formally complete my project.
I am honestly a bit proud to be able to code on what I consider an intermediate beginner level. After continued and steep improvements over the past months, I am now past the “Coding Inflection Point”. This means that I have internalized the majority of the basic approaches to and patterns of Python programming and can now in some situations actually rely on established routines to write code.
If you draw a parallel to learning a spoken language, it is the moment at which you are able to hold basic conversations in your newly acquired language. Yet whatever you express is primitive, ridden with errors and characterized by a small vocabulary. You constantly have to look up words or grammar. Sometimes, when talking about more complicated stuff, you have to give up (but you’ll use this insight for future improvements). Still, you feel excited about your new skill.
With this post I want to briefly summarize how I taught myself coding with Python. This will be the last article of my my little inofficial series of posts, and from now on it it will the only one that matters. Let’s get to it:
How long did it take me to learn to code?
In 2016 I spent approximately 2 hours a week, so let’s say 100 hours in total. This year, I tried to invest 8 to 10 hours a week. That makes 40 x 8 hours, which will bring the total amount of time I spent on this project to 420 hours. So we are looking at a time investment similar to a 2 1/2- months intensive coding Bootcamp, but spread out over 20 months. Bootcamps usually cost a lot of money. I didn’t pay a dime.
What are the obstacles?
Provided that you really want to learn programming, the only other obstacle that I can see aside from the need to find and prioritize the time, would be a lack of self-discipline and stamina. For me, deciding about a goal that I want to accomplish usually is enough to keep me engaged, as I would experience a gigantic disappointment in myself if I fail. People and minds are different though. Some might prefer to rely on external pressure to pull through, such as involving a partner/friend for accountability, e.g. by pledging to pay a large amount of money in case of a failure. Actually, with my blog posts about progress I somewhat also added perceived external pressure. Some people do highly favor formal classes with teachers, assignments and exams. If that’s the case my own experience won’t be of much value. It’s important that you know which learning type you are.
How did I go about and what resources did I use?
I’ll list the sites and resources in the exact chronological order.
2. Once finished with the Codecademy course, I proceeded following the tutorials from Learn Python the Hard Way.
3. Next up was Google’s Python Class.
4. While doing Google’s Python Class, I started to build my own little programs, such as simple chatbots that are run locally. I found it important to not only learn new things and to solve the tasks from the Python courses, but to keep practicing what I already heard learned. Once you internalize how loops, lists, dictionaries and functions work in Python, and once you get a bit routine with creating those, progress is significantly accelerating
5. Once I was done with Google’s Python Class and while I was creating little programs myself, I proceeded to read through and solve tasks from Automate the Boring Stuff With Python, followed by Invent with Python. The latter site teaches how to build basic games with Python, which was quite fun. By now, some tasks actually started to be too easy, while others were still a bit hard to comprehend. So I picked and chose what I felt fitted my knowledge level.
6. I moved on to solve all the tasks from Practice Python. By now I started to grow tired of the repetitive characteristics of my programming sessions.
7. I worked with this tutorial to publish an extremely simple blog on a web site using Python and the Django Framework. That was still a bit challenging but gave me a first glimpse of how Python code is integrated with web programming. I also registered an account at Github, which is where pretty much all developers store and share code.
8. Reading here about data analysis and visualization with Python inspired me to focus on this topic for a while, as it also offers interesting prospects for my editorial and writing work. I probably don’t need to mention the growing role of data in today’s world.
9. From here on I played around with simple visualization of data. I tackled my first API (Hacker News), followed by Reddit’s API. Being able to actually combine my newly acquired skills with other areas of interest and work was very fulfilling and motivating.
10. I taught myself (as in every other case with heavy use of stackoverflow.com where every coding-related question ever most likely already has been answered) to connect to Google’s QPX Express API to access airfares. Using it, I built a little locally run flight search engine. Sadly the API is limited to only 50 free queries a day (which of course still is pretty great, as Google probably is paying per API call to acquire the data).
Otherwise I probably would be busy for the next months creating the most advanced airfare tool ever for myself and eventually put it online.
11. Currently, after having worked through this tutorial for visualizing the cryptocurrency market, I keep trying out several things in the fields of data visualization, using the Python modules Matplot and Pandas. While I mostly still only re-invent the wheel (and usually worse than the original), my ambition is to always combine my coding with actual areas of interest. It makes it much more fun.
While I am calling that moment the formal completion of my Python project, this in no way means that I will stop now. It would only take a few weeks until my still shaky foundation of Python skills would completely deteriorate. So I will keep coding and I will try to find use cases which fit to my general topical focus. Data analysis and visualization attracts me a lot, but it is challenging as well. In the past I’ve read a blog post (which I sadly don’t find anymore) describing how someone who learns programming experiences a very irregular learning curve, with alternating cycles of rapid perceived improvement, followed by periods of stagnation, dips and frustration. Currently it appears as if I am on a plateau, seemingly not improving my skills and occasionally even struggling with easy stuff. But as long as I don’t stop practicing and learning, the next period of rapid growth will come for sure.
I wrote this article from my own perspective, but I hope it gets obvious that pretty much everyone could do this. One final advice: Take the hours required for learning to code from your social media time budget. You’ll be surprised how far you will come with this :)
If you have any questions, feel free to ask in the comments.