Update: from NAND to Tetris
I think I just found the perfect curriculum for high-school students: a new online course called NAND to Tetris. It’s composed of 12 modules that start teaching logic gates and end up at Tetris program, all on an operating system, compiler, and assembler that you wrote by yourself. The learning material is rich and terse and the projects are interesting and practical. If you’ve ever wanted to intuitively learn how computers work, here is your chance! Check it out!
Just a couple weeks ago, Estonia introduced their new curriculum for computer science (CS) education. They start teaching programming in the first grade. In the U.S., startups that teach CS have been showing up left and right. Even the mayor of New York City is learning to code. Programming has never been more popular, and yet most American high school students don’t know how it works or what it can do.
This fact is striking because technology is now almost ubiquitous in America; in 2010, three out of four teens and adults had a computer and 82% of high school-aged students were on social networks. Additionally, the U.S. leads the world in tech availability, use, and research: we have the highest number of computers in the world, the majority of the world’s large tech companies like Apple, Google, Microsoft, and Intel, and a leading number of tech startups. Yet, there is a weak link in our chain of innovation: America is still miserably inadequate in preparing high school students with a CS education.
Despite the huge upsurge in computers and smartphones over the past decade, the number of students taking CS courses at public schools in America has actually decreased. In 1990 and 2000, 25% of students took engineering and computer science courses; in 2009, enrollment dropped to 19%.
High school students of this generation are technology natives, the first to grow up in a world connected with powerful computers and the Internet, yet we barely know how it all works. “If a user knows how to make the machine work, he or she is computer-literate. But, of course, the deeper literacy of the programmer is far more powerful,” says Dan Rowinski of ReadWriteWeb. “Those who don’t know how to code soon will be in the same position as those who couldn’t read or write 200 years ago.”
Why is this happening?
Because high school CS programs are boring and tedious. The most popular CS course in high school, AP Computer Science, includes number base conversions, object-oriented paradigms, and compilers. What’s the use of trying to understand how number systems work in a computer if it will just confuse students? These concepts might be helpful for some, but are completely unintuitive to most. And nowadays, they are increasingly unnecessary.
In the 1980s, programmers needed to understand every process involved in running a computer, because they had to masterfully craft every line of their program due to limited machine resources. Now that computers are so powerful, micro-sized efficiency no longer matters. We no longer need to understand such low-level computer topics to make amazing programs, so why are they still a requirement?
Other CS courses teach how to be a consumer of technology by just clicking buttons on premade programs. This approach is even drier, and on the other end of the spectrum: way too practical and slow. Learning how to use Microsoft Word might be helpful for your grandmother, but I’m sure most high schoolers can figure out how to change the font size on our own.
The traditional model of CS curriculum is technical and theoretical, of little immediate use to students. This is despite the fact that computer-mediated interaction has become so central to our lives that technology has become more about information and ideas than technicalities. Obviously it would be wonderful if everyone knew how computers work from the transistors on the processor to the pixels on the screen, but for most it would also be unfeasible.
The way CS is taught in America today is fundamentally flawed and does not inspire innovation. Current courses are teaching programming concepts like a foreign language devoid of any functional meaning. It’s like a English class that only teaches vocabulary. We need to revise our approach to reduce the amount of vocab, and instead emphasize meaning by talking, reading, and writing. Programming is communication, and requires some syntax and grammar, but also a proficient conversationalist.
The best CS curriculum for the new generation won’t focus on trying to meet arbitrary standards set by some education giant. It will take into account that computer programming is so powerful because it means different things to different people. In order for students to be successful at programming, curriculums need to stress intuition, creativity and practicality. But most of all, CS classes needs to let students learn by discovering things for themselves.
This new era in CS education is not without challenges: teachers will need to be trained, infrastructure needs to be setup, and school boards convinced. But ultimately, if we move to encourage teens to become developers of technology, we will become prepared for the future.
As the tech industry continues to grow more important than ever, more jobs, companies, and people will depend on it. The students of future generations need to have the tools to understand our current technology to be able to pioneer new ideas. If American schools don’t do something soon, innovation in the United States will quickly fall behind.