There’s a misconception that the whole job of software developers is to write code for a living. It’s why they get confused for “coders”—but being a developer isn’t just about generating line after line of code. It’s about seeing that complex processes really boil down to logic puzzles. Then it’s about finding a solution to those puzzles. Basically, it’s about being really, really good at solving problems.
As a school that teaches people how to be developers, we can’t just teach our students code and call it a day. That would be really easy. It’s much harder to introduce them to a whole new way of thinking. We’re always looking for new ways to show them that programming is more than just “coding”—and to help them become really great problem solvers.
Here’s are a couple things we’ve learned so far about teaching folks a new paradigm for approaching problems.
Knowing how to use something is not the same as knowing how it works. There are a lot of patterns in programming. When you start learning, you can either just ignore designs patterns or try to implement them without necessarily knowing how they work or why they exist. But actually understanding the problem is more important than the code you use to solve it.
When you’re learning, spend time figuring out how and why things are built as opposed to just using them. As part of our curriculum we have assignments specifically designed to make students do things they haven’t learned yet. To close out some of the labs we assign, they have to come to a solution on their own (we’ll tell them a simpler one exists the next day :). It’s also why we teach Ruby before we even touch Rails. If students know Ruby, they can build Rails apps. And because they can build Rails apps, students know how they works and can fix them when they breaks.
Teaching programming as an end-to-end process is really misguided. Developers constantly have to learn new stuff—and there isn’t usually someone around to teach them (other than books, and of course the internet). We always tell students to learn new technologies that weren’t necessarily covered in class because it’s something they’re going to have to do anyway (for now, there’s almost certainly someone on staff who can help out). But beyond just saying, “go learn Angular,” we try to mix things up and ask students to do all kinds of new things.
All students have to keep a technical blog (Amber’s, for example) and learn how to express technical concepts in words (and sometimes GIFS). Last week, they learned improv and dance. This week they’ll learn how to pick locks. In the past, we’ve made students try DJ’ing and knot-tying like sailors who only have very short pieces of rope. Constantly trying new things is the best way to feel OK with being a beginner (read: being very bad at things).
In practice, these activities can be anything that forces you to think in systems and patterns, like designing a board game, playing the piano, quilting, or making very detailed cat statuettes out of papier-mâché. And it’s as valuable as it is fun.
Ultimately, for adults who are just sitting down at the command line, learning to program means re-learning how to learn. Even the most experienced programmers don’t know everything. There’s always something new to wrap your head around—whether it’s an update or a new technology. It’s about feeling just fine out of your comfort zone, understanding the fundamental concepts it takes to learn a new programming topic, and approaching every new situation (whether it’s learning Swift of developing a Ruby extension in C) as a problem to be solved.