Гумано-ориентированное программирование. Часть первая

Habrahabr 2

Пост пишется в качестве вводного в контексте обещанного не так давно курса. Я считаю, в этом есть смысл. Итак.

Всякая профессия начинается не с инструмента, но со взявших его рук. Так и программирование начинается не с Hello, world и даже не с того, как вы сели на стул. И даже не с того, как вы приобрели машину. Но с того, как вы сформулировали проблему, которую хотите решить. Если вы не хотите решать проблемы людей при помощи автоматизации, то программирования — не ваша работа.

Всякая профессия призвана по своей сути решать чужие проблемы, компенсируя чужую лень делать что-то. И особняком в ряду стоит программирование, потому что оно — суть автоматизация труда или чего-то другого, будь то общение или развлечения. Врач оперирует. Программист — пишет алгоритм для робота, делающего операции. Архитектор чертит чертёж — программист пишет программу, которая по чертежу создаст модель здания и просчитает его поведение, включая поправки на ветер, коммуникации, распределение нагрузок на опоры и так далее.

Геолог ищет нефть. А что делает программист? Пишет программу, которая по геологическим данным будет прогнозировать расположение месторождений. Наконец, бухгалтер вводит финансовую операцию — и хорошая база данных 1С вместе с конфигурацией посчитают налоги по актуальному законодательству и сведут дебет с кредитом, а плохая конфигурация — сами понимаете. И так далее — практически во всём.

Откуда вывод: программирование — сложнейшая инженерная область. Потому, что задача программиста — автоматизация любого труда. Причём задача эта — сделать программу не только быстрой и эффективной, но и удобной. Неудобная программа требует больше времени на освоение и привыкание, чем удобная, но медленная — на работу.

К примеру, браузер А грузит страницу медленнее, чем браузер Б, на полсекунды. Но у браузера А неудобная навигация и пользователь каждый раз, каждый раз тратит своё время и нервы (а это самое драгоценное для нас) на эти чёртовы неудобные кнопки! А психологический комфорт использования переоценить сложно. Это всё я говорю к тому, чтобы особенно подчеркнуть важность человека и его проблем в принципе. Я говорю совершенно очевидные вещи, чтобы вывести их на сознательный уровень.

И вот свежайший, буквально сегодняшний смешной пример «Из жизни эникея». Мой племянник играет в игру с использованием OpenAL. Он нечаянно вырвал наушники из гнезда, совсем на чуть-чуть, и, конечно, OpenAL на чистом английском пожаловалась, что не может создать устройство. «Какая жаль!» Всем бы жилось легче, если бы сообщения об ошибках были локализованы и человекопонятны, то есть — с учётом хотя бы простейшей наиболее распространённой проблемы пользователя, пользователя, чёрт возьми! Благо OpenAL — OpenSource и я могу вместо того, чтобы просто жаловаться, взять и предложить фикс. Например, так: «OpenAL не может создать устройство. Проверьте соединение с динамиками или наушниками, неполадки с аудиоустройствами». А ныне мне пришлось идти и смотреть на иконку отключенного устройства в Windows. А если бы это было учтено, то сказывалось бы на доверии к продукту наилучшим образом.

И именно это — ориентир на человека — то, чему нужно учить абсолютно любого джуниора в первую очередь, а вовсе не Hello, world. Программы пишутся для людей, а не для того, чтобы показать, какие мы умные и что мы «могём», а точнее — могем.

Кстати, принимаю рекомендации по удобочитаемоссти статьи, сокращения, обобщения и так далее. Пишу для людей. Ещё пример, следующего дня. Windows-программа diskpart. Как известно, в виндоус принято вызывать хелп вот так: /?

DISKPART> create partition /?

Microsoft DiskPart, версия 10.0.14393.0

EFI - Создание системного раздела EFI.
EXTENDED - Создание расширенного раздела.
LOGICAL - Создать логический диск.
MSR - Создание резервного раздела Майкрософт.
PRIMARY - Создание основного раздела.

DISKPART> create partition logical /?

Для этой команды указаны недопустимые аргументы.
Чтобы получить дополнительные сведения о данной команде, введите HELP CREATE PARTITION LOGICAL

Вам это не кажется странным? Мне тоже. Напоминает статью про PHP — фрактал плохого дизайна, где нет строгой конвенции именования функций. Ещё веселее, когда запускаешь cmd и делаешь что-то вроде

cd c:\ && dir /b/s | findstr "\.docx$" > list.txt && list.txt

И, конечно, имена файлов на русском из-за дефолтной кодовой страницы 866 превращаются в чушь. И, конечно, я могу исхитриться и сделать удобно (и снова, конечно же, я знаю об Everything и она у меня стоит), но — так или иначе — это не отменяет проблему, а такие вещи снижают уровень доверия к системе, уровень её разумной предсказуемости. И это — моё время, моя жизнь и я как клиент заплатил деньги за то, чтобы мне было удобно и хорошо. Соответственно, совершенно другое отношение к OpenSource: нашёл ошибки или неудобство, сообщи как минимум, как максимум сделай исправление сам. И скажи спасибо, что тебе чужой труд достался вообще даром…

