Итерация: антоним совершенства
Почему количество должно быть важнее качества
Вкратце
Лучше написать много отличного кода, чем немного идеального.
Совершенство
Когда на собеседовании спрашивают: «Какая ваша самая большая слабость?», Основной ответ идет примерно такой: «Я перфекционист».
На первый взгляд, это отличный ответ, потому что совершенство само по себе не является нежелательным. Никто не будет жаловаться, когда ему предложат идеальное решение проблемы. Это становится проблемой, когда совершенство проявляется в пропущенных дедлайнах и преждевременной оптимизации.
На самом деле совершенство - это обратная сторона развития. Совершенство - это иллюзорная конструкция; на самом деле никто не знает, как оно выглядит, а окружающая его неопределенность представляет собой опасную ловушку.
Пропущенные дедлайны
Проблема с идеальным решением в том, что на это нужно время; однако в быстро меняющемся мире разработки это роскошь, которая не всегда доступна. Совершенство легко продать на бумаге. Представьте, что вы пишете программу, которая без ошибок и читабельна. Это звучит слишком хорошо, чтобы быть правдой, потому что это обычно так.
Есть причина, по которой формальная проверка не используется за пределами определенного критически важного программного обеспечения. Чтобы обеспечить уверенность в безупречной функциональности программного обеспечения, требуется много усилий; возможно, даже больше, чем написание самого кода. Более того, что касается стилистических аспектов кода, совершенства просто не существует. Личные предпочтения означают, что кому-то всегда будет что придраться к форматированию кода, именам переменных и т. д.
Совершенство - враг, потому что стремление к нему - это трудоемкий процесс, который практически гарантированно сделает невозможным соблюдение любых сроков.
Это не означает, что можно проявлять халатность в угоду скорости. Технический долг существует, и спешить с решением не лучше, чем бесконечно его уточнять.
Преждевременная оптимизация
Идеальное ПО создано для решения проблем в любых возможных случаях. Достаточно сложно найти все эти случаи до выпуска продукта, а решить их еще сложнее.
Написание надежного кода - дело благородное, но если это означает жертвовать читаемостью или сильно снижать производительность, следует действовать осторожно.
Итерация
Эффективный способ преодолеть соблазн совершенства - повторение. Вместо того, чтобы кропотливо писать решение, которое может сделать что угодно с самого начала, практичнее начать с малого. Минимально жизнеспособный продукт не только легче построить, но и легче понять другим. Решение, которое работает ограниченно, намного лучше, чем амбициозное решение, которое никогда не выходит из конвейера.
Хотя код может быть грубым на начальном этапе, итеративная разработка полезна для выявления и устранения проблемных мест. Например, при первом создании продукта настройка кешей до того, как вы даже напишете код для выборки ресурсов, является излишним. С другой стороны, если время отклика сервера задерживается из-за слишком большого количества вызовов API, возможно, пришло время добавить уровни кэширования.
Итерация также может быть полезна при решении задачи эффективности. Хотя приятно иметь код, работающий в 5n, а не в 8n, оба они имеют линейную временную сложность. Если прирост производительности имеет незначительное влияние и требует неоправданного объема работы или делает код менее читаемым, вероятно, не стоит доводить его до конца.
В общем, не поддавайтесь фантазии о совершенстве и не позволяйте ей утаскивать вас. Есть много интересных дел, так что не зацикливайтесь на мелочах!