Ask HN: I'm a software engineer going blind, how should I prepare?

3270 points by zachrip ↗ HN
I'm a 24 y/o full stack engineer (I know some of you are rolling your eyes right now, just highlighting that I have experience on frontend apps as well as backend architecture). I've been working professionally for ~7 years building mostly javascript projects but also some PHP. Two years ago I was diagnosed with a condition called "Usher's Syndrome" - characterized by hearing loss, balance issues, and progressive vision loss.

I know there are blind software engineers out there. My main questions are:

- Are there blind frontend engineers?

- What kinds of software engineering lend themselves to someone with limited vision? Backend only?

- Besides a screen reader, what are some of the best tools for building software with limited vision?

- Does your company employ blind engineers? How well does it work? What kind of engineer are they?

I'm really trying to get ahead of this thing and prepare myself as my vision is degrading rather quickly. I'm not sure what I can do if I can't do SE as I don't have any formal education in anything. I've worked really hard to get to where I am and don't want it to go to waste.

Thank you for any input, and stay safe out there!

Edit:

Thank you all for your links, suggestions, and moral support, I really appreciate it. Since my diagnosis I've slowly developed a crippling anxiety centered around a feeling that I need to figure out the rest of my life before it's too late. I know I shouldn't think this way but it is hard not to. I'm very independent and I feel a pressure to "show up." I will look into these opportunities mentioned and try to get in touch with some more members of the blind engineering community.

496 comments

[ 4.3 ms ] story [ 365 ms ] thread
Use a text editor such as Emacs or Vim.

Migrate from front end development to backend...

Learn to live in the command line.

Take car of your soul

Inevitably, whatever happens, you keep on trucking

It's a circular but effective way to coupe

Please watch this video on the i3 desktop environment. The windows are managed and can be controlled by keystrokes.

https://www.youtube.com/watch?v=b_RL_Q8CR78

From 2015, a blind engineer uses emacspeak to write C++.

https://www.businessinsider.com/how-blind-google-engineer-wr...

I have read some HN comments in the past from blind engineers. Not sure if they are frontend.

I would like to second this. Any tiling window manager could be of great help.
Even as someone who isn't blind, I think popularizing more screenless tools (or even tools with just fewer visuals) could be useful for the dev community as a whole. My eye strain is getting especially bad now that we're in quarantine since I'm sitting in front of a monitor nearly the entire day.

Hope to see some cool suggestions, tools, and software posted in this thread!

One thing to consider is to write a blog on accessibility - it’ll help expose issues to those who develop developer tools which is great but it’ll also help you get exposure for getting work.
I was thinking the exact same thing! It would be something I would definitely be interested in reading just to get a different perspective on how different people approach a site.
Biggest advice, start programming with your monitor covered up by a sheet or turned off now while you still have the option to turn it back on to figure out what you just did.

Gradually have it turned off for longer periods without turning it on to see what's happening until you can do it without seeing it at all.

On Macs, there's a screen curtain feature that can be turned on and off. The shortcut is FN+CTRL+OPTION+SHIFT+-. It might be different on older versions of OSX, used to use the right option key, but I've forgotten the keystrokes.
NVDA on Windows also offers a screen curtain. So does TalkBack on Android.
I'm very sorry to hear that.

I'm not sure where you're based, but I've heard of Usher's Syndrome after hearing a talk from someone named Molly Watt, who also has Usher's Syndrome. It might be worth dropping her a line, as in her line of work she might be able to either give some advice, or point you towards someone in your situation that can help.

https://www.mollywatt.com/

I had a coworker this happened too. He was in his late 40s when this happened and so had to use a screen reader instead of a Braille display. He used edlin over putty on Windows. Since Jaws ran best there for him. He had to stop working on languages like Python where a screen reader is of little help.
> He had to stop working on languages like Python where a screen reader is of little help.

i find this interesting. is it due to the space significance thingy?

