Short History of Programming
It is remarkable that by the late 70s and early 80s almost every principle has been figured out and all the major problems has been identified, analyzed and “solved”.
- The “Structured Programming” book has been published in 1972.
- Jackson’s “Principles” followed in 1975.
- Barbara Liskov’s book appaared in the same year.
By then everything high-level has been well-understood and basically “solved”.
In the 80s another crucially important tradtion of MIT Scheme culminated in the first standard.
The Standard ML
along with its ground-breaking type-system has been developed.
Smalltalk
, which was grossly misunderstood (it was uniformity and underlying message passing using methods between objects), has been well-established.
Perhaps even more remarkable was the unification attempt of lazy languages under the umbrella of Haskell
.
The first edition of “the Common Lisp, The Language”.
Erlang
- anothert great language - has been researched in the 90s.
By the time of publishing of the first Haskell Report everything is already figured out.
The development of Scala
in early 2000s has already been standing on the shoulders of the giants.
These were the great early traditions - Lisp, Smalltalk, ML, Prolog, Scheme and Erlang,. An imperative OO crap just fucked everything up and thrown the whole humanity into “the dark ages of coding”.
It is easy to see that all these tradtions has been firmly grounded in math and logic, and the discovery of the Hindley-Milner isomorphism just “confirmed” the right understanding.
Basically, the worst possible “marriage” happened between “Algol and C” traditon and “naive” (to say the least) imperative OO.
An entire OO layers has been developed just right - as strcut-based DSLs - for early lisp (Flawors) and for Common Lisp
(CLOS) and for Scheme
.
Ocaml
added “objects and classes” just as a sort of a DSL too (a language extension, to be precise).
However, the process of exteding C
with classes (from Symula
) and then with generics was, and still is, a disaster. Fucking abominations such as Java
has been “bestoved upon us” by brain-dead “designers”.
It is important to undetstand is that adding classes to C
was as bad as adding them to PHP
– the thing which cultured and educated people would not even mention at a table talk.
What is the underlying pattern? Well, languages designed by the math wizards are great, languages designed by narcissistic math-illiterate, uneducared degens (just out of the “drive” and ambitions) are what we have today, and you can tell.
So, by now, the “obvious” choice is to stay with the right “ancient” traditions of mostly-functional languages such as Ocaml
or Scala 3
or even Common Lisp
.
Pragmatic math-wizards should stick to Haskell
, which techincally has the exactly the same properties as pure math or logic (any haskell program is a pure expression).
To get a premature enlightenment one has to realize that what Hoare, Liskov has been systematized “works” for Ladrin’s functional languages, because the high-level principles of proper structuring are /universal.
The module system of Ocaml
(a culmination of its own), which is done just right can be incorporated into any language. Very few understand or care.
Notice that this is the very short history of discoveries (which began with the Set Abstraction and Abstract Algebra and later with the Lambda Calculus) with contribution (about universality of structuring) from Molecular Biology. This is how one should view and undersrand what programming is really.
At the highest and the most abstract level we (good programmers) just strucure information.
Structures (“abstract shapes of data”) and relared ADTs (packagesd into modues) are at the core of programming. Immutability and statelessness are another parts of the “core”.