Jacques Mattheij

Technology, Coding and Business

What a programmer does for a living

What a programmer does for a living is best illustrated by writing a program yourself.

So, today, you’ll write your first program!

“But I don’t know how to!”

Don’t worry, you’ll manage, it is not all that hard. The program is going to be in a language called “English”.

If you’re reading this, chances are that you already know English, so that will make it a bit easier than if you had to learn a new language for this. It saves us some time and in the end it will not make the program substantially different from what it would have been otherwise.

The program will be for a computer called ‘the human being’, and the goal is to get the program to produce a cup of coffee to be placed at a small table in the doorway between the kitchen and the hallway.

For the sake of simplicity we’ll assume that all the required ingredients are present on the other side of the table, and that there is a person in the kitchen that understands English but hasn’t a clue on how to make coffee.

When you write a program what you are essentially doing is to take a problem that is ‘large’, and you break it up in to small steps. Some of these steps can be broken down further, and we can give these steps their own names. In English we’d call such a series of ‘sub steps’ a procedure, so lets call them procedures here. We’re making coffee in the old fashioned way, because this kitchen does not have any modern gear such as a coffee maker. For your own kitchen, you may make adjustments to the program as required. The best test setup is a person that you hand a set of written instructions on some pieces of paper, and you then watch the proceedings from the hallway.

We can tell the person that will make the coffee that by convention the program starts on a page labeled main, if they can read they’ll be able to find it.

The basic steps involved in making coffee can be summed up like this:

define main:

  prepare ingredients

  boil water

  filtration

  presentation

  cleanup

  end

(order fixed, thanks Klaus-Werner)

Which we write down on the the first piece of paper.

It would make some sense for each of those steps of the ‘main’ page to be a procedure on a page with the name of the procedure, the above five steps (+ the end) would produce a cup of coffee on the table if they were somehow magically defined. Because they’re not we will need to supply the definitions ourselves. Let’s do so for one of them, preferably one that we find obvious or trivial, that gets one of the procedures out of the way. We don’t need to ‘define’ the procedures in the order in which they’ll be executed, after all execution comes after we’re done writing the program, and the person reading the pages has no idea in what order we wrote them, and so it doesn’t matter.

The final step, ‘presentation’ is the one that is easiest to do, and it looks like this:

define presentation:

  pour coffee

  pick up cup

  place cup on hall-way table

There, that’s done. So at least one of the steps is now defined. Or is it? What if the person does not know how to pour coffee? Well, we can easily take care of that:

define pour coffee:

  pick up coffee pot

  aim spout over cup

  tilt spout towards cup

  as long as coffee is pouring and fill level of cup is not reached:
    wait for a little while

  tilt spout away from cup

  place coffee pot on kitchen sink

That should do it! Next up, the preparation phase:

define preparation:
  find coffee and place on kitchen sink

  find water kettle and place on kitchen sink

  find coffeepot and place on kitchen sink

  find coffee cup and place on kitchen sink

  find filterbags and place on kitchen sink

  find coffee filter and place on kitchen sink

  place a filterbag in the coffee filter

  put 6 small spoons of coffee in the filterbag

  place the coffee filter on top of the coffee pot

That’s all the preparation steps that need to be done. For your kitchen you may have to adapt a few of them.

Boiling water is the next step to be defined, how hard could it be? Another piece of paper:

define boil water:
  pick up kettle

  open the lid

  hold kettle under the cold water tap

  open the tap

  as long as kettle is not full enough:
    wait for a little while

  close the tap

  place the kettle on the stove

  as long as there is no steam coming out of the kettlespout:
    wait for a little while

that’s a pretty complicated procedure, let’s see if it does what it should do by following our own instructions. Pick up the kettle, open the lid, hold the kettle under the cold water tap, open the tap, wait until it is full enough, close the tap, place the kettle on the stove, and wait until steam comes out of the kettlespout.

2 days later, we realize there is something wrong with the procedure for boiling water. It contains a fault, a programmer would say it is buggy. Can you spot the mistake?

Right, we forgot to light the stove. As the next to last step we add ‘light the stove’, the procedure now looks like this:

define boil water:
  pick up kettle

  open the lid

  hold kettle under the cold water tap

  open the tap

  as long as kettle is not full enough:
    wait for a little while

  close the tap

  place the kettle on the stove

  light the stove

  as long as there is no steam coming out of the kettlespout:
    wait for a little while

We try it again, and this time we’re rewarded with a kettle full of boiling water at the end of the procedure.

Next up is filtration:

define: filtration

  as long as the coffee pot isn't full

    pick up the kettle

    hold the kettle with the spout over the coffee filter

    tilt kettle until boiling water streams out

    as long as not all the coffee is below the water level
       wait for a while

    tilt kettle back 

    place kettle back on the stove

There is a subtle bug in that procedure as well, it’s not a disaster but it will look funny when you follow the instructions perfectly. Can you spot the mistake?

And, finally, the last stop, cleaning up:

define cleanup:

  switch off the stove

  throw the used coffee filter in to the garbage bag

  rinse the filter

  put the filter back where you found it

  pour out the remaining water from the kettle in to the sink

  place the kettle back where you found it

  pour out the remaining coffee in to the sink (*)

  rinse the coffee pot

  put the coffee pot back where you found it

  clean the spoon

  put the spoon back where you found it

And with that the coffee making program is complete. That wasn’t so hard now, was it?

All the components of what a programmer does for a living are represented here. We think about a problem to be solved, we break it down in to steps that we understand, we define those steps (or their sub-steps, for harder problems), we test them to see if they’re working as expected. If they don’t work as expected we analyze the problem, we fix it and we test again. Finally, when we’re done we deliver our ‘product’, a series of precise instructions that enable someone (or something!) that understands the language that we wrote in something they do not need to understand but which give the impression that they do understand, and which for all intents and purposes of everyday life is the same thing.

Programming is not ‘hard’, it is just very tedious to have to specify each and every little thing and to expect the party that will execute the program to be very literal minded, quite capable of doing exactly what we wrote, but not what we meant.

I would encourage everybody (even the programmers!) to play the game and actually do this, take some task in the household and write a little program for it, hand it to your s.o. and see what happens during the ‘execution’ phase, it’s good fun! If this makes you curious about ‘real’ programming (no more real than this, just in a computer language instead of English) have a look at hackety-hack.