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

― Микеланджело

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

Для меня это то, на что похоже программирование.

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

Следующий этап — это когда я начал что-то делать. Завершение моего первого крошечного приложения для iPhone было в то время самым большим достижением в моей жизни. Было ощущение, что я покорил Эверест. Я намеревался сделать программу, которая выполняла бы какую-то задачу, и вот она выполняла эту задачу. Удивительный.

Затем следует долгий период обучения. Высасывает галлоны информации днем ​​и ночью. Я быстро учусь производить впечатление на себя, а потом привыкаю. Затем я делаю это снова на следующий день. В конце концов, акт «победы» вообще начинает казаться нормальным. Я знаю, что могу научиться почти всему, что захочу.

В какой-то момент за последние четыре года, по мере того, как программирование перешло от 25 часов в неделю в качестве хобби/второстепенного в колледже, к 40 часам в неделю на работе и 70 часам в неделю к карьере, я обнаружил, что медленно вхожу в следующий этап. Я решил, что код — это не просто набор Lego, который можно использовать для достижения результата, а на самом деле это цифровой блок мрамора. В этом была правда. Я перестал спрашивать себя, что мне нужно добавить в свой код, и начал спрашивать код, куда он хочет двигаться. Я спрашивал переменные, как их зовут, интересовался, кто является другом функции и где бы она располагалась в файле. Каждому ключевому слову и вызову функции предшествовал вопрос: «Чем вы занимаетесь?» или «Почему ты здесь?». — Это действительно то место, где тебе нужно быть?

"Ты правду говоришь?"

Для меня программа имеет единственную истину. Правда формируется контекстом: платформа, инструменты, язык, входы и выходы, требования, внешние ожидания. Каждая строка кода либо говорит правду… либо лжет. Часто такой подход создает петлю обратной связи, в которой вопросы о контексте дают ответы о правдивости вашего кода, а написание правдивого кода раскрывает ответы о контексте программы, о которых вы еще не думали. И все начинает выравниваться.

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

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