Python is totally possible with a screen reader; the screen reader just needs to read out punctuation. It's easier with a self voicing application like emacs.
Three spaces vs one space is punctuation?
Which languages work best with a screen reader?
I knew a blind software engineer that was decent, he'd use Eclipse and have his screen reader speed turned very fast.
While I don't yet know a ton about the accessibility software development community, I've discovered Deque Labs[1] while looking into some accessibility tooling.

They have really good resources and training around accessibility for the web, and some of the software they develop[2] is incorporated into Google Lighthouse.

Their guides and videos might help you get a sense for how other people use alternative access methods to interface with the web.

With both the skills to write software and a deeper understanding of the use cases you'll be well-positioned to help improve things for a lot of people - I'm sure it could be tough at times, but stick with it, and best of luck to you.

[1] - https://www.deque.com/services/accessibility-empathy-lab/

[2] - https://github.com/dequelabs/axe-core

I recommend using a tiling window manager - they allow you to organize windows logically, rather than spatially.

I have also written some plugins for using Vim (text editing) and Weechat (IRC chat) with speech synthesis:

https://git.sr.ht/~sircmpwn/dotfiles/tree/master/lib/vim/vim...

https://git.sr.ht/~sircmpwn/dotfiles/tree/master/.weechat/py...

And I have a script for Sway (a tiling window manager) which also gives you audible cues:

https://git.sr.ht/~sircmpwn/dotfiles/tree/master/bin/swaytal...

All of this is somewhat incomplete, but it's a good starting point if you want to get used to them and work on improvements while you're still sighted. Good luck, and let me know if I can be of service.

Are you sighted?
Not perfectly, and not for long. I wear glasses, but they only do so much, and my vision worsens every year. I use some light assistive technologies on the daily - higher contrast, large fonts, zooming in on things. To test the tools I linked to, I spend the occasional workday with all of my monitors turned off, relying on these tools to get work done. I also have a braille reader that I occasionally pull out.

I have a different philosophy and approach to using computers than most, and that affects my views on accessibility. Stapling a screenreader onto a graphical application, for example, to me seems like the wrong approach. Text-based applications are much more accessible, and these are my bread and butter. To this end, my work on accessibility involves making more information available as text, organized logically rather than spatially, and making it easier to access and manipulate that information with vision impairments (and other sorts of impairments, too).

I would love to read more about this in your blog! Sway is my daily driver and I love it!
It seems like this level of organization would be beneficial to the sighted community as well. Is this a value that you use to market to customers?
(comment deleted)
On the days that you turn your monitor off, how do you do email? Do you also have a speech synthesis plugin for your aerc email client? Or do you use it with a generic screen reader for terminals? If the latter, which screen reader?

I've found that, counter-intuitively, a fully accessible GUI program with a good GUI screen reader is easier to use than a screen-oriented terminal program with a screen reader. The trouble with the latter is that the user has to understand visual concepts like highlighting, the meaning of special characters, etc.

Of course, an application or plugin that's tailor-made for doing a particular task with speech output is better than either of those other choices -- as long as you don't have to use an application that's overall inferior (e.g. using the Emacs/W3 web browser with Emacspeak as opposed to a mainstream browser).

>On the days that you turn your monitor off, how do you do email?

Poorly. I want to improve aerc in this respect. For the time being, I use a mix of my braille reader (brltty) and piping emails into vipe so I can use my vim plugin to read them.

Have you ever used a conventional GUI screen reader? Something like NVDA for Windows, VoiceOver for Mac or iOS, Talkback for Android, or Orca for GNOME? Reading a web page or an HTML email with one of those might give you a different perspective on what's possible, and specifically, how much better the experience of reading a hypertext document with a screen reader can be, compared to something like BRLTTY.
I have used Orca, and I can't stand it. The main advantage is a global place to route text for speech synthesis, but I simply hate using screenreaders to use applications which are not designed with accessibility in mind. There are few better solutions for browsing the web, though. I've been meaning to try lynx with brltty.
> I simply hate using screenreaders to use applications which are not designed with accessibility in mind.

