Founding father of virtual reality, Jaron Lanier, writes in the introduction about what “nerdism” is like. Lanier says,

“Life becomes a problem-solving activity, and the problem is some sort of lack of optimization.”

He also mentions that computers have this uncanny ability to create the illusion that we are all-seeing. This immediately made me think about how social media has the ability to polarize groups of users, especially in regards to American politics. This post from the Greater Good Magazine, explains that the polarization may be subtler than we think, but major social media sites are not actively working to “bridge” the polarized groups, to fix the problem.

As software engineers, we have a lot of power and with that comes a lot of responsibility. However, sometimes lives or data companies are responsible for is not handled with the appropriate care. Think of the recent issues with Boeing’s best-selling, 737, planes where the software has actually caused the planes to crash in an attempt to keep the planes from stalling or the Equifax breach in 2017 where sensitive personal information of 143 million Americans was exposed. Some of this could be due to strict deadlines to ship imposed on software engineers or the lack of understanding or care by engineers about what they are actually building.

Ullman describes the typical thought of how software is created, that is, via a “black-box”, where software is magically produced. “Then it moves to programming.” As software engineers, sometimes we are too caught up in how we build something, instead of what we are building. Ullman says,

It has occurred to me that if people really knew how software got written, I’m not sure if they’d give their money to a bank or get on am airplane ever again.

Ullman also mentions that in general the culture around building software is to make money, not to solve “real”, social problems. And that when we do build software to solve social problems, we force users to conform to how we think the problem should be solved instead of talking to the users of the software. We, as software engineers, are obsessed with problem solving and therefore think we can come up with a better solution, sometimes without talking to the end-users.

Software systems force users to conform to a limited set of defined options by the owners of the systems, e.g., male, female.

…the more we surround ourselves with a narrowed notion of existence, the more narrow existence becomes. We conform to the range of motion the system allows. We must be more orderly, more logical. Answer the question, Yes or No, OK or Cancel.

As software engineers, we take the malfunctioning of software as personal slight, cursing at the engineers before us who wrote the broken code that we have now inherited. “How could you be so blind?”.

This is something recently that I have talked about with peers. While a system may be poorly written or buggy — are you sure it’s a bug and wasn’t a feature at that time? — you have to consider when it was written. The constraints, the pressures, the discussions and resources available. While many of these things should be documented, that is not always feasible or seen as a good use of time when making the decisions. You, as the creator of future loathed code, need to defend your future self. The blame should not be put entirely on you, just because you are the name in the commit log.

Something that I have already had to fight with is individuals or groups of individuals who are attached to a single technology, wanting to use it as a universal solution, even when there are much better alternatives.

Ullman says when discussing attachment to a single technology, “Don’t get comfortable, don’t get too attached, don’t get married. Fidelity in technology is not even desirable. Loyalty to one system if career-death.”

Finally, the following paragraph resonated with me, where Ullman describe the life of a software engineer, we are “never not working”.

Even when I’m not actually doing something that could be called work, I might get started any minute. So everything is an interruption — a call from a friend, an invitation to lunch — everything must be refused because it is possible that from one moment to the next I will get back to something.