How is it different from course-based learning? 🧐
It's very self explanatory, but project-based learning is a learning technique that focuses heavily on building real-world projects. The alternative is following tutorials, but that is ineffective and many times, you'll forget what you learn from a course or tutorial series because you're typically consuming a lot of information without applying it. Thus, you don't truly understand a concept and waste a lot of your precious time trying to follow tutorials.
Now, don't get me wrong. Courses are amazing, and I love how they give you a structured curriculum, but if you're learning React, for example, you don't need to learn every nuance of the technology and explore the advanced concepts before you get the opportunity to hammer down the basics. Even if the course provides practice problems, those exercises are likely not meaningful to you, meaning that you won't retain the content for very long.
On the other hand, project-based learning, if done correctly, lets you get a feel of the basics through simple tutorials (preferably by reading the docs or watching youtube) and then immediately building what you want once you gain enough understanding to start writing your own code. Most people learning how to code have a project in mind that they can't wait to start, but unnecessary material interferes and many fall into the trap of wanting to learn it all, so they never end up completing their goal. However, project-based learning gives them the chance to start working on their project right away. Furthermore, Project-based learning gives you the freedom to learn as you create, so you'll definitely master the art of scouring StackOverflow for answers to problems. And unlike with courses, you will use 100% of the stuff you learn because it will directly apply to a problem that you are trying to fix.
The Pros 🎉
First of all, project-based learning is extremely fun. You don't need to listen to a teacher for hours a day like at school because you get to learn by doing and even failing. Learning from your mistakes is very effective, as you probably know, so why not incorporate it into your learning process more?
Project-based learning is also powerful for building your portfolio and padding your resume. Portfolio websites are really popular nowadays, so this is a great way to fill up the "projects" section. But even if your goal isn't to switch careers, it's very impressive to have 10+ projects which you can claim as your own and show to your friends and family. And remember, employers want to see proof rather than words.
And if you need more stuff to boost your portfolio, you can try learning some algorithms and implement them into previous projects or even make an algorithm visualizer that explicitly shows how comfortable you are with concepts that companies actually care about.
The Cons 🚨
The main disadvantage project-based learning is the difficulty that comes with finding a meaningful project. A simple google search will result in todo lists and Pomodoro timers, but I personally don't think that those are effective in inspiring motivation. Todo lists have been made a million times (literally) and don't provide enough of a challenge to really get your brain working. These projects are also very small and less impressive for a portfolio. Thus, you need to do some extra digging or sit down and ponder possible projects that would be useful for yourself or useful for the world. Some examples of projects I've made to solve some personal problems include a platform that lets you create stylish code snippets for online sharing (similar to carbon.sh) and an automatic SVG generator that produces polygons, waves, and particles in a specified size and color.
Conclusion 😎
Personally, I have utilized project-based learning to learn HTML, CSS, Javascript, React, and I am currently learning Redux and MaterialUI. For each of these technologies and languages, I found a few meaningful projects like a website for a school club or a physics visualizer to explore these technologies' most important features and learn how to utilize them when it really matters without having to go back on StackOverflow or Youtube to refresh my memory because I followed a course. Overall, project-based learning is extremely effective and completely free to try, so there is literally no reason to avoid starting today.
This is my first article, so please leave feedback about everything to help me become a better writer and developer for future articles!
Top comments (14)
I think the decision is heavily dependent on what you already know. Someone new to programming or new to a language/technology that is wildly different from their previous experiences will have a hard time navigating through the sources required to build a project. There's a minimum required to pull that off, and I think the books, tutorials, streams, and so on are more helpful to reach this threshold. That being said, once you are past this point, I totally agree that building projects is a magnificent approach. And I would also add something else: teaching is an astonishing way to learn things, especially if you wanna go deep.
I totally agree. You shouldn’t jump straight into projects if you’re new to programming. There should definitely be a tutorial stage where you get used to syntax or simple concepts before starting projects, but once you develop the right coding problem solving skills and learn how to look stuff up properly, your next step should be making projects.
I wouldn't say that the difficulty of finding a meaningful project is a con for learning by doing a project. I mean you could simply attempt the projects that courses teach you to do without reading the course material or visit web challenge websites. On the other hand, courses can save you a lot of time and head scratching later on since they usually cover the best practices for doing things.
You’re right that it’s harder to learn best practices with this method of learning, but I personally don’t try web challenge websites because I feel like they mostly offer the standard todo list projects and don’t let you express much creativity. I would feel more motivated to make something that I came up with or that I believe would be actually helpful to others.
I think learn by doing is one of the best way of learning. If you allow me the analogy, it is like playing a sport for fun and doing exercise as a by-product instead if exercising because "it is good".
As long as the expectations are clear that it is a project to learn, I cannot think of a better way
Finding the right project is so difficult. My first post on dev.to was asking about project ideas. After a lot of googling and wasting almost a month trying to find a project idea, I realized that I was wasting a lot of time. I didn't wrote a single line of code during that time period. And then I started working on my first full stack project which was an eCommerce site (just because I wanted keep myself busy coding). After that I built a social media web app that uses socket.io for real-time chat and posting. And believe me I got to learn a lot during the process.
You can check them out here,
eCommerce site: ozcom.herokuapp.com
Social media app: ozfam.herokuapp.com
Thanks for sharing!
Thanks for the write up and I can personally testify as someone who was suffering from tutorials hell and got liberated by project based learning. In terms of project ideas to work on, you can take inspiration from these 20 project ideas curated by Blog4Developers.
Exactly!!! Amazing article. Project based learning is the best. And if you combine the clarity of course with the unpredictability of building a project, you get the best of both worlds: Complexity management, as well learning best practices.
that's why I'm working on a course to create your own macos.now.sh.
Totally fine. I think the very first step for someone to learn a new skill is to grasp the foundations of any skill and then go for real-world projects to master it. I am sure this will be the best way to learn anything related to technology and also for other fields.
Hello, I've made a generator of ridiculous (funny) ideas for apps. You can find it here: stupion.com/
Great info. I personally feel combining them gives better results though. Whenever I'm taking a course, I try to build a "real world" mini project using everything I've learned at that point.
That's exactly how we built our Web Dev for Beginners course, which we are now using at Front-End Foxes School - aka.ms/webdev-beginners - some nice projects for everyone :)