I can understand that. I think many of us have just accepted that it has to be this way, because we're a minority and we want to have all of the advantages of using mainstream applications (economies of scale, active development, not being at an extra disadvantage compared to sighted peers, etc.).

Of course, you don't fit the profile of a "mainstream consumer" when it comes to computers. In particular, I gather that you take full advantage of the hackability of free software. So using custom TTS plugins as opposed to a clunky generic screen reader is just an extension of that overall approach to using computers.

If Orca is the only GUI screen reader you have tried, I can understand you being put off. Try NVDA on Windows with Firefox and you'll never look back. NVDA is open source btw.
I would strongly recommend switching to Windows - the screen readers are just so much better than anything on Linux. I agree with the other person who said that GUI programs are easier to use with a screen reader. At least on windows, this is definitely the case.
You know that Drew is the maintainer of sway, right? I don't think switching to Windows is an option here :P
From my experience, using the web in lynx or with emacspeak isn't an option in 2020. You just have to have a modern browser in conjunction with a well maintained screen reader. I wish I could use linux for everything, but if I want to be productive on the web I have to use Windows.
> From my experience, using the web in lynx or with emacspeak isn't an option in 2020.

Even 20 years ago the limitations of those options were clear to anyone who was willing to face reality. I was in denial for a while. (Note: I have limited vision, but I spent a lot of time helping blind people use Linux back then.)

Of course, Lynx and Emacs/W3 aren't the only alternatives. I think an interesting option would be a specialized browser UI based on headless Chromium.

In any case, I'm guessing Drew won't give up his free-software ideals easily, if at all. And he's a capable enough hacker that I'm sure he'll come up with a solution that works well for him.

Which do you prefer, screen-readers or braille readers? Also, how long did it take you to be able to feel the braille effectively?
I don't like screen readers, but I liked teaching applications to speak themselves based on text commands. I like to combine this with a braille reader and use both in different contexts. For example, a braille reader is more unambiguous with punctuation, capitalization, etc, but speech synthesis is necessary to catch my attention for a notification from a non-active application, and is more comfortable for reading natural language. It's worth reiterating, though, that I don't need these tools (yet), so people who depend on them daily may have a different opinion.

Braille is easy, I could read it reasonably well with just a couple of days of study.

(comment deleted)
As someone preparing for this, too, I still have no clue on how to rasterize the code quickly. Voice always feels inefficient and braille feels like a joke when it comes to the amount of information being displayed. Do you have suggestions? Do you transpile code?

I also use VIM because it feels like the best case of voice integration or braille integration...but I have no source for how to actually do this properly. Are there good reading materials on this?

Currently I am trying to build a semantic web browser, also with the intention to filter out all legacy crap CSS that prevents interaction with the content [1] and the idea of being able to train CNNs with the content... but when it comes to code, my memory of it seems to suck so hard that I always have no clue of what I wrote the day before.

[1] still alpha as hell: https://github.com/cookiengineer/stealth

(Also a long time observer of your work here. You are one of the good guys. Stay awesome!)

> I also use VIM because it feels like the best case of voice integration or braille integration

Check out Emacsspeak: http://emacspeak.sourceforge.net/

It’s written by T.V. Raman, a blind engineer at Google by way of Cornell.

Among other things, with it you can just use the built-in Emacs browser!

Even with the aid of sight, I don't read an entire codebase at once. I follow the logic, a few lines at a time, as it moves through the parts I'm interested in. I use grep to find the things I ought to read. With this approach, I build a mental model of the codebase quickly, with lots of blanks - but with detail in the areas I'm focusing on.

As for how to actually rig up braille readers on Linux, check out BRLTTY. It's pretty straightforward. I was working on an Alpine Linux spin which was more accessible out of the box, but I got discouraged by various circumstances and shelved it.

I think your use of the term "braille reader" might be causing some confusion. I know you use brltty. But do you use its text-to-speech output, or do you use a refreshable braille device that moves little pins up and down to form braille cells? If the former, I'd suggest referring to brltty as a screen reader.

