Strict and simple conventions favor the useful expression of ideas
On Friday, April 6, 1327, during Easter mass in the Church of St. Claire in Avignon, Francesco Petrarca beheld the woman he would commemorate as Laura, and irrevocably fell in love. Petrarch was 23 years old. If literary tradition is correct in identifying the object of his coup de foudre as Laura de Noves, she was 17.
Petrarch probably never met Laura; she refused to see him because she was already married. But by the time he died in 1374, he had composed hundreds poems extolling her beauty, bemoaning his misfortune, and mourning her early death at the age of 38, a respectable mother of 11.
The poems are collected in a book commonly called Il Canzoniere, or “The Song Book.” To praise Laura, Petrarch perfected the lyric form called the sonnet, which in his hands consists of 14 lines, usually of hendecasyllables, rhyming abba, abba, cdc, dcd or some other variation. This crabbed little form has been imitated by thousands of poets and has inspired many celebrated examples of literary art. The Petrarchan sonnet has been called a cage, but it is a cage that captures a peculiar economy of thought: the octave, the first eight lines, offers a proposition of some sort that is satisfyingly resolved in the sestet, the last six lines. The rules of a sonnet are strict but simple.
By contrast, consider the C++ programming language.
A program, like a poem, is a form for expressing ideas: in one case, words in a natural language, constrained within a lyric, express a man’s love for a pretty woman; in the other, computer code, bound by the syntactical conventions of a programming language, express the idea, say, that an extraterrestrial robot like the Mars Rover could have an autonomous, embedded driving system.
C++ is arguably the most influential language of the last 25 years; many of the systems and applications of the personal-computer and Internet eras were written in it, including Google’s search engine and the electronic switching systems that underlie our telecommunications networks. But for all that, C++ is notoriously hard to learn and use. Partly, this is owing to the difficulty of mastering the language’s paradigmatic method, called “object-oriented programming.” But mainly it is because software developers are free to express their ideas in C++ in a bewildering variety of forms.
In The Design and Evolution of C++, the language’s inventor, Bjarne Stroustrup (whom we interview in this special issue on software; see “The Problem with Programming”), explains that he designed the language this way for quasi-philosophical reasons: “I find Kierkegaard’s almost fanatical concern for the individual much more appealing than the grandiose schemes for humanity of Hegel and Marx. … Often, when I was tempted to outlaw a feature I disliked, I refrained from doing so because I did not think I had the right to force my views on others.”
Stroustrup’s restraint hasn’t pleased the generations of programmers who have struggled with C++’s quirks of syntax and “features overload” (to use coder’s jargon). When a version of our interview with Stroustrup was posted on Slashdot, an aggregator website that offers “news for nerds,” it attracted 605 comments. “JCR” asked, “Why does C++ introduce so much complexity for so little benefit?” The rules of C++ are complicated but lax.
Programming languages affect more people than professional coders. Although our technological civilization runs on software, the software doesn’t work very well. As our cover story by Scott Rosenberg puts it, “Everywhere you look, software is over budget, behind schedule, insecure, unreliable, and hard to use” (see “Anything You Can Do, I Can Do Meta”). Excessively complicated programming languages, of which C++ is one example, are a major reason for software’s confusion. This is because a useful programming language should be what computer scientists call an “abstraction” of the underlying complexity of control flows and data structures. C++ preserves for programmers the maximum possible freedom of expression; but as ”JLeslie” (another Slashdot commentator) admitted, “The cost was that it wasn’t much of an abstraction.”
There may be another way. Charles Simonyi, the former chief architect of Microsoft, who is now the chief of Intentional Software, wants to overthrow programming languages for something he calls “intentional programming.” Rosenberg’s profile of Simonyi explains how intentional programming might give developers a higher order of abstraction. Rather than writing software code in programming languages, programmers would gratefully relinquish the production of code to a “generator” that would swallow their designs, representing the intentions of computer users, and spit out working code in a language that computers could understand, compile, and run.
The best expression of ideas occurs in forms that are strict and simple. Could Charles Simonyi be offering programmers a new form that is at once easier and more rigorous than anything they have had before? Write and tell me at firstname.lastname@example.org