28

Dijkstra writes here:

Besides a mathematical inclination, an exceptionally good mastery of one's native tongue is the most vital asset of a competent programmer.

I do not understand the latter part of this quote. Can you please explain or elaborate?

P.S. I have grown up in India. I speak Bengali at home; I speak Marathi in the community that I live in; Hindi is the national language and very widely spoken, so I know that, and in school and college I was taught with English as the first language. Of course, now I think in a multitude of languages and I must admit I don't have mastery over any. Is this really affecting my programming aptitude? If yes how ? and are there any solutions?

3
  • 20
    Interesting... I have a good friend who is Indian (Tamil), and I once watched him freeze up completely when somebody asked him how to say some phrase "in his language". Talking about it with him later, I came to learn that he doesn't HAVE a language. He and his wife grew up speaking different languages entirely, he can't talk with his in-laws. They both pretty much speak the language of the city where they met, and English. It's fascinating. I had no idea that India is so linguistically fragmented.
    – Dan Ray
    May 6, 2011 at 12:25
  • 4
    It’s not a coincidence that very good programmers tend also to be very good writers; knowing how to express your thoughts clearly is a necessity for both crafts.
    – Jon Purdy
    Feb 26, 2012 at 4:22
  • 1
    I can't help wondering if there would be fewer interpretations of Dijkstra's words if they were written in his native tongue (Dutch), where (I assume) he had excellent mastery.
    – Brendan
    Apr 4, 2016 at 11:08

6 Answers 6

31

While I agree with what alex and quickly_now has said I believe that there may be a different spin. This is my own theory and I am not suggesting that Dijkstra meant the same thing.

What is "mastery of a language": It is the ability to take the basic building blocks of a language and put them into constructive, useful phrases and sentences. Alphabets and characters are meaningless in themselves. You need to put them together and get a meaning out of it. Words are meaningless by themselves; it is only when you put them in a proper sequence based on syntax and grammar that they express concrete ideas.

Isn't it exactly the same in computer programming? We put together a few keywords and symbols and make concrete workable stuff out of them. A programming language has symbols and grammar just like a natural language. Mastery of a programming language requires the ability to put these (individually meaningless) symbols and rules together to make something meaningful and useful.

I believe this means that there is a direct corellation between a person's ability to learn a human language and a computer lanugage. Both need the same set of human abilities and thinking capability. Take a look among your colleages, and you will find that those with poor programming skills are also the ones who can't speak or write as clearly as others. Those who are good at picking human languages have the skills neccessary to become good programmers too.

8
  • 3
    +1, this was my initial interpretation of Dijkstra's statement when I read it.
    – Rob
    May 6, 2011 at 5:59
  • 1
    @quickly_now: "a great many programmers who can write very good code but who are lacking in the ability to communicate well in one of either speaking or writing" I would dispute that. I would change that from very good to acceptable. After 30 years as a contractor, I've met a lot of programmers. The inarticulate ones may -- eventually -- produce working code. But the good programmers actually can write in a variety of languages, both natural and artificial.
    – S.Lott
    May 6, 2011 at 10:15
  • 6
    The essence of being a good programmer is being a good communicator. That's how I interpreted it.
    – Neil
    May 6, 2011 at 12:26
  • 10
    @quickly_now, Neil, Onesimus; I think it's a bit deeper than verbal or written communication. I believe he's speaking about the relationship between language and cognition, eg. web.mit.edu/newsoffice/2008/language-0624.html . I think it means mastery over some tonque (usually one's native tonque, as it's uncommon to become more proficient in a second or third language) indicates strong mental linguistics constructs that directly correspond with programming ability.
    – Rob
    May 6, 2011 at 17:47
  • 2
    @OnesimusUnbound , I think that Dijkstra mentioned native tongue because it is logical to expect people to be be good in their native tongue(which in many cases but not all, is also their language of unstruction) but not necessarily in their second/third languages. However in the modern world it can be different, for instance I am much better in English than in my native tongue. But thats becuase I never learnt it in school
    – DPD
    May 7, 2011 at 3:59
23

Dijkstra is saying that you must be able to write and speak clearly, concisely, and forcefully in the ambient language of your workplace. He's perfectly right: unless you can talk and write about technical (and non-technical) issues in a way that others can immediately understand, you are hampered and somewhat ineffective as a software engineer.

The idea is that writing about code is as important as writing the code itself.

SO is the perfect example: how many times have we seen good, incisive, valuable questions blown off or closed because the poster could not express themself well in English? Answer: too many.

7

The quote says that you need to know your native language (e.g. Marathi in your case). This is an important asset.

Psychologists generally think that knowing a language well helps you express your thoughts better. Some say that all the thinking we do is confined to our primary language. The richer the language (and the knowledge of it), the better the person can communicate and structure the ideas.

Knowing multiple languages helps understand different models of thinking too.

