I’ve been more or less consciously writing pieces of this blog post in the back of my mind for the past year now. A recent SmartLogic company event, Internal Conf (an afternoon dedicated to sharing knowledge on most any self-determined topic, technical or otherwise), finally provided me with the time and motivation to organize these thoughts in a more cohesive manner to present them to my co-workers. Here are some of those thoughts in a slightly different form.
In this blog post I hope to demonstrate that non-traditional paths to programming can provide crucial skills for being a reflective, productive software developer. I’ll outline some specific examples of how studying literature for six years prepared me (unbeknownst at the time) to be a developer. I’ll also add my voice to the chorus of those calling for more diversity in tech and suggest tech companies and tech culture generally need the ideas and people coming out of the humanities.
I grew up in rural Missouri, barely exposed to computing in any form (I think my high school had one or two Microsoft Office suite focused classes that constituted the entire “technology” curriculum.). I went to a small liberal arts college (also no computer science classes to speak of), where I studied literature and theory. After graduating, I spent a year in Japan working on a research project on Japanese feminist literary criticism, and then came back to the U.S. to start a 7-year MA/PhD program in Literature in August 2014. Before February of 2015, I’d never seen a single line of code, and I had no clue what “software development” meant. After dropping out of my graduate program after the first year, I self-studied Python for about four months (while keeping a blog about it), next spent two months studying JavaScript at a sketchy bootcamp in California after getting a full scholarship, and then began looking for jobs in NYC. I started my first developer job (a fantastic, generously-paid apprenticeship role) at Def Method in April 2016. Now I live in Baltimore and work as a developer at SmartLogic (another workplace I highly recommend).
One of the first technical books that I read about writing good code was Bob Martin’s Clean Code. Though the examples were all in Java and I’d only studied Python at the time, I could see clear parallels between concepts I’d learned from crafting literary essays and Martin’s arguments about what constitutes clear, maintainable code. For illustration of a few of these points, I’ll show quotes from Clean Code itself and from William Strunk Jr. and E.B. White’s guide to English composition, The Elements of Style.
Unfamiliar words and acronyms feel the same whether you read them in Jacques Derrida’s “deconstructionist” literary theory or in the wikipedia article on HTTP. Learning how to find resources to understand new terminology and adjusting to coming across jargon-heavy explanatory texts, such as secondary articles, library documentation and repo READMEs, is an important skill.
In literary studies there’s no compiler to throw up in the case of bad syntax and requirements for an effective piece of literary scholarship are often less concrete than for software programs, where smoke testing can quickly reveal whether there’s been a logical flaw. However, the process of digging into the syntax and logic of a software program to identify where things have gone wrong is surprisingly akin to reading through a literary analysis to determine whether the author has sufficiently provided textual evidence and logical basis to support his or her conclusions.
Books, articles, and tutorials on the implementation and use of software design patterns abound. Being able to identify, evaluate, and implement various design patterns in order to craft a cohesive whole is equally relevant in literary analysis and software development.
From The Elements of Style:
II. Elementary Principles of Composition, #12
Clear, effective writing (in code and otherwise) is composed of concise, logical parts. How you break up a program into functions that do neither too much nor too little has a similar impact as how you break an essay into manageable, cohesive paragraphs and sentences.
Clean Code, on functions:
From The Elements of Style:
III. Elementary Principles of Composition, #9
Learning to communicate clearly and efficiently in writing is a skill that serves one well in most every context.
Clean Code is readable:
From The Elements of Style:
IV. A Few Matters of Form, #16
IV. A Few Matters of Form, #19
The experience of sitting down in front of a blank text editor to write something from scratch, often over a period of many continuous hours, can be both psychologically and physically tiring. Whether you’re writing a literary article or a software program, the mental strategies you cultivate for creative generation are crucial to producing text on the screen.
In addition to the skills I describe above, which I believe could be fostered in a variety of academic and workplace contexts, there are other, more currently humanities-specific analytic tools and perspectives that I believe tech is missing.
Many people more eloquent and well-equipped than me have written about the heinous lack of diversity in the tech workforce and resultant issues. For example, see Medium’s Tech Diversity Files. I’d like to suggest that welcoming people from humanities backgrounds/fields into tech will not only help increase diversity among those working in tech, but also provide important analytic tools for approaching software with concerns about diversity, privilege, and access in mind.
I’ve often heard both jokes and criticism about how all scholarship coming out of Literature departments focuses on only one of three topics: race, class, and gender. In my experience of six years in academia in literature, this isn’t an entirely unfair (though of course over-simplified) assessment. However, I’d argue that if we’re going to choose three (hugely complex) topics to analyze in terms of how they shape human experience and literary works, then race, class, and gender are probably the most crucial. Recent scholarship coming out of literary studies also analyzes other, all interrelated, factors that have a critical impact on human experience and social relations.
Image credit: ASHLEY J. VELÁZQUEZ
In literary studies, such analyses typically focus on particular literary works. (The notion of what in fact qualifies as “literary” is itself often up for debate.) But these same analytic approaches and critical assessments could just as easily be applied to software applications and their increasingly significant impact in the world.
One of the reasons I decided to leave academia was that I felt that the work I was pouring my soul into (typically feminist, class-focused critiques) would never have a material impact on the world. While writing 20+ page articles on various literary works was a stimulating and challenging process for me personally, at a certain point the process started to feel fruitless. Lots of people still read literature (I think?), but almost no-one outside of academia reads secondary scholarship analyzing texts.
Software development is different because I’m actively involved in the creation of programs (sites of interaction and exchange) that many, many people will experience directly. My main career focus right now has been to learn sound technical development processes, and I feel largely indifferent (though not at all morally opposed) to the social impacts of the software I’m working on. At some point, however, I know that my focus with development will shift to applying these skills in a manner much more overtly focused on the types of issues I prioritized in my literary analyses. And in the meantime, I feel well equipped to consider the material consequences of the software that I’m writing — a skill that took a considerable amount of time for me to develop.
I don’t believe that such analytic skills can only be cultivated in a humanities department — that’s merely the sole place I’ve been exposed to them as a focus thus far. But wherever such forms of analysis originate and spread, it seems clear to me that we’re largely missing them in tech, and one way to foster their development is to make the tech community more accessible to people from humanities backgrounds.