Art School for Programmers
What if we made art schools but for programming?
Let’s back up. I would like to remake the way we teach programmers. I just don’t think a CS degree with lectures, homework and tests works well for teaching people how to program. I don’t think I’m alone here. Many programmers chafe under this traditional structure. They skip class; they get poor grades; they drop out.
This is where the pedantic peanut gallery points out that CS is not programming. Sure: It isn’t. But what if school focused on programming? What if we made it the priority?
Buried in the whole CS is not programming rhetoric is the implicit notion that programming is a small, insignificant enough topic that it is not worth a course of study. CS is not programming because CS is the real area of study while programming is the superficial nonsense that is not important. I don’t agree. Programming is a very deep field with a lot of fundamental aspects to it. There is a level of craft that we could be teaching in school that we are not. Far too many students leave their CS degree not knowing the first thing about how to program well.
I don’t mean to say that computer science should be excluded. Computer science is absolutely essential to programming. But I think it’s perfectly okay to put programming first. Much like physics is absolutely essential to an engineering degree, yet we don’t expect all engineers to major in physics.
Okay, what should a programming curriculum be? One source of inspiration is art school. I was never the art school type, but having talked to people who have gone, I’ve gotten a little jealous hearing about their experiences. What stuck out to me was how the culture was so focused around creation. People would create and revel in their creation. Their work didn’t always have to be the greatest, although there was a habit of critiquing and paying attention to technique. There was a sense of pride and ownership in this work; it wasn’t just perfunctory homework or a fill in the blank project. It was a reflection of their value as an artist.
I don’t see why there can’t be a programming school like art school. In a way, a lot of programmers are like artists. They build their own creations with their own style. They have a vision that they execute. They use creativity.
How could we transform the art school format into programming?
I’d keep a lot of the same classes, but change up the format. Instead of lectures, a course would be focused on implementation. Many courses would involve a single long term project. Sometimes these projects will be group projects, other times they’d be individual projects. There would be a focus on using professional techniques like code review, testing, continuous integration. Classes would teach programming languages spanning multiple paradigms like functional, imperative, logic, etc.
There should also be classes on other things that we don’t teach yet are essential to being a good programmer. Knowing how to structure and organize your data is absolutely crucial for performance, readability and reliability. A traditional CS data structures course will teach you that an array is better than a linked list for indexing. It won’t teach you where to put that array in your code or when you may want to combine it with another array. I’d also love a class on correctness. It’d go over all the different ways you can validate your code, whether that’s types, tests, invariants, etc.
I’d also let people take time to just create. That could be an amazing gift of its own. Imagine if you had time to just work on a project for six months. Not a startup, no. Just any cool project. With advisors and potential collaborators too!
Who should be the teachers? Ideally they should be programmers too. CS professors can range from hard core programmers to people who haven’t touched code in years. In a programming school almost1 every teacher should code. Ideally they should code pretty often. That is a demanding ask considering teaching is a pretty hard job too, but perhaps it could be in service of teaching. If the teachers build tools for teaching, they could in turn make their teaching load a little lighter.
Art schools also recruit working, successful artists to give talks or for residencies. Let’s do the same. Imagine if a school could get people like Andreas Kling or Niko Matsakis to be around students, to even teach students. That’d be so cool! It’s so odd that in a CS program we’re restricted to people who endured the hellish grind that is academia, or people who will endure the hellish grind that is being an adjunct.
If we could provide students with 4 years of instruction, mentorship, and practice time, I truly believe we could produce some of the greatest programmers on Earth. There’s that whole concept of a 10x programmer. I don’t know if it’s 10x, but there are certainly programmers who are far better than others. Partially that’s intelligence and dedication, sure. But it’s also education and practice. 10x programmers have the time and resources to become these phenoms. What if we made those two aspects available to more people?
And then take it a step further. What if we had all of these budding 10x programmers, but now they’re in the same classroom? What if they’re collaborating on projects and debating Rust vs Zig in the hallways? What could come out of this?
I’d love to see.
I could see a teacher responsible for algorithms or introductory math not needing to know how to code, but it might help for even those positions. ↩︎