Кроме того, когда человек чувствует, что продукт сделан для него, это порождает синергию, новые идеи. Например, прекрасный в своей парадоксальности сервис будист, так лии иначе решает проблему пробуждения и да, проблему одиночества для одиноких. И фактически из-за человеческого отношения становится ещё и сетью знакомств, наверняка гораздо более эффективной в сравнении с типичными решениями, хотя, конечно, выверенных данных у меня нет, но это понятно интуитивно.

Так фейсбук, решающий в начале проблему общения сокурсников, стал одним из решений для взаимодействия в принципе, синергией порождено, например, такое понятие, как маркетинговый аккаунт. А почему? Потому, что людям удобно и хорошо! И захотелось ещё удобнее… И вообще, абсолютно любой успешный стартап решает проблему. Делая это быстро, приятно, с комфортом. И в этом смысле, когда я запускаю diskpart, я ожидаю от программы запрос: «Для режима мастера нажмите M, для режима строки нажмите ВВОД». При выборе режима мастера программа опрашивает меня и делает конкретную операцию. Быстро и удобно. Профит! И доверие к системе повышается, и зная, что она удобная, начинаешь рекомендовать её, и так далее…

Да, да, конечно же, существуют вещи сложнее, чем создать пару разделов на диске и при работе с зеркалами томов и массивами дисков целесообразно использовать сценарии diskpart. Но так или иначе всё сведётся к человеку, использующему программу. И если это простой пользователь, узнавший о преимуществе разбиения дисков, то разумно ему предложить мастер, а если это администратор парка машин с космическим количеством дисков, то для него разумно предложить IDE разработки сценария и их шаблоны.

И, кстати, во всём этом — одна из главных проблем освоения компьютера как такового. Люди старшего поколения «автоматически» доверяют всё знающим людям, понимая, что давно отстали от прогресса. Знаюшие люди — программисты. И вот человек садится за ту же Windows… и понимает, что перед ним — экран с какими-то картинками. Никаких пояснений. Хотя, чёрт возьми, «интуитивно понятный интерфейс»! А человек понятия не имеет, что со всем этим делать и чувствует себя «динозавром». Совсем другое дело, когда ОС загружается и при соответствующих настройках (предполагающих, например, что за компьютер сел пенсионер) показывает вводный ролик: мол, вот вам мышь, вот вам экран, вот так мышь управляется… Но ничего этого (по моему опыту, поправьте меня, если я не прав) зачастую нет, было в Vista и в школьных редакциях ALT Linux — тоже есть. И это очень радует.

Люди старшего поколения считают программистов компетентными. Да. А теперь представьте, что вот такой человек столкнулся с банально неудобной программой. Что тогда делает человек? Пугается! И это нормальная реакция… И тут надо сказать, что лет через 40 мы с вами будем «динозаврами» куда большими: прогресс ускоряется… Помните об этом. Особенно хорошо помните об этом, когда делаете интерфейс. Давайте будем заботиться о людях.

Во второй части я напишу о том, как программист может позаботиться о себе. Об организации рабочего места и да, напомню лишний раз о здоровье и подходу к его сбережению. Безопасная работа с инструментом — естественная часть культуры в профессии, уважения к ней. И как, например, шахтёры работают в касках, мы — по крайней мере в идеале — должны работать в очках, защищающих глаза от утомительной сине-фиолетовой части спектра и со специально подобранным фокусным расстоянием.

Организация работы в условиях автоматизации — вопрос, на мой взгляд, очень интересный, важный и заслуживает отдельного внимания. Очень важно здесь не быть сапожником без сапог, используя все возможные блага, предоставленные программистам программистам. И только после этого, если вы чувствуете кайф от предоставленных возможностей, имеет смысл писать Hello, world и всё прочее. Если же вам скучно в автоматическом мире, если вы не получаете удовольствия от того, что «Оно работает!», то скорее всего программирование не для вас.

И, наконец, когда мы приступим к алгоритмам, структурам данных, к математике и всему остальному — упор будет сделан на людей. На мышление людей, сущность идеи, на то, как человек приходил к тому или иному решению проблемы. И это объективно даст гораздо больше понимания, (а значит — владения), чем просто рассказ, что есть вот такая структура данных (такие-то способы добавления и удаления элементов в ней) и такой-то алгоритм, а есть ещё кучка остальных… Примерно как в анекдоте: «Третий раз объясняю… сам уже понял, а они всё никак». Да, когда человек задумывается, как научить других, то учиться сам.

Очень надеюсь, что такой, ориентированный на человека подход окажется интересным и найдёт сторонников. Наверняка очень и очень многие люди так или иначе понимают изложенное. Это вполне очевидные вещи. И задача таких постов — просто закрепить их в сознании, напомнить о них.

У меня всё.