Blog Post

Code: Craft and Culture


The “more hack, less yack” injunction has been reversed this last week as an important conversation about gender relations and sexism in code culture has erupted, sparked by the “learn to code” call and by Miriam Posner’s important response that details some of the problems with that call. If haven’t read Posner’s post yet, go do that first, please. The debate draws two important and complicated distinctions: DH vs CS, craft vs. culture. Before exploring these boundaries, however, I want to review the conversation so far. Posner writes:


In principle, I have no particular problem with getting everyone to code. I’m learning to do it myself. (And a million thank yous to those of you who are helping me.) But I wanted to talk here about why men are the ones who code, so that we can speak openly about the fact that programming knowledge is not a neutral thing, but something men will tend to have more often than women.


This matter is of no small concern to me. It is breaking my damn heart to see how many women I know have earnestly committed themselves to codeacademy because they want to be good citizens, to prove they have what it takes. These are my friends, and this is their livelihood, and this is the career we’ve chosen.


The wealth of comments on Posner’s post alone demonstrate the resonance of this point. Stephen Ramsay relates one especially memorable and heartbreaking anecdote exemplifying the problem:


We’re holding a development contest at my institution, and I encouraged my students to enter. One woman, a really talented hacker (who had never programmed before my class), was particularly interested in joining, and they were holding a meet-and-greet so that they could explain the terms of the contest and get people into teams. I told her I’d come along.


It was like a locker room. I counted three women in a group of at least fifty men, but that wasn’t even the worst of it. Porn joke? Check. Sports and warfare metaphors? Abounding. Do-or-die, you-win-or-you-suck vibe? Very much in evidence. And there’s my wonderful, brilliant sophomore taking it all in. I was so pissed off, I wanted to cry.


Ramsay continues:


I am a well-known booster of the idea of “building” in DH, but I have always hastened to add that building does not necessarily mean coding. I don’t expect everyone to be good at coding. I don’t expect everyone to like it, and it’s hard to get good at something you just don’t like. Like most people, the list of things I am bad at and don’t like is terrifyingly long, and occasionally embarrassing. But what I can’t tolerate at all is the idea of someone — whether a student or a colleague — who both likes it and is good at it, but is turned away from it by the “culture.”


Fuck that culture. I’m a teacher. I care about students who want to learn, learning. I’m not so naive as to think that we can reform that culture from without, but honestly, if we just re-duplicate that culture in DH, then we have failed. And we might as well go back to whatever we were doing before.


His outrage is certainly justified and even necessary as humanists engage with and become part of hacker culture. The risk, though, is that we will see the obvious sexism and elitism in CS and simply refuse to engage, to throw our hands up in despair and tend only to our own code gardens. To do so would be a mistake. Even while I firmly believe we in the digital humanities can learn from the refined craft of the professionals (even though not all professionals are skilled; many have more in common with the novice DIYer: effective in the short-term, a disaster in the long-term), we should not give up on the possibility of effecting a cultural change not from within, but from a position adjacent to and in conversation with the traditional CS world. Indeed, we cannot escape the relationship. Rather than circle the wagons, the visceral response understandably caused by experiences like the ones Ramsay relates, Bethany Nowviskie calls for moderation:


The call for a more deeply-theorized and critically-engaged digital humanities comes in waves. It’s as dangerously easy to tune out as the tide, for people who have heard it again and again — people whose hard-won intellectual experience and concrete understandings of digital project development should make them indispensable partners with scholars new to DH.


Where does the sexism, misogyny, and locker-room culture come from? Is it a nearly inevitable result of the male-dominated profession or is it WHY the profession is so gender-skewed in the first place? (The old chicken and egg question). Consider what coders do all day, as Nowviskie enjoins us to do. They solve problems, mostly set by their bosses, customers, or corporate goals. To solve these problems requires them to bend the machines to their will—and the machines can be quite recalcitrant. In other words, we see a replication of the will to mastery, the Enlightenment ideal of reason conquering nature. The machine takes the place of nature-as-raw-material. We thus find that the white, male, privileged culture of code is just another microcosm of society as a whole, one made stronger through the mindset demanded by the practice of coding. Moreover, the salaries many professionals command puts them squarely in the rank of society’s elite, a rank often committed to the status quo. The high profile and hugely profitable gaming industry, with its celebration of violence and the objectification of women, and which is one of the preferred destinations of many professionals, also strengthens this misogynistic culture.