Also, do you run brltty on a Linux text console, or in a terminal window in your Sway session?

I use a refreshable braille display. I use it mainly on the Linux console, but I've been thinking about rigging something up for use with Sway.
Wow, I underestimated your seriousness about adapting to alternate output methods. Did you have to buy that braille display at your own expense? As I'm sure you know, they're expensive. How recently did you start learning braille? Has it been a challenge for you to learn to read it with your fingers?
I bought a cheap used one off of eBay, it wasn't too expensive - a few hundred bucks. I know that nicer ones can get up there, though. Learning braille was an unusual challenge, but I didn't find it especially difficult. It only took a couple of days to become reasonably proficient with it. The braille display I ended up with is pretty nice despite its price tag, it has a good finger-feel to it and has a nice set of basic features.

The most difficult thing for me would be learning advanced levels of braille, which involves memorizing shortened forms of many words, but I reckon I can get away with just using long-form for a good long while.

(BTW, stealth sounds awesome!)
Thank you :3 It’s still a ton of work. I heavily underestimated the networking and parsing part...and had to invent a testrunner that can test networking implementations with known buggy situations (e.g. simulate fragments like on 2g slow mobile situations).

I totally switched my workflow to Test Driven Development due to the last 6 months parsing CSS and http1.1 responses.

It’s amazing how much server infrastructure violates w3c specs and recommendations. Something like partial content (206) is mindblowingly crappily implemented on servers these days when it comes to keep alive sockets and multiple range requests. Some servers reply only with chunked encodings, even for frames with less than 256 bytes (looking at you, cloudflare dns), some only send back a single stream...some just send back ranges without headers...

And I only support http1.1 as of now, because http2 and 3 are both kinda undebuggable and there’s no reference-class testsuite to test against implementations.

That sounds brutal!

Still, it seems like a very worthwhile project. I'm fed up with modern browsers myself (the "megabar" on Firefox 75 is, somehow, the last straw for me.)

I'm going to keep an eye on Stealth because it sounds like the perfect browser/proxy engine for an experimental UI I'm working on.

Cheers! Good work and good luck. :)

Would you be willing to chat privately with a colleague of mine going through a similar lost of sight transition?
Would you be willing to chat privately with a colleague of mine going through a similar lost of sight transition?
Rob Pike's Acme editor is another powerful tiling editor you can check out.
As a huge fan of Plan 9, I would strongly recommend against acme for visually impaired users. It's highly mouse-driven, requiring a spacial understanding of the interface and the ability to see where the mouse is and coordinate its movement to execute commands.
Good point - didn't think that through enough before recommending.

Just thought of as nice tiling editor.

Thoughts on Sam? It seems to me like it might be a much better fit, esp. given the ed-like command only mode. (And I always liked it better than acme anyway...)
As a side note, weechat runs beautifully in Docker. I access it with Glowingbear but though a terminal it would also be trivial.
I work with many engineers who became blind in a variety of ways. If you provide your email address, I can introduce you to them. Here is my temporary email (docesar172 at lagsixtome dot com) if you do not want your contact to be published.
I met a blind front end web developer a few years ago. I'm afraid I don't have any details on his setup, but they do exist.
Accessibility testing/engineering is a very important niche within software engineering. You could very easily build a career that will enhance the lives of others in similar situations.
Indeed, we are building a web app now to replace an existing GUI. In our group, in at least two companies we have people with color blindness, so we decided to incorporate WCAG design practices from the beginning.

It's quite hard for us, as we relay on browser extensions to test and tell us whether we are doing accessibility right or not, before we send the app to be tested by our co-workers/users.

These tools lack somewhat, they are not easy to integrate in the build process, and instead developers have to remember to run them, and check different things (e.g. there are multiple types of color-blindness, EU vs. USA regulations for accessibility, ARIA roles/labels where possible for screen readers etc).

So you could definitely start working on something in that area. Maybe more tools, more information, services for testing, consultancy.

