It is natural for students to wonder how they will benefit from the study of programming language concepts.  After all many other topics in computer science are worthy of serious study.  The following is what we believe to be a compelling list of potential benefits of studying language concepts.

  • Increased capacity to express ideas. It is widely believed that the depth at which we can think is influenced by the expressive power of the language in which we communicate our thoughts.  Those with a limited grasp of natural language are limited in the complexity of their thoughts particularly in depth of abstraction.  IN other words, it is difficult for people to conceptualize structures they cannot describe, verbally or in writing.  Programmers in the process of developing software are similarly constrained.  The language in which they develop software places limits on the kinds of control structures, data structures, and abstractions they can use; thus the forms of algorithms they can construct are also limited.

 

Awareness of a wider variety of programming language features can reduce such limitations in software development.  Programmers can increase the range of their software-development thought processes by learning new language constructs.

It might be argued that learning the capabilities of other languages does not help a programmer who is forced to use a language that lacks those capabilities.  That argument does not hold up, however, because often language constructs can be simulated in other languages that do not support those constructs directly.

For example, having learned of the array manipulation functions for FORTRAN 90 (ANSI, 1992), a C++ (Stroustrup, 1997) programmer would naturally be led to building subprograms to provide those operations.  The same is true for many other more complex constructs that are discussed in this book.

The study of programming language concepts builds an appreciation for valuable language features and encourages programmers to use them.

The fact that many features of languages can be simulated in other languages does not lessen significantly the importance of designing languages with the best collection of features.  It is always better to use a feature whose design has been integrated into a language than to use a simulation of that feature, which is often less elegant and more cumbersome in a language that does not support it.

  • Improved background for choosing appropriate languages. Many professional programmers have had little formal education in computing science; rather, they have learned programming on their own or through in-house training programs.  Such training programs often teach one or two languages that are directly relevant to the current work of the organization.  Many other programmers received their formal training in the distant past.  The languages they learned then are no longer used, and many features now available in programming languages were not widely known.  The result of this background is that many programmers, when given a choice of languages for a new project, continue to use language with which they are most familiar, even if it is poorly suited to the new project.  If these programmers were familiar with the other language available, and especially the particular features in those languages, they would be in a better position to make informed language choices.
  • Increased ability to learn new languages. Computer programming is a young discipline, and design methodologies, software development tools, and programming languages are still in a state of continuous evolution.  This makes software development an exciting profession, but it also means that continuous learning is essential.  The process of learning a new programming language can be lengthy and difficult, especially for someone who is comfortable with only one or two languages and has never examined programming language concepts of languages is acquired, it becomes far easier to see how these concepts are incorporated into the design of the language being learned.

For example, programmers who understand the concept of data abstraction will have a much easier time learning how to construct abstract data types in Java (Gosling et al., 1996) than those who are not at all familiar with data abstraction.  The same phenomenon occurs in natural languages.  The better you know the grammar of your native language, the easier you will find it to learn a second natural language.  Furthermore, learning second language also has the beneficial side effect of teaching you more about your first language.

Finally, it is essential that practicing programmers know the vocabulary and fundamental concepts of programming languages so they can read and understand programming language manuals and promotion literature for languages and compilers.

  • Better understanding of the significance of implementation. In learning the concepts of programming languages, it is both interesting and necessary to touch on the implementation issues that affect those concepts.  In some cases an understanding of implementation issues leads to an understanding of why languages are designed the way they are.  This is in turn leads to be used.  We can become better programmers by understanding the choices among programming language constructs and the consequences of those choices.

Certain kinds of program bugs can only be found and fixed by a programmer who knows some related implementation details.  Another benefit of understanding implementation issues is that is allows us to visualize how a computer executes various language constructs.  This in turn fosters an understanding of the relative efficiency of alternative constructs that may be chosen for a program.  For example, programmers who know little about how recursion is implemented often do not know that a recursive algorithm is typically far slower than an equivalent iterative algorithm.

  • Increased ability to design new languages.  To a student, the possibility of being required at some future time to design a new programming language may seem remote.  However most professional programmers occasionally do design languages of one sort or another.  For example, most software systems require the user to interact in some way, even if only to enter data and commands.  In simple situations, only a few data values are entered, and the input format language is trivial.  On the other hand the user might be required to traverse several levels of menus and enter a variety of commands, as in the case of a word processor.  In such systems, the user interface is a complex design problem.  The form of that interface is designed by the system developer, and the criteria for judging it are similar to criteria used to judge the design of a programming languages therefore will help in the design of such complex systems, and more commonly, it will help users examine and evaluate such products.

 

  • Overall advancement of computing. Finally, there is a global view of computing that can justify the study of programming language concepts.  Although it is usually possible to determine why a particular programming language became popular it is not always clear, at least in retrospect, that the most popular languages are the best available.  In some cases, it might be concluded, a language became widely used, at least in part, because those in positions to choose languages were not sufficiently familiar with programming language concepts.

 

For example, many people believe it would have been better if ALGOL 60 (Backus et al., 1962) had displaced FORTRAN in the early 1960s, because it was more elegant and had much better control statements than FORTRAN, among other reasons.  That id did not is due partly to the programmers and software development managers of that time, many of whom did not clearly understand the conceptual design f ALGOGL 60.  They found its description difficult to read (which it was) and even more difficult to understand.  They did not appreciate the benefits of block structure, recursion, and well-structured control statements, so they failed to see the benefits of ALGOL 60 over FORTRAN.

Of course, many other factors contributed to the lack of acceptance of ALGOL 60, as wil see in Chapter 2.  However, the fact that computer users were generally unaware of the benefits of the language played a significant role.

In general if those who choose languages are better informed, perhaps better languages would more quickly squeeze out poorer ones.