3 ms·
I have no concrete evidence; here be anecdotes: When I'm speaking a foreign language, I conceptualise what I want to say - language invariant, then find the co
by daniel-levin 14y ago
I have no concrete evidence; here be anecdotes:
When I'm speaking a foreign language, I conceptualise what I want to say - language invariant, then find the correct words, and arrange them so what I say or write is grammatically correct. Sufficiently proficient (fluent or close to) speakers of a foreign language don't try convert their native tongue to a foreign one. I can personally attest that this doesn't work - idiomatic expressions and cultural markers do not correspond (for example, 'yellow' connotes drunkenness in some languages; not English). The point is that multilingual people have developed the ability to take what they want to say, as a set of concepts, and convert them to words in the language of their choosing at that moment. Try to think of it as analogous to how a compiler takes an AST (concepts in natural language) and traverses it to produce machine code (foreign language) specific to a processor architecture.
Learning a third language is easier than learning a second because your brain adjusts to become less tightly coupled to the words and phrases you already know. Having studied Hebrew, I have learned to communicate without the verb 'to be', 'have' (the equivalent is literally 'there is to me'), and indefinite articles (a, an). There is also a preposition (את) that I don't know an equivalent of in any other language.
It is my opinion that multilingual people have developed the ability to express their necessarily-not-yet-explicated thoughts (concepts and ideas) in the language of their choosing. Correspondingly, programming languages are a medium for expressing the programmer's ideas about computation. When I'm programming, I'm thinking about concepts, not language specifics, for example "abstract this segment of code to a function" can become
def removeVowels(target):
...
string removeVowels(String target) {
...
}
removeVowels :: string -> string
removeVowels target = ...
I don't think of language specific syntax. I have an idea about computation and express it using the idioms and syntactic features at my disposal. Further examples:
In English, when asking for permission, one would say, "May I.../Can I...", whereas in Hebrew one will often say אפשר - which translates to 'possible to [infinitive] ...'. Similarly, in the above example, the python approach might be:
for ch in target:
non indexed iterator
Curly brace type language:
for (int i = 0; i < target.length(); i++) {
}
Haskell:
map consonantOrNothingFunction target
but all of these approaches yield the same computational result even though fundamentally different in structure and nature. A good polyglot has detached their language facility from their conceptualisation faculties. I certainly think I have. Multilingualism fosters this detachment, making programming easier.
edit: code sample formatting
- pacala 14y agoYet another anecdote from yet another polyglot. This came up today in a review: > Java statement sequences are a monad, with a weird fold notation, for (blah : blahs) { ... }. I can live with weird notations ;)
- bmuon 14y agoI think this is a natural progression for many programmers. First learn one language. Then in switching between different ones they learn there are patterns in common. Eventually they can read any language and consciously or unconsciously ignore the "noise" and focus on the ideas. Finally they can become proficient with a new language very quickly.