This question might seem like it answers itself, but I urge you to consider the possibilities and the impact this could have on society.

As a systems engineer, programming is more common to me than my "native" language - English.

My understanding is that your native language is the one you are most comfortable with, even if society around you doesn't speak it. Does this mean that I should be putting Assembly on documents when asking for my main language, and then English as a secondary language ?

In countries that have rights to interpreters in legal proceedings, how do you think this would impact ?

This is more of a "fun" question, but it does have some potentially life-altering possibilities. Is it time that we consider digital languages as actual languages ?


the method of human communication, either spoken or written, consisting of the use of words in a structured and conventional way.

"a study of the way children learn language"

the system of communication used by a particular community or country.

"the book was translated into twenty-five languages"

  • 5
    I can see why this is a fun, interesting question, but this seems to depend on what you mean by what a language is, and answers fall immediately from how that's defined. May 18, 2015 at 22:44
  • 1
    Programming language are just one way commands, the processor doesn't talk back. And we need to add comments, have documents on top of the programming language for an other human to understand it. Native language is the one you were born with.
    – the_lotus
    May 19, 2015 at 12:27
  • 1
    IMHO, this is a linguistics question -- a viable answer might address whether computer languages model the generative grammar concept as proposed by Chomsky (or some other proposed definition/essential-feature of natural language); but that is a problem for linguists, not philosophers.
    – Dave
    May 19, 2015 at 14:31
  • 1
    If it is a full range of semantics, and not just performative semantics and syntax that makes a language, then this is a philosophy question, just a silly one, and the answer has to be 'no'. Computer languages are mathematical structures, not repositories of meaning.
    – user9166
    May 19, 2015 at 15:11
  • 2
    How do you say "tree" in assembly? It seems to me that the comparison fails at the first stage. May 19, 2015 at 15:34

9 Answers 9



Compare your question:

My understanding is that your native language is the one you are most comfortable with, even if society around you doesn't speak it.

and http://en.wikipedia.org/wiki/Language:

Language is the ability to acquire and use complex systems of communication, particularly the human ability to do so, and a language is any specific example of such a system.

A key point in the generally accepted notion of 'language' is communication. So you can't really say it doesn't matter if society around you speaks the same language or not.

Imperative vs. informational

The language family you used as an example, Assembly, is an imperative language: it gives instructions to a processor. It is not able to hold information, even in the very simple form of propositional logic. True, you may set or clear bits depending on the truth of a statement, but then the language still doesn't convey information: interpretation is needed.

In natural languages, information is very important. Exchanging information is one of the main functions of language.

Other programming languages like prolog or functional languages may be better suited to convey information, however, it is complicated to work with uncertainty in these languages (for example, "It may be raining").

Don't underestimate your ability to speak natural language

You're saying you may as well put Assembly as your native language. Please consider for a moment writing your above question in Assembly. Then reconsider claiming Assembly could've been your mother tongue.

  • Doesn't this hold true for any language - interpretation is needed. In english for example, we string characters together and then give them meaning. When communicating with these statements, they are then interpreted, and more prone to misinterpretation of the combined meaning or individual term. Using a language that is based on moving memory addresses may be much longer, but the meaning conveyed is precise which I believe is one of the major defining factors of a language. Also, I considered writing the Q in ASM, but this is an English only site ^^ May 19, 2015 at 0:05
  • 1
    @SanuelJackson there is a difference between the amount of interpretation needed to understand "The king lives" and "10010011". For the first, we need to know the meaning of the words alone. The second may have different meanings in different places of the memory, under different programs. I'm also still very interested to see a translation of "The king lives" in assembly.
    – user2953
    May 19, 2015 at 7:18
  • 1
    @Davor you need to know what the words mean, but the context is irrelevant. With the meaning of the words alone you can understand the meaning of the words in the context. In machine code, 'words' don't have a meaning outside of their context.
    – user2953
    May 19, 2015 at 12:53
  • 1
    @Sanuel Jackson I'd be happy to see a single, basic sentence translated from english to assembly. You did not provide any example so far to support your claim that the question could have been written in ASM. May 19, 2015 at 15:38
  • 1
    While the differences between the two paradigms (natural and 'machine' language) are still quite extensive here is an interesting paper about the attempts to interpret natural language under a logical framework. I believe this is quite possible as presented in the paper but it simply emphasizes (IMO) the differences in PURPOSE of such languages. Whether in their extreme cases the two are indifferentiable is not the main issue to me: web.stanford.edu/class/linguist236/materials/… May 20, 2015 at 19:56

