Robert A. Uhl

How to write a spelling corrector — in Lisp

Back in 2007 Peter Norvig shared a simple spelling corrector (last updated in 2016); I thought that I’d share my translation into Lisp, with some comments. Norvig’s original article explains the actual algorithm he’s using; I’ll focus on stuff specific to my own version.

I’m definitely not a Lisp wizard (although I’ve been using it for many years), so it’s entirely possible that I’ve messed one thing or another up — I’m glad to receive corrections or comments.

Read more →

One hundred questions

Here’s a nifty list of 100 interview questions for developers. I can’t say that I can answer them all, but I know most … and will learn the rest. Read more →

One hundred questions

Here’s a nifty list of 100 interview questions for developers. I can’t say that I can answer them all, but I know most … and will learn the rest. Read more →

Running Lisp as a Linux service

One of the truly wonderful things about programming in Common Lisp is that the system is complete interactive: the programmer can manipulate anything at run time, including the language itself. This is a really powerful technique — but how does one preserve the state of the system between reboots? And how does one get an image-based Lisp system to play nice with Linux’s system service model? Well, John Wiegley published a great technique a few years ago which I’ve adapted for Tasting Notes. Read more →

Running Lisp as a Linux service

One of the truly wonderful things about programming in Common Lisp is that the system is complete interactive: the programmer can manipulate anything at run time, including the language itself. This is a really powerful technique — but how does one preserve the state of the system between reboots? And how does one get an image-based Lisp system to play nice with Linux’s system service model? Well, John Wiegley published a great technique a few years ago which I’ve adapted for Tasting Notes. Read more →

Software as a Craft

Bob Martin proposes that software development teams model themselves after craft guilds, with a master programmer supervising journeymen programmers who supervise apprentices. Not only that, but computer science degrees would be replaced by apprenticeship in most cases. He demonstrates that such a team would be fairly inexpensive and could be highly productive. It’s an intriguing idea. My big concern with eliminating college is simply that higher education expands the mind. But is it really necessary to spend $200,000 between the ages of 18 and 22 in order to expand one’s mind? Read more →

Software as a Craft

Bob Martin proposes that software development teams model themselves after craft guilds, with a master programmer supervising journeymen programmers who supervise apprentices. Not only that, but computer science degrees would be replaced by apprenticeship in most cases. He demonstrates that such a team would be fairly inexpensive and could be highly productive. It’s an intriguing idea. My big concern with eliminating college is simply that higher education expands the mind. But is it really necessary to spend $200,000 between the ages of 18 and 22 in order to expand one’s mind? Read more →

Thoughts on up-or-out

Bruce Webster has some interesting thoughts on modifying the Cravath model for the technical field. The ‘Cravath model’ is the standard big-company practise of having partners, directors, senior managers, managers, senior associates & associates who are rated annually, with the lowest performers being asked to leave and the highest performers being promoted. In many ways the model is good, but one problem is that it doesn’t really work for technology because technologists generally don’t wish to manage and generally don’t do well in management; Webster proposes a parallel track of associate engineer, engineer, senior engineer, technical officer, senior technical officer, executive technical officer and chief technical officer. Read more →

Thoughts on up-or-out

Bruce Webster has some interesting thoughts on modifying the Cravath model for the technical field. The ‘Cravath model’ is the standard big-company practise of having partners, directors, senior managers, managers, senior associates & associates who are rated annually, with the lowest performers being asked to leave and the highest performers being promoted. In many ways the model is good, but one problem is that it doesn’t really work for technology because technologists generally don’t wish to manage and generally don’t do well in management; Webster proposes a parallel track of associate engineer, engineer, senior engineer, technical officer, senior technical officer, executive technical officer and chief technical officer. Read more →

An introduction to REST

My fellow web programming geeks will have heard a lot of buzz about Representational State Transfer (REST). It’s definitely an improvement on the Ozymandian Web Services stack. But what is it really? How is it used? How does one adapt a design to it? Stefan Tilkov has a top-notch brief introduction to rest. If you write or design web-consumed services, or plan to, or manage those who do, check it out. Read more →