Last week, the British government’s new “Year of Code” initiative got off to a rocky start. Critics raised questions over the feasibility of the new national curriculum, and the program’s director admitted she didn’t know how to code.
The debacle took front and center in a recent PandoDaily article titled, “By September coding will be mandatory in British schools. What the hell, America?” It raised the question as to whether American schools are falling behind in the new digital arms race and what should our schools do about it.
A national mandate on coding is nice in theory. But simply adding coding to the curriculum will not create coders.
Schools teach more than facts and hard skills. They are wired to teach in a certain way, and this wires students to behave, think and learn in a particular way as well. One could say the traditional school structure resembles an “operating system.”
In America, this OS is incompatible with the habits of thought that make good programmers. And if we want to honestly teach students how to code, we must first teach them to think like a programmer. It won’t work by having our education institutions simply download a “learn to code app”.
Here are some of the lessons I’ve learned from my experience starting a school, Dev Bootcamp, that has taught over 450 students how to code.
Reward failure instead of punishing it
Many students come to our program scarred from their past educational experiences in the old operating system. They are afraid to make mistakes, judgmental about wrong answers and uncomfortable with the confusion that plagues the life of a programmer.
In the new operating system, we must encourage students to make mistakes, as these mistakes are the only way to learn.
Sadly, the students with the most rigorous academic backgrounds are the most damaged. The more ambitious the student, the more they are reshaped by the operating system of the schools they inhabit.
Programmers actually follow a pattern called “red, green, refactor” which means you start with incomplete software (red), make the software work (green), and then refactor the code into something simple and elegant. Veteran programmers actually start the development process by writing a test that fails with the current code base.
Intentionally failing these tests flies in the face of traditional education where “tests” are considered be-all, end-all measures of people and “failing” means the student is less than worthy.
Create a culture of collaboration, not competition
In the old operating system, copying someone else’s work is considered cheating. As a web developer, everyday you are modifying other people’s code, looking up answers to questions and building on open-source software which thousands of other people have already laid the foundation.
Most people think life as a coder involves long hours of working on your own. And while this environment exists, the new era of programming is a team sport. Whether you’re working in pairs, or sprint planning with your team, there is always someone to turn to to help get you unstuck or help show you a better way.
At Dev Bootcamp, we had an incoming student frustrated by her slow progress learning to code at home. We found out she would work at a problem for six hours, alone, before giving up. We had to train her in how to reach out and engage with resources around her.
After a teacher provided her a set of guidelines on how to get unstuck, she responded with an email saying: “Rewiring my brain. Getting help is not cheating. Getting help is not cheating.”
Teachers are learning, too
In the old operating system a teacher is the source of knowledge on a given topic. In the new operating system the teacher is an experienced practitioner who guides students towards finding the answer.
At Dev Bootcamp, it’s common for students and teams to learn faster than we can teach them. Students have built working products on technologies that our staff have never used. Since we don’t tie them to use existing products, they frequently dive into emerging technologies with names like WebRTC or Snap.svg that can’t be deployed on the browsers in widespread use. Yet.
In some cases, our students are using software libraries that are days old, communicating with the authors directly. Most of the frameworks we use are less than five years old. Few will still be taught five years from now, and none will be the same a few months from now.
Instead of being embarrassed of their ignorance, teachers must create a culture of lifelong learning by example. In software engineering, constant adaptation is the norm. Our teachers are not done learning to code. They never will be.
Let students build, and get out of their way
We require students to take ownership of their own learning. At Dev Bootcamp, we have the “two feet” rule: Anytime you’re not learning something or building something, feel free to leave in order to move your learning forward.
This might be unfeasible to literally implement this in schools (we should not just let bored students pack up and leave). But when you create a new type of learning culture that encourages students to stay as long as they want--and after the bell rings--this passion and internal drive for learning stays with them well after they leave the program.
In the end a government mandated curriculum may expose more children to coding, but the school’s curriculum is not as important as a school’s culture.
Yes we need to expose students how to code, but more importantly we need to expose them to a new way to learn.