💾 Archived View for inconsistentuniverse.space › essays › teachprogramming.gmi captured on 2023-07-10 at 13:21:23. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2021-12-03)

-=-=-=-=-=-=-

Programming for autonomy: or, why I care about teaching programming

In this post, I want to expand on my views for why I think programming **is** an important skill that should be included among the basic school subjects. This is like a spiritual successor to my old post Against Chromebooks, where I talk about the reasons why I'm fundamentally against using Chromebooks as the primary computers in schools. What I want to say here is a bit bigger, broader, and more philosophic in nature.

Against Chromebooks

So why teaching how to code? Let me start by first stating that "because jobs" is a _bad reason_: the current hunger for warm bodies that the tech sector has is not a good reason for teaching programming in schools. Learning how to code isn't a get out of poverty and oppression free card, for a lot of reasons. Wages might be currently good, if you can find a company that won't fire you for "culture fit"---read as "the slightest deviation from white patriarchal norms"---and can find a job at a company whose very existence isn't deeply unethical. In that category I put not just the obvious targets like the Googles, Amazons, and Ubers, but also the ten thousand startups engaging in modern phrenology, cryptocurrency outfits burning through energy at a rate that makes heavy industry blush, or on a smaller scale even the Grammarlys of the world trying to strong-arm people into conformity of expression and thought.

But, but!, wages aren't always going to be disproportionately high. As much as there are still programmers who think of themselves as a higher caste, CEOs are putting funding into code schools in order to eventually flood the market with enough new programmers that starting wages will be suppressed. On this point, it will be ironic if the tech sector insistence that they have elite jobs that don't warrant unionization will end up putting their wages and security lower than blue-collar unionized labor like electricians.

I can't in good conscience, then, suggest that people learn to code for money and security. It _might_ work out that way for them but they also might be heading into a life of burnout, undermining, and long periods of being labeled an "independent contractor". The wealth the tech sector promises isn't an equally distributed opportunity.

So, now that I've gotten that rant out of the way, why _should_ we teach youth to code? Why is it an important skill? To me, the fundamental answer is _autonomy_ but that autonomy has two different sides: autonomy of action and autonomy of epistemology. The first is about the ability to control the tools and platforms that make up our lives. This is what I've written a lot about in both Against Chromebooks and Reclaiming Autonomy

Reclaiming Autonomy

To summarize my views a little, I take a very Illich tinged view that everyone should have say-in and ownership-over the systems and tools that shape their lives. Today and for the forseeable future many of those systems and tools are computational in nature: the smartphones we carry, the algorithmic selection that drives our media, the facial recognition tools companies and police alike are pushing on us, the platforms we get locked into.

For example, I don't have a gmail account because I like using gmail or google. I have a gmail account because all _three_ of the jobs I currently have require it to be able to get my work done: I need to send files through google drive, accept invites through google calendar, log in to a google account to edit shared documents. Yes, there are ways around using a lot of these things but not when you're the only one who wants to. It's an example of a consensus problem and the platform monopolies like Google have absolutely taken advantage of the human need to settle on a single solution to a problem. The end result, though, is that we've centralized the internet so that it's no longer fault-tolerant and we've contorted ourselves to the limitations of these---actually very mediocre---tools. A single company gets to control how we work together, and if tomorrow they said "okay google docs is no longer free" how many people do you think would feel like they had no choice but to pay?

And I've made this point before, but it's worth re-iterating that smartphones are the single most egregious example of how we've been shut out of ownership over our tools. We literally carry around glass and metal boxes filled with sensors and greater computational power than a desktop from ten or fifteen years ago but it's very hard to actually _do things with them._ Even if you write your own applications, which is a financial investment on one of the two major platforms and regardless requires access to a separate computer on either, most of the systems are designed to prevent you from taking data from one program and making it work with others. It's not like the Linux command line where you can have your programmers share information in plain text with each other, where it's possible to just have programs be modular things you combine with small bits of glue code. The very existence of services like IFTTT prove the failure to control all the smart devices we own, as we need a separate service that's made deals with individual companies in order to get access to our data that's being collected locally in our own homes on our own networks. We have to pay for the right to make two computational artifacts physically next to each other talk. At best, it's absurd, but at worst it forces us to submit to surveillance, control, and violations of our bodily autonomy.

So in terms of the autonomy of action, learning to code---among other skills related to mechanics and electronics---are important for creating alternatives to coercive technologies.

But what about the autonomy of epistemology? Here I'm drawing more from Turkel's work on epistemologic pluralism, Papert's work on computers as "material to think with", ideas that have been stewing in my head since reading about computational metaphysics, and work I've read from the field of ethnocomputing. I think it's fair to call ethnocomputing an offshoot of ethnomathematics, which itself is a field concerned with both the practice and epistemology of mathematics outside what has become the dominant western tradition.

There's a lot of shared values between Turkel's epistemologic pluralism and ethnocomputing. Both emphasize that there are many ways of knowing and modeling the world, different ways of experimenting and building, and that none of these should be considered somehow inherently superior or more refined than the other: they can simply be different. Another thing that I think both have in common is an emphasis that teachers are not fonts of knowledge but are there to help with exploration of solutions with tools.

The particular paper on ethnocomputing that got me thinking about autonomy was _Modeling in Ethnocomputing: Replacing Bi-directional Flows with Recursive Emergence_. In short, it's a paper about creating culturally-specific computational tools---in this case a blocks-based language useful for creating designs like those used in Adinkra symbols/stamps---and how the flow of knowledge went back and forth between the designers of the coding tools and the youth, changing features of the programming environment to better aid the kinds of designs that youth wanted to create.

The paper is a good one but it got me thinking harder about the ways that programming environments, computational tools, are themselves opinionated about epistemology. Yes, you can create systems like Logo and Scratch that try to be very broad in terms of what can be done and how you can do it but there's still basic assumptions, metaphysics really, baked into how you should relate to the code and how objects of the program relate to each other.

Computation gives us a way to extend our senses and our thinking, of modeling the world and exploring ideas, which makes it even more important for everyone to have some kind of say in creating the tools we use to express computation. In other words, if we want epistemologic pluralism then we also need to recognize that a programing language itself is a part of that epistemlogy. Contrary to what I think some people might expect from a former programming languages researcher, I don't want there to be some kind of one perfect language that conquers the world. I think what would be best is to have a proliferation of languages and environments, that can be integrated into all sorts of ways of knowing.

But creating this bounty of tools expressing different ways of thinking is itself a bootstrapping problem: you need to learn to code first in some framework before you can start creating your own. That's why I think we need to start making programming as common a skill as learning to express yourself in writing or art. I'm not saying everyone will, or necessarily needs to, latch onto these skills and use them but they should be available to everyone. Anything less I think undermines the goal of wider autonomy.