Programming Languages: Survivors and Wannabes (1996)
nytimes.com
nytimes.com
In '96, LISP (tail end of the AI winter regardless), Perl (half the WWW was Perl), Tcl (maybe a quarter of the WWW and telnet-based services were Tcl), awk, & Ada were quite common, and Smalltalk, RPG, REXX, & PL/1 were at least as common as COBOL. Python was still obscure but gaining ground. PHP had just been released like smallpox on a vulnerable population.
I had a laugh at Delphi being for people who hate Microsoft. Its actual virtue was good performance and safety in large programs, you bought Borland tools because you wanted to double your program's speed, not for ideology.
Borland was already selling version 3 of their compiler by then.
On Windows side, Object Windows Library and Visual Component Library were much more productive, ahead of time Qt, than MFC ever was.
But then Borland's missteps meant that MFC was the only framework left, and only a couple of enterprises still get to enjoy C++ Builder's RAD productivity.
I enjoyed Delphi's performance and recommended it to a customer for that reason, but my own primary motivation was to avoid the terminally cumbersome Windows API.
You can't possibly mean his "Code: The Hidden Language of Computer Hardware and Software" or "The Annotated Turing: A Guided Tour through Alan Turing's Historic Paper on Computability and the Turing Machine"? These books are great.
The Code book I've heard people speak highly off before but have not read it yet myself.
Use a bad metric, get bad results.
Who else remembers this era of giant, unhelpful, rapidly-obsoleted books in the computer section of bookstores? Who remembers bookstores? OK, OK, I've been into Waterstones recently, but it never occurred to me to look at computing related books. What use would they be?
1996 was the beginning of the O'Reilly heyday. If you got a book with a white cover with a coloured bar and animal woodcut on it, there was a good chance of it being helpful. Otherwise it was a lottery - there was a cottage industry of people turning out bad books about software filled with screenshots that mostly replicated the online help.
Spent 45 EUR on this Linux Network Administration handbook by Addison-Wesley Germany as a teenager. Still hurts whenever I think about it.
(Yes, the author also did the screenshot thing: "Look, this is how you configure it using SuSE YaST, and this is how you do it using the Red Hat GUI. Let me show you every single step of the wizard GUI, just to be sure. And this is basically the whole default config file for this daemon, but with "# Created by Bad Tech Writer" prepended. There you go!")
Touché
Not anymore.
I think that BASIC has been replaced by JavaScript. The lack of typing and the immediate feedback match the same uses.
> PASCAL was invented in the late 1960's by Prof. Niklaus Wirth of Zurich as a tool to teach students proper programming structure before their brains became hopelessly warped by Basic.
Java fits this niche. It introduces typing and object oriented programming in a very structured way making it good for teaching. And it has not the hardness of C++.
> C is a terse, elegant, deceptively simple language that allows programmers almost unlimited flexibility.
C is being replaced by C++. But, without an ABI, C++ is not a complete replacement. So, C still goes strong for interfacing with the OS.
C++ is good for speed, good mapping with hardware features and fine tuned memory management. There is a replacement for C. But, it chooses to add complexity to the language to facilitate memory management, expressiveness and other perks. So, in that regard is the opposite that C.
That aside, the comparison of programming languages to automobiles still holds: C is a Formula One race car without seatbelts. C++ now resembles Ada in terms of size to the extent that it's a large staff car that comes in only one color. Java, which originally seemed to be a sane C++, is sort of like my father's Buick -- it looks nice but when you really need to do something slightly out of the ordinary like carry skis you can't do it without an accessory. That's right, it is a proprietary language (hence C#)
C++ contains a subset which is a dialect of C that is so compatible with C (in particular C90) that you can write code in it that compiles as C, and with very little effort. (Which I know from extensive personal experience, not just theory).
(Such code benefits from the extra checks and diagnostics C++ provide; and with some #ifdef switching and macros, it can take advantage of some additional C++ diagnostic fatures when being compiled as C++.)
Quotes from Bjarne Stroustrup's C++ FAQ:
"Well written C tends to be legal C++ also."
"It is not uncommon to be able to convert tens of thousands of lines of ANSI C to C-style C++ in a few hours. "
C++ does add some unsafe features that don't exist in C.
In C++, it is possible to convert a
foo *
to a bar *
without a cast, and without a diagnostic, where foo and bar are different struct types. C doesn't permit this.Specifically, C++ allows this in the situation when foo is derived from bar by inheritance, a relationship that doesn't exist in C.
Subsequently, pointer arithmetic is allowed on the converted pointer. the bar pointer can be displaced by 1. But the underlying array is of foo objects; it's the wrong size.
In that sense, Javascript is a worth heir because it is right there in everyone's browser.
I think BASIC felt simple because you got used to it but, when it came down to it, was it really that much "simpler" than Pascal or C?
The symbols used in javascript () {} [] and spreading it among multiple files are are a major cognitive barrier. Basic was barely approachable by non-techies because it seemed closer to a word processor, at a glance. PHP, ironically, was more similar to Basic if you knew something about FTP and weren't scared of lots and lots of dollar symbols.
GET PYTHON ON THE BROWSER and it will become the first language for at least a generation.
> In theory, the use of objects makes program code easier to maintain and reuse, although no one has actually shown this to be true.
This has gotta be the cheekiest thing I've ever read in NYT outside the opinion pages.
>As a programming tool, it has roughly the sex appeal of a wrench.
We're way too sex negative and tightly wound for such a metaphor to get past copyeditors today.
Our university library also had a couple.
Indeed our university library was a treasure well for anyone doing the compiler design and systems lectures.
Smalltalk, Concurrent Pascal, Oberon, Concurrent C, ML, Eiffel, *Lisp, Algol, Ada, and many more on the library section available to Master/Phd students.
Are you sure about that? Was java really like C++ during it's earlier years?
What about the language design makes you think it _is not_ influenced heavily by C++?
The class reflection, dynamic loading, JIT come from Smalltalk.
Checked exceptions from CLU, Modula-3.
Packages from Modula-2, Mesa, Ada,...
GC from Lisp, Mesa/Cedar, Similar, Smalltalk,...
However the similarities are only superficial, given the semantic differences.
Here are some nice links regarding it.
Java was (and still is) a C-like language with objects and fully automatic memory management. Its standard library was a lot less efficient than that of C++ but generally more pleasant to use. Another plus was the inclusion of a (bizarrely stunted pre-Swing, but still) GUI API in the standard library. The price to be paid was program startup time rivalling C++ compile times.
In the early days, Java didn't have generics or containers comparable to what you see in Boost or the STL. Hash maps were there, though, and very versatile if a bit slow.
* Syntax is fine, keep it
* Mixed C heritage creates confusion, lets double down on OO and make everything an object
* Mistakes in managing heap memory (allocating, freeing, ownership changes) are the cause of lots of bugs, so we'll do that automatically (GC)
* Overrunning arrays is bad so we'll prevent that
* Exceptions are great, but sometimes it's unexpected that a function is going to throw one - put it in the type signature
* Having to compile for lots of different targets is a pain, so lets provide one common abstraction layer so that our code will run anywhere (multiple desktop OS's, Web, embedded)
So how should a modern version of this list look?
Surely Pascal and Basic are gone. Javascript is near the top spot. I think Python really needs to be on the list too. Is COBOL still relevant? In some ways Java is becoming the new COBOL now. C#? Go? Ruby? PHP?