Ответственность программистов

Обоснуй за код

Молодые программисты о том, есть ли в их работе этическая составляющая

© Tim Gouw / Pexels
Текст: Тимофей Тарасенко

Сейчас программисты — своеобразные маги. Весь мир держится на технологиях, жизни и деньги людей зависят от работы программистов, а сами люди понятия не имеют, как это работает, и кто за это отвечает. Вы ощущаете моральную ответственность за результаты своей работы?

Алексей П., разработчик в проекте контроллера дронов, 21 год

В общем-то, ощущаю. Есть форум [посвященный проекту, в котором работаю], там где-то больше трех тысяч человек пишут про то, что у них не работает, какие проблемы. И когда я делаю какие-то изменения, при отсутствии нормальной системы тестирования (она в разработке), ощущается все-таки какое-то чувство ответственности, так как эти устройства используются для съемки местности с беспилотников, для геодезии, археологии, на беспилотных автомобилях.

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

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

Очень большую ответственность должны чувствовать люди, которые обеспечивают сайты/сервисы с кучей конфиденциальных данных, кошельков и большим оборотом денег.

Уязвимости разного плана есть почти в любом программном обеспечении, но современные подходы к разработке ПО помогают, как бы, снизить ответственность. Точнее, они просто создают дополнительные проверки.

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

Сергей Свитков, разработчик серверной части веб-приложений, 21 год

Смотря о какой ответственности речь.

Ответственность с точки зрения качества технической реализации или с какой-то моральной позиции?

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

Если о втором типе ответственности — тут всё сложнее. Есть вещи, реализацией которых я бы не стал заниматься. К счастью, пока и не приходится. Некоторые коллеги занимаются вещами, которые я откровенно не одобряю. Какими именно, сказать не могу, ибо NDA (соглашение о неразглашении — «Новая этика»), но они связаны с пакетом Яровой. Коллеги говорят, что не испытывают каких-либо моральных проблем из-за этого, но я бы таким заниматься не смог.

© Nicola Albertini / CC BY-NC-ND 2.0

Процесс разработки устроен так, что перед тем, как выпустить что-либо в реальный мир, это всё проходит через людей, которые должны провести тестирование и либо подтвердить, что всё отлично и готово к работе in real world, либо описать баги, которые были найдены в ходе тестов, и вернуть то, что тестировалось, на доработку программисту.

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

Так что, на самом деле, мне кажется, что ничего кардинально нового в сфере ответственности не произошло, просто добавилось количество людей, которым эту ответственность нести.

Зарина Курбатова, backend-разработчик, 21 год

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

Любые решения влекут за собой последствия, поэтому программисту важно уделить время на продумывание своей идеи и обсуждение с коллегами. После того, как код написан, хорошим тоном является code review. Это такая практика, при которой другие программисты внимательно читают ваш код и сообщают о найденных ими ошибках/своих предложениях по улучшению. После этого программист переделывает свой код, пока все замечания не будут устранены. На следующем этапе код переходит в руки тестировщиков, цель которых — убедиться, что поведение системы соответствует ожидаемому, и что вы ничего не поломали добавлением новой функциональности. Если найдены дефекты, то процесс повторяется, а если все хорошо, то продукт переходит в пользование.

Процесс устроен таким образом, чтобы максимальное количество ошибок было найдено еще на этапе разработки. За найденные пользователем ошибки несет ответственность вся команда. Как программист я несу ответственность за свою работу и стараюсь сразу писать хороший код, минуя «костыльные» решения. На продумывание может уйти некоторое время, но явно меньше, чем на повторную итерацию.

Давайте разберемся, чем же занимается программист, не вдаваясь в подробности. Если попробовать описать в нескольких словах, то получится, что программист делает жизнь людей проще. Согласитесь, сейчас нам вовсе не обязательно тратить время на дорогу, стоять в очереди, вести диалог с кассиром, чтобы купить билет на поезд, Нам достаточно зайти на сайт и сделать пару кликов. Мы живем в замечательное время, поскольку имеем доступ к множеству ресурсов и услуг без необходимости покидать свой дом. Хотите заказывать пиццу со своего телефона в три клика? Не вопрос. Хотите изучать английский язык с носителем языка, не выходя из своей комнаты? Пожалуйста. Вам одиноко, а в вашем окружении нет людей с похожими интересами? Есть куча форумов по интересам. Другими словам, программисты стараются удовлетворить потребности людей. Приложения, которыми вы пользуетесь, хранят о вас различную информацию, в которой могут быть заинтересованы злоумышленники. В свою очередь, программисты несут ответственность за безопасность ваших данных.

Илья Цедилкин, технический писатель, IT-аналитик, 24 года

Да, безусловно. Весь процесс разработки продукта — это единый механизм, в котором все участники процесса должны быть ответственны за результат. Люди так часто считают, что прогеры это просто какие-то НЛО, мне это не нравится. Хотя сейчас все меньше людей так считает — образовываются.

Ответственности сейчас мало кто дает, и мало кто готов ее брать. Часто люди работают с правом на ошибку, и очень часто такое бывает, что за какие-то баги/косяки никого не штрафуют. Ну, по крайней мере, это если [последствия] по лайту... [Если] серьезные какие-то косяки, в плане, если бабки пропали, то там уже будут разбираться.

Со стороны пользователя я не так уж часто сталкиваюсь с ошибками программистов, я бы сказал — очень редко, ведь зачастую виноваты не только программисты, но и группа тестировщиков, которая недостаточно тщательно проверила всю цепочку логики.

© Simon Evans / CC BY-NC-ND 2.0

Но вот однажды мне не могли перевести деньги, когда они мне срочно были нужны, это было именно программный сбой, а мне нужно было срочно. Я пришел в банк и обратился за помощью к консультанту, они сказали что-то типа: *** знает, ждите. А я сказал: ****** сбербанк, при этом подумав на персонал отделения. В итоге пришлось срочно звонить приятелю, который подвез мне денег.

Еще случай с другой стороны баррикад. Когда я работал при правительстве МО, мы были на первой линии технической поддержки: если что-то ломалось у министра, надо было оформить заявку, послать инженера починить и так далее. Потом у организации стало мало денег, и они взяли тендер на сопровождение программы, в которой был учет каких-то данных, которые все московские областные учреждения подавали в единый реестр. Короче, эту систему (на сайте все делается) спихнули на нас, и все, что мы делали — это слушали гнев, что мы ненужные, потому что не можем починить. Но это была не наша вина, что разработчики просто спихнули волну входящих жалоб на аутсорс. Все равно доставалось первому эшелону — людям, которые за копейки батрачат и слушают этот гнев.

Артем Овчинников, python-разработчик, 29 лет

Я сам был подобного мнения о программистах до того, как связал свою жизнь с IT. Естественно, это связано со сложностью профессии — все-таки программисты общаются с компьютером на другом языке, тем более, что этих языков десятки. И результат недельной работы может выглядеть, как пять строчек непонятных закорючек, но для проекта в целом иметь ключевое значение.

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