I think it's the pedantic difference is between "human language" and "computer language". Right now, there probably isn't a distinction in most legal definitions pertaining to translation rights, but it would be a quick fix if someone wanted to challenge it. Laws typically contain a "definitions" section where they define words they use. The definitions they use don't have to be the common usage, it's just the usage they are intending in that law. They would very quickly amend the definition to mean "human language" (carefully crafted to be precise and close the issue).

However, if you were to get a colony of like minded systems engineers to use a computer language as your day-to-day communication, then you might have to start training a translator :)

  • This is interesting, and concise. Consider if we were to deem computers as a population. In a person to computer scenario, programmers communicate in one or more dialects or languages that the computer can understand or interpret. Do you think it is viable to consider this as a colony of sorts ? Programmers also communicate with each other often using computer code (assembly, vb, etc), and outside of work when they do this, people look on with glossy eyes as non-coders don't understand the language. May 19, 2015 at 0:00
  • You've mentioned several times that you use ASM to communicate. I am curious how this works when you do this with your peers. Are you talking about ASM? Are you using it to supplement English. Will you really have a full conversation using only ASM? If so, please give an example - that would be awesome May 19, 2015 at 0:34
  • ;btw, this doesn't count. May 19, 2015 at 0:35
  • No problem. In conversation, it's generally limited to discussing how to do something in the program where the bulk of the conversation (as you could surmise), is moving registers. These conversations typically have very little english limited to phrases such as "open this", and "look at this", followed with pastes of communication in said language if the information is more extensive -- eg, it would take 3 hours to read it. The communication while not always verbal, is still mostly in the language we commonly share. May 19, 2015 at 0:38

The term "native language" doesn't have a standard legal definition. In the US, it has a statutory definition for federal educational purposes (funding-related), as "the language normally used by such individual; or in the case of a child or youth, the language normally used by the parents of the child or youth". Comfort is irrelevant. Since you do not speak Assembler (any dialect), it isn't your native language, and no humans speak any programming language, the remainder of your questions are moot.

Assuming that someone invents sentient computers which are deemed to be legally equivalent to humans, then it is possible that binary opcodes (not higher-level programming languages, which are human-interface devices) could be legally deemed "the native language" of such objects. Or, it could be deemed that all computers must be programmed to understand English. Since computers do not use language anyhow, you can't predict what the legal outcome would be.

  • When I am with other programmers, we do tend to communicate much more often in those languages rather than english. If a non coder were to listen in, they might understand a few english terms as they are mixed in, but generally speaking the conversation would go largely without understanding. This is common for native speakers of one language to mix in terms from another language (ever listen to chinese radio stations - as an example). May 19, 2015 at 0:09
  • This does not negate the possibility/probability that upon a test in court, the language could possibly fail, however even Klingon, and ancient "dead" languages have been known to be allowed as a language even though they fall far short of conveying any meaning definitively. In this, programming languages will convey the same interpretation from computer to computer, and from experienced coder to experienced coder. May 19, 2015 at 0:12
  • There's a simple way to see that Assembler is not actually a language. Give me the Assembler expression that translates "All lions are mammals", "I believe that all lions are mammals" and "I deny that all lions are mammals". These propositions can be conveyed in Klingon, also any ancient dead language that is actually known (so, not Etruscan).
    – user6726
    May 19, 2015 at 0:18
  • @user6726 - you are aware that there are millions of words from various languages that don't have equivalent translation in other languages? Your argument is straight up ridiculous.
    – Davor
    May 19, 2015 at 12:45
  • @Davor, the point is not that there is a minor lacuna, but that assembler is in principle incapable of expressing such propositions. In natural language, there is a simple means of filling the gap -- borrow the word for the new concept. That doesn't mean anything when applied to assembler.
    – user6726
    May 19, 2015 at 16:18

I would say it is in the sense that it contains an explicit way of communicating. However, for you to truly speak using a programming language your message (for lack of a better term) would have to be able to be interpreted without the use of any other existing language.

Take a look at this comment you made to another answer:

private List _Languages = new List();
public List Languages { get { return _Languages; } set { _Languages = value; } };

Using this as an example, I would say that you are not truly communicating via a programming language. What you are doing is communicating in an obfuscated form of English using a programming language. The reason I say this is because the use of the strings such as "English". The only reason this works for communication because it is already defined in another implied language.

