В моей голове несколько недель вертелась мысль, крошечная теория о том, как люди воспринимают разработку ПО.
Согласно моей теории, есть два типа разработчиков ПО:
Когда тип 1 узнаёт о задаче, он думает: «Это легко, люди просто могут делать X».
Когда о той же задаче узнаёт тип 2, он думает: «Это очень сложно, ведь для этого нужно, чтобы люди делали X».
Тип 1 предполагает, что задача проста, если она не техническая, потому что «можно просто попросить людей делать X». Тип 2 считает, что она сложна, потому что она не техническая.
Пример. Тип 1: «Это легко, мы можем просто попросить людей не выполнять развёртывание в это время».
Тип 2: «Постойте-ка, но что нам делать, когда люди будут выполнять развёртывание в это время?»
Другой пример. Тип 1: «Это легко, мы просто задокументируем этот процесс и попросим людей следовать документации».
Тип 2: «Как мы можем гарантировать, что люди вообще это прочитают?»
И ещё один пример. Тип 1: «Это легко, просто создадим систему, которую будут использовать эти четыре стороны, и которая гарантирует, что никто не будет жульничать друг с другом».
Тип 2: «Это очень сложно, потому что нам нужно сделать так, чтобы четыре стороны использовали одну систему».
Я пока не совсем уверен, как чётко прочертить границу между типами 1 и 2, или как дать им точное определение. Как я и говорил, это крошечная теория.
Однако если объяснять вкратце, то я бы сказал, что тип 1 не учитывает людей, а тип 2 знает, что в основе всей работы по разработке (и её задач) находятся люди.
Тип 1 верит в Разработку в большой буквы Р, в которой есть только холодные и непреложные истины; в ней есть математика и физика; это прикладная наука. Это то, что мы видим в фильме «Марсианин».
Тип 2 задаст вопрос: «Хорошо, но что, если главному герою „Марсианина“ пришлось бы строить всё это не для себя, а для других?»
Как вы могли заметить, я прозрачно намекаю на тот факт, что инженер второго типа знает чуть больше. В то же время, возможно, вы почуяли привкус цинизма, как будто мы признаём поражение: невозможно создавать красивые вещи, потому что как только дело касается людей, всё превращается в хаос.
Однако на самом деле всё наоборот! Это не цинизм, разработка второго типа принимает тот факт, что мы создаём системы с людьми и для людей, и берётся за ещё более серьёзную задачу: выполнять работу, несмотря на создаваемый этим хаос.
Потому что когда всё становится хаотичным, начинается реальность; здесь начинается настоящая работа, когда ты переходишь от маркерной доски к выпуску чего-то действительно ценного, оказывающего влияние на кого-то.
Такие разработчики принимают тот факт, что люди не машины, и сколько бы они не говорили, что они рационально мыслят, ты всё равно знаешь, что даже самые упорные защитники принципа «выбирай для работы лучший инструмент» иногда выбирают его из-за красивой GIF в README. Тип 2 знает, что никто не будет читать документацию, если она не увлекает и её сложно читать. Он использует тот факт, что люди установят обновления безопасности, чтобы получить новые эмодзи. Он учитывает, что не все будут следовать рекомендациям, потому что у каждого бывает такой полдень четверга, который ощущается как вечер пятницы.
И добавлю ещё кое-что: мне кажется, что именно из-за того, насколько хаотичны наши продукты, они становятся такими прекрасными.