Постоянно поднимается тема прямо или косвенно, считаю нужным [раз эдак в пятый] сформулировать и вынести в мир своё драгоценное мнение о том, за что же платят программистам (этим особенным людям). Понятно, не учитываю варианты, при которых мама устроила сынулю в свой отдел, Иван Сергеевич отмывает через IT деньги от нелегальных прачечных, отжатых русской мафией у итальянцев Нью-Йорка, и всё такое. Предположим для простоты изложения, что речь про легальный и понятный бизнес.

Так вот, платят за решение проблем и за причинение прибыли (отсутствие которой тоже проблема, прямо скажем).

Тысячу раз ворчал, проворчу ещё раз:

  • никого (кроме вас и таких же красноглазых) не интересует ваш код, пусть хоть на BASIC с нечитаемыми вставками ассемблера;
  • никого (кроме красноглазых и такого же вас) не интересуют процессы, шмацессы, хрюцессы и прочая туфта ради туфты;
  • никого (кроме таких же красноглазых вас и) не интересует, понимает ли кто-либо ещё то, что и как вы сделали.

Если. ЕСЛИ в итоге получено решение, удовлетворяющее ТЗ, живущее по ТЗ, решающее проблемы по ТЗ, приносящее прибыль [по ТЗ]. Всё остальное – повод покидать друг в друга гнилыми помидорами в Твиттере, не более.

Обязательная вставка для читающих через абзац:

Гайды, методики, приёмы, инструменты, теоремы и аксиомы, идиомы, байтофилия и байтофобия – всё это средства достижения цели, а не самоцель. Чтобы уместно применять одно и уместно не применять другое, требуется понимание. Да, иногда не требуется ничего оптимизировать. А иногда требуется. Иногда нужен красивый идеальный в ущерб скорости код. А иногда нужен нечитаемый хардкор. Иногда нужна репликация с кластеризацией, иногда не нужна. Иногда нужны CI/CD, иногда не нужны. Иногда git, иногда svn.
В любом случае ничто из этого не является целью – вот главное.
Вы наваяли офигенное крутое модное решение на новых гибких технологиях и заказчику ровно это требовалось? Молодец. Вы Игорь.
Вы наваяли офигенное крутое модное решение на новых гибких технологиях и заказчику оно такое нафиг не надо? Вася, ну включи ты уже голову, а.

Мне кажется, бизнес отлично это понимает, но программисты никак этого не понимают, потому им очень сложно донести до руководства (ну или заказчиков) причины, по которым качество кода [не] важно, технологический стек [не] важен, процессы [не] просто так. Обе стороны после драки твёрдо убеждены в том, что сторона противника «ни панимаит» и вообще жопоголовая. Обычное дело.

Но жопоголовыми я тут склонен считать программистов, т.к. работа заказчика – добыть деньги и на эти деньги добыть деньги (или что-нибудь построить, или пробухать, или построить и пробухать). Он её делает. Работа программиста – выдать нужный заказчику продукт, но при этом:

  • обосновать причины, по которым продукт делается вот так, а не эдак (ибо разница в причинах нередко разница бюджета);
  • показать и обосновать жизненный путь продукта после выхода в свет (ибо эксплуатация и принятие на себя ударов судьбы – тоже бюджет).

Беда в том, что программисты часто не могут обосновать. Они сами не понимают, почему и зачем нужно что-либо [не] делать.

К слову, они также не всегда понимают, почему они должны что-либо обосновывать. Приходится напоминать: чувак, ты исполнитель, которому платят. Ты не царь, не бог, не владелец газет и пароходов, не единственный в мире уникальный специалист по тяганию курсора, ты даже не местный бандит, стригущий челноков, а то я вам таааакой код напишу! Хочешь кушать вкусно? Будь любезен, научись объяснять, чем именно ты занят и зачем (и почему тебе платят в десять раз больше, чем Пете).


Ну и… посадите Васяна за стол, попросите спроектировать приложение с указанием технологического стека. Пусть также накидает бегло руководство по стилю (от отступов до правил ведения документации). Пусть и недельку просидит, ничего страшного. После задайте вопросы:

  • почему выбрана база X? а зачем?
  • почему выбрана база, а не хранение в банальных бинарных файлах? а зачем?
  • почему основной язык A, а не B? а зачем?
  • почему ограничение 80 символов на строку? а зачем?
  • почему бекап сделан так, а не эдак? а зачем?
  • почему вот тут контейнеры? а зачем?
  • и т.д.

Для 9/10 Васянов уже этого хватит, чтобы увидеть: он понятия не имеет, почему и зачем. Он это выбрал потому, что… ну, все такое выбирают. Все так делают. А что, есть не только MongoDB и MySQL? МОЖНО ХРАНИТЬ В ФАЙЛАХ?! Слушайте, ну C++ и Java – прошлый век, я их даже не знаю. Про 80 символов нам препод в универе сказал, а что?

Но это бы ладно. Задача со звёздочкой – добавить к каждому пункту вопрос «зачем это заказчику». И тут уже от тех 1/10 Васянов снова пойдёт отсев, т.к. программисты крайне редко связывают свою деятельность с действительной нуждой в ней. Как итог, вы получите на выходе совокупность решений, каждое из которых выбрано проектировщиком Васей потому, что… почему-то. Сможет ли Васян объяснить Григорию Петровичу причины, по которым разработка занимает N месяцев, а не M? Да нет, конечно. Он будет мычать, разводить руками и пыхтеть от ненависти к происходящему, ведь где же это видано, программиста вытащили из норы к живым людям и спросили, что, блин, происходит! Творить не дают. Зарплату пока дают, а вот творить нет.

Для этого есть непродуктивное низовое звено. Менеджеры всякие, да? Ну, которые бесполезные. Вот они пускай топам втирают о какой-то пользе. Как смогут, так и втирают. Т.к. менеджеру Васян тоже ничего не может объяснить. Сложно объяснить то, что сам не понимаешь, но скопипастил либо с чужого языка, либо со StackOverflow, либо со страниц учебника, либо из лабы соседа по аудитории. Тем прикольнее потом друганам рассказывать о том, как менеджеры тупят и несут чушь, ага.


И нет, это ни разу не про ваши каргософтскилз, навязшие уже строительной пеной на зубах. Это про понимание своих действий, понимание своей специальности. Наконец, понимание своего места в цепочке производства и обоснование этого места. И главное – про [не]понимание того, как же связать каждый символ вашего кода с тем, что именно от вас требуется.

Этого эссе не было, не услышь я множество раз в разных вариациях один и тот же ответ: от программиста требуется код.

Это в корне неправильный ответ. Вернее, он настолько наивно правильный, что так же бесполезен. Что требуется от курьера? Ходить ногами, ага. Нет, конечно. От него требуется принести заказанное в срок. Ты хоть на парашюте спускайся, хоть ползи попой вперёд, пооофиииг – принеси заказ. Так и с программированием.

Написание кода – примитивная базовая активность.

Активность выше – написание нужного кода в нужный срок.

Активность выше – обоснование нужды этого кода и этого срока.


Вот чему у нас не учат, так это задавать себе вопросы до того, как их зададут другие. От мелочей буднего дня (почему в этом месте не цикл, но итератор? а почему тут итератор, а не цикл?) до более глобальных (почему я вообще занимаюсь программированием?). Фигово это. Так и получаем 9/10 курьеров, видящих свою задачу в том, чтобы ходить.