There are several interesting aspects of these definitions. First, a program must exist, must be written, before the fact, as the word origin connotes (pro-: “beforehand, in advance”) – as opposed to account or accounting that describe or put in writing what happened after the fact. Before the computer can do anything, there must be a program in it that tells it what to do. Another fact is that before the actual writing of a program can take place, there must be a decision what the program is going to execute. What do we want the computer to do while executing this program? Strictly speaking, programmer should never determine what, but he should only write that and how. Designer, inventor and sometimes investor are people responsible for these decisions. “I want a text processor that should do this and that,” says designer. Programmer takes the idea, the decision, and writes whatever is necessary to write so that the computer does what designer had wanted it to do.
Yes, there are people involved. Decisions must be made by people and men is the only species that can write. Now, stupid, lazy or careless designer or programmer without any sense of aesthetics mean stupid and buggy software with ugly user interface. Beautiful application that we love because it does exactly what it is supposed to do without bugs means that people involved in its idea, design and programming did their jobs very well. It is not the program, software or application that “sucks” or is “fantastic,” it is the people who created it.
Then comes writing. To program is to write. Of course, there are many “Code Generators,” “GUI Designers” or other tools that can and they actually do help programmers to write programs but these are only tools that aid the profession, not a replacement of it. Thinking that a non-programmer can create an application with such tools alone is still naive.