Programming languages are, to my mind, the pinicle of language. They are a perfect blend of precision and expressivenses.
What we think of as normal language (spoken and written) tends to be very expressive, but also terribly imprecise. This is especially true of English. It is wonderfully expressive: just a few poetic words can convey great depth of mood or emotion, with many layers of meaning.
But its lack of precision is legendary. Everything from weird gramatical bumps and tangles, to synonyms (two words that mean the same thing), to homonyms (two words that sound or look alike but have different meanings) confounds those learning English as a second language and native speakers alike. Even the grammar is inconsistent and makes it easy to construct highly ambiguous sentences. For example, “He said he would go on Tuesday” (did he say it on Tuesday, or will the travel take place on Tuesday?), or “I don’t like annoying people” (is it people who are annoying that I dislike, or the act of me annoying others?).
In stark contrast, mathematics is the purest of languages. It has perfect precision, but at the expense of expressiveness. x = 3 is clear as day: it has only one meaning. So pure is the language of mathematics that there is not even really any such thing as different mathematical languages or local dialects. But x = 3 does not convey mood, emotion, or layers of meaning. It is what it is, no more and no less. (Which is the very property that makes it so precise.)
Programming languages (such as my current favorite, Ruby) strike a balance between these two extremes that I find deeply pleasing. Often when speaking with other programmers I find that it’s much faster, easier, and clearer for me to communicate by writing a code snippet while they watch, compared to trying to explain in verbal or written English.
Writing an apropos sentence is uniquely satisfying. But writing the perfect line of code is blissful in an almost trancendent way.
Learning how to program is something I think everyone should do, even if only to a limited degree. Once you have taught your brain to think in the precise-yet-expressive terms of programming, you’ll find your ability to communicate effectively with regular language greatly improved as well.