Я знаю, как писать хороший код.
Обычно это означает тратить больше времени сейчас, чтобы сделать код лучше для какого-то будущего состояния мира. Это предполагает, что я знаю, как будет выглядеть будущее. В программном обеспечении мы редко знаем, что нас ждет в будущем.
Неопределенность может быть вызвана:
- Незнанием технологии
- Незнанием бизнеса
- Незнанием пользователя
- Незнанием размера данных системы
- Незнанием долговечности кода
- Неизвестными-неизвестными (см. 2020 год ради примера)
Когда у меня есть неуверенность в будущем, время цикла является наиболее важным. Это позволяет мне извлечь выгоду из моего кода за счет: максимально быстрого обучения, минимизации воздействия плохого или ошибочного кода, а также сокращения времени выхода на рынок.
Любые трения вредят времени моей работы. Это снижает скорость, с которой я могу превратить неопределенность в уверенность, то есть обучение. Моя самая долгосрочная ценность создается путем обучения как можно быстрее, поскольку это множитель для всего будущего кода, который я пишу, или систем, которые я разрабатываю. Другими словами: поскольку «написание — это переписывание», программирование — это рефакторинг.
Моя самая долгосрочная ценность создается путем как можно более быстрого обучения.
Вот почему вы должны писать дерьмовый код. Или, точнее, почему вы должны писать БОЛЬШЕ дерьмового кода.
Развивайте навык написания кода
Если вы хотите научиться писать код, лучший способ развить этот навык — практика. Я обнаружил, что могу читать все, что хочу, но не запоминаю урок, пока не наберу код пальцами. Программирование — это навык, которому не учатся за один день. Это способ мышления и подхода к проблемам. Это набор знаний об инструментах и вычислительных средах. Единственный способ развить эти знания — использовать инструменты и среды.
Каждый раз, когда я пишу код, в следующий раз будет проще и менее дерьмово.
Получайте радость от творчества
Написание дерьмового кода означает сосредоточение внимания на том, чтобы получить результат как можно быстрее. Это означает получение чувства успеха и удовлетворения от того, что что-то работает. Я написал свою первую строчку кода около тридцати лет назад, и до сих пор испытываю волнение каждый раз, когда у меня начинает работать новая часть кода.
Узнавайте, как код и системы сбоят
Системы сбоят. Я обнаружил, что это самые ценные возможности для обучения. Мои самые ценные уроки были получены не от какого-то компромисса в качестве, который я ожидал, а от некоторого поведения или вклада в систему, который я даже не рассматривал. Если я трачу время на создание чего-то «безупречного», я эмоционально вкладываюсь в то, чтобы это работало. Затем, когда что-то идет не так, я ищу ошибки вне кода, который я написал.
Когда я пишу дерьмовый код, у меня нет эмоциональной привязанности к его функционированию. Когда он не работает, я предполагаю, что это самое слабое звено, и погружаюсь в изучение кода и системы. Это психическое состояние является состоянием удивления и радости.
Ни один код не работает полностью изолированно. Каждый неожиданный сбой (по определению) — это то, чего я не понимаю. Поэтому каждая неудача — это прекрасно продуманный урок, который адаптивно построен для меня, чтобы максимизировать мое обучение.
Учитесь отлаживать
Когда я программирую, у меня есть несколько стандартных циклов обратной связи. Когда я пишу дерьмовый код, я увеличиваю частоту этих циклов обратной связи. Это, естественно, заставляет меня понимать, где искать и как делать выводы из того, что я пишу. Каждый раз, когда я пишу код, я узнаю больше о своих инструментах. Я мог бы выучить новое сочетание клавиш для своего редактора или написать сценарий для какого-нибудь ручного шага в процессе тестирования. Дело в том, что каждый раз, когда я пишу код, я улучшаю качество своих инструментов и свое понимание этих инструментов.
Исследуйте пространство дизайна
Если я пишу код, чтобы сделать что-то, с чем я не знаком, то есть практически весь новый код, потому что в противном случае это был бы рефакторинг, я не знаю области дизайна. Я не знаю, что возможно, потому что я не знаю, чего я не знаю.
На уроках рисования иногда задают вариационные этюды. В основном вы придумываете 5 или 10 первоначальных набросков из какой-то подсказки. Затем вы рисуете 5 или 10 вариантов каждого. Это исследование дизайнерского пространства. Иногда я ловлю себя на том, что сравниваю два возможных варианта дизайна. Это ограничение того, что действительно возможно. Скорее всего, будут десятки различных возможных конструкций. Написание дерьмового кода позволяет мне увидеть больше возможностей. Я смотрю вверх с того места, где стою, и вижу все возможности.
Написание более дерьмового кода позволяет мне увидеть больше возможностей
Заниженные ожидания высвобождают больше творческой энергии и мыслей
Я знаю, что упоминал об этом в предыдущих пнктах, однако изменение эмоционального состояния, которое я испытываю, когда я отпускаю эго того, что мой код является «правильным», монументально. Вместо разочарования или раздражения я чувствую удивление, открытие, радость и чувство выполненного долга. Даже если все остальные причины неверны, разница в личном эмоциональном состоянии стоит написания “более худшего” кода.
Вместо разочарования или раздражения я чувствую удивление, открытие, радость.
Заключение
Многие ведущие разработчики и опытные люди будут говорить о том, на что “должностях” на которые должен быть похож ваш код. Обычно они описывают какую-то далекую землю обетованную, которую они никогда не посещали. Некоторые из этих «должен» упакованы в виде фреймворков, помогающих продумывать компромиссы при проектировании систем. Но лучше иметь внятное предложение, чтобы знать, когда правила не применяются. В конце концов, правила полезны, если направляют вас, а не замедляют.
Другими словами, знайте, куда вы направляетесь, но примите дерьмовость создания кода в сегодняшнем дне.