Ask HN: What are the best / most accessible languages for blind programmers?
I'm asking both from a technical perspective, and from a mental perspective. From the technical side, are there programming languages that, due to things like code syntax or structure, are either especially good or especially bad because of having to be read through a screen reader?
And when it comes to just being able to grok the code, are there languages that are simply easier to keep a mental model of than others? Are there properties, attributes, or types of languages that you would tend to gravitate towards? For example, are functional languages easier or more difficult to keep in your head than a procedural language? Is it even any different from a sighted programmer who can see a whole screen's worth of code at a glance? From my position of ignorance, I could see arguments for or against any language, but would appreciate the perspective of anyone that actually has experience with this.
55 comments
[ 5.6 ms ] story [ 100 ms ] thread"the current line is inside that if , which is inside that function" when you hit a "give me the context" ? regardless of the indentation system of said language
I'm going insane just thinking about counting spaces.
https://www.youtube.com/watch?v=94swlF55tVc
Without semicolin after final # comments whole line.
Voice, maybe? Humans are great at distinguishing lots of different voices. Are there any screen reader tools that use a mixture of different people's voices to add additional fidelity to the information?
One of the things that really blew my mind is just how fast a proficient screen reader user can crank up the speed, e.g. https://soundcloud.com/freecodecamp/zersiaxs-screen-reader. It's totally unintelligible to me, and doesn't even sound much like human speech.
If you're no longer constrained by the speed and sound of normal speech all kinds of other interesting audio representations become possible.
Assuming you care enough about humans to do so, mind.
[Hurries into concrete bunker before the first salvo of "emacs could do..." replies arrives]
In which language? ;)
Second Reaction: The second language to support is machine-code binary - so the reader can use the voice of Bender (from Futurama) praying in binary.
But rather
"function definition func, two parameters, a, b"
Sorta like a prettier for blind coding
PHP and Go are the ones he uses for work, Elixir is the one he uses at home.
Can't find it now; there was some online interview of them. They maintained the SlashNET custom ircd for a bit.
Recall that everything was a text based interface back in the day, there were no widespread GUI's and hyper graphic interactive mobile interfaces.
There were simple text to speech interfaces, not great, but they were coming along - and there were "braille boards" - that converted screen text to a strip of braille via raised pins.
Ponder that and ask yourself which age of technology was harder for blind people to navigate then Vs now.
It's easier now to build a good blind interface, but there is a vast amount of interfaces out there that are a nightmare for the unsighted with no consideration given to access.
I would think it eliminates a lot of overhead that is specifically designed for sighted people.
I also wonder how screen readers deal with the symbol soup.
https://www.uiua.org/ https://mlochbaum.github.io/BQN/
Forth and Lisps tend to be fairly visual syntax free as well.
I'm just speculating though, looking for someone with experience to confirm or rebuke.
rustc’s (default) “human” error format is going to be very messy for screen readers to follow, because it has a lot of visual alignment and decoration. You’re going to have to leap through hoops to make it decent for accessibility tools, whereas that C++ compiler’s output might not be quite so bad in some ways. (To clarify: I expect that both tools/formats are bad for blind users, in different ways. For sighted users, I don’t think there’s much of a contest—but the distinction is in the diagnoses more than their presentation, so this difference is about everyone, not blind people.)
But I think blind people probably genuinely shouldn’t be caring much about the error messages as they appear in a terminal these days, because this span formatting is always going to be lousy without very fancy tooling to sanely contextualise it, and guess what? There kinda is such tooling already: IDEs (and with the advent of LSP, it’s even broadly cross-language). Use something like rust-analyzer with your Vim + coc.nvim (what I use) or VS Code (the most popular choice) or whatever, and you can jump between error locations easily and have it all presented with your code, rather than separately. That way, the only accessibility support required is in the IDE, and that you have a language server (which people will want anyway ’cos they’re handy).
(Since I mentioned Rust’s error formats, relevant reading: `rustc --error-format=…` <https://doc.rust-lang.org/rustc/command-line-arguments.html#...>, and `cargo build --message-format=…` <https://doc.rust-lang.org/cargo/commands/cargo-build.html#op...>. My guess is that blind people would probably be better served by the “short” error format, or by tooling that consumes the “json” error format… like rust-analyzer.)
The big problem I see is that the ASCII art output relies heavily on contextual cues, pointing into user code that might be too long and with messages that easily go beyond the capabilities of a Braille display. There are mock ups I've done, removing and rearranging things to build output that works as if someone was talking to you, but don't have the expertise to say that it works for the target audience.
If there are people with relevant expertise reading this, I would love to pick your brain. There are simple questions like "is it useful to truncate paths to be just the file name and let users rely on their tools fuzzy search to find them?" or "is it better to just mention the place in the file we are talking about and not display a snippet? Same for suggestions?"
With rust there's no buffer overflows, how will folks buy supercars to crash in the desert after escaping "flyover country"
(In all seriousness, people were obsessed with it at Mozilla but also just kept hazing me I was "just" a UX researcher -- do you know of a good primer who knows the basics of languages like Python, bash, and QBASIC but struggles with compiled languages like C/C++?)
Ideally we'd provide a more narrative output with something like "file.rs, line 5, column 17, fn call to inputs creates a temporary which is freed while still in use". This would simultaneously be better for blind users, and give the people clamouring for more compact output an alternative.
Haskell is actually defined as a braces-and-semicolon langage with an off-side rule for the convenience of layout sensitive code. The transformation is simple and completely deterministic, so if delimiters and separators are preferable to a blind coder they can reasonably easily use that.
edit: Of course, a decent screen reader could probably be programmed to do something reasonable here -- e.g. even saying "end" at the end of an indented block, though there are lots of options. This would need to be set up, but that might be the way -- you'll probably encounter Python at some point whether you like it or not.
Over 30 years ago, there was a deaf/blind programmer in my group. She had no issues and was quite good. That was a COBOL shop.
apl or unicorn/icon better choice.
compiled languages may be not fun since you have more delays than the sighted.
what did old school phreaks use when learning to program? (i was late the the game in the late 90s, and people always assumed i was older except when it was a context they'd pay me fairly for my intellect -- then it's nothing but precarious, low paying nonprofits or piecemeal consulting designed to keep me in their orbit)
there is a library for the blind in 412, but they also block tor so i have to hope what pops up in duckduckgo is accurate:
https://duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswz...
>Library for the Blind and Physically Handicapped >412-687-2440 >Toll Free Phone Number: 1-800-242-0586
if they give you shit say that it's greg and you're using your one phone call, they'll help you if you don't start asking a bunch of kinsey crap, if they don't suffer a narcicistic meltdown from having to do more than show someone the braile forms for welfare.
(i have to be careful not to hammer resources intended for the visually handicapped when using tor -- my no javascript lifestyle means i often seek out things designed for a screen reader, and i've seen them get overwhelmed in ways i haven't seen since the 2000s)
in general, interpreted languages are easier to keep a mental model of, because they have been iterated on to the point you can write out code that looks like psudocode, it's why i like python
the hackers who trained me were big into perl, which has a lot of issues but the whole there's over 9000 ways to do things -- there's a big library of existing perl code, and since there's more than one way to do things and those people fucking love one liners you'll spend less time dealing with "whitespace" which, as a blind person, i'm gonna guess is a very hard thing to grok, harder than public key encryption, recursion, or the idea that we don't need john taylor gatto to tell us what hellen keller got up to.
--- very high level / 6th generation level language. Makes extensive use of generators for doing goal directed programming.
=== ARC[1] terse lisp dialect by Graham & Morris
=== Cursorless is spoken editor[2]. Throat mike useful in cubical office.[3]
--- type one thing. speak another. X2 productivity.
===
[0] : http://unicon.org/ ---
[1] : https://www.owlapps.net/owlapps_apps/articles?id=188190&lang... ---
[2] : https://www.youtube.com/watch?v=NcUJnmBqHTY ---
[3] : https://kleinelectronics.com/modular-throat-microphone/?sku=... ---
[4] : https://btiffin.users.sourceforge.net/up/index.html ---
===