Neat that the Roomba is written in a lisp. It has it’s quirks and hiccups, but on the whole is extraordinarily well designed, standing head and shoulders above the usual slew of “home automation” products I wouldn’t touch with a 10’ pole. The dog definitely influences this opinion. :)
Is it relevant that it’s written in a lisp? Probably not. But then, maybe. Baseless speculation: mine pre-dates their internet connected models, which means it’s 100% plug and play. The only possible config is the system clock and the startup schedule, and I’m just using what the prior owner had already set. Had the OS been written in a more traditional language perhaps the engineers would have been tempted to include all the modern IOT features from the start and the result would be the complex app-driven network-needing mess that so many products tangle themselves up in (including perhaps the modern Roombas).
Again, that’s all baseless speculation, but I do see a potential connection between folks who choose to code a robot in lisp and folks who eschew “sugar” features in favor of the most pure “do one thing and do it better than anything else” implementation.
The ex-MIT people who started the company were really good at robotics, and with MIT being a Lisp powerhouse the choice was perhaps natural.
But thing is if you are good at Lisp you can move really, really fast. I also do embedded development (mostly with C) but the last project I had an opportunity to do in Common Lisp. It was a fantastic experience with perfect commercial outcome. It feels like you move mountains.
> The ex-MIT people who started the company were really good at robotics
and Lisp.
Rodney Brooks worked on S1 Lisp and Lucid Common Lisp. He was a co-founder of Lucid, Inc. and wrote the book 'Programming in Common Lisp' (Wiley, 1985).
See for example: "Design of an Optimizing, Dynamically Retargetable Compiler for Common Lisp", 1986. The authors (incl. Rodney Brooks) worked for Lucid, Inc.
https://www.researchgate.net/publication/221252387_Design_of...
Does the Roomba's Lisp use an incremental garbage collector?
Mark and sweep
I saw a great paper on their dialect a while ago. Will try and find it and edit this with a link.
Check out passage 3.4; it goes into detail on their garbage collector.
L – A Common Lisp for Embedded Systems
Rodney A. Brooks and Charles Rosenberg
IS Robotics [now iRobot Corporation, the famous floor vacuum company]
1995
https://web.archive.org/web/20041031144839/http://www-2.cs.c...
Whoosh :)
I got the joke, but I still find the dialect fascinating enough that I will pretend to take one of the many jokes of Don Hopkins literally to get an excuse to post that paper.
IIRC I saw a comment on lambda-the-ultimate years ago that said that this paper was great but there are no hints of any implementation or anything since it was swept up by irobot.
It wasn't swept up (ha!) by iRobot. IS Robotics changed their name to iRobot. If you're skeptic, check Wikipedia for the first author on that paper.
That's the sound the garbage collector makes! ;)
I really don't get the feeling that iRobot uses Lisp anymore, and espeically not extensively. Most of their robotics software engineer jobs advertise C/C++. On the rare occasion I've seen Lisp mentioned, it was for a junior role and sounded like it was only to use the existing dialect (I'm assuming for older robots).
My gut feeling is that they have a dialect but no longer actively develop it and potentially no longer use it for newer robots. Plus, it's probably more of a C-like Lisp.
A lot of these companies on this list do not actively use Lisp or even exist anymore.
One company that is left off the list is 2Is Inc. They use Common Lisp for everything and actively do so.
> One company that is left off the list is 2Is Inc. They use Common Lisp for everything and actively do so.
Anything recent you can point at to authoritatively show they still use Common Lisp?
I do see their site says:
> programming using Lisp and object database technology.
https://2is-inc.com/common-positions.html
But they also don't have this position open at the moment. And saying "Lisp" is a little vague.
I see Franz Inc news about 2Is Inc from as recent as 2015 but no more recent than that that clearly shows 2Is Inc still uses Common Lisp.
I interviewed there a few years ago (one of the most enjoyable interviews I've had). For example, I was asked, by the CEO, "what are signs that we'll know you're stressed?". They definitely use Allegro Common Lisp for everything they can except for some JavaScript frameworks for new front end work, if I remember correctly on the latter part. There were zero hints they'd move away from Common Lisp.
They don't mind if you don't know Lisp or even programming, so that's probably why it's understated in their job description. They prefer just hiring smart people and training them. A lot of people there studied math, physics, and even liberal arts. This is the right way that very few do.
The thing with this list is that it is just extremely outdated. It misses a few that actually use a Lisp and lists a lot that just isn't up to date.
I've tried very hard to get a Lisp job. They are exceedingly rare and nearly nonexistent. There's much better chances with Clojure and Elixir.
Lisp seems like it’s incredibly powerful in the hand of a wizard but once the company gets past a certain size they’ve hired every lisp programmer in the world and move to a more mainstream language.
I experienced this in the Smalltalk world years ago as well. Languages/environments are tools. They amplify what an individual can do when creating. High powered languages allow high powered people to write cooler code. Average programmers just write more average programs. Spaghetti programmers just make more spaghetti.
And many of the new languages are designed around removing footguns for the spaghetti chefs I feel.
Of course everyone thinks they’re a superstar, but they’re probably not. I know I ain’t.
I don’t think I’m a superstar. I do find the complexities created by the “foot gun inhibitors” limit creativity and simplicity.
Every time Kotlin/Swift add a new “feature” I feel like I’m living in a sort of Harrison Bergeron (https://en.m.wikipedia.org/wiki/Harrison_Bergeron) for programmers. I spend the same time fixing bugs in these “safer” languages as I do/did in Python/Smalltalk/Elixir.
I (and it turns out a lot of other people) used to use "do they code in Python?" as a heuristic for "are they a smart self motivated programmer"
A similar metric you could apply to companies "are they engineering influenced enough to pick a "weird" language". In other words has the company chosen a language on the basis of "we can hire more Java programmers easily" - an awful mindset that suggests all other engineering decisions are a bust.
So yes I agree with your baseless speculation- it's probably less baseless than you are worried about
In which Paul Graham served to popularize the idea in August of 2004: http://www.paulgraham.com/pypar.html
I strongly disagree.
Software engineering has changed dramatically over the past 20 years.
Choosing a non-mainstream uses an innovation token on something that does not contribute business value.
That’s a huge red flag.
Software engineering is now a team sport.
Future maintainability and readability is now orders of magnitude more important than nifty tricks when writing the code.
See http://boringtechnology.club/
> Future maintainability and readability is now orders of magnitude more important than nifty tricks when writing the code.
Explain npm, then.
Software engineering has always been a team sport, even though we've known since The Mythical Man Month that throwing more programmers at a problem just slows the work down.
Choosing a non-mainstream language can absolutely contribute business value. For example, toy or tool, making your creation extensible adds value. Multiple businesses have spawned from this, and Lisp and Lua are prime candidates of non-mainstream languages that billion dollar companies have decided to choose to build substantial portions of their products around so that users could extend.
Even someone who doesn't know AutoLISP can look at an AutoLISP script from decades ago and get it within an hour.
For another example, after being scolded for using Unicode to write my overstrikes, I wanted to see how difficult it would be to extend Arc's markdown to add DHTML overstrikes (DHTML and Unicode both have their own ways of doing them). This wasn't hard, despite not being intensely familiar with Arc and pg's programming style being relatively off-beat (Arc is essentially sillyScheme, and he takes full advantage of writing things and defining them later, which is normally easy to cope with but part of the design philosophy of Arc was to minimize syntax, so it sometimes takes longer than you would see in a less holistically-cultivated Scheme). I checked
and figured out how to add to it pretty quickly.
> Software engineering is now a team sport.
"Now" meaning since the 1960s (and probably before)?
> See http://boringtechnology.club/
There are plenty of "weird" (in the sense of the parent comment) "boring" (in the sense of the essay you linked [1]) languages out there. Common Lisp and Erlang spring to mind. They are old technologies, and their capabilities and failure modes are well-understood. Maybe not by me and you and the average programmer off the street, but after decades of use, the knowledge is available.
There's also an argument to be had about how much you should value the personal familiarity your team and the people you hire have with the technology. Certainly there's a cost to using unfamiliar technology, and there's a trade-off when choosing between an old, battle-tested, highly capable, but unfamiliar technology and something that is less capable but nearer to hand.
[1] "the capabilities of these things are well understood. But more importantly, their failure modes are well understood" https://mcfunley.com/choose-boring-technology
Unless it is and will forever be a very small dev team, choosing a language based on popularity is a great idea. But maybe it depends on what you consider popular. I think Python would qualify.
Python does now, but that particular phrase goes back to a time when python wasn't even close to where it is now.
I (and it turns out a lot of other people) used to use "do they code in Python?" as a heuristic for "are they a smart self motivated programmer"
Well Peter Norvig switch from lisp to Python.., as also others googlers did when they saw that their teammates writing python where as productive or more than themselves using lisp.
> Peter Norvig here. I came to Python not because I thought it was a better/acceptable/pragmatic Lisp, but because it was better pseudocode.[0]
[0] https://news.ycombinator.com/item?id=1803815
and then:
In terms of programming-in-the-large, at Google and elsewhere, I think that language choice is not as important as all the other choices: if you have the right overall architecture, the right team of programmers, the right development process that allows for rapid development with continuous improvement, then many languages will work for you; if you don't have those things you're in trouble regardless of your language choice.
Choosing python as your interview language seems like just an unfair advantage at this point.
And then choosing python for complex high performance work seems like asking for a headache at this point.
> I (and it turns out a lot of other people) used to use "do they code in Python?" as a heuristic for "are they a smart self motivated programmer"
Really? It's like asking if something is in the middle of a bell curve, getting an affirmative, and then treating that like an outlier.
This quote was from almost 20 years ago. Python wasn't that popular in the early 00s, although it wasn't exactly obscure.
At the very least, the school I went to in the early 00s didn't have any classes that used Python. And none of my friends learned it from their schools either. The language exposure I got was Java, C, C++, Prolog, Scheme, Perl, Fortran, and ASM. That includes AI and programming paradigms classes.
Nowadays, Python wouldn't be the bar you use.
Thats where "used to" makes a huge difference. I remember when the industry standard was to use c++ or java. Using a language like python meant that you were "edgy" or "hip." This was back when Paul Graham really started pushing for acceptance of "hacker" languages (like common lisp or python) when ycombinator was just getting started. He did A lot to increase acceptance of languages outside c,c++, java
Now that python is mainstream, other languages stand in to say "I like to learn languages for reasons other than earning a paycheck" examples coming to my mind include Haskell, rust or elixir.
Choosing a language based on hiring ease is not completely awful. For example where I’m at now we use Go, which is relatively popular, and we’re having an insane time even getting applicants.
Something poetic about this is that Lisp was the original "AI language", back when AI was more about reasoning and decision trees.
One of the classical books - Artificial Intelligence: A Modern Approach - even uses a robot vacuum cleaner navigating a grid as one of its toy scenarios :)
How ironic then, because I personally found Roomba robots extremely dumb, until quite recently at least, most of their models roamed randomly, with almost no planning. On the other hand Neato Robots are so much better, they cover the surface width planification and mechanical precision.
Now baseless speculation: I wouldn’t be surprised to learn that a large part of this difference is due to the fact that a company used Lisp because of ideology, while the other company used a language which is actually leading currently in robotics, (c++ or Python) because of practical reasons: they could harness the massive ecosystem to make stuff that are actually useful instead of recoding a robot OS in lisp.