The Difficulty of Success
Many computer languages have been invented over the years, yet a mere handful account for
almost all programs in use. It is evidently very difficult for a new computer language to
take root. The reasons why are clear.
For a language to succeed, just being a good language is not enough. Languages are hard
and timeconsuming to learn, especially new languages, bereft of a body experience and
well-tested code. Few programmers will take the trouble and face the risk, unless the
language offers a significant advantage over the ones they already know.
Simply having more features than another language is not in and of itself an advantage. Computer science shows us that it only
takes a small number of features (memory, simple logic and basic input-output) to be able to perform
any possible function. Once these core requirements are met, new features can only improve on the way
tasks are handled — reduce the cost or increase the benefit (by supporting more platforms,
more data formats, bigger capacity, etc.). Again, only a small number of features are needed
to optimize the most common tasks scoped broadly enough for most users. So before long the law
of diminishing returns sets in: the cost of each additional feature (extra effort required to learn the
language or implement it) tends to stay constant or rise, while the benefit tends to accrue to an ever
smaller proportion of tasks and users.
More important than the number of features of a language (its "power" as commonly understood) is
the configuration of features: how closeley does a language's particular feature set
correspond to the kinds of tasks its users aim to accomplish? If the language is more of a
"natural fit" than the alternatives it stands a very good chance of being put to use.
Not surprisingly, the most widely used languages are the ones that are a natural fit for the most widely
faced tasks. And the task faced most widely by programmers is programming itself. Every language
embodies a paradigm of programming, evident in the shape of programs rather than their effect: How
are programs organized? What are the building blocks, and what are the rules for putting them together?
No wonder that the history of programming languages, at the broadest level, is a history of paradigm
The Paradigm Parade
In 1954 FORTRAN introduced the paradigm of high level languages, which freed programs from
their dependence on a specific piece of hardware under specific circumstances. Software could
now be shared, stored, run on different machines, and understood by someone other than the author.
Ten years later, BASIC introduced the concept of an interpreted language, and with it the ability
to program interactively, in real time. This greatly lowered the cost of making mistakes,
which opened up programming to hobbyists and students, a market BASIC and its offshoots
have dominated ever since.
Edsger Dijkstra's 1968 paper Go To Statement Considered
Harmful heralded the beginning of the next paradigm shift, to structured programming.
The C programming language, born in 1973, was not the first based on the new paradigm, but it was
the first to go break out of the academic world and into wide commercial use. It did this by
combining a very simple set of features and a concise but expressive syntax with an organizational
model which closely paralleled the architecture of computers. This made it a convenient language
for interfacing with hardware and writing low-level logic without detracting from its usefulness
as a higher level language. It soon became the favorite language of systems programmers.
Over the next several years, C spread from operating systems to applications of every kind, becoming the predominant
language in commercial software development. Then, in 1985, Bjarne Stroustup's The C++ Programming Language
was published. The object-oriented paradigm proved irresistable to programmers, and by the mid-90's most
C programmers had become C++ programmers.
The shift from C to C++ makes a convincing case for the power of paradigm, since there is little
else that differentiates the two languages. You can write object-oriented software in C, but
that's not the natural way to program in that language. C++ is C with object-oriented features added,
making object-oriented programming the natural way to program in that language. Just a handful
of new features, yet it was enough to allow C++ to supplant C as the workhorse language of the
Meanwhile, in the Presentation Layer
The programming languages described above are general purpose procedural languages. They are designed
to implement specify the logic of an application. Another class of languages are those that specify presentation. Here again,
language shifts follow paradigm shifts. HTML
bacame the most successful presentation language of all time by combining a document paradigm, markup,
and an interaction paradigm, hypertext, into one very simple and particularly easy-to-use language.
In the last few years, page definition languages such as PHP and JSP have extended the markup
paradigm to accomodate dynamic content, by providing ways to embed logic in markup. This approach
is effective but also expensive. The markup and the logic may share the same file but they follow
distinct paradigms, the result of separate authoring approaches, and, more often than not, separate
Bento achieves a new synthesis of markup and logic in a very simple way: by adopting the
object-oriented paradigm for markup. This does more than just bestow onto the markup the
benefits of doing things an object-oriented way, substantial though they may be. Sharing the
same paradigm also makes it possible to share the same organization, resulting in seamless and
unified page definitions. The knowledge required to create and maintain page definitions is
actually reduced, and the chance greatly increases that the necessary skills might be found
in a single person.
By offering web developers a new yet proven paradigm, Bento offers a compelling reason to invest
in learning the language. It helps as well that Bento shares the simplicity, conciseness and
expressiveness of a language like C. To top it off, Bento is an innovative language with
several new and unique features (multiple bracket types, descending construction and Bento's
dynamic array syntax, to name a few).
Copyright © 2002 by bentodev.org. All rights reserved.