Love the One You’re With

No, not quite the usual context. Perhaps ‘Love the place you’re at’ would be more appropriate.

There is certainly no denying that I am something of a homebody. After college I pretty much put down roots and stuck where I landed. And of course there are those small dissatisfactions with any situation. A fact, which would not, of course, change had I gone someplace else.

Still, when gazing at the greener grass, there a few basic options: move on, stay put and muddle along, or try to make the place the you are at more like the place you want to be. The first option always felt like abandoning the place to it’s doom, so I’ve usually muddled along while thinking I should be improving things.

One of the prices of working at a small company is that I don’t really have a mentor; the other people I work with are either younger and not single-class programmers, or have experience that lies less in the theoretical direction I tend to take. For the most part, we just muddle along doing only what needs to be done.

So, I’m attempting to make it better. Somewhere, I’ve read tha sucessfull companies spend about 10% of something (net? gross? not sure) on R&D. Now, we have no budget, but we have our time, and can take an hour or two a week trying to learn something new.

The current project, and in no small part the inspiration, are the freely-available video lecture series for The Structure and Interpretation of Computer Programs, related to the book of the same name (also available online)

I gather that this is based on the introductory computer science course at MIT many years ago. Supposedly the course was taught at HP at point, pehaps it was there? In any case, yes, it is based on Lisp. Given Lisp almost legendary status, I don’t know if this is really bad, just not as likely to be directly usefull. At lot of the concepts are showing up in lanaguages, so a lot can actually transfer.

Anyway. The course starts from first principles, and then procedures to cover almost every major concept in computer science – iterative, recursive, functional, objects, delcarative, state, streams, compilation, and more. Eah concept is introduced from a motivating example – here is why we have this construct – it solves this problem.

Hopefully repetition will do me some good – I watched the videos, read the book, and now I’m watching them again (and taking notes) about one hour a week.

One persistant theme is ‘metalinguistic abstraction’, or embedding other languages in Lisp. Today this is popularized as DSLs or Domain Specific Languages. The repetition may have infected me, because I’ve been thinking about languages a fair bit lately. But that is a whole ‘nother post, and the is at least one more to set that up.


  1. nix_guru says:

    “Any sufficiently complicated C or Fortran program contains an ad-hoc, informally-specified bug-ridden slow implementation of half of Common Lisp.”

    - Philip Greenspun, often called Greenspun’s Tenth Rule of Programming

    I believe that this rule is applicable to most modern programming languages also.

    It is my opinion that beginning programming classes should be done in Lisp. It would make for better programmers.

    Oh, and once you have finished SICP, you should read “Practical Common Lisp” by Peter Seibel. It is available for free at: . But I recommend getting it in dead-tree format. It is worth it.

  2. Anonymous says:

    I’ve got a ‘to-read’ list a couple pages long, but I’ll stick that on.

    The exercise is doing well enough. One of my older co-works, who has been a touch skeptical at times, said last week that he could see how it might be a good prototyping tool. I’ve really got to look up that paper I saw years ago – someone out-optimized people writting in low-level-langauges by starting in Lisp and then doing manual program tranformation to C.