Computer languages aren't important, in one sense: what you can do with one, you can do with any of them. (within limits; see TuringComplete (10 Oct 2001)) But like human languages, computer ones do guide and influence thought processes. They make some things easier to say, and other things more obscure. They also provide a nice hook for reminiscences about past coding projects. The earliest software development efforts that ^z did are, like childhood "art", lost to the mists of memory. Over the decades he dabbled with dozens of programming environments, and actually used a few for semi-productive purposes. Some fragments from along the trail, in rough chronological order:
- FORTRAN — Likely his first serious coding came in the summer of '69 at SMU during an NSF math enrichment session. Free computer time was a delightful distraction from the theorems of linear algebra, probability, and number theory; the refrigerated machine room and steel-gray card punch machines fit the monastic environs. ^z burnt processor cycles on a CDC mainframe doing, among other frivolities, Monte Carlo computations of pi to a few decimal places. Like a vampire that wouldn't die, FORTRAN IV kept coming back for years thereafter ... first at UT/Austin, then Rice, then Caltech, then in his maiden job outside academia. Not a language that anyone would love for its comely face or svelte curves, but a workmanlike tool. He has had no cause to use it, however, for the last ~20 years. (see BookhouseBoy (29 Sep 1999), SoftOutsideCrunchyCenter (1 May 2000), and CollegeCollage2 (3 Oct 2000))
- BASIC — Built-in and available for free on several computer systems, this language was a good one for tiny programming project where speed was not an issue. For diversion, ca. 1976 ^z analyzed other people's implementations of BASIC and wrote one of his own. But BASIC lacked spirit; it was just one d*mned thing after another: "do this, then do that". Ugh. (see PetBibli1 (23 May 2000) and PetBibli2 (14 July 2001))
- APL — The Rice University IBM mainframe offered Kenneth Iverson's A Programming Language via Selectric typewriter-like terminals with a weird typeball. ^z with his fellow erstwhile physicists joyously misused it — wasting huge amounts of interdepartmental funny-money by writing pseudo-DO loops and subroutine-laden code rather than getting into the spirit of the language and using efficient vector-algebraic constructions. A semester of lab projects (including such tasks as curve-fitting noisy data sets) expended thousands of make-believe dollars and brought harsh lectures from the responsible faculty members. The students reverted to punching cards of FORTRAN.
- HPL — Hewlett-Packard's early desktop computers came with this BASIC-like programming system, with custom features for driving HP peripherals. Besides helping his comrades and teachers solve their equations, ^z enjoyed doing graphs on the X-Y plotter of the Riemann zeta function and of the paths that light takes through various lenses and refractive media.
- FORTH — A petit and extraordinarily extensible language, Chuck Moore's brainchild was popular in the astronomy community for steering telescopes and controlling other hardware. FORTH also had the advantage of having a fine book written about it: Starting FORTH by Len Brodie. Physicist friends gave ^z a FORTH compiler/interpreter listing for the PDP-11 minicomputer in 1977 or so; he studied it enough to convert the assembler code to run on the 6502 microprocessor in his Commodore PET. Later, using free as well as commercial FORTH systems (from Creative Solutions and other companies) ^z wrote his first free-text information retrieval (IR) software. (see FreeTextDesiderata (19 Oct 1999) and related pages)
- LISP — This is in many ways the best language for thinking about algorithms and data structures. The SCHEME dialect of LISP also forms the underpinnings of one of the best textbooks ever written: Structure and Interpretation of Computer Programs by Hal Abelson and Gerry Sussman. The more introductory Simply SCHEME by Matthew Wright and Brian Harvey is also superb. Alas, ^z never found much practical to do with LISP, but by studying it he learned a lot of computer science.
- C — Here is a practical language, not attractive in an intellectual way (unless clarity and efficiency are attractive) but great for getting a job done. The splendid Kernighan and Ritchie book The C Programming Language together with reasonably-priced commercial implementations made C a win for many serious tasks, including the rewriting by ^z of his free-text IR code from FORTH to a more transportable and faster-running form.
- Hypertalk — This scripting environment lived, and died, with Bill Atkinson's Hypercard "software erector set" on the Apple Mac. ^z became something of an artist in using it (and wrote a chapter for the Mitchell Waite book Tricks of the Hypertalk Masters). For quick development of graphical user interfaces on the Macintosh it was a major win, and when it was extended using compiled XFCNs (generally written in C) Hypertalk could do just about anything. It formed the framework for ^z's various Mac-based information retrieval programs, as well as for his "Shakespeare Stack Project" and other Hypercard-based knowledge collections. (see ThanksAlot (27 Nov 1999)) (I heard that the graphical adventure game Myst used Hypercard - RadRob)
- Awk — Yet another brilliant semi-interpreted language (with a brilliant book to escort it into the world) and crafted by Aho, Weinberger, and Kernighan (a Bell Labs genius trio), Awk came with UNIX and was also available for other platforms. ^z used it like a Swiss army knife to hack away at problems where speed of execution was not crucial. Most notably, he wrote some simple Awk code that turned out to be a real contender in the first (1992) TREC information retrieval arena. (see FuzzyProximity (18 March 2000))
- PROLOG — The name means PROgramming in LOGic. PROLOG, like LISP, has a terrifying alien beauty; like LISP, it lacks much of an application to real-world problem-solving; like LISP, its study taught ^z quite a bit about how to think better. (see ResolutionAndUnification (11 Nov 1999) and StrandsOfTruth (2 Nov 2000))
- Javascript — This badly-named browser control language, like Hypertalk, makes for a high-productivity way to glue a graphical user interface on top of an algorithm. But ^z found it most valuable in cross-indexing moderate sized collections of web pages. (see XrefDevelopment (26 Nov 2000))
- Perl — Here is ^z's current programming environment of choice: practical, productive, free, and widespread. It's not beautiful, for the most part, but it does have enough hidden facets and unexpected twists to be a joy to work with. Somebody once said "Perl is like Awk, only less elegant". It strikes the right balance between art and technology, and gets the job done. That's good. (see OutOfMyWay (24 May 2001))
Common threads? A great book clearly helps raise the standing of any language. But that's not enough; to succeed, a language seems to need to be extensible, responsive, and widely available. And it also needs to have a solid foundation, probably a mathematical one. (see ThinkingEnvironments (7 Apr 1999))
Most important, a programming system should be fun. And cute doesn't hurt either. Hmmm — these sound like criteria for a good date ....
TopicPersonalHistory - TopicProgramming - 2002-04-02
(correlates: ComplexSimplicity2, GuestBook, NoGlory, ...)