1970-х годов программа из 50 000 строк компилировалась около 45
минут. Даже в 1990-е годы долгая сборка казалась нормой.
В наши дни программисты не ждут результатов компиляции.
[25]
В
их распоряжении появилась такая немыслимая вычислительная мощь,
что цикл «красный-зеленый-рефакторинг» может прокручиваться
буквально за секунды.
Например, я веду проект FitNesse,
написанный на Java и
состоящий из 64 000 строк кода. Полная сборка со всеми модульными
и интеграционными тестами занимает менее 4 минут. Если тесты
проходят, то я публикую новую версию продукта. Таким образом,
весь
процесс контроля качества, от исходного кода до развертывания,
занимает менее 4 минут
. Время компиляции ничтожно мало. Тесты
выполняются за
считанные
секунды
. Выходит, цикл компиляции/
тестирования может прокручиваться
по 10 раз в минуту
!
Конечно, не всегда стоит работать с такой скоростью. Часто бывает
лучше замедлиться и
подумать
.
[26]
Но в некоторых ситуациях
прокрутка цикла с максимальной
скоростью оказывается в
высшей
степени
производительной.
Для быстрого выполнения чего угодно необходима тренировка.
Быстрая прокрутка цикла «код/тест» требует очень быстрого принятия
решений. А для быстрого принятия решений необходимо успешно
распознавать огромное количество ситуаций и проблем, а также
просто
знать
решения.
Представьте двух мастеров боевых искусств во время поединка.
Каждый
должен понять, что пытается сделать другой, и правильно
среагировать за считанные миллисекунды. В бою вам не удастся
остановить время, проанализировать ситуацию и выбрать подходящий
ответ. В
бою нужно просто
реагировать
. Ваше тело реагирует, пока
разум работает над стратегией более высокого уровня.
Пока вы прокручиваете цикл «код/тест» по несколько раз в минуту,
ваше тело знает, какие клавиши нужно нажимать. Основная часть
мозга распознает ситуацию и
реагирует за миллисекунды, выдавая
подходящее решение, тогда как мозг концентрируется на проблеме
более высокого уровня.
И в боевых искусствах, и в программировании скорость зависит от
тренированности. И в обоих случаях тренировка проходит примерно
одинаково: мы выбираем набор пар «проблема/решение» и повторяем
их снова и снова, пока не будем знать наизусть.
Представьте гитариста – скажем, Карлоса Сантану.
Музыка в его
голове просто переходит в пальцы. Он не задумывается над
положением пальцев или приемами игры. Его ум свободен для
планирования высокоуровневых мелодий и гармоничных сочетаний,
тогда как его тело преобразует эти планы в низкоуровневые движения
пальцев.
Но для достижения такой простоты игры необходима практика.
Музыкант тренируется в исполнении этюдов, гамм и риффов снова и
снова, пока не будет знать их наизусть.
Do'stlaringiz bilan baham: