Decolonizing my language

One way to define personal growth is “a regular unlearning of entrenched falsehoods in favor of newly discovered realities”.

For too long I have blithely used language that was built up in a culture of racial and other forms of discrimination. I intend to deconstruct it, destruct the flawed parts, and erect in their place a vocabulary that is egalitarian and inclusive. The effort is personal. However, if you would like to join me, I welcome you.

Computer science has a rich technical vocabulary that borrows from many other disciplines. It is natural that as a young discipline, its jargon has grown mostly through conspicuous accretion rather than organic development. The appropriation from the language of mathematics (“functions”, “sets”, “operators”) is natural: that’s how comp-sci was born. Also, since so much modern computing happens in the office, there’s a lot of borrowing from traditional office terminology (“desktop”, “files”, “folders”, “recycle bin”). We also borrow liberally from specialties such as finance (“technical debt”) and other engineering disciplines (“smoke testing”, “design patterns”).

Because of this relentless borrowing, computer science has some terms that have a deeply troubling background: terms that were racist and exclusionary in their genesis. We seldom think of the etymological roots of these terms. However, that’s not an excuse for continuing to use them. As computer science becomes popular and mainstream in society, these racist terms gain new leases on their loathly lives. To destruct these terms is something we owe to the society we occupy and contribute to.

Here are a few examples of racist and colonial terms that I plan to stop using.

Branches in a version control system
The unfortunate term “master” is used to designate the main branch in a version control system. More regrettably, sometimes “slave” is to describe an architectural aspect of Continuous Integration where many build agents “serve” a “master” node. I’m happy to note that GitHub has decided to replace these reprehensible names (and others) with names that are more inclusive and less triggering.

Fixing problems before they get out of control
Software developers favor an approach where small problems in code are fixed immediately and relentlessly before they grow and become too daunting (and too costly) to address. It is a worthy approach, with a problematic name: it’s called “no broken windows”. This is rooted in racist and scientifically unsound policing policies. [1,2] We can do better: I intend to use “leave no trash” or “pay down the tech debt” instead.

I have written elsewhere about the problem with terms such as “code-monkey”. I have already excised most such uses from my vocabulary. I intend to keep doing so.

Holding one person responsible
In decision-making, we often need to know the person who is ultimately responsible for a task. The goal is not to apportion blame, it is to ensure that decision-making and authority-delegation work as expected. Again, this is a noble goal with a particularly egregious name: “one neck to choke”. The sordidness of this expression needs no elaboration. I intend to use “the buck stops here” or simply asking “who’s responsible?” instead.