Преждевременная оптимизация происходит в самом коде и в жизненном цикле программного обеспечения.

Первое побуждение программистов, сталкивающихся с проблемой, — немедленно приступить к написанию кода или разработать общее решение. Я знаю, потому что я виновен в этом, независимо от того, насколько мала проблема, просто потому, что я могу.

Я сомневаюсь, что я единственный, у кого есть навязчивое и непреодолимое желание держаться подальше от всего, что делается вручную. Мы кодеры, поэтому мы считаем, что должны кодировать. Делать что-либо еще было бы пустой тратой нашего таланта, навыков и усилий. Таким образом, ручные процессы, такие как ввод данных, манипулирование файлами или вычисления, рассматриваются как пустая трата времени, которое можно было бы потратить на обдумывание и кодирование общего и масштабируемого решения в долгосрочной перспективе.

Я оправдываю себя тем, что это не обязательно должна быть большая и сложная программа, достаточно стартового кода. Мне не нужно, чтобы конструкция была обобщаемой, чтобы выдержать ядерный взрыв, она просто должна быть за пределами «этой» сверхузкой проблемы. На самом деле, я просто чувствую, что должен сделать что-то техническое как самоцель.

Учитывая идеальную ситуацию без приоритетов или финансовых проблем, может не иметь значения, выполняете ли вы ручные процессы или начинаете программировать или проектировать немедленно, поскольку обобщать и начинать что-то кодировать — забавное упражнение. Кроме того, вы всегда можете вернуться и улучшить без каких-либо последствий.

Однако для реальных производственных сред с бизнес-приоритетами, где время — деньги, я обнаружил, что эта преждевременная оптимизация программного обеспечения в целом и аллергическая реакция на ручные процессы в частности могут быть неоптимальными, если мы рассматриваем программное обеспечение просто как еще один инструмент, а не самоцель.

Здесь я объясню, почему может быть полезно делать что-то вручную.

Одноразовые процессы против. Жизненный цикл

Справочные данные

Я часто сталкивался с процессами, которые кажутся большим количеством ручной работы, а иногда так и есть, но если это нужно сделать только как разовый процесс, такой как заполнение таблицы SQL справочными данными, тогда это может на самом деле будет быстрее и точнее сделать это вручную.

В этом случае может быть лучше просто сделать это вручную. Если окажется, что дальнейшая ручная работа не требуется, все готово.

Кодирование на протяжении всего жизненного цикла

Код необходимо рассматривать на протяжении всего его жизненного цикла, даже несмотря на то, что трудно концептуализировать и усвоить будущие действия и необходимые размышления или затраты, которые еще не были понесены.

Если вы не очень внимательно относитесь к первоначальным версиям кода как к одноразовой версии, написание кода включает не только первые строки кода, которые требуют первоначальных затрат различных ресурсов, таких как время, энергия и внимание. Скорее, это также включает в себя отладку, тестирование и обслуживание, а также контроль версий файлов, содержащих код.

Возможно, вам придется учитывать различные открытые вопросы, которые могут включать следующее:

  • У вас было несколько версий кода и какая из них самая последняя?
  • Были ли какие-либо конфиденциальные данные или проприетарные методы?
  • Касался ли он какого-либо другого кода или данных?
  • Вам приходилось устанавливать и импортировать библиотеки?
  • Требовались ли вам какие-либо операции по разработке?

Все эти проблемы, связанные с самим кодом, являются поглотителями времени и представляют собой скрытые и неявные издержки простого наличия базы кода.

Эти проблемы можно решить, полностью отказавшись от кода, если вы можете помочь.

Вы лучше понимаете после первого раза

Если вам нужно написать код

Конечно, одноразовые процессы могут быть неправильно оценены. То, что вы считали одноразовым процессом, теперь начинает занимать много времени. Вы неправильно оценили характер ручных процессов, и вам действительно нужно написать автоматизированное решение.

В этом случае вы все равно выиграете, тратя время на ручные процессы по следующим причинам.

  • Вы уже «что-то» сделали, будь то предварительные данные, подготовленные где-то, или выполненный анализ, полезный для других. Эта начальная работа может помочь вам и другим членам команды лучше осмыслить более крупные проблемы.
  • Вы приобрели опыт выполнения ручного процесса, чтобы глубже понять проблему и написать лучший код, и, таким образом, вам не нужно переписывать какой-либо код, и вы можете начать с лучшего понимания.

Требования могут измениться

Время ценно

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

В этом случае код, который вы написали, больше не нужен, и это время можно было бы потратить на что-то другое.

Конечно, вы могли бы тратить время и на ручные процессы, если бы бизнес-требования изменились, поскольку, например, драгоценные ресурсы времени и внимания не ограничиваются только написанием кода. Однако время, затрачиваемое на ручные процессы, как правило, влечет за собой меньший багаж, чем кодирование, которое также связано с временем подготовки среды кодирования, написания, отладки и тестирования кода.

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

Избегайте застывшего мышления

К добру или к худу, нам проще привязаться к уже существующим идеям или выполненным работам, чем думать о чем-то совершенно новом или творчески.

Имея код, написанный до того, как требования изменятся, вы также можете нести багаж предыдущих требований, как в своем осмыслении проблемы в отношении последствий дизайна, так и в коде, который вы уже написали, протестировали и запустили.

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

Обучение суперкомпьютеру против ручного труда

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

Если вы считаете, что используете и обучаете суперкомпьютер, а не просто выполняете «ручной» труд, это может изменить ваше отношение к ручным процессам. Это то, что сделало это для меня, по крайней мере.

Вам все равно придется оптимизировать позже

Как правило, легче писать код с нуля, чем отлаживать и исправлять существующий код, поэтому работа над проблемой вручную позволяет избежать этого до тех пор, пока вы не сможете лучше понять проблему.

Время, которое вы сэкономите, избегая оптимизации кода, который вы не писали, так же важно, как и написание фактического кода. Конечно, невозможно подсчитать, сколько времени вы сэкономили, не написав код, но это мгновенная экономия.

Например, вы можете не писать код, который обрабатывает масштабирование по порядку, если окажется, что вам все равно не придется иметь дело с таким количеством точек данных.

Программирование и код — это инструменты

Наконец, рассмотрите общую цель акта программирования и существующий написанный код. Они существуют для решения проблем.

Если проблемы можно решать лучше и быстрее, не написав ни строчки кода, тогда код может быть помехой, потому что это второстепенный инструмент среди многих других.