Problem-Driven Development
As a mostly self-taught programmer, most of the things that helped me learn programming and understand its concepts is the fact that I applied the concepts I was learning to help solve some actual problems that I was encountering in my day-to-day life.
A few years ago while I was trying to teach myself Python, I found it hard to be able to make the leap from the beginner to the intermediate level. I understood the basic syntax of the language, and I wanted to transition to a relatively proficient programmer, one who could make useful software that people would want to use.
I soon came to realise that this was hard to do since I had no avenue to apply the skills I was learning. While there are lots of programming quizzes and challenges online, I couldn't find something that I cared enough about to invest the required time and effort.
However, in my day to day usage of my computer, I discovered that there were a bunch of things that I used to do repetitively, that I would rather automate. One of these was the process I was using to discover new music.
I am a big fan of The Official UK Top 40 Charts, and I used to love to check out new music from there all the time. Back then, my process for discovering new music was to go to the chart's website, check out any new songs, if I saw one that caught my eye, I would search for the track and listen to it on YouTube.
Now, for one or two songs, this is not a problem, but when it is in the range of around ten songs that might change every week, this quickly becomes tedious. I would rather have one place that would have all the tracks in the Top 40 charts and their corresponding YouTube links, so it would be easier to find and listen to any song on the charts with one click.
I figured that this was a good problem to automate, and proceeded to come up with a command line script written in Python (GitHub link), that would help me view all the songs in the charts right in my terminal along with their corresponding YouTube links. This way I would just have to run the script, get the Youtube links to all the songs in the Top 40 Charts in one place, and I wouldn't have to go through my previous tedious routine ever again.
In the process of solving this problem for myself, I learnt a whole lot of stuff about Python and by the time the program was complete (This may make it sound like it was easy but trust me, it wasn't), I realised I could make software that people would find useful, even if I was the only person using it. This project helped me make the leap from a Python beginner to a person who could come up with viable solutions to problems I encountered. Of course, the greatest benefit to come out of this was saving myself a lot of unnecessary effort ๐
The best part about all this is that anyone can apply this method to accelerate their learning. If you are trying to learn a new thing, especially related to computers and programming, think about this.
What is a problem that I care about solving that I could apply this set of skills that I am learning?
You are likely to learn more by applying what you are learning in practice. One of the best ways to do this is to look at the problems or inconveniences you or others are facing each day and asking yourself:
Can I learn more by trying to solve this for myself? Would somebody want to use your product? How could I make it better for my users?
I believe that by collectively adopting a problem-solving mindset and applying it to learning, we all could make a difference in the world, by acquiring more knowledge for ourselves and solving most of the world's problems in the process.