Пост пишется в качестве вводного в контексте обещанного не так давно курса. Я считаю, в этом есть смысл. Итак.
Всякая профессия начинается не с инструмента, но со взявших его рук. Так и программирование начинается не с 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 и всё прочее. Если же вам скучно в автоматическом мире, если вы не получаете удовольствия от того, что «Оно работает!», то скорее всего программирование не для вас.
И, наконец, когда мы приступим к алгоритмам, структурам данных, к математике и всему остальному — упор будет сделан на людей. На
Очень надеюсь, что такой, ориентированный на человека подход окажется интересным и найдёт сторонников. Наверняка очень и очень многие люди так или иначе понимают изложенное. Это вполне очевидные вещи. И задача таких постов — просто закрепить их в сознании, напомнить о них.
У меня всё.
Автор: Иван Новиков