通过听力写代码?盲人程序员就是这样做的

640?wx_fmt=gif&wxfrom=5&wx_lazy=1

Michael Forzano,Amazon


2018 年 3 月,Amazon 官网「工作在 Amazon」栏目有一篇文章,介绍了他们的一位盲人程序员 Michael Forzano。




(视频来自:@阑夕)

Amazon 软件工程师 Michael Forzano 出生就因先天疾病而失明,在成长过程因为对计算机有兴趣,在网络的盲人社群中受业余开发者的启发,2013 年进入 Amazon 工作,他的同事甚至表示,Michael Forzano 读写代码的速度比他还快,还有超能力可以发现软件的缺陷。


Michael Forzano 在出生时就被诊断出諾里氏症(Norrie Disease),这是一种罕见基因遗传疾病,患者可能会出现白内障、白瞳症甚至失明,有 30% ~ 50% 的患者会有发育迟缓与学习障碍,大部分患者在出生时听力正常,但在 20 岁之前便会丧失听力。


Michael 出生时就失明,5 岁开始需要使用人工耳蜗获得听力,Michael Forzano说,尽管他失明了,但是他绝对是过著非常正常的童年,他的父母总是试著让他做跟其他人一样的事情。


在 Amazon ,Michael Forzano担任零售无障碍软件工程师,负责建立网页零售辅助工具,让其他开发网站功能的团队,可以确保残障用户能顺利浏览网站。先天失明没有成为他的障碍,反而赋予 Michael Forzano 在脑中建立代码结构心智图的能力。


他说,视力正常的人们通常是视觉动物,他们仰赖白板以及绘制图表,透过视觉学习和理解。但 Michael Forzano 没有这些视觉工具,因此他必须在脑中建立心智图,借以记忆代码结构、系统特定的组件甚至是文档位置,也因此他对于系统的整体架构有了独特理解,他的同事不少时候需要他说明特定系统运作的方式。


Michael Forzano 使用一般的笔记本电脑,并安装屏幕报读软件,将文字、图形以及使用者电脑界面等转为语音,而他就听着程序进行开发工作。在 2013 年面试时,Michael Forzano 没有事先告知 Amazon 的面试官他是盲人,只是在面试开始时说:「嘿,我是盲人,我可以不要用白板,而是用我的笔记本电脑写面试程序吗?」当然 Michael Forzano 通过了面试。


Michael Forzano 认为,其他盲人知道他在做什么很重要,因为有不少盲人总在想自己可以走多远?能够做什么?而他想要成为一个榜样,让世界知道。



Tuukka Ojala,芬兰程序员


640?wx_fmt=jpeg

我想你第一次看到我的工位时,总会感觉少点什么。没有显示器和鼠标,却有个人敲打着键盘,不知注视着哪里。

这就是我,我同事可以证明我没问题。我是位于坦佩雷(芬兰西南部一座城市)的 Vincit 写字楼中的一名软件开发者。我双目失明。这篇文章中我将讲述有关我工作中的事情。

你真的什么都看不到吗?

准确来说,我觉察到阳光和其他明亮的光线,不过也仅限这些。其实,这对我的工作也并没有什么帮助。

你工作内容是什么?

和大部分人一样:忙时写代码,闲时和同事侃大山。我做全栈项目,主攻后端。兼职访问顾问 – 或称监管,随你如何称呼。

你如何使用电脑?

我用的电脑是一台运行 Windows 10 的普通笔记本。是其中的软件让一切变得神奇。我使用一款叫做屏幕阅读器的程序来访问电脑。屏幕阅读器监听屏幕上的变化并通过盲文(需要单独的盲文设备)或合成的声音来展示给用户。这并不是你如今听到的各种智能助理的合成声音。我使用一种机械声音,每分钟能说 450 个单词。相比较而言,英语正常语速每分钟 120-150 个单词。我有一个怪癖:我既说英语也说芬兰语,我用芬兰语合成器读英语,因为老旧的屏幕阅读器在语言之间切换不够智能,所以我习惯这样做。下面是个例子是阅读这个段落,我能听懂。

