Hacker News new | past | comments | ask | show | jobs | submit login
Programming Languages: Survivors and Wannabes (1996) (nytimes.com)
52 points by droptablemain 22 days ago | hide | past | web | favorite | 57 comments

Very simplistic and shallow list, but it's by Charles Petzold, noted Microsoft shill and bad tech book writer.

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.

> bad tech book writer

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.

Those books were both brilliant. I don't recall his tech books being "bad", at least in terms of being somehow worse the the other Windows programming books that several large publishing houses cranked in volume.

I first came across Petzold this weekend while watching a talk by Robert "Uncle Bob" Martin on the future of programming. Martin was discussing Turing's paper "On Computable Numbers" and recommended reading it and Petzold's "Annotated Turing". I currently have Petzold's book on my "to-buy" list so am glad to see it spoken of highly.

Well, I didn't hear about the book yet. But seeing as your coment and the parent suggest it, I'll add it to my to-read list as well.

The Code book I've heard people speak highly off before but have not read it yet myself.

> Based on a totally unscientific survey (those programming languages that occupy at least 3 feet of shelf space in the McGraw-Hill Bookstore in Manhattan)

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.

Next level: fill whole pages with output from random Linux commands with 4 verbosity flags set: https://imgur.com/a/rnVE9u4

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!")

Oh God, I'm flashing back to books about game programming by André LaMothe, and my eye is twitching.

Computing books are very useful for quite a long time... It's most of the practical stuff that ages quickly.

I can only speak for myself, but I was and am a Microsoft hater. I bought and play-tested VB, decided it was garbage and never used it again. Delphi allowed me to "do" Windows GUIs elegantly, without all that Petzold garbage and the many limitations of VB. I also loved Delphi 1 for its world-class truly useful help files.

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.

I still maintain a legacy Delphi 7 application and I completely agree with you about the help files. It's so complete that 9 out of 10 times I don't need to search the Internet for the information I need. Every time I press F1 on another application and my browser open a poorly written documentation I miss those Delphi help files.

Regarding Borland, as historical note, Microsoft C/C++ 7.0 for MS-DOS was the very last MS-DOS compiler to add support for C++.

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.

There's http://www.lazarus-ide.org now, which is still pretty productive for one-off GUIs, especially anything involving database access.

Sure, I was just focusing on the C++ part of the story, which tends to be forgotten when talking about Borland tooling.

That's unfair to Petzold. He was always a pretty good writer, though not always on very interesting themes.

"PHP had just been released like smallpox on a vulnerable population."


> Java's biggest selling point is that little Java applications (called applets) can be incorporated in a World Wide Web page along with text and pictures.

Not anymore.

Haven't you got the memo?


Anders Hejlsberg is Danish, not Swedish - and this is about as factually correct as Petzold ever gets in the part about Pascal. The article is from September 1996. Delphi 2 was out by then, and taking 32 bit Windows development by storm. Delphi programmers generally had nothing but scorn for Visual Basic. Not because it was Microsoft, but because it really was a shitty tool, and programs produced with it tended to be slow, bloated, hard to maintain, and often poorly coded.

> BASIC, the Beginners All-purpose Symbolic Instruction Code

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.

I don't think I'd describe C++ either "terse" or "deceptively simple"

You are right. C++ does some of the opposite trade-off that C does.

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.

I think people who have been using c for the last 15 years and haven't started using c++ for a given application are unlikely to ever start using c++, so it's not really a replacement. Additionally c++ keeps piling on complexity, so I suspect adoption is going to slow; C will likely outlast, not be replaced by, c++, since it's use as the foundation for operating system kernels and vms is going to be hard to assail, not to mention it's use in native function interfaces.

We use C++ (17) to program an embedded POWER processor with 16kB of scratch pad memory and a custom vector extension. The compile time features of c++ alone (templates, constexpr) and lambda, namespaces, typed enums alone make it much safer and better than C.

Well, "better" is a loaded word, and you need to remember that C++ is not a superset of C. The two languages intersect in a fairly large subset of C, but there are parts of C++ that are not the same. I would claim that C++ is remarkably less safe than C because of the crazy games some people play with what's laughingly called "template meta-programming." You can abuse the C preprocessor, but not to the extent that its C++ mode permits.

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++ is not a superset of 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++ is remarkably less safe than C

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.

No doubt. What's the median age of the new developers that you hire? Do you think that's sustainable over the next 20 years for your ecosystem?

That is true for UNIX based OSes, thankfully those aren't the only ones around.

Sure, but also C++98 wasn't even out yet ... so you have to lob off the past 5 language extensions for a true analysis.

I would not say JavaScript is anything like Basic - Python might be a better analogy now.

The environment similarities of javascript and Basic are important to note. If I started up an Apple X (without a disk), I would have access to an environment where I could run code. Javascript is accessible from my (ubiquitous) browser today. This seems to be an important factor in first language selection.

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.

I would say the main thing that basic had going for it is that everyone seemed to have it on their desktop.

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?

My biggest take away from this is noticing America was in a much better mood in 1996.

> 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.

No mention of Ada in 1996? How rude!

I've spent a large percentage of my life in bookstores and I have never seen an Ada book. I've never met an Ada programmer or met someone who knew an Ada programmer. Is there any proof that the language actually existed? Maybe it was a CIA plot to trick the commies into wasting their time.

I have bought a couple of them during the mid-90's in Lisbon technical bookstores for university students.

Our university library also had a couple.

Indeed our university library was a treasure well for anyone doing the compiler design and systems lectures.

As a student in Lisbon, may I ask which university?

FCT/UNL, back in the mid 90's.

Smalltalk, Concurrent Pascal, Oberon, Concurrent C, ML, Eiffel, *Lisp, Algol, Ada, and many more on the library section available to Master/Phd students.

Very interesting. I'm very disappointed at the state of my faculty's library (FCUL). Even landmark works by the most influential of computer scientists are missing, being in their place endless copies of mindless "for dummies" garbage from the 90s and 00s.

Surely your comment was written in jest, but one example of companies that uses (or used) Ada is SAAB: https://www.adacore.com/press/saab-signs-corporate-wide-soft...

There is the theory it was a Cold War weapon of economic warfare. But the US government employs a lot of Ada programmers so it seems to have backfired.

I might still have an Ada book around the house, and I may have met somebody who used Ada outside of school. As for the CIA, have a look at http://home.pipeline.com/~hbaker1/sigplannotices/gigo-1997-0... .

That's because Ada's entire usage is corporate environments. If textbooks do exist, then they would be marketed to companies not consumers, as that's who would be paying.

Why not learn it now? : ) https://learn.adacore.com/

> In its general syntax, Java is very much like C++. But it does introduce some changes that (depending on your perspective) correct some flaws of C++ or botch up some features.

Are you sure about that? Was java really like C++ during it's earlier years?

Java was designed to have a syntax familiar to C++ programmers as its original intended use case was on embedded devices where C++ was king.

What about the language design makes you think it _is not_ influenced heavily by C++?

Interfaces are based on Objective-C protocols.

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,...

Java takes a lot of features from a lot of different languages, but I too remember Java being intended as an improved C++, by keeping most of the syntax, while adding some badly needed features like memory management, exceptions, more consistent standard classes (at the time; it's turned into a mess now) etc.

Just like it happened with Go, around 20 years later.

However the similarities are only superficial, given the semantic differences.

Here are some nice links regarding it.



Just about everything other than the syntax, and even that is similar to that C++ only at the method level.

Around the time of the article (1996) I was faced with learning either C++ or Java. When I picked up any C++ book, chances are half the text would be about how to wrestle with memory. I decided C++ wasn't for me.

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.

Not sure why you were downvoted; it's a fair question. To understand the answer, you have to realize that idiomatic C++ has changed over the years. Back in the nineties, it still placed a lot of emphasis on object-oriented programming with inheritance, polymorphism - ah, even writing those words now brings back memories! - and explicit heap allocation, which in turn meant a lot of manual freeing of memory. So yes, Java had much of the same flavor except you didn't have to manually free memory or deal with five different string classes. It was an easy sell.

They are both ALGOL derived languages with braces and the "class" keyword, but that's a bit like both being Abrahamic religions.

Ok so not exactly the "early days", but I learned java in 2009 around when android came out; most of my heavy duty c++ experience was with the beos API, and there were some initially confusing concepts (like the factory pattern) but my first impression was "oh, this is what object oriented programming is supposed to be like". The syntax was very easy to understand and I was able to teach myself java and turn around an Android app in about 5 weeks.

If you look at the design of java (the fundamental basics at least), it makes sense as lets take C++, but design it again from scratch with the problems fixed:

* 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)

I love the blunt wit of the article.

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?

Applications are open for YC Summer 2019

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact