В продолжение заметки Я глупый и криворукий джуниор . Еще одна черта моего характера, которой я горжусь, это лень. Казалось бы, всем известно, что лень — это плохо. Как вообще можно ею гордиться? Не волнуйтесь, господа, сейчас я вам все объясню!
Рассмотрим двух программистов — ленивого (программист Л) и трудолюбивого (программист Т). Допустим, эти программисты столкнулись с некой нетривиальной задачей. Совершенно очевидно, что программист Л в такой ситуации полезет в Google искать готовый инструмент, фреймворк или библиотеку, потому что писать свое решение ему лень. Тем временем программист Т вместо того, чтобы выбрать самый простой и быстрый путь, будет усердно писать свое решение. В результате ленивый программист использует готовые, стабильные, проверенные временем наработки, быстро добиваясь результата, а трудолюбивый программист тратит кучу времени, плодя никому ненужные велосипеды. Налицо польза лени!
Вот еще пример. Ленивому программисту не хочется писать один и тот же код по 10 раз, поэтому он находит повторяющиеся куски и выносит их в функции. При должном везении ему даже удастся найти большие куски похожего функционала и придумать для них какой-нибудь DSL . В итоге код становится более читаемым и более легким в сопровождении, производительность программиста Л возрастает. А бедный программист Т старательно правит код в пяти местах при разработке каждой новой фичи.
Еще трудолюбивый программист может неэффективно расходовать свое время, делая работу, о которой его не просили. Например, если для некоторых данных требуется предусмотреть API создания и обновления, трудолюбивый программист может проявить инициативу и также написать API для удаления этих данных. Совершенно лишний API, который никто не просил, и который, скорее всего, никто и никогда не будет использовать! Мало того, что было потрачено время на написание этого API, так его еще нужно и поддерживать. Ленивый программист никогда не допустит такой ужасной ошибки.
Лень программиста Л распространяется не только на написание кода, но и на поиск и исправление ошибок. Поэтому он предпочитает языки программирования со строгой статической типизацией , а наиболее хитрые участки разрабатываемой программы непременно покрывает модульными тестами . Вообще, программист Л по возможности старается все автоматизировать, поэтому он уважает системы непрерывной интеграции , метапрограммирование , автоматические регрессионные тесты и так далее. Тем временем программист Т пишет на языках с динамической типизацией и делает все тесты руками, а потом удивляется, почему у него ни на что нет времени.
Оба программиста, Л и Т, в большом количестве читают книги. Однако ленивый программист выбирает только действительно нужные ему книги, да и те скорее «индексирует», нежели читает. Просто ему лень запоминать прочитанное. Вместо этого он запоминает, в какой книге при необходимости он может найти ту или иную информацию, а также записывает наиболее интересные моменты в блоге . Ну или хотя бы хранит в виде наработок на GitHub. Трудолюбивый же программист тратит уйму времени на чтение книг от корки до корки, делая пометки карандашиком на полях, старательно решая все упражнения и пытаясь удержать в голове тысячи фактов, которые, скорее всего, никогда не пригодятся ему на практике. Стоит ли говорить, что подход программиста Л куда эффективнее?
Больше всего на свете трудолюбивые программисты любят хреначить код. Поэтому им не нравиться тратить свое драгоценное время на всякую ерунду вроде бета-тестирования проекта, разрабатываемого коллегами из соседнего отдела, посещения дурацких планерок, где происходит обсуждение нового протокола, или же общение с админами на кухоньке. В результате они теряют представление о том, что происходит в компании в целом. Они могут не знать, что где-то уже есть библиотека с функционалом, над котором они сейчас работают. Они могут даже реализовывать некоторые фичи с явными ошибками, потому что они просто не понимают, как эти фичи будут использованы в стороннем проекте. Поскольку программисты Т не принимали участие в обсуждении нового протокола, в нем не были учтены их интересы. А вот программисты Л отлынивают от работы всеми доступными способами. Поэтому они знают обо всех новых библиотеках, пишут фичи без ошибок и отстаивают свои интересы при обсуждении нового протокола.
Наконец, трудолюбивые программисты могут работать сверхурочно или даже по выходным. В результате они устают, приходят на роботу грустными и совсем не отдохнувшими, из-за чего пишут код с ошибками, который потом приходится переписывать. В отличие от них ленивые программисты проводят на работе не более 9 часов 5 дней в неделю. Каждый день они приходят на работу веселые и отдохнувшие, благодаря чему пишут хороший, качественный код, который, как правило, сразу работает без ошибок.
Такие дела. Мы выяснили, что глупость и лень — два очень полезных качества для программиста. Сможете ли вы угадать третье качество?