This past year, my last as a college student, I went down two wildly different academic tracks.
The first was my honors thesis in political cognition, a book-length project that served as a fitting culmination of what can only be described as a liberal education. Starting with the question, “What’s going on in our heads when we talk politics?” I wound up using Ron Paul, evolutionary biology, molecular genetics, fMRIs, Deal or No Deal, chemicals related to those found in cilantro, community organizing, Thucydides, early childhood education, David Foster Wallace and Porto Alegre, Brazil, among other things, to argue that ideological disagreement is both inevitable and necessary in successful democratic societies.
With a lot of different pieces to tie together, the hard part wasn’t getting words on pages or getting large numbers of pages written. The hard part was getting those words and pages organized into something that made a reasonable amount of sense.
Which is where the second track, learning the basics of how to write computer code, came in handy.
I had gotten conversationally literate in SQL (pronounced “sequel”), and had learned the equivalent of how to ask where the bathroom was in R the previous summer; I enrolled in Intro to C++ because I wanted to get my brain out of its constant reading/writing mode. However, while I thought programming was a change of pace that had nothing to do with writing, my writing improved dramatically.
There’s a reason they’re called programming “languages”
The best computer scientists spend less than half of their time actually writing code.
The majority of their time is spent deciding what they want to code, outlining what elements of the program will go where, defining their classes and commenting out (aka writing little notes in the computer code) what each part of their code will do so that it will make sense to anyone else who looks at it if and when something breaks. Once that’s all done, the actual programming is easy.
That should sound awfully familiar to the writers among us, but the truth is that I didn’t get serious about planning and outlining the things I wrote until I learned how to code. The first chapter of my thesis went from zero to 45 pages in about a week. However, sitting behind that week of writing was about a year of reading, six months of arguing and two weeks of outlining. I made sure I knew exactly what I wanted to say and how to say it so that the chapter would “compile,” and only then did I say it.
In this sense, coding is nothing more than a stripped down, abstract form of writing.
And this abstract writing comes with immediate, concrete feedback. It’s often difficult to be honest with oneself as to whether or not what they’ve written is coherent or internally consistent, but the compiler is brutally honest: If you make an error as small as leaving a semicolon off of your last line of code, your program won’t run; mess up your logic in a for loop, and you’ll get an infinite loop and your program will run forever. When someone criticizes your writing, you can tell yourself that they simply missed your point, and you may be correct, but if your code doesn’t produce the output you want you have no one to blame but yourself. It’s akin to one typographical error bringing down your entire essay.
Having my code taken literally by a computer, over and over again, forced me to stop thinking of my words as simply what I meant them to mean. I had to consider as well how people would interpret what I wrote — would they understand what I really meant? This changed the way I structured my sentences, paragraphs and chapters; making my writing clearer. When your audience is a computer, you’re forced to think as systematically as it does. Irrelevant or inconsistent claims are called out, while concise, well-organized structure is rewarded. Plus, the feedback is immediate.
They say that a liberal education is supposed to “teach you how to think.” The manner of thinking that is rewarded when you learn a programming language overlaps immensely with the manner of thinking that a liberal education seeks to foster: abstract, yet rigorously logical.
So while I will likely never program for a living, learning some coding basics made me better at what I will do from now on.
Which brings me to my next point:
Coding should be mainstream, for two different reasons
As I wrote last week, computer science is currently a privileged field. There are clearly-defined social expectations as to who would probably make a good programmer, which, combined with the fact that practically no K-12 school systems teach computer science, means that very few Americans take programming seriously as a viable or socially acceptable career pathway. It should be noted that I stumbled on programming in an unpaid internship, itself an opportunity defined by inequality.
It’s in everyone’s interest to dismantle these social expectations and access asymmetries, as we are all increasingly reliant on the information sector of our economy. To this point, 1.4 million new jobs in computer science will be created between 2010 and 2020 with only 400,000 new computer scientists to fill them, according to the Bureau of Labor Statistics. If you’re looking for a reason why a cursory knowledge of Ruby on Rails is worth six figures, there it is. Our daily lives are increasingly supported by Java, HTML and Ruby. They are stored in SQL servers and optimized in Python. Our market has identified a need for people who are fluent in these languages; whether or not those people are predominantly white and Asian men depends on whether or not we change our social and educational standards accordingly. Of course, increasing the labor supply of programmers will lower the value of each programmer, but demand would have to fall quite a bit before anything I’ve just written is invalidated.
If we’re serious when we say that we need to modernize our education system for the 21st Century, and if we’re serious when we say that economic inequality is a problem, then one of the first things we should do is add computer science classes to our public K-12 curricula. Making basic programming literacy part of an American education is an inexpensive, easy way to both fill a market gap and expand economic opportunity. Between CodeHS and Girls Who Code, among a growing number of other programs designed to expand access to computer science education, the resources are readily available. We really have no excuse.
However, only about 30 percent of students exposed to computer science classes go on to pursue careers in the field, a number that would certainly drop if such classes became a part of basic public school education. While that speaks to the number of students we need to be exposed to computer science in order to fill the gap projected by the BLS, it also raises the question of whether there’s value added for the millions of students who would take programming classes and not pursue a computer science degree or career, if we were to modify our education system accordingly.
But if my experience in writing my thesis is any indication, learning to code is useful even for those who have no intention of writing Python scripts on a regular basis. It has made me a better writer, a more systematic thinker and a more competent employee. Independent of those things, though, it has also made me a more socially literate citizen.
As I mentioned above, an increasingly large amount of our lives – including your ability to read, share and comment on articles like these – are backed by code. We take civics in 8th grade because everyone who participates in society interacts with the government, so we feel as though everyone should have a basic understanding of how government works (whether or not they actually do is, of course, a different question). We should be taking programming at a similar time for the same reason: Whether or not you do it for a living, if you want to participate in society in the 21st Century you are going to be interacting with a lot of computer programs. As cyberspace gets bigger and bigger, “I don’t care how it works so long as it does” is becoming less and less tenable of a position for the majority of us to take.
On my first day of Intro to C++, my professor – in quintessentially Kenyon College fashion – said that “coding is a liberal art.” As both a method of thinking and avenue for social participation, I couldn’t agree more. Setting aside for the moment that it is one of our biggest untapped resources for expanding economic opportunity, exposure to programming languages has something to offer everyone.