“Learn for the sake of learning,” they say. “Cultivate your mind,” they say. Have you ever questioned that?
Even if you believe that you enjoy learning, you would not enjoy learning about all topics equally. Chances are that you can name several fields you have no inherent interest in. Since in this case you aren't motivated by learning itself, are you a bad learner in those fields?
This article is a response to Broadening Computing: Infusing Culturally Responsive Pedagogy into the Design of Informal Learning Environments, by Yang et al. (2020).
Say you want to learn a difficult concept like machine learning for the first time. You cheerfully look up “how to learn machine learning,” and you get a list of online courses and tutorials and textbooks about multivariable calculus and linear algebra and Bayesian statistics and the like. Now, it seems like it would take a good two or three years to learn the basics of what you need to know to start machine learning… and suddenly you don’t feel like learning anymore.
That was me about a year ago when I was a sophomore in high school. Since then, I’ve realized that there are two flaws with the approach above: First, the goal is far too broad. You could spend a lifetime studying one tiny branch of computer science and leave but a small dent in human knowledge. Second, there is no motivation, no driving force. Why do you want to learn machine learning, or whatever it is you want to learn? What specific use do you have in mind?
This would be a pretty lame article if I went on to say that I never learned machine learning. So let me tell you how I actually did. I came up with an original project idea that would involve using neural networks to predict physical interactions. Then I found a tutorial for the PyTorch library and skimmed over it. I couldn’t actually grasp everything from it, but I didn’t need to. I found example code for MNIST classification, which is one of the first projects you might do when approaching neural networks, and copied it. Verbatim. Finally, I took that code and tried to make sense of it, before applying a similar implementation for my original project.
This is so effective because you have a very specific scope of things you want to learn: the concepts that would be useful in your project. Besides saving you from years of studying, the ultimate goal of completing your project will motivate you to learn these concepts. Note that I am not suggesting that you stop learning to code (unless it doesn’t interest you), but to stop doing so without a specific purpose. The project itself should be one that you are internally driven to complete. It may be an application which you would find useful on your computer, or a game concept you want to release on mobile devices. Or, as Yang et al. (2020) suggest, it may solve a culturally relevant problem in your community.
Codefy is an organization that offers programming classes, so it may seem counterintuitive to argue against learning without a specific project in mind. But to that, I would make two points. First, our classes revolve around mini-projects that are meant to guide you to learn, but you are always welcome to modify them to fit your interests. Secondly, and most importantly, we have mentors who can offer their experiences and help you navigate the nuances of your interests; something an online tutorial cannot match. So, I would encourage you to pursue something specific that motivates you, and our mentors will always be here should you need a helping hand.
Entering the world of competitive programming can be an exciting moment. The possibility of being awarded for a skill you have honed in on for years is incredibly intriguing, but at the same time, it is the beginning of your competitive programming career, and as always, there are a couple of novice mistakes to be made.
The most difficult part of a good programming project is coming up with a good idea in the first place. Why? Because millions of people know how to code and some of them are very good at it, and there are countless ways to efficiently learn how to code but any tips for coming up with ideas are inevitably vague.