Computer Programming


June 30, 2009, Bucharest

Computer programming is a mean of communication. You communicate using a language with two very different types of interlocutors: computers (obviously) and people (not so obvious).

When talking to the computer, you have to be very careful at clarifying each nuance of your story. Computers don’t know how to interpret multiple means of the same word and phrase; you have to give them the exact words, arranged in the expected way, ordered exactly according to the rules. Whenever you don’t, bad things happen.

The people you communicate with are: whomever reads the code and the users of the application you are building.

The people reading your code are much like people who read literature: they like it or not and comment about it. The difference is that many times, they need to change your program, so a bad execution hits them much harder than a bad book that they read. On the other hand, when the reader becomes also the writer he has the chance to improve the story. The good writers will always leave the novel better than they found it, even if only slightly so.

The users of the application are a completely different thing. Your application becomes for them another way of having a conversation with their computers. Your application is like any means of communication, only more complex. Like you are using a language to discuss with the computer, they are using the set of phrases that you’ve built in your application to discuss with their computers. Since any new language is rather difficult to learn, so is your software. Much like in real world, when bad things happen due to miscomunication, the blame will fall on the other (computer, application) rather than on the person(s) who are guilty.

There are two ways to deal with this. One is to build your phrases so that they’re very easy to learn. The other is to build your phrases so that nobody can understand them except those who are able to use them. In the first case, you will have many users and a problem: they will not like to learn anything new. In the second case, you will have a select, albeit small, group of people who work with your application. Both ways can be equally rewarding if done right, and equally difficult, only in different ways. In the first case you have to think more about your users (write a best seller), in the second case you have to think more about doing some very smart things (write an essay).

So programming a computer is more like writing a story than like proving a theorem. The story has to be written perfectly from the point of view of syntax and grammar, but needs to be pleasantly written for its other readers. They can also change the story, ideally beautify the sentences so that other readers will like it even more.

Add comment Reflections on design, craft and software

A new home for merging ideas about design

It is my strong belief that software design can learn a lot from other design disciplines. I wrote blog posts, a book and did talks on this topic, and it was time to group them all together. These ideas have now a new home: My plan is to add more blog posts there, and to involve other people doing work in this area.