I've talked about it before that one of the things that drew me to computer science versus physics, chemistry, biology or any of the other popular sciences is the opportunity for fast, iterative and virtually free (often actually free) experimentation. Chemistry often requires an expensive lab and tons of safety equipment, ditto for physics and biology, but to experiment with most computer science topics, you just need a bare minimum CPU and a command-line OS.
Why is this such an attractive aspect of computer science, though?
There's obviously the liberatory aspect of everyone being able to run experiments at a relatively low cost in a pretty controlled environment, oftentimes with the same access to learning materials and software, though that latter bit definitely deserves plenty of attention and effort to perfect. But to me, it opens up the perfect avenue for learning, the best way for any person to learn a new science or discipline.
Project-Oriented Learning Fundamentals
Chances are if you're reading this blog, you're in some way into technology, security, software development or some sort of tech entrepreneurism or activism. If you're not, the best part of computer science, the part I've been talking about here, is that you can learn it at a pretty low cost.
If you are a part of that typical demographic, though, you've probably already used project-oriented learning. In fact, you're probably wondering why I'm writing an article on something so basic and fundamental to learning and doing computer science and software development.
Project-oriented learning is just using the experimentation process itself to further your own learning in a structured and intentional manner. It's not doing experiments to necessarily further a science or to confirm a hypothesis, it's the literal learning-by-doing. In software development, this means learning the basics of a framework, library or language and, instead of continuing to read books, watch videos or read articles about that language or framework, you just... do something with it.
If you're trying Rust, you read bits and pieces of the Rust Book and then write some Rust code and iterate on it as you learn more.
If you're trying React, you read the basics of
create-react-app and then you start building your first web app.
If you're trying Python, you watch a video or two and then write your first API, or game, or physics simulation, or AI model or... whatever it is you're learning.
If you're trying C/C++... why? 😉
The point is, instead of sticking to theory, or books, or blogs, or videos, the best way to learn software development is by learning by doing: make some projects, wrestle with some errors, fight with a debugger or a compiler and learn more. The best part about software development is that iteration is comparably cheap. Running a broken script once costs about as much as running it 1,000 times, it's just time that you're wasting.
How to do Project-Oriented Learning
Theo, one of my favorite web-dev YouTubers, did a great video on tutorial hell.
Basically, YouTube tutorials can be incredibly helpful... as long as you leave them behind as quickly as possible. Blogs and videos are super helpful to get you started, to read up on the very basics of a new language or framework, but they are poor substitutions for actual application.
Basically: watch a video or two, read a blog or three, but move on ASAP and open up the IDE to get started. Write some code. Write some bad code. Write lots of bad code. Nobody has to see it, but if you publish it to the world, you'll be publishing it to a couple a**holes and a bunch of people who are in the same boat as you: just trying to learn.
Learn by doing. Spend some time writing down some short, quick projects that can help you learn a new tech or tech stack.
Building a new API with a new framework? Just build a wrapper on an existing one.
Building a new game with a new library? Keep it simple: do Pong, Pacman or some other sort of clone. Iterate on it if you want.
Building a web app with a new framework? Make a blog clone, or clone a cool site with a design you enjoy.
Make the projects simple, but make the purpose to develop that project in your new tech so that you can learn how it works. The errors you'll get, the pitfalls you'll find and the frustration you'll have will be worth three times as much as the time you would have spent watching other people write code on YouTube or on a blog.
This is how I learn literally everything. I started learning Rust (and, earlier, C/C++) by writing malware with it. I taught myself about FastAPI by developing API's with it. Ditto for React, and soon to be ditto for Next.
Ditch the videos and blogs ASAP and start writing some code. You won't regret it.