Definitions
Since my project is to approach, analyse, dissect, figure out, subjugate, and exploit the sources of programming pleasure I first need to define what programming is. The task is not as straightforward as it may seem.
My first attempt resulted in a very generic definition which went somewhat like this: “programming is an activity where you prepare instructions, have a computer run them, and get some output”. Any word in this definition can be expanded on and endlessly argued over. What is “activity”? Who participates in this activity? Do you actually need a human actor involved in it? What is the time and place for this activity? “Prepare” how? Do you need to personally “prepare” these instructions for it to be programming, or can you use someone else’s? What are “instructions”? What are their possible form, content, other characteristics? Are there limitations as to what they can be? Do they always constitute a “program” (a term the definition cowardly avoids)? What is or can be a “computer”? How do you make it “run” instructions? What does it mean to “run” instructions? How does it return “output”? What is “output”? Is it even required? What can it be? Does it have to be “meaningful” or “valuable”? Do you as a programmer need to “get” it, whatever that means? This definition is extremely problematic, a rich, gooey substance of vague terms. It’s a bit creepy that you can do something for so many years and not really understand what it is you’re doing, but also reassuring: at the end of the day, I must go on whether I understand it or not. Instead of trying to muddle through the quicksand of the generic definition let me approach it from a different POV.
My wife, who is not a programmer, told me that she sees programming as “magic symbols that make computers rack their brains”. I really loved her definition as it references magic and personifies computers, both features I’m interested in exploring. Also of note that this whole programming thing appears to her only as cryptic symbols on my laptop’s screen. The craft is arcane. The symbols arranged in certain ways penetrate a computer's brain and make it do things regardless of its will, just like a hex that makes you hiccup or dance till you die. Programming can be seen as a bodily phenomenon. Bodies and body parts are involved in every step of the activity: you use your body to make programs, be it typing, drawing, voicing, moving; you feed (another personification, another bodily function) programs into computers; and virtually everything a computer does can be described as somehow relating to a body; finally, you absorb the output through your body as well.
From this arises another definition, or rather notable characteristic of programming — its uncanniness. Programming is uncanny. Why do we talk about computers and computer programs as if they were persons, or at least somewhat alive ? Why is it called computer memory, computer vision, cellular automata, neural network, genetic programming? Why, from the very beginning of the modern computing era, people were and still are so concerned with computers imitating humans? And why do these mysterious symbols vaguely resemble natural language? Is programming a form of writing too? We absolutely can approach programs as if they were literary texts, and use all the abundance of literary theories, as well as methods of close reading, to see if they uncover something new about the practice and its outcomes. Why can’t we say about computer programs, following in the steps of a famous author, that all they are is “style and structure”?
It’s also a way of communication through the medium of programs and programming activities: person-to-computer, computer-to-person, person-to-person, computer-to-computer, and a million other configurations. Transfer of information between various entities. Transfer of emotions too. Have you ever laughed at some code? Or was so frustrated that you wanted to do nasty things to its author? Or maybe your jaw dropped in amazement at the elegance, the utter beauty of some solution? So programming is about feelings too. And undoubtedly programming is a language.
Programming can be seen both as a spiritual practice in itself or as a way to produce tools which aid in other spiritual practices. Programming is filled with ghosts. Programming is competition. Programming is a sport. Programming is war. Programming is apocalyptic. It is meaningful and meaningless, abundant and wasteful, inhuman and humane, boring and entertaining, performative and solitary, ego boosting and humiliating, defensive and confessional, full of attention and negligence, conservative and revolutionary, transformative and disruptive, addictive and revolting, limited and limitless, consoling and, frankly, just terrifying.