9

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 ?

Language

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"

Kraang Prime
  • 247
  • 2
  • 8

9 Answers9

11

Communication

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.

2

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 :)

ProfessorFluffy
  • 425
  • 3
  • 6
2

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.

user6726
  • 574
  • 2
  • 7
2

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; } };
Languages.Add("C#");
Languages.Add("ASM");
Languages.Add("English");

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.

Warlord 099
  • 121
  • 2
1

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.

André Souza Lemos
  • 1,174
  • 9
  • 23
1

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.

Mozibur Ullah
  • 49,540
  • 15
  • 101
  • 267
1

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.

Edit

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

https://stackoverflow.com/questions/4197751/is-there-a-formal-grammar-for-english-language

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

aroth
  • 119
  • 5
0

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.

Alexander S King
  • 28,056
  • 8
  • 76
  • 205
James
  • 1
  • 1
0

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.

Lastly,

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"

has_mammary_gland(lion).
has_mammary_gland(human).
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).
true

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

?- mammal(Animal).
Animal = lion
Animal = human
Lie Ryan
  • 1,475
  • 9
  • 11