Edsger Wybe Dijkstra (1930-2000) was a Dutch Computer Scientist. He received the 1972 Turing Award for fundamental contributions in the area of programming languages.
One of the famous statements of Dijkstra is “Besides a mathematical inclination, an exceptionally good mastery of one’s native tongue is the most vital asset of a competent programmer“.
Why is this so important?
People communicate externally and internally (!) in their native tongue. If they use another language much of the nuances of the communication is lost. When people of different languages communicate they have to translate the communication to their internal language.
A computer language is also a language. It is a language where every nuance is gone. With the term nuance (I am a Dutch native speaker) I mean something that also could be translated into the word meaning. A computer language is formal and human communication is informal. We communicate much more than we are aware of when we speak.
So Programming is a Transformation of the Human Domain of Meaning to the Machine-Domain of Structure.
A programmer with a mathematical inclination (being analytical) AND an exceptional good mastery of one’s native language is the only one who can built a bridge between the two worlds.
When he (or she, woman are better in this!!!) is doing this he knows he is throwing away a lot of value but it is the consequence of IT. Machines are not humans (People that are Mad act like Machines).
Machines are very good in repetition. Humans don’t like repetition so Machines and Humans are able to create a very useful complementary relationship.
The person that understood this very well was Sjir Nijssen. He developed with many others something called NIAM. NIAM has generated many dialects called ORM, FORM, RIDDLE, FCO-IM, DEMO. The basic idea of all these methods is to analyze human communication in terms of the sentences we speak. It takes out of a sentence the verbs and the nouns (and of course the numbers) and creates a semantic model of the so called Universe of Discourse.
What Nijssen understood was that a computer is able to register FACTS (reality we don’t argue about anymore) and that facts are stored in a database. If we all agree about the facts we can use the facts to start reasoning. Want to know more about reasoning. Have a look at this website.
To create a program that supports the user a good programmer has to be a good listener and a highly skilled observer. Users are mostly not aware of their Universe of Discourse. They are immersed in their environment (their CONTEXT). Many techniques have been developed to help the observer to make it possible to recreate the context without killing the context (Bahktin). Have a look at User-Centered-Design to find out more about this subject.
Want to read more about Dijkstra read The Lost Construct.