1
  • 7
    If "Some say that all the thinking we do is confined to our primary language" is true, then my native language is not (no longer) my primary language? Com'on. My native and primary language is Dutch, but my thinking language while programming is English... And not only because most of the terminology and almost all articles that help me think about programming challenges are in English. In fact, I find it hard to work a computer that talks Dutch at/to me, can't find anything and rely havily on menu location of things. (Another reason why personalized menu's suck). May 6, 2011 at 6:17
7

Looking at the piece in its entirety, it is an interesting list but dates from 1975. It's fair to say that to some extent, times have changed in the intervening period, rendering parts of that list of tenets somewhat obsolete.

A key skill which I believe programmers should have is the ability to communicate effectively. This doesn't just mean explanation; it means understanding. Regardless of what your working language winds up being, English in your case, although not your native language, those who have difficulties communicating effectively in their native language will not find it any easier elsewhere.

As a general note, it is fair to say that regardless of what your position in life is, if you have difficulties in your native language, you will be disadvantaged in your day to day life.

I would not get cut up over what he means by mastery - based on your contribution above, I suspect you have more than adequate command of English and from that, I extrapolate that you communicate effectively in your other languages.

8
  • True. I think Dijkstra has a point, but the word "programmers" should be replaced by "computer scientists". Of course a scientist needs to be able to argue and write in clear language. The same applies to programmers: you don't lure me into thinking that you argue with your (also native-speaking) colleagues in another tongue. Here in Holland all development environments are in English, but when I'm arguing with my colleagues about a piece of code we do it in Dutch.
    – vstrien
    May 6, 2011 at 9:00
  • @vstrien so tell me friend what you will do if each of your colleagues spoke a different native language? thats the situation here. every body come from a different indian "state" and they have a different lang (i dont mean dialect .. i mean language) hope you can put your head around that :P and this is exactly what my question was.. i dont really think in a particular lang (i cant afford to since i have to speak almost 3 langs with 6 diff ppl in a span of an hour) What i wanted to ask was if this is goingg to be a bad practice
    – Chani
    May 6, 2011 at 9:23
  • RYUZAKI, this is a situation that people hit in many different walks of life. I used to work in an organisation that had 3 working languages. In a company such as yours, if you have one working language you are doing well. What you will find is that there are certain parts of your life will work in certain languages.
    – temptar
    May 6, 2011 at 9:44
  • @RYUZAKI: sorry, I wasn't directing to you when I said that you don't argue with your colleagues in a non-native language :). But I think in that case it's important to find ways to communicate clearly - and the easiest thing I can think of is to use one language to explain to each other. Again, I don't think it affects you in your programming skills, but sure it hurts in productivity if you can't communicate over code..
    – vstrien
    May 6, 2011 at 9:46
  • 1
    @temptar: "a significant and growing number of programmers around the world with no background in applied maths" doesn't invalidate the statement at all. Your observation amounts to "people without formal training in math can still manage to learn some of the applied mathematics behind programming." I agree with your observation. But that does not invalidate (or obsolete) Dijkstra's statement at all. Indeed, it seems complementary.
    – S.Lott
    May 6, 2011 at 11:26
5

I suspect he is referring to having a good understanding of what people want of you - in other words, good verbal communication ability.

(To put my own slant on it: Part of this means, in the context of programming, that sometimes you need to understand what people DONT say, or what they do say but not very clearly.)

6
  • 2
    I'd also throw in there the ability to convey your ideas clearly to others. One is just as important as the other imo :) May 6, 2011 at 5:25
  • 1
    I agree with what you say, but I don't think that's what Dijkstra is talking about at all.
    – Rob
    May 6, 2011 at 5:55
  • 1
    This all reminds me English literature classes in high school. You can argue for hours about what the author meant. I always used to wonder why we don't just go and ask them. Oh... English Literature. Some of them are dead now. (I always did figure though that you should not try and interpret F Scott Fitzgerald too much - his view of the world was formed by looking at it through a whiskey bottle. My English teacher didn't like me saying that, either.) May 6, 2011 at 6:48
  • You can argue pointlessly for hours, or you can support your arguments with facts. For example, look at Dijkstra's other quotes on the same page, eg. "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration." -- again speaking on the theme of language and cognition.
    – Rob
    May 6, 2011 at 18:10
  • And such a statement is just inflammatory. Crikey, I started out programming in BASIC about 30 years ago because it was all there was. I don't regard myself as superman, but neither am I "mentally mutilated beyond hope of regeneration". I find such a statement to be quite offensive, and it means that I treat anything else he says as having limited credibility. May 7, 2011 at 2:41
2

I think being good at (any) language serves this -

If your point is not clear, you can think, revise, restate in improved manner. Until what you say is exactly what you want next person(or machine) to understand.

Not the answer you're looking for? Browse other questions tagged or ask your own question.