Although I do not know for sure how you are using assembly to communicate with your peers, my gut feeling is that you are essentially using it to encrypt an English message that can then be decrypted by somebody else who understands assembly.

Also note that your example is not syntactically correct in C#. Even assuming the variables are declared outside a method that contains the other three statements, the semicolon after the get/set declaration would still throw an error.

  • Good eye, sorry, went semi-colon happy ;) May 19, 2015 at 16:02

Consider that a programming language - as they are used today - is a language that has an operational semantics, and that a natural language is a language with which, say, you could set up the Turing test. You see where this is going: the possibility of using them interchangeably would be a concrete refutation of the Turing test.

That said, it is Pierre Lévy's contention that it is possible to create a language with which you could express both meaning and computation (which is a different thing than using it for those two purposes interchangeably, or simultaneously). If successful, it could be a game changer - and it is intended that way, actually.

A more fundamental concern is that the term "language" in "programming language" has a very strict connotation that is almost completely unrelated to the phenomenon that linguists study. Also, the term "natural" in "natural language" is philosophically problematic, far from consensual. It can easily be defended that human language, in its manifestation, is entirely artificial.

  • What fails the Turing test, is determining if a computer is sentient or not, this is not relevant when using a language to convey information reliably. Common for developers is to "speak" or otherwise relay information in the common language they choose to communicate - C++, ASM, etc. To those listening in, it would sound more like a broadcast on a foreign radio station where only some words here and there could be understood. I feel that even though it may take longer to convey meaning, that the end result is more precise than languages such as English / etc. May 19, 2015 at 0:16
  • Interestingly, your comment made me think of the attempt a psychotherapist makes to understand the language of a psychotic patient. May 19, 2015 at 1:54
  • If Linguists use the term natural language then this seems to naturally lead to asking which languages aren't natural; would one example be Esperanto or were they thinking of something else entirely? May 19, 2015 at 7:38
  • The part about the Turing test makes absolutely no sense.
    – Davor
    May 19, 2015 at 12:47
  • And I expect you to tell me exactly why, in a way that makes sense. The burden of making sense is upon all of us. May 19, 2015 at 12:56

Linguists are professionally trained to deal with languages; none of them as far as I know deal with assembler or even a computer language like C++ or Java; every language they study are spoken or has been spoken; it may have had a written form; it may be a sophisticated court language or a creole or pidgin.

A computer language has to be exact and precise for it to function at all; it can cope with ambiguity - ie overloading or contextual change by scope; but these are re-interpreted to make them precise.

Human languages have a high-level of ambiguity, which when contrasted to computer languages are seen as problematic; and it is so long as you wish to program in a natural language or if you fetishise precision; but it was quite quickly realised that a much truncated and modified language was more effective; at the basic level the Turing language; at the chip-level, machine-code; then higher-level languages like COBOL, Smalltalk or Java; this might be called a language-stack.

Ambiguity is important in human languages because the world is: what is a chair? Something to sit on; so a log as well as an armchair or a bench; and maybe too the floor if one is comfortable sitting cross-legged; and wouldn't it be unbearably cumbersome to name every shade of red a different name, because it was a different shade? And could a metaphor like 'his granite face' work if granite could only ever pertain to a certain kind of igneous rock? And faces only to humans, or even mammals?

So no; computer languages are closer to things like architectural plans of houses or buildings (they just happen to be written in a serial manner - and interestingly one hears of 'hardware architecture and software architects') than actual languages - dead or alive, creole or state.

  • Very nice answer, and you are correct that (if making a segregation) "human" language is more ambiguous, and thus prone to errors or misinterpretation. For a computer language to work as a communication system, definitions (eg, pre-defined constants) would need to be in place. The ambiguity of the "granite" face, is more creativity and satire, than a precise description. Albeit assembly may be a wide exaggeration as to what may be feasible for effective communication, so to are older forms of "human" language like olde english using a very limited alphabet May 19, 2015 at 16:10
  • @jackson: you're welcome; though I think you may have misunderstood what my intentions were by focusing on ambiguity as one marker of what separates these two notions of languages. A natural language simply isn't functional as a computer language because of ambiguity; as you said it introduces errors; but ambiguity is natural to natural languages and it's used there in many different ways; one of which I suggested is the construction of metaphors; though my specific example might be seen as satirical I recall reading somewhere that it is seen as a fundamental feature of natural languages May 19, 2015 at 16:27
  • In how it interprets the world around us: consider the etymology of the word language; it comes from the Latin lingue which means tongue; is this not a form of metaphor when understood broadly? There is probably a more linguistically specific term that accounts for this; but unfortunately I don't know it. May 19, 2015 at 16:30
  • On a personal note, as a teenager I once kept a diary in ASCII code because it became natural to me as a consequence of hand-coding assembler for the 6502 processor :) May 19, 2015 at 16:35

