«Чего-то здесь не хватает». Спорим, что такая мысль первой придёт в вашу голову, если вы увидите моё рабочее место в офисе. Здесь нет монитора и мыши. Есть только парень, который молотит по клавиатуре, глядя словно в пустоту.
Это всего лишь я, и мои коллеги гарантируют вам, что я обычно не опасен. Я программист в офисе компании Vincit в Тампере (Финляндия). И ещё я слепой. В этой статье хочу немного рассказать, как я работаю.
Ты полностью слепой или практически слепой?
Верно. Я могу воспринимать солнечный свет и некоторые очень яркие лампы, но это всё. В сущности, ничего полезного для работы.
Что ты там тогда делаешь?
То же, что и все: делаю софт и подшучиваю над коллегами, если время позволяет. Я работал над full-stack веб-проектами с фокусом на бэкенде. Я также взял на себя роль консультанта по общей доступности проектов для людей с ограниченными возможностями — или роль полиции; в зависимости от того, как посмотреть.
Как ты используешь компьютер?
У меня совершенно обычный ноутбук под Windows 10. Вся «магия» в софте. Для доступа к компьютеру я использую программу, которая называется скринридер. Он перехватывает картинку с экрана и представляет информацию в азбуке Брайля (через отдельный брайлевский дисплей) или синтез речи. И это не та синтетическая речь, которую вы слышите от нынешних цифровых помощников. Я использую роботизированный голос, который произносит примерно 450 слов в минуту. Для сравнения, носители английского языка обычно произносят 120-150 слов в минуту. В моей системе есть одна особенность: поскольку мне нужно регулярно читать и на финском, и на английском, то я читаю английский с финским синтезатором речи. В прежние времена скринридеры были недостаточно умны, чтобы автоматически переключаться между языками, так что я привык к такому чтению. Вот пример этого параграфа так, как я его слышу. А вот тот же текст через англоязычный синтезатор речи.
Естественно, мышь не особенно мне полезна, так что я работаю только с клавиатурой. Мои клавиатурные команды должны быть знакомы каждому, кто читает эту статью: стрелки, клавиша Tab для навигации внутри окна, Alt+Tab для переключения между окнами и т.д. Ещё у скринридеров есть много собственных «горячих клавиш», например, для чтения разных частей активного окна, включения/выключения некоторых собственных функций.
Всё становится немного интереснее при чтении веб-страниц и других форматированных документов. Скринридер даёт эту информацию кусками. Этот кусок чаще всего бывает строкой, но может быть словом, символом или другим произвольным фрагментом текста. Например, если я нажму клавишу «вниз» на веб-странице, то услышу следующую строку текста. Такой тип чтения означает, что я не могу просто просканировать содержимое экрана таким же способом, как это делает зрячий. Мне приходится читать всё кусок за куском или пропускать куски, которые мне не нужны.
Одни лишь речь или Брайль не позволяют точно передать, как выглядит страница. Вся информация выдаётся мне линейным образом. Если вы скопируете веб-страницу и вставите её в «Блокнот», то получите общее впечатление, как она выглядит для меня. Это просто куча строк друг на друге почти без форматирования. Однако скринридер может подобрать семантику из HTML, так что ссылки, заголовки, поля форм и прочее корректно мне объявляется. Это так: я не знаю, что чекбокс является чекбоксом, если его стиль не прописан таким образом. Однако подробнее об этом поговорим позже; я посвящу целую статью этой теме. Просто помните, что приведённый мной пример — это преступление против человечества.
Значительную часть своего времени я провожу в командной строке. На самом деле я редко использую какие-нибудь графические приложения, кроме веб-браузера и редактора. Я обнаружил, что часто гораздо быстрее выполнить задачу вручную в командной строке, чем использовать интерфейс, который спроектирован с мыслью о пользователях мыши.
Итак, учитывая мою любовь к командной строке, почему я застрял на Windows, операционной системе, которая не славится своими инструментами командной строки? Ответ прост: Windows — самая доступная система [для людей с ограниченными возможностями — прим. пер.]. Мой любимый скринридер NVDA — это свободный софт, он поддерживается более активно, чем любой другой скринридер. Если бы у меня бы выбор, я бы использовал Mac OS, по-моему, там аккуратный баланс между удобством и функциональностью. К сожалению, скринридер для этой системы VoiceOver страдает от долгих релизов и общей запущенности, а его модели навигации не очень совместима с моим конкретным стилем работы. Есть также скринридер для десктопа Gnome и хотя он великолепно поддерживается для столь малой аудитории пользователей, там всё ещё остались острые углы, из-за чего он не подходит мне для постоянного использования. Так что только Windows. Я компенсирую присущие недостатки этой ОС тем, что живу внутри Git Bash, который поставляется с отличным набором GNU и других утилит командной строки сразу из коробки.
Как ты можешь кодировать?
Мне понадобилось довольно много времени, чтобы понять, почему этот вопрос настолько важен для многих людей. Помните, что я раньше говорил о чтении текста строчка за строчкой? Так я читаю код. Я пропускаю ненужные строчки или может прослушиваю только половину ради контекста, но если мне действительно нужно разобраться, то я читаю всё как роман. Естественно, я не могу прочитать таким способом гигантскую кодовую базу. В этих случаях приходится абстрагировать части кода в уме: этот компонент принимает x на входе и возвращает y, неважно, что он реально делает.
Такой тип чтения вынуждает меня выполнять некоторые задачи иначе, чем мои зрячие коллеги. Например, в процессе инспекции кода я предпочитаю смотреть на выдачу raw diff по возможности. Диффы side-by-side не очень полезны для меня, на самом деле, они даже отвлекают. Знаки «плюса» и «минуса» тоже гораздо лучший индикатор изменённых строк, чем выделение цветом. Не потому что я не могу прочитать названия цветов. Просто «плюс» произносится быстрее, чем название какого-то замысловатого оттенка красного, который используется для добавленной строки. (Я смотрю на тебя, Джеррит).
Вы можете подумать, что отступы и другое форматирование останется полностью незаметным для меня, поскольку это визуальное выделение. Неверно: правильные отступы помогают мне точно так же, как зрячему программисту. Если я читаю код в Брайле (кстати, это гораздо эффективнее, чем речь), то это даёт хороший визуальный ключ, где я нахожусь, точно так же, как и зрячему программисту. Я также получаю голосовые сообщения, если вхожу в блок текста с отступом или без. Эта информация помогает отрисовать карту кода в голове. На самом деле первым настоящим языком программирования у меня был Python (PHP не считается), с тех пор отступы никогда не являлись проблемой. Я настоятельно выступаю за чистый и последовательный стиль программирования по многим причинам, но главным образом потому что это не усложняет до предела мою жизнь.
Какой редактор ты предпочитаешь?
Спойлер: ответ на этот вопрос не начинается ни с буквы V, ни с E. (Само собой, я использую Vim для составления сообщений о коммитах git и других быстрых пометок в командной строке. Я придерживаюсь нейтралитета на этом конкретном минном поле). Год назад среди всех редакторов я бы выбрал Notepad++. Это лёгкий, хорошо спроектированный текстовый редактор, который делает своё дело. Однако год назад я ещё не работал над крупномасштабным Java-проектом. Когда это всё-таки случилось, пришло время выбирать между Notepad++ и здравым смыслом. В итоге я склонился ко второму (на то время, какое смогу) и бросил Notepad++ ради IntelliJ IDEA. С тех пор это мой избранный редактор. У меня глубоко укоренившееся отвращение ко всем IDE, потому что большинством из них или невозможно, или неэффективно пользоваться только с клавиатуры. Скорее всего, я бы перешёл на IDE гораздо раньше, если бы был зрячим.
В можете спросить, почему я выбрал Notepad++. Есть же более продвинутые легковесные редакторы, такие как Sublime Text или Atom. Ответ простой: ни один из них не доступен для скринридеров. Текстовые редакторы вроде Vim тоже не вариант, потому что у моего скринридера некоторые проблемы с поддержкой консольных приложений, из-за которых эти редакторы невозможно использовать для чего-то более крупного, чем сообщение о коммите. К сожалению, доступность [для незрячих — прим. пер.] — это главный фактор для моих инструментов. Если я не могу использовать инструмент эффективно, то он уже не рассматривается.
Ты когда-нибудь работал с кодом фронтенда?
Вы можете подумать, что фронтенд-разработка настолько визуальна по своей природе, что здесь нет места слепому разработчику, и по большей части так и есть. Я сам не создаю базовые концепты, потому что в этих проектах нужно, в основном, создать правильный вид, а функциональность добавляется позже.
Однако у меня тоже есть кусок работы в Angular и React. Как так? Во многих современных веб-приложениях значительная часть работы выполняется под капотом в браузере. Например, однажды я пару недель внедрял поддержку интернационализации в довольно сложное приложение Angular. Там не было вообще никакой визуальной работы.
Я обнаружил, что библиотеки вроде Bootstrap — настоящая находка для меня. Благодаря грид-системе я могу сам сделать базовую версию пользовательского интерфейса. Несмотря на это, все подготовленные мной изменения интерфейса проходят через пару глаз, прежде чем поставляться в продакшн. Итак, подводя итог: я могу работать с фронтендом до определённой степени, по крайней мене, не особо трогая уровень представления.
Что насчёт вещей, о которых ты не рассказал?
Определённо, многие вещи пришлось оставить за рамками этой статьи. Как и обещал, я посвящу статью искусству делать веб-страницы более доступными, поскольку отсутствие правильной семантики — моя любимая мозоль. Но есть большая вероятность, что я на этом не остановлюсь. Будем на связи!
Автор: m1rko