Last week I spoke on behalf of Replit at the ASU+GSV summit, one of the largest education technology conferences in the world, on the topic "Is coding an essential modern fluency?". For me and the rest of the panelists (Mike Smith of Harvard, Taniya Mishra of SureStart, and Krishna Vedati of Tynker) the answer is an easy and obvious YES. And I'm guessing if you've been coding along with Replit's journey, it's a yes too.
Programming is essential. Full stop.
We all believe that within the next decade programming will be an education basic for all students, everywhere, just like reading, writing, and arithmetic.
Now before I dive in (and at the risk of being a little pedantic), I want to quickly distinguish coding vs. programming. Coding is writing instructions for a computer in an esoteric language, using proper syntax. Programming is creating software to do things. Even block-based languages like MIT Scratch and no-code tools like Webflow are "programming" (if not really "coding").
Programming is essential. Coding is just a way to program. And while we're not yet at a point where you can expressively program without doing some coding, still the fewer lines of code you have to write, the better.
Today, you can't understand the world without understanding a little bit about computers and how they work. This will only get more true. After all if you don't understand computers, you might even think the internet is just a series of tubes...
Not understanding programming will be just like not understanding basic physics or how to read. Without physics, cars passing you on the street would be like magical metal boxes. Whithout literacy, this blog post would be nothing but cryptic gibberish. But just like you don't have to be a theoretical physicist to understand gravity, you don't need to be a computer scientist to code. You don't need to be able to operate an industrial printing press or be a computer hardware hacker. You don't need to write novels or scientific papers or philosophical treatises. And you don't need to architect elegantly designed applications as a software engineer.
You just need to be able to program. A little bit. Just the basics, really.
- You should be able to make a webpage or app for your business as easily as you can write a blog post, an email, or a restaurant menu
- You should be able to invent new video games as easily as you can new card games
- You should be able to automate repetitive tasks (like this team bonding Slack bot built by one of our business interns)
- You should be able to express yourself with apps or art or whatever inspires your creativity and curiosity
- And you should be able share your creations with the people you love (like this holiday card from one of our business admins)
Of course some will go beyond those basics, become software engineers, and build even more amazing things!
Computers, particularly hackable computers, can be liberating and empowering for people of all skill levels. (Of course, I mean
hackable in the sense of controllable and modifiable, not in the sense of vulnerable to security breaches. It's time we reclaimed that word.)
Computers also don't care about who you are or how prestigious your background is. Anyone can build something great, bring positive change to the world, and get wealthy by creating economic value for others. This is why we should make computers easier to use, accessible, and available to everyone. More programming education = more justice.
And we all just learn better with immediate, non-judgmental feedback. Computers make this possible at scale. Early "teaching machines" and educational computer systems were built on this principle, and it continues to influence modern pedagogical techniques, like PRIMM and POGIL.
So saying programming is an "essential fluency" feels... well, pretty uncontroversial (at least not to us).
And universal programming education seems inevitable. Global internet penetration continues to grow (Starlink will accelerate this), and anyone with internet access can learn to code or plumb the depths of human knowledge in any subject, entirely for free.
In 1997, Alan Kay said the computer revolution hasn't happened yet. He was talking about the changes that would come from advances in computer science. Since then programming languages have gotten more expressive, computers have gotten more powerful, more people are programming, more businesses are software businesses, and more schools are teaching computer science. But we're still not there yet. We're just getting started.
So perhaps a more insightful question would be: "Why won't everyone be able to program sooner?"
I can only share my own experience, but I think it's telling. I'm not an engineer, I'm a business
cat person. I studied economics in college. But I fell in love with computers as a kid. And my early experiences have totally shaped the way I view and understand the world.
I joined the C++ club in 7th grade (in the early 2000's) and mostly made simple programs that beeped at you at high pitch. Then in high school, I took every CS class my school offered (I was lucky to go to a well-resourced magnet school) and spent a summer creating a (sloppily coded) game. But I gave up when it came time to publish the game on our school's game website. It was too hard. I ended up getting a friend to do it for me. Publishing it on Replit, on the other hand, was too easy. Sharing your work is essential and still unreasonably hard. Even Github + Digital Ocean is too much for beginners, not to mention more complicated stacks...
When I took AP Computer Science, we were still handwriting code on paper for the exam. (By the way, they're still doing that today.) One teacher even told us that her students usually test their code on Replit before handwriting it and that she has to explain to them that this is cheating. Insane! Not only is the course content not teaching students how to do any of the "basics" I listed above, it's teaching them habits that will make it harder for them to work and collaborate effectively later. It's no surprise that this teacher also told us that even her most promising students start to lose that spark in their eyes when they take AP CS.
Then after some early internships where I wrote VBA scripts to automate Excel spreadsheets and Powerpoint presentations, I didn't code for many many years. But last spring when I joined Replit, I started relearning how to program.
A couple weeks ago, I wanted to add a new text-only page to the Replit website and figured I'd take a shot at it myself. Writing the new code was easy, but the non-programming parts of software engineering were not. I spent over an hour updating my local dev environment, decipering error messages about incorrect package versions, and struggling with the proper git commands (in the proper order). And that was with a ton of help from one of our (very generous) engineers. Luckily I'd already installed the necessary programming languages, picked a text editor, and had the right permissions on Github for a prior project. This would have been pretty much impossible if I were a total beginner...
And then last week, at one of the largest education technology conferences in the world, there was surprisingly little focus on teaching programming. After all, it's programming education that will empower the next generation of entreprenuers, educators, and policy makers to transform education with dazzling new innovations that they will bring to this conference in the coming years. And it's programming education that will help distribute the gains of the digital economy more equitably, provided we continue our efforts to expand access to quality education.
So to answer this new question, why not sooner? Programming is still too hard. It's still too mysterious. It's too individual and isolated. It takes far too long before you can have something you'll proudly share with others. Too many schools still don't offer computer science classes. And there are far too many in the coding world who cling desperately to the old ways, bullying and intimidating beginners and outsiders (something that dates back to the batch-processing IBM "priesthood" in the 1950's and 60's and continues on popular communities like Stack Overflow today).
What if, instead, things were different? What if coding was realtime and multiplayer? What if you could easily check the source code for a cool app? And remix it? What if you could instantly share your creations with friends, family, the whole internet? And what if the community was friendly and welcoming?
That's what we're working on at Replit. And we're not the only ones.
We're joined by big companies and small startups. Businesses building better dev tools, low-code tools, no-code tools. Computer scientists inventing new abstractions and better ways to program. K-12 teachers and college professors, including many who are learning as they teach. Bootcamps. Professional engineers who are blogging, mentoring younger colleagues, volunteering in schools, becoming teachers themselves. And all the helfpul online communities (Replit's Discord and Teacher Community, HN, r/learnprogramming, Lobsters, etc., etc.).
Now I'm not a naive utopian, but I am an optimist. I believe this will be a better future, and that big things and little things are getting better all the time.
We're all doing our utmost to pull the future into the now. And we're helping people fight our natural tendency to dismiss, distrust, or even fear things we don't understand. Programming can be approachable. It can be easy. It can be fun.
And it will happen. Programming will become an essential modern fluency. And until we get there, we'll keep hacking away.
Thank you for being on this mission with us. As always, happy coding!