Hugh Cayless, a DH coder himself, points out the ageism and sexism of mainstream coder culture:


The population of programmers not only skews male, it skews young. Put a bunch of young men together, particularly in small groups that are under a lot of pressure (in a startup, for example), and you get the sorts of tribal behaviors that make women and anyone over 35 uncomfortable. There's not just misogyny, there's hostility towards people who might want to have a life outside of work (e.g. people who have spouses and kids and like spending time with them). And this is both a cause of sexual/racial/age imbalance and a result. It's a self-reinforcing cycle.


Nowviskie also writes:


A Utopian vision of DH would see scholars engaging with developers as peers in mutually intelligible conversation. But a gap exists, in critical vocabulary and in the norms of discourse between these groups (even including developers with deep backgrounds in humanistic research) — and it functions as a mutual disincentive to engage.


Ramsay, in his anger at the treatment of his students—a protective impulse I think we can all recognize—implies that perhaps disengagement might be the only way forward. But disengagement will remain impossible, at least in the practice of coding. Because coding is a form of writing, a craft to which coders have devoted hundreds of thousands of hours, written numerous books, style guides, and best practices documents, and which the DH community cannot afford to ignore, we will stay beholden to the work that has gone before, however problematic the culture that produces it. Again, Nowviskie:


To my mind, coding itself has more in common with traditional arts-and-crafts practice than with academic discourse. Too often, the things developers know — know and value, because they enact them every day — go entirely unspoken. These include the philosophy of software craftsmanship and, by extension, the intellectual underpinnings of digital humanities practice. (If you use their tools, that goes for your DH practice, too.)


Also speaking to the craft of coding, Julie Meloni writes:


There is a not-insignificant number of people out there with jobs like “programmer” or “developer” who themselves don’t actually know how to code; they may have taken initiative on their own (a good thing!) and gone through a tutorial (or read a book, mine included), or took took a semester or two in Java or whatever language, maybe memorized some concepts, keywords, and typical sample interview questions, and managed to get a job as a developer. Or, they were in a position at a organization that decided it needed a “coder,” this person dabbled in some things, they were given a task to do, the task was done (for some value of done, meaning not knowing if it was a secure, scalable, safe, tested product), and they moved up the chain or to a different organization into a developer group and learned that they didn’t actually know development norms.


This story is one that, I think, many self-taught DH coders can relate to. Indeed, I’ve seen many “professional” coders and heard horror stories about others who are, essentially, paid amateurs with practically no grasp of the craft. But, they still participate in and perpetuate the culture.


Edsger Dijkstra, revered as one of the great and foundational computer scientists (and also a professor at the University of Texas, my current institution), had this to say about the practice of seeing programming as a craft:


The practice is pervaded by the reassuring illusion that programs are just devices like any others, the only difference admitted being that their manufacture might require a new type of craftsmen, viz. programmers. From there it is only a small step to measuring “programmer productivity” in terms of “number of lines of code produced per month.”


Yet in calling for us to see programming as a radical novelty rather than fit it into our existing schemata (such as “coding is writing”), Dijkstra was also driven by a desire for us to write clean, correct, and easily maintained code, a desire I see as a key component of the craft:


I would therefore like to posit that computing's central challenge, viz. “How not to make a mess of it”, has not been met. On the contrary, most of our systems are much more complicated than can be considered healthy, and are too messy and chaotic to be used in comfort and confidence. The average customer of the computing industry has been served so poorly that he expects his system to crash all the time, and we witness a massive worldwide distribution of bug-ridden software for which we should be deeply ashamed.