https://www.vincit.fi/wp-content/uploads/2017/08/mpsample.mp3?_=1

下面是英语合成器发出的声音:

https://www.vincit.fi/wp-content/uploads/2017/08/essample.mp3?_=2

鼠标对于我来说并不是非常有用,所以我仅仅通过键盘工作。在座的各位应该十分熟悉我用到的命令:方向键和 tab 键控制窗口内的移动,alt+tab 切换窗口等等。屏幕阅读器也有很多自己的快捷键,比如阅读活动窗口的不同区域或开关一些功能特性。

有趣的是阅读网页和其他格式化文档。你看,屏幕阅读器分块呈现信息。每一块可能是一行,也可能是一个单词、一个字母,亦或是文本的片段。举个例子,我在网页中按向下的方向键,我听到页面的下一行。我并不能像正常人一样用眼睛从屏幕上阅读内容。相反,我听到一块一块的内容,或跳过我不感兴趣的部分。

语音或盲文并不能描绘出窗口的显示布局。信息以线性方式呈现给我。如果你把网页复制粘贴进记事本,你就能明白我看到的网页是什么样子的。就是剥离大部分格式的多行文本。然而屏幕阅读器可以获取网页上的 HTML 语法,所以我也能知道超链接、标题、表单等等。事实上,如果非复选框元素展示成复选框样式,我并不能知道这是复选框。我之后将写一篇文章详细讲述这些内容,记住我刚刚举的是个“反人类”例子。 (译者注:突然感到自责和羞愧,深深明白了一个道理:不要用各种有含意义的传统标签 hack 布局和样式,也不要因为 css 的强大而懒得使用各种有含义的传统标签。共勉)

我花费大量时间工作在命令行上。事实上我通常用浏览器和编辑器,很少用其他图形应用程序。相比那些为鼠标用户打造的图形界面,我发现用命令行处理手边的工作更加高效。

既然我如此热爱命令行,为什么我却要选择 Windows 这个并不以命令行出名的操作系统呢?答案很简单:Windows 是最方便的操作系统。NVDA是我所选择的屏幕阅读器,它是开源的并且维护比其他阅读器更频繁。如果上天再我一次机会,我可能会选 Mac 系统,因为我认为它是易用性和功能性平衡的典范。不幸的是 Mac 系统上的屏幕阅读器 VoiceOver 经历了漫长的发布周期从而被遗忘,并且它的导航模型和我独特的工作方式并不协调。当然这里也有一个 Gnome 桌面上的屏幕阅读器,虽然用户很少,依然被很好地维护着,不过还有一些不完善的地方和我日常工作不协调。所以,我选择 Windows。由 GNU 诞生的 Git Bash 和其他命令行工具弥补了 Windows 内置命令行的缺陷。

你如何写代码?

我花费好长时间才明白为什么大家觉得这个问题是个很高深的问题。记得我上面说过一行一行地阅读文本吗?我也是通过这种方式读代码。通常我会跳过无用的行,或仅听半行来获取内容,但当我需要知道完整信息的时候,我不得不像读小说一样读完所有东西。我当然无法阅读整个代码库。这种情况下我会在脑中抽象一部分代码:这个组件输入 x 返回 y,并不用关心细节逻辑。

这种阅读方式让我和正常同事的工作方式有些区别。举个例子,当代码审查时,我喜欢看原始 diff 输出,并列窗口显示 diff 对我并不适用,而且还容易让人分心。有修改的代码行上用符号 + 和 – 比用不同背景色标注也要好太多,并不是因为我不能获知颜色名字,而是因为在新增的一行中,读“加”这个字比读“带复杂阴影的高亮红色”用更短的时间。(嘿,我说你呢 Gerrit (一款代码审查工具))