If I were in your position, I'd probably get a job at someplace like Facebook or Google. They're huge, cushy companies and probably have resources for SWEs that go blind. Who knows maybe you can go on disability while you're working there, and never have to work again in your life

BTW, I don't know if asking the internet for advice on this subject is a good idea. I imagine it's gonna be mostly speculation. I'd seek out other people that have firsthand experience (i.e. they went blind) and ask what they did and how they're doing...

You might want to check out some things like

https://www.reddit.com/r/emacs/comments/bh0vm0/emacspeak_how...

https://stackoverflow.com/questions/118984/how-can-you-progr...

and also contact some individual programmers with visual impairments.

I don't have particular expertise in this area but I remember meeting a completely blind software developer in 1995 or 1996 (when presumably the tools available were much more limited!). He said that he had successfully pursued this career for a number of years already at that time. However, I think the things he was working with would be things that you'd consider more to be backend engineering.

I also know a computer scientist who is blind and who has continued researching, publishing, and teaching, but as he works in theory, his work might also feel more backend-like.

> - Besides a screen reader, what are some of the best tools for building software with limited vision?

If you decide to learn Braille well, Braille terminals are still a thing:

https://en.wikipedia.org/wiki/Refreshable_braille_display

(You might have seen one used in the movie Sneakers!)

Some fluent Braille readers can use these terminals at very high speeds (although people who use screen readers also often get used to using their screen readers at extremely high speeds).

> - Are there blind frontend engineers?

I know you might not want to pigeonhole yourself and work specifically on disability-related projects, but a lot of companies are trying to ensure accessibility of their web sites and so are interested in having developers with specific disabilities to help make sure that that works out properly. I believe there are consultancies of people with specific impairments who develop (and test) UI for accessibility to users with similar disabilities.

I just want to throw this out there, just in case you haven't deeply considered it. I'm sure others will answer your question more properly.

