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

Мы, программисты, по сути своей  —  не просто какие-то там решатели конкретных проблем или образчики критического мышления; мы — созидатели. Нам под силу творить прекрасное, оттачивая навыки и проявляя всю возможную находчивость. Мы способны впечатлять, менять ход жизни. Точно так, как вдохновляют людей своими работами великие художники и непревзойденные музыканты. 

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

Дело в том, что при создании кода никого не волнует аккуратность

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

Печально известны слова: “Работает — не трогай” —  на мой взгляд, это худшее, что можно посоветовать.

Мало, если код просто работает,  —  Роберт С. Мартин, Чистый код

Если код работает с первого раза — что же, это просто грубый набросок. Необходимо переработать его и тщательно обдумать: что подумают другие программисты, увидев этот код? Понятны ли функции? Нет ли разбросанных тут и там без нужды комментариев? Насколько четко имена переменных и функций отражают их назначение? Не слишком ли велики функции и классы? Можно ли их переиспользовать? А расширить? Или другие разработчики только скривятся, поглядев на этот совершенный хаос, потому что на выходе получилась сплошная стена текста, в которой трудно как разобраться, так и поменять что-то?

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

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

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

“Если вы способны закончить сегодняшнюю работу сегодня, но таким образом, что завтрашняя работа из-за этого не была сделана завтра, то вы в проигрыше”, — Мартин Фаулер, “Рефакторинг: улучшение проекта существующего кода”.

Почему важно мыслить, как художник

Леонардо да Винчи  —  один из величайших художников всех времен  — он создал такие шедевры, как “Мона Лиза” и “Тайная вечеря”. Что же отличало его от прочих современных ему художников? Он огромное внимание уделял деталям. Чтобы разобраться в устройстве человеческого тела, он изучал трупы и применял полученные знания, чтобы написать чрезвычайно реалистичные картины, где ни единого мазка не нанесено на холст бесцельно и беззаботно. 

Станьте да Винчи программирования. Уделяйте тщательное внимание своей манере писать код. Отмечайте детали. Понимайте, к чему стремитесь. Думайте о переиспользовании и практическом применении. Будьте инженером, художником, писателем, музыкантом и представляйте, как всё, что вы пишете, становится, в конечном счете, цельным приложением, которое работает быстро и без сбоев.

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

“Лучшие программы пишутся так, чтобы вычислительные машины могли быстро выполнять их, а люди могли ясно их понимать. В идеале, программист — это писатель, который работает не только с традиционными литературными и эстетическими формами, но также с математическими концепциями: чтобы изложить принципы работы алгоритма и убедить читателя, что результат окажется правильным”,— Дональд Э. Кнут, “Избранные статьи по информатике”.

Заключение

Речь не о том, что код должен быть идеальным. Не существует ни идеального кода, ни идеальных программ. Речь о другом: недостаточно просто брызгать краской на холст. Вы из ничего создаете нечто удивительное. Стремитесь к тому, чтобы люди любили работать с вашими творениями. Чтобы ваши творения изменяли жизни.

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

“Вы не способны написать идеальную программу. Звучит неприятно? А не должно бы. Примите это, как аксиому. Осознайте это. Отпразднуйте это. Потому что идеальных программ не бывает. Вряд ли вы станете первым, кто напишет такую. И если вы не смиритесь с этим фактом, то просто растратите жизнь и энергию в погоне за бесплодной мечтой”, — Эндрю Хант, “Программист-прагматик. Путь от подмастерья к мастеру”.

Читайте также:

Читайте нас в Telegram, VK и Яндекс.Дзен


Перевод статьи: Zachary Minott, “Programming Is an Art — Stop Treating It Like It’s Not”

Предыдущая статьяМикрофронтенды  -  а почему бы и нет?
Следующая статьяСравнение Go и Rust через написание CLI-инструмента