Computing Experience

I did my first programming in 1977 (on an Apple and then on programmable calculators, the Casio FX502-P and the HP41C/CV/CX). Since 1982 I have worked almost exclusively in UNIX environments.

Between 1982 and 1995, I took over 60 university computer science courses, including: Pascal, Fortran, Numerical Methods, Machine Principles, Data Structures, Numerical Analysis, Theoretical Computer Science, Digital Logic, Languages and Translators, Databases, Computability and Complexity, Analysis of Algorithms (twice), Operating Systems, Computer Architecture, Graphics, Software Engineering, Advanced Programming, Compiler Construction (twice), Microprocessors, Cognitive Computation, Graph Algorithms, Coding Theory, Cryptanalysis, Concurrent Programming, Computer Architecture, Formal Languages, Text Algorithms, Network Algorithms, Advanced Operating Systems, Lower Bounds and Implicit Data Structures, Advanced AI, Introduction to Cognitive Science, Neural Modeling, and Machine Learning. I also did 3 years of mathematics as an undergrad (and plenty as a graduate) and have some knowledge of statistics.

I am primarily a C, python, perl, lisp and shell programmer. I know quite a bit about Java, and something about C++. I've done occasional coding in probably 15 other languages. I've written assembler for many processors including the 6502, 6510, 6800, 6809, Z80, 8088, 8086, 680x0, i386, and Sparc.

I have used over 20 versions of UNIX, including: V7, V8, SysVr3, SysVr4, 4.3BSD, 4.4BSD, Dynix, Munix, Ultrix, IRIX, SUNOS, Solaris, OSF/1, OS X, and half a dozen Linux distributions. On most of these I have done a reasonable amount of systems programming.

In the UNIX world, I know a lot about most of the standard utilities: shells (sh, csh, tcsh, ksh, bash etc.), awk, sed, make, tr, perl, vi (8 years), emacs (16 years), rcs, cvs, svn, troff, TeX, LaTeX, and probably hundreds of others.

I have written (and given away as "open source", although long before that term existed) my own replacements for quite a number of UNIX utilities, including man, sort, malloc, and front-ends for vi and mail. The vi front end was written up in the August 1990 issue of BYTE as one of the UNIX columnist's top ten favorite pieces of free software. I have written well over 100,000 lines of C code for various special-purpose UNIX utilities in the last ten years.

I have contributed code to GNU projects from time to time. In particular, a trie-based dynamic escape sequence parser for an xterm replacement (emu), and, more recently, three contributions to emacs (one in C and two in Emacs lisp).

I have written a reasonable amount of X windows GUI code (beginning with Xlib under X10R3, up to X11R6 and Xt). I am familiar with various X widget sets. Also I have done quite a bit with TCL/TK/BLT, STk, and a very little with Qt.

Having run a web company and built 20 or 30 commercial web sites, I know a reasonable amount about HTML, CGI, web servers etc. In 1996 I wrote (and still use heavily) htm4l, a collection of about 500 m4 macros that can be used to produce HTML quickly and consistently.