Text UIs != Terminal UIs
By Artyom Bologov
I'm working on an audio-only Lisp cyberdeck. A part of this project is making Lisp REPLs audio-friendly. The trouble with most of them is that they overabuse text graphics. And screen readers and voice synthesizers are not good at text graphics.
Debuggers are especially suffering from this pseudo-graphics frenzy. Here's how the debugger looks on SBCL, the most popular Lisp implementation:
- Hash reader syntax (built into the language).
- Opaque hexadecimal hash strings.
- Square brackets.
- Indentation.
All these make my setup with Espeak go mad:
And that's just the
SB-INT:SIMPLE-PROGRAM-ERROR @53E0C809
part!
Dashes/hyphens are a vital part of Lisp kebab-case naming. And they are proper English too, so Espeak is alright with them. But a lot of the other clutter SBCL produces makes Espeak die in agony. This "clutter" is there for aesthetics and "graphicality" of the UI. Compare SBCL example to ECL's debugger screen:
There still are some graphics, like parentheses and braces, true. But most of the information is expressed via text. The most accessible communication medium. As a side effect, Espeak reading of ECL debugger screen takes half of SBCL reading time. The number of characters is comparable. ECL clearly is just more productive with the air time. And it makes me productive too, because I can take action faster.
That's why I want to emphasize this: text interfaces are not the same as terminal interfaces. Want audio or variety of modal interfaces? You'd better ensure that your output is conversational. Luckily, conversational interfaces are on the rise today, with AI chat apps.
Text is accessible and easy to process. So ensure your text interfaces are this: text. Prose. Conversation. Description. No one needs text graphics anyway—there are Graphical (sic) User Interfaces for that. So make your product readable first and foremost.
Disclaimer: I don't want to impose any course of action on any product, actually. Especially so—on Lisp implementations. SBCL is good at what it does, deserving the status of the best FOSS implementation of Common Lisp. It's just that my cyberdeck will use ECL instead of SBCL for readability purposes 😛
EDIT: As a bit of constructive suggestion, here's how an audio-friendly debugger might look.
While opinionated, it gives the necessary minimum of information to act on. Without the visual clutter and scary hex codes. One can further reduce the noise deleting the notes on restarts and help, like CCL does:
But that's probably too opinionated for a default setup.