你或许会认为缩进和其他代码格式和我无关,因为都是基本的视觉问题。并不是这样,正确的缩进对我的帮助和正常开发者一样。当我用盲文(比语音更加高效)读代码时,我像其他正常程序员一样清楚代码结构。当我进入一段有缩进或无缩进的代码时,我也会得到语音提醒。这些信息帮助我在脑中描绘代码结构。事实上我学的第一门语言就是 Python (PHP 不算),它强制使用代码缩进,这对我来说并不是问题。我有众多理由来强烈建议使用整洁统一的代码风格,其中之一就是不要让我的生活变得更加艰难了,好吗。

你喜欢哪款编辑器?

剧透一下:这个答案并不是以 V 或者 E 开头(我虽然通过命令行用 Vim 来写 git commit 信息和其他备注。我认为我在这场圣战中是中立的)(译者注:Vim 和 Emacs 梗)一年前我认为 Notepad++ 最棒,它是轻量级的做工精细的文本编辑器。然而一年前我还没有接触大规模 Java 项目,当我接触这种项目时,意味着我应该在 Notepad++ 和理智之间做个选择。最后我选择理智,抛弃 Notepad++ 转投 IntelliJ IDEA 的怀抱。从那之后 IntelliJ IDEA 便是我首选编辑器。我曾对各种 IDE 有深深怨念,它们大多数在纯键盘流操作下麻烦又低效。如果我视力没问题,我肯定早就跳到 IDE 阵营了。

但你可能会问,为什么当初选 Notepad++。还有其他很多更先进的轻量级编辑器,比如 Sublime 或 Atom。原因很简单:屏幕阅读器无法访问它们。Vim 一类的文本编辑器也是如此,我使用的屏幕阅读器对命令行程序的支持有问题,在这些编辑器上无法处理多于 commit 信息的文本。很遗憾,可用性决定了我能够使用的工具。即使我不能高效工作,也不是什么大问题。

你编写过前端代码吗?

你应该认为前端开发和视觉有关,注定与盲人程序员无缘。基本上是这样。我从来不自己做概念原型,我做都是有界面,需要随后加入功能的项目。

然而,我也做过 Angular 和 React 工作任务。怎么会这样?如今很多 APP 基于浏览器。举个例子,我曾花费两周时间为一个 Angular APP 增加国际化支持。我并不需要做任何视觉上的改动。

我发现对于我这类开发者开说,像 Bootstrap 这类的库简直是上天的礼物。正因为栅格系统(Bootstrap的响应式布局解决方案),我可以自己构建一个粗糙的界面。尽管如此,我做的有关界面的改动在呈现给用户之前仍然要有一双眼睛检查。所以,总而言之,我可以在一定程度上做些前端开发,至少不是和表现层太相关。




Parham Doustdar,PHP 程序员


我是一名盲人 PHP 开发者。


640?wx_fmt=jpeg


我生来就是失明的。我眼睛的状况其实并不重要,重点是,我从未有过 “失去视力” 的问题,因为它不可能发生。这就使很多事情变得简单了。


我个人使用的开发工具是 IDE 。而很多盲人朋友并不使用 IDE,最可能是因为 IDE 的界面对于我们的屏幕阅读器来说并不是完全的无障碍。我们的同行有一个问题就是太忙了以致于只照顾到了大多数人而忽视了少数人的声音。举个例子,Jetbrains IDE 的整个系列都不是无障碍的。而版本 IDEA-111425 才是为盲人和有视觉障碍的人准备的无障碍开发工具。


我个人使用的是 Zend Studio,这是一款基于 Eclipse 的 IDE,大部分人可能都知道或者用过。Eclipse 是那些使你愉悦的产品之一,它的无障碍功能实现的非常好。虽然并没有完全实现无障碍,但是实现 80% 就已经够我使用了。作为盲人,你要学会使用你能够获得的来生活。


因此,这就使得我不必记忆方法签名,文档和其他所有的事情,从而使我的大脑可以更高效地去思考其他的事情–就像遗留代码库为什么会这么难理解。


