Learn to Think Like a Coder with Project-Based Learning
Contrary to what many of us experienced in high school, there are more ways to learn than listening to boring lectures and taking standardized tests. Yes, the traditional lecture method of learning is easy and straightforward: an expert tells nonexperts what they should know, and the nonexperts are expected to retain this knowledge and prove it with a test. It makes sense, and that is why it is the most prevalent method in our education system.
But what does this really teach? More importantly, is it the best way to teach software engineers - people who rely on a mix of intuition, knowledge, rapid research, and cooperative learning with mentors and their team? Is it possible to use this method to teach people not only how to code, but how to think like software engineers?
What if you could learn in the same environment that a software engineer would learn in, developing your skills as part of a team like a software engineer would? A well-balanced mix of leading your peers when the concept makes perfect sense to you, and having your peers support you when you are solving a tricky problem. And an environment that doesn't test your knowledge with multiple choice questions, but rather assesses your ability to come up with real code solutions through challenging projects?
That's Holberton's method of project-based and peer-based learning.
First, let's acknowledge the elephant in the room: there are no formal teachers at Holberton. There are TAs, there are professional advisors, there are qualified software engineers to help nudge you in the right direction, and even our CTO, Guillaume, takes an active role in supporting the education of our students. But all of these people aren't there to tell you how to do your projects. After all, we're training software engineers: people who are not only trained in how to write code, but in how to solve problems, and how to learn new and unfamiliar technologies.
Project-based learning is just what it sounds like: you learn entirely by doing a series of projects of increasing difficulty. The goal of project-based learning is to help you learn by doing. Just like how any artist learns by starting with small simple projects (think starting with "chopsticks" as your first song on the piano), the goal of project-based learning is to learn through practical application, then ramp up the difficulty just a little bit each day.
For example, we start our students with the C programming language (considered by some as one of the less sexy languages of today, but just about every other modern coding language is a logical offshoot of C) and the inevitable first "Hello World". From there, you challenge yourself with slightly harder and harder challenges until you're tasked with writing your own printf() function. From there, why not be tasked with coding your own shell? By the end of our C curriculum, not only do you know how to code in C, but how C fundamentally works. You don't just know the what (C language), but also the why and the how. And each step along the way you will have rolled up your sleeves, dived right in, got into the code, and learned through doing the exercises. And in the future, when you have some Python code that is simply just not behaving right, instead of working at the surface level and trying to figure out what Python is interpreting, your knowledge of C lets you know what's happening in the background so you can quickly and accurately get that code to a working state.
Peer-based learning is a less obvious concept, but from our experience, exposure to this learning style separates a great engineer from the good ones. When you get to your professional career as a software engineer, there will be none of the aforementioned dry lectures and boring tests. It will be working with a team, learning from mentors, and sharing your experiences. You'll learn from your peers, and when it becomes time for you to be the mentor to the next early-career software engineer, will you know how to help her understand and grow into her new role? That's the core of a peer-based learning system: knowing how to cooperatively improve your skills and the skills of your team. How to ask for help and when to offer help. How to take a problem apart, look at each piece, figure out how to learn about each piece, work within your team's strengths to address each component in the most efficient fashion, and then put it back together in a functional manner.
We believe peer-based learning and project-based learning are exactly the methods that should be used to teach the next wave of software engineers. And with Holberton School graduates ending up at companies like Facebook, Apple, Google, Twitch, Pinterest, MongoDB Tesla, and so many other top tech companies, we think the tech industry agrees with our methods, as well. Programmers need to be mentally flexible, be able to learn new technologies almost every day, and be prepared to come up with novel and efficient solutions. This is why an education that teaches you not only the skills to launch your career, but the skills to maintain your career for years to come, is so critical to your success.
In the end, when you are looking at all of your education options for becoming a software programmer, take a step back and look at the whole curriculum. Learning the languages is just half of the solution. How it's taught, and how you learn, is just as critical. Be real about your learning style: if you do great in lecture-based classes, then the best thing you can do for yourself is to find a coding school that teaches through direction. On the other hand, if you learn best by digging in and applying what you've learned, take your time to find a school that teaches the way you learn. But regardless of which education you choose, it would be wise to keep peer-based and project-based learning concepts on your radar: these concepts may be just what you need to keep yourself at the front of whatever tech wave comes next.