|
There's no single book that I would recommend. What worked for me is to read the history of programming languages (and operating systems, to better understand the relationship between them). My recommendation is to read the original papers/manuals (bitsavers and ACM/Sci-Hub are my main resources). Starting with how computers were programmed befor high level languages were developed (i.e. machine code and assembly), then going through the early languages: Fortran, Lisp, COBOL, Algol; and understand why they were developed and the main ideas in those languages. Lisp had a huge influence on later generations of functional programming languages; Algol (first developed in 1958) is the granddaddy of all what we call today C-like languages, including CPL, BCPL, B, C, Pascal, C++, Java, C#, etc. Simula (developed in the early 60s) is the granddaddy of most object-oriented languages, including Smalltalk, C++ and their descendants. Many ideas that are core to modern programming languages were developed in those early formative years (late 50s, 60s, and 70s); e.g. lexical scoping, dynamic dispatch, coroutines, garbage collection, encapsulation, virtual machine bytecode, metaprogramming, and many others. I find it fascinating to read this early literature and understand why and how those ideas (that still live to this day) were formed. |