*Update* This post was originally titled “Teach not coding but architecture,” which is still reflected in the permalink. I have however updated the title to reflect a far better one proposed by Jonathan Zittrain on Twitter.
My colleague Nicklas Lundblad has a good post this weekend on the virtues of teaching computer science. I felt so immediately jarred by a missing piece of the argument that I was compelled to sign in and blog for the first time in months (an absence I feel tremendous guilt about). His argument is spot-in, but misses a very simple yet critical addendum.
My own education in computer science of course influences my views on the matter. I often tell people, somewhat jokingly, that despite beginning my technical studies at an all-women’s college, I have an ex-boyfriend to thank for the decision. My high school sweetheart was desperately passionate about technology, and in my freshman year of college I made an attempt to bridge the physical distance between Boston and California by bridging an intellectual one instead. I endeavored to take the introductory CS class at Wellesley in large part because it was what he was so passionate about….but I promptly fell in love with the subject myself.
CS is a liberal art. This was a time-honored debate our professors engaged us in. Many of them came from engineering schools but wound up teaching the subject at a liberal arts school, and so had strong views on the subject. As do I, now. It is absolutely a subject that teaches you how to think—not just how to build. Building is a side effect of the discipline, a very useful one, but nonetheless a side effect. So here, I agree 100% with Nicklas when he says:
Computer science offers a new way to understand the world, to think about it as algorithms and data structures and data sets. That is extremely powerful. So should we teach kids coding instead of teaching them to cut and paste in word processing software? It does not seem to be a very hard question does it?
Where I disagree is that I don’t think coding is enough of a prerequisite. Like advanced biology or chemistry it should be included in the standard curriculum. But the core class we aren’t teaching our kids that we need to be is Internet Architecture—that should be like government or civics classes are today: a prerequisite for graduation.
After college I somehow found my way into MIT’s Technology & Policy Program. Like most other new graduate students, I spent the first few weeks of my time at MIT on the job market looking for a RA or TA position to help pay the bills. In our case, the TPP program required that we find a research advisor also, which usually dovetailed with finding an RA position. I stumbled into Dave Clark’s office one day to ask for a job, completely unaware of his stature in the Internet community. He asked if I’d read his paper about the end-to-end principle and I said no, could he tell me about it? What followed from that initial conversation was by far the most meaningful educational experience of my life.
For the next two years I would work with Dave on research topics relating to identity and net neutrality. Each week, I would sit down with him for an hour and get an individual tutorial on how the Internet worked and the history of its design. I learned early on what an IP address was, and how TCP/IP worked—amazingly, I wound up graduating college with a CS degree without understanding those concepts. I could code when I left college, and I could think about problems through this lens—it had undoubtedly changed the way I thought about the world. But despite a college degree in CS I fundamentally had not learned the basic governance principles of the Internet.
To appreciate the mechanisms through which information can be exchanged and manipulated is to appreciate the mechanisms through which people are able to organize and communicate. To appreciate the processes through which technical standards are agreed upon is not unlike appreciating the processes through which laws and regulations are agreed upon. We teach all high school students how a bill becomes a law. Why don’t we teach them how a packet becomes an email?
I went to college with a lot of women who were interested in politics and economics, who aspired to careers in public service, and whose interests lay in questions of how society organizes itself. The women I know who are now working in these fields are having and will absolutely continue to have an impact on the world. But I would dare any of them to name a field of public policy not currently impacted by or disrupted by the Internet. Understanding how to write code that builds an isolated piece of technology is like understanding how to read and write, or knowing the ins and outs of a particular subject like Biology. But understanding how the Internet works is like understanding the way society is governed. The architectural design should be taught in high school, the same way we teach about the design of the US Constitution.
This might seem like a radical recommendation, but there it is. Lessig wrote “Code is Law” which is basically the same idea, but had the unfortunate side effect of focusing everyone’s attention on coding. And I suppose that most engineers get to a place where they understand the architecture of the net by starting out writing code. But I don’t believe that being able to write code is a prerequisite to understanding the design of the architecture, and therefore in my view teaching the architecture is the mandatory prerequisite we don’t have yet. We should be equipping people to answer the simple question: how does the Internet work?