我没有使用布莱叶盲文键盘。布莱叶键盘只有 6 个键,输入每一个字符都必须同时按住 6 个键,这就要比有很多键可以一个个快速按下的键盘慢很多。我也没有使用盲文显示器,我只是把屏幕阅读器的速度设为 420 个字每分钟,这要比用盲文显示器阅读要快得多。


我认为最重要的是,你必须要领先于你的同行。作为盲人,你先天就要很遭遇很多困难,因为你没有大多数人都有的视觉感官。这不会是个大问题,除非是我之前提过的多数人与少数人的对比。既然你是少数人,你就必须设法做到周围很多人认为是理所当然的事。 在这一点上,我相信力量是建立在你被禁用的能力之上的:由此你学习去提升自己,去前进,去打破不可能,而不是每天担心失业。


来自:程序员那些事

文章版权归原作者所有,转载仅供学习使用,不用于任何商业用途,如有侵权请留言联系删除,感谢合作。

640?wx_fmt=png


640?wx_fmt=png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android修改电量颜色,android状态栏电池颜色?

鸿蒙传说/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java在Intent.ACTION_BATTERY_CHANGED broadcast处理中调用fireBatteryLevelChanged()方法fireBatteryLevelChanged中会回掉BatteryStateChangeCallbackframewor…

access 战地1不加入ea_炒牛肉时,想要牛肉嫩滑又不老,只需加入1样东西,很多人都不懂...

炒牛肉时,想要牛肉嫩滑又不老,只需加入1样东西,很多人都不懂冬季滋补怎么能少得了牛肉,牛肉中含有非常丰富的营养成分,其中蛋白质的含量尤为丰富还有大量的氨基酸,能够提高身体的抗病能力,特别适…

张亚勤:PC之外的争夺战

文 / 陈振烨 尽管经常有公司抢走微软的风头,但当今世界,微软仍然是当之无愧的IT霸主。过去几个季度,微软各项核心数据非常给力,2011财年第一季度净利润54亿美元,营收162亿美元;而2010财年187.6亿美元的净利…

优化 ASP.NET Core Docker 镜像的大小

在这容器化的世界里,我们已经很少直接通过文件发布来运行asp.net core程序了。现在大多数情况下,我们都会使用docker来运行程序。在使用docker之前,我们往往需要打包我们的应用程序。asp.net core程序的镜像打包,网上有很多教程&a…

监督学习:KNN(K-近邻)算法实现手写数字识别的三种方法

没人会看的开场白:本来觉得自己从数据建模转人工智能方向应该问题不大(自我感觉自己算法学的不错)。结果一个K-邻近实现手写数字识别的代码就让我改了三四天。虽然网上这方面的代码是很多,但是我运行了好几个,结果都不…

xp怎样安装android-studio,Xposed 框架的安装

借鉴:安装流程:安装 雷电模拟器3.93下载安装xposed框架。xposed 框架在Dalvik 虚拟机和ART虚拟机上的安装不一样(至于ART虚拟机和Dalvik虚拟机的区别,可以参阅 文章)如果Android 版本不小于 5.0,就是ART版本的虚拟机,需…

在 .NET Core 5 中集成 Create React app

翻译自 Camilo Reyes 2021年2月22日的文章 《Integrate Create React app with .NET Core 5》 [1]本文演示了如何将 Create React app 与 .NET Core 集成,以生成一个移除了几个依赖项的脚手架。Create React app 是社区中创建一个全新 React 项目的首选方式。该工具…

程序员找不到对象是因为还没遇到一个有远见的丈母娘

当别人在放肆秀恩爱的时候,程序员单身狗们在角落里瑟瑟发抖。别人去网站相亲找到对象,程序员去相亲找到BUG。其实,你找不到对象是因为你还没遇到一个有远见的丈母娘。都说程序员很难找到对象,就知道整天对着键盘一直敲敲敲&#x…

WPF 如何将IconFont图标转成Geometry