And bug-ridden software is part of what I want DH practitioners to avoid. We thus have two related, but somewhat conflicting strands: the importance of coding as a craft, itself part of the culture of mastery, and the need to engage with the odious aspects of code culture as we work to transform not only DH, but also code culture itself. We cannot, however, take only part of the world and wash our hands of the other and still consider ourselves responsible makers or responsible humanists. Instead, we must ask, “Where does this culture come from?” If we don’t understand it, we have little hope of effecting any change. We may even unwittingly recreate it in our own practices and communities, even though the humanities as currently constituted has some strong antibodies that would make such recreation (I hope) less likely. While the answer to that question may seem simple (“it’s the sexist geeks!”), I do not think we can or should so quickly condemn the CS-educated, professional community that has given rise to the brogrammers.


Indeed, it’s more than just code culture, as Jason Tocci notes in “Sexism, Misogyny & Misandry in Geek Cultures". It is endemic to geek culture as a whole, of which code culture is but a subset. Not all geeks may be coders, but nearly all coders are geeks, at least on some level. Moreover, as Ramsay notes, most coders are not brogrammers, but instead will readily say they’d like to see more women coders. If we take them at their word rather than reject such sentiments as shallow pieties, we have to look elsewhere than at the individuals for the primary causes. While we should not let the individuals off the hook, there are structural pressures that are prior; these structures are what we must analyze and try to change.


And the humanities’ record in changing the fundamentals of society is not very impressive. The promise and apparent failure of theory to effect real and lasting social change is, as we know, one reason that many now claim we are in a post-theory moment. We need look no further than the persistent, pernicious mockeries of feminism that have lasted several decades at least in contemporary American culture (especially prevalent on the political right) to see what a combative stance can fail to achieve.


How, then, do we adopt the best aspects of the craft to “not make a mess of it”, as Dijkstra so rightly counseled us, while recognizing and working against the larger culture that produces the craft? The answer is most assuredly not by ignoring the best practices or strategically taking what is useful and retreating to our own DH corners. Here at HASTAC, Cathy Davidson is fond of saying that our operating system is collaboration via difference. If we cannot account for the difference of code culture, if we are blinded to what is valuable in it because of its many obvious problems, then we cannot collaborate. Both communities—DH and professional coders—will be impoverished for it. Moreover, collaboration requires humility, compassion, and generosity. It can be incredibly difficult to cultivate those attitudes toward a community such as the one Posner and Ramsay describe, but it is work we must do.


I am a strong proponent of collaboration with professionals: not because I think humanists can’t code well or shouldn’t code, but because we both have much to learn from each other. But if we fail to learn about both the good and the bad of code culture, then we cannot successfully collaborate, we cannot build effectively, and we certainly cannot effect change.


Even though many professionals are themselves not very good coders, as Meloni points out, my concern is for the DH community, made up of self-taught DIYers who, like the coders some excoriate, see machines as little more than tools for mastery, means to an immediate end. Many in the DH community have yet to learn even the most basic coder virtue of laziness and instead forge bravely and blindly ahead, building yet another Content Management System, yet another user authentication system, and the likes. We cannot wash our hands of code culture—ugly warts and all—without doing our own practices and the products of our building harm.


I should be clear: I have very little patience for the us vs. them mentality. Even though, throughout this post, I draw a distinction between the DH community and the code culture Posner, Ramsay, et al. rightly criticize, I do not believe that distinction can or should hold. We are united by an interest in computing, in coding and building digital things, in a desire for mastery over the machines and the problems they help us solve, and in our DIY, self-taught practices of code-writing; indeed, most professionals started as a amateurs in love with the possibilities of programming. I use these boundaries as shorthand, but want to help erase them. It is important to recognize different rhetorics and different attitudes, but only to see that our values are in large part a result of the cultures into which we’re socialized. As humanists learning code, we come from a culture that produced feminist, queer, and post-colonial theories; the professionals from code culture—who now, it seems, risk being painted as troglodytic code monkeys—socialized in a business environment where the names Zuckerberg, Jobs (a notorious jerk), and Gates are revered totems, where money and reputation fuel late-night hackfests and the eschewal of an outside life: and lead to rapid burn out.


