Why Study Languages
Why study programming languages? This course is, after all, not a prerequisite for any other. Why not just have it be an elective? Who's ever going to need anything beyond language ? Let's consider a few reasons.
Every decade or so, the professional organizations ACM and IEEE sponsor the publication of computer science curriculum recommendations. Colleges and universities seeking accreditation adopt these recommendations. The most recent recommendations include programming languages in the list of 18 knowledge areas that computer science students should study. Its authors offer this justification of its inclusion:
Programming languages are the medium through which programmers precisely describe concepts, formulate algorithms, and reason about solutions. Over the course of a career, a computer scientist will learn and work with many different languages, separately or together. Software developers must understand different programming models, programming features and constructs, and underlying concepts to make informed design choices among languages that support multiple complementary approaches. It would be useful to know how programming language features are defined, composed, and implemented to improve execution efficiency and long-term maintenance of developed software. Also useful is a basic knowledge of language translation, program analysis, run-time behavior, memory management and interplay of concurrent processes communicating with each other through messagepassing, shared memory, and synchronization. Finally, some developers and researchers will need to design new languages, an exercise which requires greater familiarity with basic principles.
Programming languages are a part of the canon with which all computer scientists should be familiar, whether they are using existing languages or inventing new ones. We study programming languages because computer science professionals consider the subject to be essential knowledge.
Imagine you are a biology student and every lecture and lab is on cows. You wouldn't really be a biologist after completing your coursework. You'd be a cowist. A cow gives you only one picture of how an organism can be, but to be a biologist, you need lots of pictures of different organisms. Similarly, your first language gives you one picture of how a programmer may talk to a machine, but to succeed as a computer scientist, you need lots of languages. Each language is a narrow window into some deeper concept about how humans talk to computers. We'll only understand our discipline by looking at it through many such windows. Some languages focus on features that produce safe and reliable software. Others focus on performance. Still others focus on ease of development. These features are often at odds with each other and are therefore not present in the same language. Only by knowing and using several languages do you understand the programming landscape. We study programming languages in order to develop a more complete picture of programming.
In many computer science classes, we focus on making end-products for end-users. In contrast, this class is about the tools—the languages—we use to build software, and we therefore won't spend much time discussing requirements, interfaces, testing, or users. In this class, you matter as much the end-user. You spend considerable time hacking away at programs, and the languages you use will determine the quality of that experience. You should learn what languages and language features make programming an enjoyable intellectual activity that results in useful and reliable software. We study programming languages in order to become better programmers.
There's a sickness inside of us that worships what we “know” and demonizes what we don't. We do this with operating systems, car manufacturers, game consoles, athletic teams, smart phones, food, text editors, and many other things, including programming languages. Surely you've been in a conversation in which you condemned a person, a band, or a programming language that you hardly know. Or you might find yourself idolizing a company that is secretly responsible for 50% of climate change or an athlete who abuses people when the camera isn't rolling. Our shallow praise and shallow judgment combines to make a society built on prejudice and misinformation. Our heroes and enemies should not be decided by our gut or by the categories that were handed down to us by a narrow set of authorities. Rather, we should investigate each entity thoroughly. Likely we will find that a binary categorization of good and evil is too simplistic. We study programming languages in order to become an informed critic or an informed advocate of the tools we use to write code.
Sometimes humans dream of there being only a single human language. Trade and travel would be easier. Maybe there would be less conflict. Likewise, sometimes programmers dream of there being only a single programming language. All software would be written in this one language. Programmers would focus their efforts on becoming experts in this language. It'd be easier to switch jobs. The irony of having only a single programming language is that you would likely not know it very well, just as monoglots tend not to know their one human language very well. We do not really understand our first language until we start learning a second. We study programming languages because through their differences we better understand the culture and practices of our first languages.