Classics are not always loved. In this rapidly changing society, classics are often considered outdated or archaic, enjoyed mainly by students for their grades or hobbyists for their pure, naive desire.
This sentiment is especially prevalent in technology, particularly in programming. In programming, older works are often deemed irrelevant. The struggle to secure solid coding jobs makes practical practices more desirable for building skills than studying theoretical works. Moreover, the complexity of classics, from Turing to Dijkstra, has led universities to shift their programs towards practical, hands-on learning, leaving basic concepts like “class” and “function” to be frequently queried on platforms like Stack Overflow.
However, classics do matter. The current field of programming is built upon these timeless works. Computers, from the ENIAC to the iPad, were developed incrementally, each building upon its predecessor. Similarly, coding has evolved from direct binary operations to modern languages like JavaScript, Python, and Go. The diverse approaches to computing have led to a variety of devices and programming languages, all rooted in the philosophies of classic works.
Learning the old classics can improve programming in general. Understanding the concept of object-oriented programming, for example, enables writing coherent code. Reviewing classic discussions on design—how the concept of class and object found its place, how languages like Smalltalk and C++ introduced syntactic support for classes, and the underlying principles of functional and procedural programming—solidifies one’s understanding of these concepts.
This is undoubtedly hard work. Example codes might be in archaic languages like Ada, and the terminology can be outdated. Sometimes, these works spend pages on now-commonplace concepts, such as defending the use of bits as the unit of information. Computer science, as a new field, often borrowed theories from physics, electrical engineering, mathematics, statistics, and even linguistics1 to build its practice. But the effort is worthwhile if it leads to solid programming skills.
Fortunately, there has never been a better time to study classics than now. Online forums, open lectures, and abundant resources facilitate learning. Platforms like Coursera offer translated captions, and machine translation is becoming increasingly reliable, making these resources accessible to non-English speakers.
The rise of high-performing text generators is another boon. While not perfect in providing factual answers, these generators excel in interactive learning by offering material for examples, answering questions, and engaging in discussions. Many classics predate languages like Python, JavaScript, C++, and Java. Text generators can create modern language examples from classic content, aiding learning.
Moreover, generative models have opened new ways of building systems through natural language instructions. These instructions, ideally in natural languages, can use classical concepts to construct systems, potentially improving them like no other coding paradigm has. Classical works, with their deep thoughts on what constitutes a good system, offer valuable insights.
Which classics should be read? Summarized and organized classics can be found in textbooks. Good textbooks balance concept descriptions with practical examples, helping students build skills for the job market while introducing them to the academic field of computer science. During my undergraduate years, I minored in computer science while majoring in humanities and social science. My humanities background made the theoretical stories fascinating, though it didn’t make me a skilled coder. However, it provided a foundation for delving into deeper works.
One such work is by Claude Shannon, an engineer and mathematician active during the Cold War. Although not a computer scientist, his work on information theory laid the foundation for fields like machine learning. Shannon’s mathematical approach to effective information transmission shaped my understanding of data processing and modern machine learning models.
A more modern and practical work I’ve recently explored is Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma and others, published in 1994. Though old, its patterns remain relevant. Many design patterns are embedded in modern libraries and languages, like Python’s abstractmethod
. To bridge the gap between the book’s examples in C++ and Smalltalk and my needs in Python and JavaScript, I used custom GPT bots to generate examples in modern languages, helping me grasp the concepts practically.
Reading classical works is challenging across all fields. However, no field arises out of nothing; all stand on the shoulders of giants. Understanding these giants may not immediately build skills, but it is essential for reaching higher or moving towards the artistry of the field. Thankfully, there has never been a better time to access the classics.
- Noam Chomsky, a linguist, organized the modern theory of grammar, where linguistic expressions are governed by derivational rules. This hierarchical structure of language is mirrored in programming language theory, ensuring clear machine parsing: an “if” statement comprises a truth expression and statements, which in turn comprise operands and operators. Hence the term “Chomsky Normal Form” appears in the field. ↩︎
Leave a Reply