Today is June 19, which marks the 255th anniversary of the day celebrating the emancipation of those who had been enslaved in the United States. When I first heard that JPMorgan Chase instituted a company-wide half day for Juneteenth, I was excited to enjoy a longer weekend and began thinking about what to do with my Friday afternoon off. This was up until Bill Clerico, WePay CEO, encouraged employees yesterday during our All Hands meeting that this extra time was a great opportunity to reflect on what Juneteenth means.
During that same meeting, our VP of Engineering and Product stated that the software engineering industry is full of terms rooted in slavery. I was shocked. The thought had never crossed my mind, except for the "master-slave" relationship in some transmission technologies and the concept of a "master" branch on Github. I have never thought about how terms used in the software engineering field could be rooted in slavery, so I figured I would dedicate this post to finding those terms. Even if I am unable to convince the industry to change these terms, recognizing these terms is a first step in the right direction.
Master in Git
Git has a concept of a "master" branch – this is typically the production branch – which we push code to when the code is ready to be deployed. Four days ago, Github abandoned the "master" term to remove references to slavery. I never thought about why this branch was called "master." Most developers never push code to the master branch (they push to the "develop" branch instead); non-master branches are not called slaves. I think the reason the term "master" stuck is because it is the default branch and each repository only has one master branch; it also contains the "best" code which has been tested and is ready for production. Given these characteristics of the master branch, I think the master branch should be renamed to "production" or "default."
Outside the software engineering industry, the term "master" has also been abolished. For instance, in 2016 Yale University changed the title of "master" in residential colleges to "head of college". The new term more accurately describes the function of the role. I think that our Git branch names can follow this pattern of describing the function of the branch.
Blacklists (and Whitelists)
I had a discussion with a teammate earlier this week about how to ensure that our team's microservices could respond to requests from inside our company's VPN but block everything outside the VPN. The solution was to use a whitelist of IP addresses. At my previous job at Built Robotics, I helped build the user-facing application to control our robotic excavators. We didn't want customers to be able to access certain robots, so we blacklisted certain robot id's.
These terms are so prevalently used in the software engineering industry that I've never stopped to think about why. Blacklists are used to deny access to a superset of items, while whitelists are used to allow access to a superset of items. "Deny" has a negative connotation, while "allow" has a positive connotation. Following this logic, blacklist has a negative connotation and whitelist has a positive connotation. Why make one color superior to the other? I believe that instead of describing the lists by color, we should describe them by function. Let's rename them to "exclude list" and "include list."
Did you know that the term "robot" is the Czech word for "slave"? As someone who completed a master's in robotics and worked at a robotics company, I'm disappointed for not having been aware of this.
White Hat vs Black Hat Hacker
In 2016, I wrote a series of posts about my views on ethical hacking. White hat hackers are out to do good, in contrast with black hat hackers who are out to do bad. Why is the hacker wearing a white hat good? And why is the hacker wearing a black hat bad? It turns out that in 1950s westerns, bad guys wore black hats and good guys wore white or other light colored hats. Where did the 1950s westerns get that inspiration from? I'll let you Google that one because I honestly don't know.
I would prefer to use the term "ethical hackers" and "malicious hackers" because it more accurately describes their intents.
I am grateful for JPMorgan Chase providing me with time to reflect on biased terms used in the software engineering industry. Before doing the research to write this post, I could only think of one problematic term; now I have compiled four. What are some other software engineering terms / concepts you can think of that are rooted in injustice?