Should I read this? Yes.
BookShop link (not a commission link): Devil in the Stack
Author’s Website: Andrew Smith
I am a programmer by training and desire. I am largely self-taught, with most of my experience coming from learning on various jobs I held in college, combined with teaching myself on the side. Devil in the Sack by Andrew Smith pushes a lot of my buttons. It is the quasi-memoir of a non-tech person teaching themselves to code. The book is much more than that, however. It is an inciteful look at two of the biggest problems in modern technology, even Smith doesn’t entirely seem to recognize one of them.
The book follows Smith’s attempts to learn to code, his encounters with the various coding communities, and his attempt to help science explain what programming is. These sections get a bit of a short shrift, unfortunately, because the dueling interpretations of whether or not coding is tied to language skills was very fascinating. That is obviously not Smith’s fault as the science is not settled, but I wish he had more space for the scientists.
Smith’s recounting of how he learned do code is solid enough, even though I wish he had people to provide a touch more context sometimes. Not everyone is a member of the cult of test-driven design, for example, and the book could have done with a bit more perspective about some of the technical conflicts. That is a small nit, however, because Smith sees past the surface of programming communities to the problems they incubate.
Smith spends a lot of time thinking about the communities that languages build round themselves and how those communities may or may not contribute to the damage places like Silicon Valley regularly do to the larger culture. Smith notes that some communities, like those surrounding JavaScript and Linux, are toxic and mean-spirited, largely because their founders are toxic and mean-spirited. Communities like Python are not, largely because their founders are not. How, Smith wonders, can all the helpful, nice people he encounters on his journey produce, well Facebook. Or Uber. Or any of the other companies that have harmed the general welfare.
A lot of the answer is that these companies are led not by the people he interacts with but by money men (and yes, they are almost always men). But a lot of the people he admired worked for these companies. Why? And I think his answer is pretty close to the truth: abstractions. Programming is, in large part, the process of breaking down the world in such a fashion that the very binary computers we work with can understand it. That means abstractions, the lifeblood of modern programming. Abstractions allow you to model something in a reasonable fashion and get your work done. But abstractions are not reality.
Smith believes that is the key issue: programmers, who are rewarded for being good at their tasks, which means that they think well in abstractions, start to think everything can be abstracted. And that makes it easier to see even people as problems to be solved, to think of them in terms of the abstractions you need to model people in code. That, of course, is a disaster waiting ot happen. The map is not the terrain, to steal a cliche. But if you work with maps all day long, you might start to think that they are close enough. That mindset, that inability to see past the abstraction, lessons the ability to see people in all their messy complexity. That, in turn, means that even the most compassionate, reasonable, empathetic people can treat people as things, not as people. And that way lies the genocide helping Facebook and the labor busting, sexist hellhole of Uber.
Smith also comes close to another issue but does not explore it as much as I would like. One of the reasons that various programming communities take the shape of their founders is that most of these communities are not democratic or consensus driven by design. Most of them have one person at the top who makes the ultimate decisions. But that means that the cultures hard to improve and subject to the whims of that person on top. And even the nicest of communities Smith interacted with — the Python community — had issues dealing appropriately with the concerns of non-white men that stemmed from their leaders’ own lack of perspective. By encouraging the idea of the benevolent dictator, these communities weaken themselves and can miss issues that a broader community would know how to handle.
The myth of the benevolent dictator also, I believe, to some degree warps the perspective of the people who participate. If one person ultimately needs to make all of the decisions even in a relatively communal space like open-source software, then it makes sense for employees to go along with their business leadership, regardless of the issues. That way, of course, lies people turning their backs on unethical or illegal behavior. It is not the only reason, of course, but I think the lack of communal democracy contributes to a poor mindset in tech in general.
Smith hints at this governance problem but does not clearly connect them to the larger issues his book deals with. He also glides past the systematic way in which money and Wall Street shape the technical world. I would still recommend this book. it is well written, not condescending to the people in tech, and thinks deeply and clearly about the structure of programming, programming communities and what those structures portend for the rest of us. Well worth the read.