之前每次使用IconFont图标,都要去下载一个png图片,每次颜色什么的改了,都要重新下载,太苦逼了。现在好了,终于找到如何方便快速地使用IconFont图标了。是应该的演示如何从IconFont网站上找到Geometry先看看效果吧&…

给所有想从事软件研发的年轻工程师的忠告与建议

图片来源:Fargo Season 3一、我为什么写这篇文章:这几天,在某个IT论坛的软件培训与认证栏目中,看到了很多处于迷惑之中的人们,也看到了许多大家普遍感到困惑的问题,写此文章的目的,是想将我这些…

谁今天收到鸿蒙系统推送,鸿蒙系统正式推送,只有部分高端机才能收到

原标题:鸿蒙系统正式推送,只有部分高端机才能收到华为已经对鸿蒙2.0系统开始进行推送更新,从华为推出鸿蒙系统概念已经时隔几年了,如今华为把ppt系统映射进现实是真正为自己正名了,而且据华为陈述鸿蒙2.0已经能达到安卓…

2020邮箱账号密码大全_通知 | 复旦大学2020年春季学期研究生选课FAQ

1选课须知1. 研究生选课系统什么时间开放? 答:2020年春季学期研究生选课系统开放时间为:2020年2月19日(周三)10:00至2020年3月9日(周一)10:00。2020年3月9日(周一)10:00后,研究生可以在选课系统中查询课表、已选课程、学分获得情况…

如何从零开始构建深度学习项目?这里有一份详细的教程

导读:在学习了有关深度学习的理论之后,很多人都会有兴趣尝试构建一个属于自己的项目。本文将会从第一步开始,告诉你如何解决项目开发中会遇到的各类问题。本文由六大部分组成,涵盖深度学习 ( DL ) 项目的整个过程。我们将使用一个…

性能分布式NewLife.XCode对无限数据的支持

上周发布了《改进版CodeTimer及XCode性能测试》,展示了NewLife.XCode在性能上的表现。实际上NewLife.XCode是一个很平凡的ORM,只是在分页和缓存方面多下点功夫,注意每一个细节,才能保证在数据量大、业务繁忙的环境中得以保持良好的…

C#实用小知识:string和判断null

stringstring是常用的类型,它具有不可变性:就是一旦赋值,就不可变,如果再赋值 ,就重新开辟内存空间;保留性:如果一个字符串存在,另一个与其相同,他们会指向同一个地址&am…

.net html5页面缓存,详解HTML5中的manifest缓存使用

起源html5之前的网页,都是无连接,必须联网才能访问,这其实也是web的特色,这其实对于PC是时代问题并不大,但到了移动互联网时代,设备终端位置不再固定,依赖无线信号,网络的可靠性变得…

机器学习的最佳学习路线原来只有四步

AI这个词相信大家都非常熟悉,近几年来人工智能圈子格外热闹,光是AlphoGo就让大家对它刮目相看。今天小天就来跟大家唠一唠如何进军人工智能的第一步——机器学习。在机器学习领域,Python已经成为了主流。一方面因为这门语言简单易上手&#x…

ASP.NET Core Filter如何支持依赖注入

概述通过使用 ASP.NET Core 中的筛选器,可在请求处理管道中的特定阶段之前或之后运行代码。内置筛选器处理任务,例如:授权(防止用户访问未获授权的资源)。响应缓存(对请求管道进行短路出路,以便…

做流向图_各类型供热暖系统图大全,一饱眼福!

↑ 点击上方“暖通风向标”关注我们推广.暖通风向标本文来源:制冷网好书推荐做热泵这几本书你不得不看!区域供热系统热电联产系统地热水供暖系统即热式生活热水系统即热式特点:可保证用户随时随地均有热水供应,系统紧凑,无需储罐&…

怎样和程序猿谈一场不散场的爱情

这篇文章就教你如何优(xin)雅(ji)的驯服程序猿男友。先分享2个网友的养猿故事。对于程序员,大家想必会有这么一个印象:生活简单乏味,除了编程、吃饭、睡觉,就是上网、打游戏或者一副…