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.