I'm going to say no, with a caveat.

Like natural languages, programming languages are described by grammars. However, in the case of a programming language, the grammar must be constrained in ways that allow a machine to read any arbitrary program and determine (in a completely matter-of-fact, deterministic way) either 1) that it is not a valid statement in the language, or 2) that it is valid and has a clear and unambiguous meaning in the language.

This means that in practice programming languages are less expressive than natural languages, and by design do not permit the sort of nuanced meanings that natural languages capitalize on to communicate humor, irony, or double-entendre's (among others). There are concepts that can be communicated using natural languages that cannot be mapped to an equivalent program/statement in today's programming languages.

So on that basis, I'd say no, a programming language is not equivalent to a natural language, because it is not expressive or flexible enough to communicate everything that a natural language can.

The caveat, however, is that if you have a programming language whose grammar is equivalent to (or a superset of) the grammar associated with a natural language such as English, then that programming language could also count as a natural language. The same applies if someone creates a programming language whose syntax is a natural language (i.e. being able to enter programs as freeform English prose). Realistically, however, I don't think either of those is liable to happen any time soon.


And here's a good discussion of how the grammar associated with a natural language rates, in the formal/programmatic sense:


The words "ambiguous" and "huge" are thrown around, quite rightly.

  • Even a computer language with the syntax of a natural language would not be able to adopt human semantics. There are humans among us that have trouble with human semantics, the profoundly autistic and unremittingly schizophrenic, and we note they have a hard time keeping their own language from devolving into something that they do not even understand themselves. So any computer 'speaking' this language would probably lose its grasp on it unless you gave it a very restricted semantics. And the ability to capture a full range of semantics is what constitutes a language for a lot of people.
    – user9166
    May 19, 2015 at 15:08
  • Also a good answer. In programming if you wish to capture emotion, can always put an ascii emote in the comments. Human emotion is relayed by more than just verbs, which could be done programmatically, but more so by tone of voice, as well as expression, and other body language/cues. Choice of language does not eliminate the possibility to continue using those cues like this :) May 19, 2015 at 16:14
  • Wouldn't comments be exempt from consideration (unless the content within the comments is written in the same programming language, as opposed to another language like English or emoji)? That seems more a case of annotating one language with another than of imbuing one language with the qualities of another. As a side note, I think commenting code with comments that are themselves written in code sounds like a lot of fun, actually.
    – aroth
    May 20, 2015 at 7:04

I would say no - if I walked up to someone who understood Java (or Python or some other language) and started speaking it to them, then they might understand it but only after they put in context.


It depends on your definition of "language". You quoted the definitions. Let's start with the first one:

the method of human communication, either spoken or written, consisting of the use of words in a structured and conventional way.

Programming language have structure and conventions, and it has words that has meanings. While programming languages are typically written, it's not inconceivable to speak a programming language. The primary concept in this definition is that programming language is a "method of communication", and a programming language certainly is a method of communicating, although the primary target is usually computers. Programming language is also used to communicate with other programmers about the steps that needs to be done to do tasks.

The second definition:

"a study of the way children learn language"

is incoherent in this context. There's no coherent definition of what "children" means in terms of programming language.


the system of communication used by a particular community or country.

This definition is certainly fits programming language, which is used by a community of programmers to communicate to machines and each other.

I think these are uninteresting definitions, they don't really highlight the difference and similarity between natural and programming language. Let's try something else.

Definition A:

Language is a system of communication.

What does "communication" means? For computers, communication revolves around giving instructions, asking questions, and providing answers. These functions are actually fulfilled by different computer languages, programming languages excels at doing the first, a data query language like SQL or Google Cards query for the second, and providing input to computer is done through data languages like XML.

Definition A is unsatisfactory because it necessarily includes a lot of things that we might not traditionally define as languages, like body languages, facial expressions, or pheromones.

Definition B:

