This book started as a personal challenge and grew into a year-long series of meditations on the art, philosophy, history and business of software.
Back in 2010 an online developer community, Dream.In.Code, created a challenge for their members called “52 Weeks of Code”. Each week, they would be presented with a different programming language or development framework and participants would be tasked with using it to create something interesting or useful or even just plain silly.
I came across this last year and it looked interesting. Though I’m not a professional programmer, I have taught undergraduate programming courses and do some hobby programming on my own. I’m always up for learning new skills so I took up the challenge.
I wanted to put my own spin on it, however, so I decided to blog my progress through the challenge while including my personal impressions and opinions on the changing nature of software. I created a new blog at Coding4Humans and began to post.
As I made my way through the challenge, it became something more. I did more than just 6 research the software. I also looked at the people and histories surrounding the technologies. The code became secondary to what I found out about the humans and institutions involved.
In linguistics (the study of language) there is something called the Sapir-Whorf Hypothesis, which states, briefly, that a person’s language influences how they view the world. A programming language is still a language and it affects how the user approaches a problem. Conversely, the choice of language is a clue to the programmer’s cognitive style, how they see the world. In Gerald Weinberg’s book, The Psychology of Computer Programming, talks about the personality of the programmer with regard to predicting success. Programming is a very personal activity.
At a higher level of abstraction, there are the people who create programming languages. Like all creators, they see the world as full of holes which they need to fill. Yukihiro Matsumoto, for example, created the Ruby language because he wanted programmers to “be happy”. PHP creator Rasmus Lerdorf, on the other hand, just wanted make his freelance website design business more efficient. Guido Van Rossum invented Python because he was stuck at home with just a computer and wanted something to do over Christmas break.
If language influences thought, can we make any suppositions about coders and language creators by looking at the programming languages themselves?
Another question that I found myself asking was, ‘Why are there so many different programming languages?’. Part of the answer is that they aren’t all that different. Instead of thinking of each as their own separate world, you can visualize them as part of an inter-related ecosystem. Like human languages, computer languages evolve, spawning and branching off into different dialects and problem domains. As the weeks went on, I began to see the interconnections between them, the shared intellectual DNA, as it were.
There are two basic types of programming languages – imperative and functional. Imperative programming is a sequence of commands that the computer must execute in order. Functional programming is more like constructing a formal mathematical proof. The computer is presented with a series of expressions and asked to solve them. Each language type represents a very different approach to problem solving and the one a programmer chooses tells us something about the way they think.