Have you considered that maybe you don't want to be doing software engineering and with this precious remaining time would rather prepare for something entirely different? Not sure what your financial situation will be or if you live somewhere with sufficient social support, but if you're going to be blind for life (and you're very young), optimizing for employment (ie. "I'm already a software engineer, may as well commit to that") might not be the best way to live a full and fulfilling life.

I am failing to see where are you coming from with this. If anything, changing careers to software development made me live a more fulfilling life in the last 3 years.

What would be your suggestion for the best way to live a full and fulfilling life?

Do what you're passionate about. You're going to have a learning curve no matter what, might as well enjoy the ramp up as much as possible.
I'm glad it's fulfilling for you. It is for me too. What I said wasn't an indictment on software engineering as a source of joy.

I think many 24 year olds have spent so much of their recent years thinking about their career that they might miss the fact that there's so much more to life. This time might be better spent in other ways too. I just want to nudge this individual towards considering those things too.

This advice is universally applicable. We should be returning to first principles in our own lives - although, it’s so hard to do so.
I am confused why his diagnosis makes any difference... this isn't a fatal disease, so he has no fewer years to live than the rest of us.

If he thought being a software engineer was what he wanted to do to live a fulfilling life before his diagnosis, why would that change now?

Because programming without sight is hard. It's definitely doable and could very well lead to a fulfilling life. Or it might not. Maybe there are other careers that he might be better suited for and where his disability won't be as much of a hindrance. If so, he still has time while he can see to prepare for a career change.

Basically, the GP is telling the OP to consider all of his options and not to box himself into software engineering just because that's what he does now.

Maybe it's not programming without sight that's hard, but working with sighted programmers who use tools that aren't compatible with screen readers.
> Maybe there are other careers that he might be better suited for and where his disability won't be as much of a hindrance.

I'm blind myself, and I consider software-engineering to be one of the nicest options out there, at least in my country. Sure, there are difficulties, but not as many as in other fields. Computers can be accessible, and accessible tools can usually be found.

A blind person becoming a software engineer is a realistic option. a blind person becoming... almost anything else is not. As a blind person, career prospects are pretty limited, and someone who already is a software engineer has a huge advantage, compared to someone who i.e. invested n years of his life into becoming a surgeon.

Being without sight is hard, period. Software seems like one of the easier jobs to do while blind, actually.
I think “Remaining time with vision” is the intended reading, as in if there’s some other career OP wants to switch to, it would be easier to do now
or even as simple as "Go see the world instead of spending your remaining sight on screen reader software."
Going blind doesn't preclude OP from having to make a living, right? We'd all rather be optimizing for other matters than employment, but most of us don't seem to have that luxury.
You should try out a lisp. They have the simplest syntax and the code is quite concise.

> This code turned out to be a lot more complicated than I anticipated. The patch ended up adding a hundred lines of Arc. A hundred lines of Arc! Do you have any idea how many lines of Arc that is? I just looked through the history and the last commit that added that many lines of code was over two years ago when we got Arc to compile to JS. [1]

Clojure is quite well documented, and you can do full stack development with it (clojurescript). Intellij has good support for it, and it stores the state of code as an ast. I think there are addons for dealing with ast (search/replace) as well.

Also, you might want to "settle down" wrt your dev setup (tech, tools), since jumping from project to project, tool to tool won't be that easy. Maybe pick a self contained environment you can learn inside out (smalltalk, tools.deps).

Emacs seems to check all these points, but it's still visual oriented. Maybe build one yourself.

[1] https://news.ycombinator.com/item?id=22767204

Counting parents without being able to see indentation sounds like hell but surely there are alternative solutions.
If you are in the USA then I think the best profession for the blind is the legal trade. Do you have it in you to change careers?

Courts in the USA are by and large accommodating thanks to the ADA.

Your technical background, with the loss of vision, with a legal degree, and I think you’d have a very long, lucrative, and fulfilling career.

I would recommend trying to study up on Section 508 compliance https://www.hhs.gov/web/section-508/index.html. It's a set of rules that all government orgs in the US must follow for making sure their content is accessible. If you do end up becoming visually impaired you'll end up with a unique perspective on building accessible websites.
Are there consulting firms that specialize in 508 audits? Seems like a potentially lucrative field given the activist lawsuits that happen in this area.

https://www.natlawreview.com/article/ada-website-litigation-...

Yes, there have been professionals offering all types of services for 508 ever since it came out. Might be wrong, but none of the companies I have seen offering these services seems notably successful as a result of their 508 services. Compliance based services are rarely a money maker, though in some situations given predictable need and clients, compliance based services are frequently a way to build relationships that lead to more lucrative deals.
Most US universities need to comply too
Yea my first programming job was translating word docs to accessible html for universities. The jobs around section 508 compliance seem mainly government related
The W3C's Web Content Accessibility Guidelines (WCAG) are the basis for many accessibility laws and more useful for actually learning what makes a site accessible.

If you don't already place an emphasis on using semantic HTML markup, learn more about that, it's the foundation of accessible design.

Sighted developers should use a screen reader on their own sites to get an idea of what's up. Very simple changes with semantic HTML can make a world of difference. It's sometimes as simple as swapping tags for their semantic counterparts.
edbrowse(1) is developed by seeing-impaired person - it's a webbrowser with ed(1)-like interface which also does JS. I've heard it's awesome for scripting! Though it requires som ed(1)ucation.
I just learned how to make my website accessible to screen readers (using aria labels, tabindex, etc). You should definitely check it out now to learn how it works. I only did part of my website and it seems like a full-time job. I'm not blind, so I am sure I could have done much better if I was more familiar with tools like Mac's VoiceOver. I am sure there's a market for these skills, especially in any company that has a decent amount of users. Best of luck!
edbrowse(1) is developed by seeing-impaired person (Karl Dahlke) - it's a webbrowser with ed(1)-like interface which also does JS. I've heard it's awesome for scripting! Though it requires som ed(1)ucation.

http://edbrowse.org/