Programming Projects, Part 1

4 Jan 2005

Paul R. Potts

Now that our life is settling down slightly, I’m trying to see if I can set some learning goals in the area of learning, and possibly doing something useful with, Lisp-ish languages.

Last night I got SLIME + Emacs working with SBCL on my PC running Fedora Core 2. It is perhaps strange to say, but despite programming for so many years I’ve never learned Emacs, and in fact barely learned vi. I was reasonably proficient in vi at one point, when I used it to do some complicated multi-stage regexp-based search and replace, but whenever I’d try to dig into Emacs I’d quickly get hit with a wash of key remappings, startup scripts, and complications.

Key mappings are like obscure command-line switches that vary between UNIX dialects to me in that I tend to forget them rather quickly. I’ve finally used CVS often enough that I remember the basics, but most of my paid work has been with co-workers that don’t tend to know, trust, or want to use command-line tools.

In my work developing drivers for MacOS? X I was using specific command line tools (like kextload and various kernel debugging tools) all the time, but it was really uphill convincing people to use CVS at all, even with a GUI front end, which had some annoying limitations. Trying to get the other developers to use CVS on the command line was a complete non-starter. Prior to that, in working on MacOS? 9 tools, there wasn’t a command line (unless one wanted to use the somewhat orphaned MPW tool suite, which I didn’t, preferring to use the Metrowerks CodeWarrior? suite that I was familiar with).

Apple also had, to some extent, a philosophy of leaving behind the command-line world with everything in text files, preferring binary data for file metadata and resources, and a scripting mechanism that tries to abstract out the particular scripting language itself and access application data via a hierarchy of callbacks done by unwinding something that could almost be considered binary s-expressions. I drank that Kool-Aid, writing code to support AppleScript?; it is all very interesting and very powerful, but also somewhat narrowly confined to its own niche, and like many ideas that are too complicated in execution for the average programmer to embrace, probably will remain so.

Believing that the whole world is Windows, though, many Windows programmers without wider experience are, if anything, even more provincial. They may not even be aware that their beloved Microsoft Visual Whatsis can be executed at the command line and that underneath it all there are basically Makefiles, albeit a species designed for non-portability.

It also probably has something to do with never having really teethed on UNIX when I was younger. Pre-college, I used word processors running on the TRS-80, Apple II, and Commodore 64; in college, I used (for coursework) VAX systems, running the VAX editor on VT100 or other terminals; for extra-curricular projects I used Mac systems, running what was variously called THINK or Lightspeed Pascal and C. During my senior year, I believe, the college put in a small UNIX box of some kind, but aside from becoming confused by key mappings and trying the various items in the games directory, I never really got the hang of it. Emacs always seemed like one of those infinitely configurable but endlessly complicated things like X-Windows; sure, I could somehow read mail and news and everything else in my editor, just like I could allegedly share all my directories between boxes and run GUI applications across the network, but there was rn and mail, so what was the point?

Anyway, I say this all by way of expressing my trepidation over embracing Emacs. I feel more comfortable in either the full-blown IDE mode with an environment like Macintosh Common Lisp, or directly at the command line. Emacs feels like something in between — excessively customizable, and excessively complicated. But if this is what is needed to learn Lisp macros, I’ll give it a shot.

So what am I trying to accomplish again? More on that next time.

Creative Commons Licence
This work by Paul R. Potts is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. The CSS framework is stylize.css, Copyright © 2014 by Jack Crawford.

Blog IndexWriting Archive