Language is a structured system used for communication.

What does "structured" means? For this, we'll define "structured" as the property that the system have a consistent rules to combine elements in the language to construct larger compounds to express arbitrarily complicated concepts.

What structures does an assembly language have? Assembly language consists solely of imperative statements with a fixed set of registers and memory addresses. An instruction like mov %eax, %edx or int 21h instructs the processor to do certain operations.

Where does imperative language fall short? Assembly has a fixed set of verbs, usually numbering in the hundreds. It is not possible to define new instructions in pure machine language (lets put aside synthetic instructions created by macros).

What kind of programming languages can define and express arbitrary verbs? Procedural languages are languages in which you can define new verbs by combining existing verbs. Procedural languages is inherently still imperative though, as it still only have verbs.

Where does Procedural language fall short? Procedural languages, like C, cannot natively express nouns (lets ignore using struct with prefix naming conventions).

What kind of programming languages can define and use nouns to express a coherent concept? Object oriented languages have nouns. And objects can be used as both a subject and object. In object oriented language, you can express concepts like:

Common/Class Nouns: "A human"

class Human {}

Is-A relation: "A royalty is a human":

class Royalty : Human {}

Simple Properties: "A human may or may not be alive"

class Human {
    Boolean alive;

Complex Properties: "A human have skin color"

class Human {
    Color skin;

Behavioral properties: "A human can talk to another human about some topic"

class Human {
    void talkTo(Human another, Topic topic);

When combined with features from imperative and procedural language, you can also express concepts like:

Proper/Specific Noun: "Let the King be a royalty"

king = new Royalty();

Specific Properties: "Let the Crown Prince be a royalty with dark skin"

crown_prince = new Royalty(skin=dark);

Actors and Imperative verbs: "Crown prince, talk to Queen about the weather!"

crown_prince.talkTo(queen, weather);

What does an object oriented language lacks? One big omission are statement of facts. An object oriented language has to use workarounds like "Let..be" clauses to state a fact, and this is unsatisfactory.

What kind of languages have a statement of fact? A logic programming language like Prolog or the DSLs used to program an expert systems have a native way to state facts, without the circumlocution necessary in less expressive languages.

For example, we can express in a logic programming language:

Statement of fact: "Lion have mammary gland"

mammal(X) :- has_mammary_gland(X).

And these statements and rules can be used by a query solver to infer solutions to questions:

Yes/No Question: "Is a lion a mammal?"

?- mammal(lion).

WH Question: "What mammals do you know of?"

?- mammal(Animal).
Animal = lion
Animal = human
  • 1
    You can replace class names with arbitrary strings (Hgyj instead of Human, agkg instead of alive). Strictly speaking the program is the same. How would you tell that the program is really about humans without relying on english? Structure is not enough, you need reference to the real world, which programming languages lack. May 19, 2015 at 21:56
  • @quen_tin: Good question. Yes, it doesn't really matter what the string you put as the class names (many computer languages would throw them away anyway); rather, the way you know that the Hgyj class refers to real world humans is by the structure and relationships between the class and method definitions that are built up from the built in functions in the standard library. Human, for example, is the only creature in the computer's known world that can agkg to one another. When you supply the method definition for Hgyj.agkg, then it's clear to the computer that only real world humans fits tha
    – Lie Ryan
    May 19, 2015 at 23:10
  • @quen_tin: a big difference between computer languages and human languages is that computer languages starts with a fairly empty dictionary, while human language almost always starts with a fairly hefty dictionary of existing words that are slowly programmed into you one by one from when you're a small child that just barely can talk. That's why you need to define your own words and concepts from scratch but didn't feel the need to with natural languages.
    – Lie Ryan
    May 19, 2015 at 23:15
  • @quen_tin: also, to put it into perspective, you should ask yourself the same question with natural languages. Why would you know that the string "human" in English refers to a certain group of creature in the 3D world? Your teachers or parents probably programmed the definition of that word to you when you were little. Computers need to do the same as well, the identifiers are often, but not always, related to real world concepts, but computers are happy to work with a minimal definition.
    – Lie Ryan
    May 19, 2015 at 23:31
  • the point is that we learn words by interacting with the world, and this is possible because we have similar "hardware" but programming languages are independant of the hardware and computers are not autonomous living creatures. + we don't learn words through explicit definitions. May 20, 2015 at 8:28

Not the answer you're looking for? Browse other questions tagged .