We should not take credit as individuals for the cultural sensitivities granted us by theory and training (again: humility), nor should we judge too harshly the individuals brought up in the male-dominated, sexist code/geek culture. To do so leads only to alienation and insularity, a self-defeating strategy that, once it draws sides, harms both. We must learn the best of the craft and, even, the good parts of the culture to help our own work and to speak respectfully and comprehensibly to those whose practices we wish to adapt and whose culture we wish to change. As much as I sympathize with Ramsay’s frustration and Posner’s cautions, I cannot whole-heartedly endorse them. We must use our humanities training not just to critique a culture, but to see the structures of power that make it possible in the first place, to see these experiences as potential teaching moments. We must first understand the culture that sees women as interlopers (a problem in STEM generally) and marginalizes them (and other groups) before we can begin to change it. To create our own spaces from which we dispense judgment is but a short-term solution that ensures the isolation of the DH community, not a sustainable solution that can erase the misogyny so prevalent in the CS-born world.


I don’t know if we in DH can ultimately change such a powerful structure, especially since it is not the original locus of sexism and misogyny, but instead is simply another crystallization of it. Maybe it is, as Nowviskie remarks, a Utopia, existing nowhere. But we certainly won’t find out by withdrawing from code culture to our own islands. We also won’t learn anything about the craft from a culture we’ve demonized. Instead, we should build a community of practice that includes CS majors, professionals, and digital humanities scholars, coders, and builders. But to do so demands humility from all parties, a recognition that we all have something to learn.



Michael, your call for moderation is, of course, very reasonable. I read it as a call for women to be the "better man"  in what seems to be a problem endemic to the culture at large. You warn that "demonizing" would just alienate us further from the poorly misunderstood culture of CS. The onus is on the silent minorities (actually majorities) to thread carefully lest their siege or self-imposed exile prolongs. Appropriate to your argument, you cite the failure of feminist, queer and po-co studies to affect real change in the world. To me it seems an observable fact that activists everywhere have drawn inspiration from many academics working in those fields. The perverse insistence of the voice that fights for the marginal has reason to call its own. Let me indulge in a bit of Freudianism. The 'reason' of the moderate voice masks a disavowal. To enable that delusion can only lead to the perpetuation of the fantasy at the expense of the analyst! 


I wish I could give you more room to respond. My rhetoric is not nice, bordering on trollish, I know, but I AM interested in having this conversation on different terms. Let me make a distinction that would perhaps help us meet halfway. I am not interested in policing language for personal offence. That strategy usually backfires, and your post is aware that 'the culture' can claim the right to shut down the conversation to its advantage with popular acquiescence. I am rather more interested in the systemic use of 'Reason' and 'Politeness' to mask a disturbance in the force. My ideology-bells have been off the hook in the past few days reading the threads of the conversation. Even by folks I honestly love and admire. The phosporescent gargantuan elephant in the room: DH rose to prominence parallel to the rise of an academic left interested in reimagining the past for everyone, white males included. At this point, I should stop responding and seriously consider writing a post... Anyway, I do hope you understand I am glad you are engaging in the conversation, even if I publicly critique your rhetoric. Do stick around.


Thanks for commenting, Alex. If this is trollish rhetoric, may all the internet trolls emulate you.

I don't think we need to ask women to "be the better man", for a couple of reasons. First, the DH community is, in my experience, far more diverse than that of professional coders. The onus is upon all DHers--not just the women--to help effect change. I realize, too, that "reason" and "politeness" are too often used to quell dissent, to disenfranchise further the marginalized, and to discredit valid emotional reactions to real problems. That's not what I'm asking for. Instead, I want us ALL (all sides, if we must have sides) to do our best to understand the structuring reasons behind the problems in code culture rather than (only) blame the individuals who act poorly.

Second, if we're speaking of strategies for effecting change, we must attend to our ethos and affect and how others will perceive them. My desire is to see us change the culture by finding common ground, by extending the community to include even those whose behavior we find offensive. This stance, though, has a lot to do with my temperament. Maybe my inclination toward moderation and inclusivenes "masks a disavowal", as you put it, but I refuse to believe that we cannot proceed more effectively through humility and compassion than through us vs. them divisions, strident judgements, and metaphors of war.

