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