Don’t get me wrong, I love MOOCs. They’re great for trying to learn a new programming language (e.g., Python, Scala) or framework (e.g., Spark, TensorFlow) or subject (e.g., statistics, machine learning). The structured learning environment, excellent teaching, and exercises (and solutions) guide us through the best way to learn new concepts.
But most of the time, we don’t really need it. If we already know machine learning, taking that shiny new MOOC won’t help with applying it more effectively. Doing another Python tutorial won’t help with writing better code. Most MOOCs follow the Pareto Principle and teach students the 20% they need to achieve 80% results. Thus, past the first or second course, our learning tapers off. (Also see Susan’s view on diminishing returns.)
\[\text { Diminishing returns from similar MOOCs }=1+\frac{1}{2}+\frac{1}{4}+\frac{1}{8}+\frac{1}{16}+\cdots \approx 2\]Sometimes, new MOOCs become a reason to procrastinate, or worse, a self-handicap. You know this is happening when you hear yourself, or something else, having these thoughts:
Watching lecture videos isn’t learning—it’s passive consumption. We sometimes equate taking an MOOC, or reading a technical book cover to cover, with learning the material. But how often do we struggle when we try to apply the technical knowledge or skills at work? Children don’t learn to ride bicycles via how-to videos. Similarly, we can’t learn how to program or apply technical knowledge just solely watching videos.
Most good MOOCs or tutorials will provide hands-on practice. However, that hands-on practice will lie on the happy path. We can copy-paste the code and it’ll work. This makes sense as there’s a lot of material to cover and we don’t want to spend time debugging, doing prep work, or solving problems via trial and error. Students will lose patience, causing completion rates to drop.
Being on the happy path makes it easier to complete MOOC after MOOC. However, when we try to apply what we’ve learned—either at work or on a personal project—it becomes much harder. This is because we’re now off the happy path. And this is a good thing!
Going off the happy path is how we further our learning beyond the classroom. This is especially so for our field of data science and machine learning, because:
“I hear and I forget. I see and I remember. I do and I understand.” – Confucius
We go off the happy path by doing real-world projects, dirty data, CUDA errors, and all. Through projects, we learn how to define problems, apply algorithms wrongly (and correctly), google error messages, and iterate until it works. We practice resourcefulness, grit, and how to learn. These are the lessons that push us towards excellence.
But, I don’t know enough to start a personal project!
You just need to know enough to start; the rest you’ll pick up along the way. We don’t need to know Python generators before developing your first Python program. We don’t need to know Spark before processing 2 million rows of data. We don’t need to know TensorFlow before training your first machine learning model.
Just start, and let the challenges guide you towards your next learning needs. This way, you immediately apply what you’ve learned. This reinforces learning, improves retention, and increases satisfaction. Similar to just-in-time manufacturing, just learn whatever’s needed to make progress on your project. Technical skills are perishable—if we don’t apply what we learn, they’ll decay.
Apply YAGNI to learning. Just like we don’t need to add functionality until it’s required, we don’t need to do every new MOOC or read every new textbook. No point overwhelming ourselves with all that information and knowledge which we won’t use or apply.
How to become expert at thing:
— Andrej Karpathy (@karpathy) November 7, 2020
1 iteratively take on concrete projects and accomplish them depth wise, learning “on demand” (ie don’t learn bottom up breadth wise)
2 teach/summarize everything you learn in your own words
3 only compare yourself to younger you, never to others
To be clear, I’m not saying that we should stop exploring and learning new things. I’m saying that we should lean towards being more focused.
When learning about new domains, subjects, or skills, adopt a childlike exploratory mindset. Don’t concern ourselves with the practicality of what we learn. However, if our intent is mastery, we should adopt a focused mindset and learn via hands-on projects, mistakes, and feedback.
I often get pushback when I suggest doing a personal project instead of another MOOC, Kaggle, or further education. Here’s how some conversations go:
“I’m very time-constrained and don’t have time for a personal project. MOOCs are self-contained and need only 2-4 hours a week”
Yes, MOOCs are great return on time-invested for getting up to speed on a subject. But past a certain threshold of knowledge and understanding, you’re going to need hands-on practice to take your learning further. AFAIK, projects are the best way to do this.
“I tried doing a personal project in the past. But I got a lot of errors and had to google a lot—I don’t think I’m ready for them until I do more MOOCs.”
Getting errors and googling for help is perfectly normal! Even the instructors who created those MOOCs do that too. That’s how we learn—by trying, failing, and overcoming.
“Personal projects are too difficult. Taking an MOOC is easier.”
That’s exactly why you need to do a personal project. The difficulty you experience is the learning curve—without it, there’s no learning.
MOOCs feel easier because their tutorials and assignments are structured to follow the happy path. But this means you’re deliberately steered away from the hairy issues that you’ll face in the real world, unlike in a personal project.
“Doing that MOOC/Masters gives me a certificate that helps my resume.”
Perhaps. Nonetheless, companies are placing less emphasis on educational qualifications, even for technical roles. Recruiters and hiring managers are also becoming more open-minded. And in the end, from a hiring manager’s perspective, what really counts is if you can do the work, not that cert.
“The recruiter said I would be tested on technical skills and knowledge. Thus, I need to do more technical MOOCs.”
To an extent, MOOCs and YouTube videos are helpful, especially for questions that test your knowledge (read: memory) or require you to know the trick (e.g., leetcode type questions).
However, for most interviews, you’ll likely get more nebulous tasks, like designing a data pipeline, whiteboarding a machine learning API, or coding up a basic k-nearest neighbors or decision tree. These assess your ability to design and develop maintainable systems, think through edge cases, and adapt based on feedback. The hands-on practice from projects will be more helpful in such interviews
“What personal project should I do?”
Start with something you’re interested in. If you’re not intrinsically interested in it, you might find difficulty finishing.
Aim for something you can complete over the weekends in 12 weeks, ideally, 6 - 8 weeks. Any longer and it won’t seem urgent enough (and you’ll lose momentum).
“I’m familiar with web scraping/ruby/excel, can my personal project be about that?”
Sure. Just start somewhere and evolve it along the way.
Nonetheless, if you’re doing a personal project to learn, you’ll probably want to deliberately pick something new and unfamiliar. Or if you’re doing a personal project to build your portfolio (and get a job), you’ll want to look over the job requirements to make sure you address them.
“But, I can’t think of any interesting personal projects!”
Look back on the classes and material you’ve covered. I’m sure you’ll find something interesting that you’ll want to dig deeper into.
This is also a good test of whether you’re interested in a discipline. If you can’t think of a personal project that interests you, do you really want it for a career? (And the answer might be yes, for various reasons such as compensation, prestige, etc.)
“Other than personal projects, anything else you would recommend?”
Nope. My sole recommendation is to start a personal project and learn whatever you need to complete it.
In 2021, instead of taking that MOOC or watching another YouTube machine learning playlist, learn by doing instead.
Learning a programming language? Build an app, any app. Share it online and get feedback. Iterate and add new features. Learning a new machine learning technique? Find some novel data and apply it. Understand where it fails, where it shines, and how to adapt it for different data sets. Share your findings via writing online or at a meetup.
Learning comes from doing. Not watching videos, or reading textbooks. Start doing now.
I think we should do less MOOCs:
— Eugene Yan (@eugeneyan) January 26, 2021
• Most of the time we don't need it
• Watching MOOC videos isn't learning
• MOOCs are a reason to procrastinate, or worse, a self-handicap
Instead, go off the happy path and adopt just-in-time learning 👇https://t.co/w8qAd639HM
Thanks to Yang Xinyi for reading drafts of this.
If you found this useful, please cite this write-up as:
Yan, Ziyou. (Jan 2021). You Don't Really Need Another MOOC. eugeneyan.com. https://eugeneyan.com/writing/you-dont-need-another-mooc/.
or
@article{yan2021mooc,
title = {You Don't Really Need Another MOOC},
author = {Yan, Ziyou},
journal = {eugeneyan.com},
year = {2021},
month = {Jan},
url = {https://eugeneyan.com/writing/you-dont-need-another-mooc/}
}
Join 8,800+ readers getting updates on machine learning, RecSys, LLMs, and engineering.