Андреас Стефик (на фото справа) — преподаватель, в настоящее время преподающий в Университете Центрального Вашингтона (CWU). В следующем году он начинает преподавать в качестве доцента в Университете Южного Иллинойса в Эдвардсвилле (SIUE). Его основная область интересов и исследований — разработка пользовательских языков программирования и компиляторов.
Несколько лет назад, когда он искал тему диссертации, он заинтересовался небольшим сообществом слепых талантливых программистов. Ему было любопытно, как они выполняли свои ежедневные обязанности по программированию.
Ниже следует интервью с ним на тему инструментов программирования для слепых программистов и решений, созданных на платформе NetBeans Андреасом и студентами CWU.
Андреас, как ты заинтересовался созданием лучших инструментов для слепых программистов?
Данные переписи населения США показывают, что люди с сенсорными нарушениями находятся в значительном неблагоприятном положении в американской рабочей силе. Например, для слепых людей использование существующих IDE часто невероятно сложно, что затрудняет поиск работы на и без того конкурентном рынке. В среднем слепые люди живут в большей бедности, имеют меньшую вероятность быть в составе рабочей силы и получать меньший средний доход.
Мне было любопытно, возможно ли компьютерное программирование для слепого человека, учитывая правильные инструменты, и решил попробовать создать лучшие инструменты, которые могли бы дать некоторым из этих пользователей потенциал для высокооплачиваемой карьеры. В течение нескольких лет я работаю над созданием и тестированием инструментов программирования для слепых, которые, надеюсь, сделают их более доступными. Эти инструменты очень сложны, поскольку в них используются настраиваемые компиляторы, отладчики и звуковые архитектуры, встроенные в стандартные IDE, такие как NetBeans или Visual Studio.
Этот интерес пересекается с платформой NetBeans. Вы даже обучали своих студентов использованию платформы NetBeans. Как все это произошло?
Разработка учебного плана и выбор преподавания информатики в университете — сложное дело. Как вы, вероятно, можете догадаться, это во многом потому, что количество технологий действительно устрашающе! Хуже того, нет волшебного гуру, который говорит профессорам, какие технологии важны, не говоря уже о том, на какие из них мы должны посвятить время занятий. Профессора часто спорят об этом бесконечно, что, вероятно, является вполне разумным способом решения проблемы. В CWU, и я представляю большинство мест, мы стараемся сосредоточиться на концепциях, а не на архитектуре конкретной платформы, такой как NetBeans, Visual Studio или Eclipse.
С учетом вышесказанного, несколько лет назад мы внесли изменения в учебную программу на основе Java (с C ++), и часть этого перехода сменилась на IDE на основе Java. Мы используем jGrasp для наших начальных классов и IDE NetBeans для еще нескольких. Однако для большинства из этих классов мы слишком заняты сосредоточением внимания на деталях алгоритмов или структур данных, чтобы сосредоточиться на деталях платформы NetBeans.
Но то, как я попал в платформу NetBeans, связано с моим проектом слепого программирования. Каждый год в CWU проходит курс по разработке программного обеспечения, который длится около 20 недель: 2 академических квартала. В этом курсе мы рассылаем сообщения членам местного сообщества с просьбами о проектных предложениях и выбираем те из них, которые, по нашему мнению, соответствуют нужным трудностям для конкретных студентов в этом году. Затем студенты подают резюме, подают заявки на различные предложения, и мы назначаем совместные команды.
В прошлом инструменты, над которыми я работал для слепых, были в основном доморощенными архитектурами компиляторов и отладчиков, которые я писал сам в свое свободное время. Это отлично работает для проведения экспериментов и исследования эффективности окружающей среды, но это не особенно практично. Таким образом, в этом году я решил сделать решающий шаг и переписать свою архитектуру в рамках нашего курса по разработке программного обеспечения на платформе NetBeans.
Вот снимок экрана с окружающей средой в целом, снабженный деталями того, что мы добавили. Обратите внимание, что хотя снимок экрана выглядит как NetBeans, мы добавили новый язык программирования (Hop). Кроме того, наш отладчик «всезнающий», что означает, что вы можете выполнять код вперед и назад. Например, в большинстве отладчиков вы можете нажать продолжить (зеленая кнопка) и перейти к следующему пункту останова. В нашем случае вы также можете перематывать (синюю кнопку) на предыдущую точку останова. Точно так же большинство IDE позволяют вам
перешагнуть через строку кода. Наш также позволяет вам отступить .
Этот проект был начат с командой из четырех студентов: Брок Дунда, Эндрю Хейвуд, Шазада Мансур и Даниэль Гарсиа, и вместе мы создали среду под названием « Sodbeans » или «Sonified Omniscient Debugger в NetBeans». Учащиеся и я в первую очередь углубились в архитектуру NetBeans без какого-либо опыта. Студенты проделали действительно фантастическую работу.
Каким был ваш опыт использования платформы NetBeans?
Когда мы начинали эту часть проекта слепого программирования, все работающие над ним студенты использовали IDE NetBeans, но никто из нас не обладал более чем базовыми знаниями об архитектуре NetBeans. Я полагаю, я должен готовиться; Я знаю Java в течение очень долгого времени, более десяти лет, поэтому у меня есть достаточно хорошие знания языка и API. Однако знание API Java не обязательно полезно для изучения API-интерфейсов NetBeans. Поэтому, отвечая на ваш вопрос, я бы сказал, что начал изучать платформу NetBeans примерно в сентябре 2008 года. За последний год я многому научился, но вряд ли я эксперт.
Изучение платформы NetBeans не так просто, как изучение Java или другого языка программирования. Иногда онлайн-уроки дают нам подсказку о том, что нам нужно знать, чтобы завершить то, над чем мы работаем в данный момент, но чаще всего мы застреваем и попадаем в списки рассылки. Как и все списки рассылки, они попали и пропустили, но намного лучше, чем ничего. Я также думаю, что очень важно работать в команде над проектами при изучении такого сложного API, как NetBeans. Таким образом, когда (не если) вы застряли, вы можете спросить друга.
Каковы основные части, которые предоставляет ваш пользовательский инструмент для слепых программистов?
Наш пользовательский инструмент включает в себя инструменты для нашего 1) настраиваемого компилятора, 2) настраиваемых механизмов преобразования текста в речь, 3) настраиваемой архитектуры отладчика и ряда других второстепенных компонентов,
таких как интеграция в окно параметров и добавление настраиваемых окон и элементов меню. Например, вот снимок экрана с опциями преобразования текста в речь, которые мы допускаем:
Давайте теперь поговорим об основных концептуальных камнях преткновения, которые у вас были, когда вы начинали работать с платформой NetBeans.
Во-первых, я должен сказать, что платформа NetBeans, вероятно, является лучшей из основных платформ IDE, которые я использовал. На данный момент я использовал Visual Studio, NetBeans и, в гораздо меньшей степени, платформы Eclipse для расширения соответствующих IDE. На мой взгляд, платформа NetBeans, вероятно, является самой чистой и лучше всего документированной из всех. С учетом вышесказанного любая IDE является сложной, и я думаю, что наиболее сложными для понимания платформой NetBeans являются: 1) поиск, 2) зависимости модулей и 3) особенности использования платформой NetBeans XML.
Поиски привели нашу команду в тупик, прежде чем мы поняли, как ее использовать. Чтобы было ясно, идея поиска очень проста: вы «что-то ищите». Это очевидно. К сожалению, из какой-либо существующей документации довольно не очевидно: 1) что вы ищете, 2) когда вам нужно искать вещи, и 3) как вы ищете что-то, и, наконец, 4) почему вам нужно что-то искать вверх.
Позвольте мне привести очень конкретный пример. Мы хотели написать свой собственный отладчик и интегрироваться в графический интерфейс NetBeans. В идеале мы хотим, чтобы он функционировал аналогично отладчикам для других языков, с некоторыми улучшениями доступности для слепых. Мы также хотели, чтобы наш отладчик не мешал отладчику для других языков. Другими словами, мы хотим, чтобы наш пользовательский язык легко интегрировался с остальными языками NetBeans, за исключением того, что при загрузке нашего языка он дает слуховую обратную связь пользователю в соответствии с указанным нами способом (который был тщательно протестирован в формальных статистических экспериментах).
Наша первая мысль о том, как решить эту проблему, заключалась в том, чтобы найти API, который подключается к отладчику в NetBeans, и либо обработать его информацией из нашего компилятора, либо манипулировать им иным способом. В обычных приложениях Java это обычно означает, что вы выполняете импорт, создаете экземпляр объекта или ссылаетесь на некоторый статический объект, а затем каким-то образом манипулируете объектами. Дело в том, что, пытаясь выяснить, «что искать» для управления отладчиком, нам было трудно понять, как нам найти то, что нам нужно для поиска, и контекст, в котором это сделать. В конце концов, мы не воспользовались этим подходом, так как наш собственный компилятор и отладчик в итоге создали свои собственные панели инструментов и окна (предложенные нам некоторыми людьми из списка рассылки), и этот подход хорошо работал, с несколькими ошибками.
Но с точки зрения поиска, моя точка зрения заключается в том, что учебники по поиску часто говорят, что вы передаете класс механизму поиска, и он будет возвращать экземпляр объекта, но не так просто найти, что искать для любого конкретного приложения (если только приложение просто упоминается в одном из учебных пособий ). Было бы неплохо, если бы был ресурс, который перечислял бы основные возможности NetBeans и сообщал программисту, какие классы вы ищете, чтобы сделать что-то полезное (например, манипулирование встроенным отладчиком для данного языка, выполнение вызовов для других частей платформы). ).
ОК, это был поиск. А как насчет зависимостей?
Помимо поиска и прежде чем что-либо делать в платформе NetBeans, вам также необходимо понять зависимости объектов. Стратегия обычно выглядит следующим образом: 1) выяснить, от какого модуля вам нужно зависеть (если есть), и 2) выполнить поиск того, что вам нужно. По сравнению с типичной Java, модули в NetBeans должны устанавливать явные зависимости для доступа к функциональности этого модуля. С философской точки зрения это звучит как хорошая идея, потому что вам не нужно беспокоиться о внутренних изменениях модуля в следующей версии API.
К сожалению, буквально каждый студент, с которым я работал над этим и другими проектами в платформе NetBeans, был полностью сбит с толку правилами зависимости модулей. Я предполагаю, что это потому, что зависимости модулей не являются «визуально очевидными» в NetBeans. Эти зависимости находятся глубоко в свойствах модуля, над которым вы работаете. Они критически важны для работы модулей NetBeans, но вряд ли очевидны в IDE.
Благодаря зависимостям мы также продолжали сталкиваться с тем, что NetBeans называет «Ошибки ошибок». Большая часть информации, которую мы смогли найти по этим ошибкам, пришла от онлайн-форумов от разработчиков, которые казались такими же запутанными, как и мы, но суть в том, что они временно остановят компиляцию нашего проекта. В нашем случае выгрузка и перегрузка наших зависимостей обычно, казалось, волшебным образом решали проблемы, хотя мы так и не выяснили, почему они вообще произошли, и, казалось, никогда не находили хороший ресурс или учебник по ним. Это всего лишь одна из многих проблем, которые, похоже, возникали с зависимостями на протяжении всего проекта.
И другие ваши проблемы, связанные с XML, используемым платформой NetBeans.
В платформе NetBeans вы пишете файлы XML (иногда называемые файлами слоев). Изменяя XML, вы можете указать действия или другие способы взаимодействия со средой. Концептуально это расширяемо и имеет смысл. Однако документацию по XML найти сложно. Мы потратили много часов на поиск правильных «волшебных ключевых слов», которые говорят NetBeans, что делать. В Интернете есть много примеров того, как это сделать, но нам было трудно найти какую-либо общую документацию о том, какие слова использовались в XML и в каком контексте их использовать.
Например, предположим, что вы хотите добавить действия для «желоба» в пользовательский редактор (например, рисунок для точки останова). Что вы меняете в XML? Должны ли вы даже использовать XML или поиск? Нужна ли вам зависимость от модуля перед изменением XML; прежде чем делать поиск? С точки зрения XML, мы помещаем то, что ниже, в так называемый файл слоя:
<filesystem>
<folder name="Editors">
<folder name="text">
<folder name="x-hop">
<folder name="GlyphGutterActions">
<file name="org-teambeans-sodbeans-actions-ToggleBreakpointAction.shadow">
<attr name="originalFile" stringvalue="Actions/Debug/org-teambeans-sodbeans-actions-ToggleBreakpointAction.instance"/>
<attr name="position" intvalue="500"/>
</file>
</folder>
</folder>
</folder>
</folder>
</filesystem>
Если вы посмотрите на вышесказанное, вам нужно определить, к каким действиям в канавке обращаются, сначала указав тег файловой системы XML, а затем последовательность из четырех тегов, помеченных как папка (Editor, text, x-hop, GlyphGutterActions). Затем вы указываете ряд действий, которые будут предприняты для действия желоба. Использовать XML легко, но очень трудно понять, какие слова использует NetBeans для описания чего-либо, например, действий с желобами. Хуже того, слова меняются иногда в новых версиях IDE! Было бы неплохо, если бы при вводе символов «<folder =» NetBeans заполнял intellisense тем, какие варианты слов вы можете использовать, и объяснением того, что делает каждый из вариантов. На данный момент, тем не менее, он просто говорит «нет предложений».
Некоторые из ваших последних замечаний следует преодолеть с помощью введения аннотаций в платформе NetBeans 6.7 . Наконец, каково текущее состояние инструментов для слепых программистов?
Я определенно рад играть больше с 6.7 и посмотреть, что вы, ребята, придумали! Что касается инструмента, учащиеся завершили альфа-версию, готовую к демонстрации, версию инструмента весной. С тех пор несколько студентов закончили обучение и ищут работу, но проект продолжается и недавно стал открытым. У нас есть веб-сайт и страница sourceforge. У нас также есть ряд чрезвычайно талантливых и опытных слепых программистов, которые так или иначе помогают нам в проекте. Это был большой опыт, и я с нетерпением жду продолжения работы и изучения платформы NetBeans.
Вот ссылка на нашу страницу sourceforge:
https://sourceforge.net/projects/sodbeans/
И вот ссылка на нашу веб-страницу:
http://sodbeans.sourceforge.net/
Спасибо Андреасу и держите нас в курсе прогресса с этим полезным расширением IDE NetBeans!