A Short History Lesson
The C programming language was developed around 1972 and quickly gained popularity. By the early 1980s programmers were starting to dabble in extending C to incorporate classes, a burgeoning concept in programming. Several modified versions of C were produced, each with their own characteristics. I tend to think of these as dialects of the C programming language, which eventually coalesced into C++, used across a wide array of computing platforms, and Objective C, used nowadays only by Apple. C and C++ are regarded as low-level programming languages, granting you direct access to the computer’s underlying hardware in a way that more modern programming languages have abstracted. There’s an ever-growing number of programming languages, some with dedicated purposes (like FORTRAN or COBOL), some which are easier to learn than others (such as BASIC or Pascal), some highly influential yet rarely used (like Haskell or Lisp). Then there are widespread languages which are unpleasant to use (my personal pet-hates are CGI Script and PHP). While these programming languages have become more functional, allowing for more rapid development and easier debugging, it’s C++ that’s the most widely-adopted, versatile, complex, finely-grained and expressionist language in the world of computing. In its willingness to grant the programmer total control over the computer’s most personal functions, C++ offers more control and consequently greater power.
Of course, with power comes responsibility and risk, and it therefore falls to the programmer to become highly eloquent, i.e. capable of expressing logical constructs in as elegant a manner as possible: where an extra ‘+’ symbol in a language like Java would be flagged as invalid before the program even had a chance to run, this could well be allowed in C++ even though it transforms the coded statement into meaning something quite different. And here is where the analogy comes in: due to varying influences over the past two millennia, English has evolved into a language that is easy for a newcomer to get a basic grasp of, yet incredibly difficult to truly master. Even those who have been speaking and writing English for decades can marvel at an expression more elegant than they could conceive. Furthermore, there can be a panoply of permutations varying from the humorous, sombre, legal, old-fashioned, apposite or contrasting, to express almost exactly the same concept. To the well-read native speaker the exact word choice is like a dog’s nose, extracting higher levels of detail; well-written C++ expresses a concepts in a clear, unambiguous form and requires training to a high level of comprehension.
Convergence / Divergence
Every programmer/developer has a ‘first’ language that they understand better than anything else, but the best programmers, like the best translators, are those that can read code in almost any programming language and then feel the urge to start modifying it or writing their own code. Just like spoken or written languages, you frequently find that one programming language is based upon another, and that the similarities are like an open door which invites and then rewards exploration. C++ doesn’t require that the programmer learn every facet of its complexity; very simple, short programs can be written in C++ in much the same way as a student of English can leave their first lesson with a handful of short phrases which can be used as a common denominator to introduce themselves around the globe.