Finally, if it sounds like I'm asking the DH community to "play nice"--which as you point out can amount to staying silent--I'm not. I'm not even saying that the onus is entirely on us. We cannot change a culture from the outside and we cannot change it if its members refuse to go along. It's a hard problem. Some of it, too, I think stems from the practice of coding: either you're right or you're wrong; either your code is good or it isn't. There's a lot of objective measures in the field that seem to encourage the sort of sink-or-swim, hyper-competitiveness culture that can be so daunting. I'm not saying it must be that way (and the DH/DIY ethos of coding shows another way), but it is a potential cause/manifestation we should understand.

What do you suggest? I'm not sure I see in your comment what strategy you would prefer.


Mike, it's lovely to see you engaging so thoughtfully with these questions, but also, I confess, a bit frustrating. You say you're inclined to moderation and temperance. But can't you see that this is itself a privilege of someone who's comfortable where he is? You say we need to bridge the divide, but, Mike, I've stretched myself, really stretched myself, to reach across, and now we're counting on the rest of the community to do the same. You say we need to avoid circling the wagons; I say, with respect, that you're changing the subject. And your disquisition on whether code is itself a masculinist culture is interesting, but I say: It's theoretical. We can't know, we just can't know what coding with more women would be like, because not enough women are involved in it. You urge us to practice humility and compassion; I say, we are, we are, and I'm asking you to do the same.

What I suggest, with respect, camaraderie, and friendship, is that you listen, really listen, and believe other people when they tell you that they're feeling edged out.


Killing time staring at Pinterest boards last week, I was mesmerized by the patterns in the image arrangement. And I had a DH epiphany moment. My education in normalization is impecciable CS. This wasn't that. And that lead me to a thought I am stating dangeroulsy simplistically here: what I know (like, know like I breathe - assume without question because I have seen it work countless times) to be clean, maintable, efficient, "right" schema design is, also, gendered design.


I don't know where I'm going with that yet, but I know I have to go somewhere. I was glad to read your posts.


Michael, thanks for starting a discussion that very much needs to happen. I'd reiterate Alex's and Miriam's concerns above about the dangers of absorbing coding culture for the sake of learning to change it from the inside. 

The dangers of absorbing coding culture is not just about perpetuating the overt sexism in jokes and metaphors. We can all recognize that. It's also embedded in Dijkstra's call for clean code.

The problem isn't that Dijkstra was wrong; it's that he was right for a certain kind of coding but not all coding. Absorbing values about how code MUST BE WRITTEN from CS luminaries like Dijkstra implies that humanists' contexts for code are the same as CS professionals' contexts for code. I will say from personal experience: they are not. And it's not the case for all CS professionals, either. Lots of code is write-once hacks that processes data, instantiates a visual, or controls a game. And it's fine. Not all code is maintained for 5 years with teams of programmers, no matter what my CS 101 Java class tried to teach me.

This problem of CS-values metonymy is related to issues of identity and representation in coding that far exceed sex, gender and race, but also include personality type, working style and interests. Yes, it includes men, too. But the inimitable Why the Lucky Stiff makes this point far better than I ever could in his post "this hack was not properly planned" where he proudly declares "it's all hogwash...I hate you, Edsger Dijkstra!"



Hi Annette. Thanks for raising this point. I completely agree with you that not all code needs to be beautifully engineered. As a Perl devotee, in fact, I often find myself writing quick and dirty scripts to process some text/data/what-have-you. So you provide an important reminder--especially for those first approaching coding--that there's always space for the hack.

That said, Dijkstra's call for clean and correct code should, I think, be read as a call for us to be responsible collaborators. There's a wide range of mature coding practices like unit testing, design patterns, self-commenting code, etc. that exist precisely so others can read, maintain, and extend the original coder's work. When I quoted Dijkstra, I had in mind the larger DH projects that require multiple contributors, that will be maintained for years to come, and where it would be irresponsible NOT to take these practices into account. I certainly hope that Zotero, Omeka, SEASR, Collex (the engine behind NINES) and any other large DH projects were written with maintainability and future collaborators in mind. If not, they've done their projects and future DH scholars a massive disservice that can only be corrected by rewriting everything from the ground up guided by better practices--a collosal waste of time and effort and one easily avoided.

The quick and dirty hack is dear to my heart, but it is a model of coding suitable to the scholar working alone or on a transitory step. It is not one I would recommend to anyone who wants to collaborate or build something lasting. We must keep this distinction in mind. Learning to judge when one mode is called for over another is thus a crucial skill. To imply that a humanist's context for code differs essentially from a professional's draws, I think, an incorrect distinction. It is the purpose and ultimate goals of the code that determines what mode of writing we should use, not the practioner's tribe.


Thank you for indulging me in your own space. I will attempt a response, humble and compassionate, worthy of your measure and a bit short of the blogpost I owe the community. 

I also want us ALL to understand the structural reasons for the imbalance. We agree there... What will we find when we begin to look at the structures? Will we be able to speak 'it' without offence? Nothing hurts more than to be told that despite your best intentions you were aiding and abetting an indecent enterprise. Surely it would be difficult for the DH community to see itself colluding with the worst tendencies of the liberal imaginary.

There are sides here, many sides, why wouldn't there be? Like a prism, light is refracted differently depending on the facet. What you wish to say is not exclusively what I hear, and vice versa. You have the right to not listen through the frequencies of the immigrant or the colored woman, but you-who-speaks-from-a-virtual-white-male-body must be made aware those voices are there, and they are somehow more inclusionary than yours, even as you claim to be the voice of inclusion and reason. I hope you understand these are hard things to speak publicly, because I don't want to lose you as an ally, and those who do not share our dreams can use these very same words against us. But we should not be afraid to oscillate between strategic divisions and unities. As long as we stay true to our goal of a true diversity in equality, we can still be a we. Notice for example, that N. Cecire's gesture to silence the (white-)mansplaining at the moment when she's being condescended to --so tiresome in 2012--, shines with generosity! She is making a call to shame, not to exclude, but to wake up at a moment where the white male oversleeps from privilege. You and others have suggested that the white male (specially the geek variety) will react by falling deeper into his slumber. I too fear we might lose our patient, but again: I don't think using 'reason' as you describe is the red pill we're looking for. As if white males were the guardians of the One And True Reason, Turing machines, who faced with the algorithm of truth will aquiesce without resistance! Freud again: "We don't want to wake up" (Die Traumdeutung, 1899). 

Unlike a prism, there are jobs to be had, podiums to influence from, projects to be funded, the realpolitik of the academy. Here's where I really appreciate your call at the end for practical enumerables. Here's a few I've thought about:

a) Let us speak honestly and reassure those who feel alluded that we do not mean to exclude. We are the excluded. Unlike the Goths and Vandals, the new barbarians do not mean to burn Rome.

b) Let us work to build projects that decolonize the archive. Though much (not enough) work has been done on white women's archives, obvious and egregious gaps persist outside of the Great Digitization of the 1990's. We (a small we here) want us all (a big all) to reimagine our past beyond the provinciality of Europe. This coincides with the need to free the postcolonial archive from the stranglehold of copyright, while assuring the livelihood of the postcolonial artist/academic.

c) Let us create structures of affirmative action. Yes. (Wikipedia:Euro-centric:volunteer::DH:White:DYI)

d) Let us continue to defend humanities at large and wrest the academy back from administrators so that we can have the job structures that will allow diversity in equality to bloom. In a Darwinian world, the dream of my white friends is totally understandable.

e) Let us reconcile the theory that has spoken truth to power for the past decades with the affordances of digital humanities (and CS).

My perceived ethos will not earn me a deanship, perhaps not even an assistant professorship, but it comes from a place of infinite generosity. I will leave the last word to you in honor of your space and the dissertation that requires my attention. My digital work by the way is on Aimé Césaire, a key figure for the global south, and one of the first to give Europe the chance to understand that its reason was nothing of the sort. 

"A moi mes danses de mauvais nègre" (Cahier d'un retour au pays natal, 1939).