В "обывательской психологии" принято делить мозг на полушария: левое отвечает за логику, анализ, рациональное мышление, а правое - за эмоциональное восприятие, интуицию, воображение. И да, везде сразу же после таких объяснений пишут, что у всех людей работают оба полушария, что крайностей не бывает и т.п. Но факт остаётся фактом - кто-то больше склонен к рациональности и анализу, а кто-то - к эмоциям и интуитивному восприятию.
Большинство моих знакомых (причём подавляющее большинство) считают, что я программист. Ну пусть будет так для упрощения. А про программистов в той же самой "обывательской психологии" принято считать, что они математики, исключительно рационально мыслящие люди. И пожалуй да, соглашусь, без умения анализировать, мыслить рационально не написать хорошего кода. Но ведь для того, чтобы родилось хорошее программное обеспечение, не только код должен быть хорошим, хорошей в первую очередь должна быть архитектура системы.
По-хорошему, обычно всё начинается именно с проектирования это самой архитектуры. Её достаточно легко спроектировать, когда есть чёткое понимание того, что должно получиться. Например, хорошо формализованное техзадание. А когда его нету? Когда проект живёт и развивается вместе с разработкой? Если конечные требования совершенно не ясны, а есть лишь наброски, какой-то эскиз описания. Есть представление о том, что необходимо сделать, ровно на данный момент, и есть чёткое осознание, что это представление будет меняться и довольно сильно.
И вот тут начинается уже именно творческий поиск, проверка каких-то подходов, прокручивание в голове моделей решений. Необходимость спроектировать архитектуру системы без чёткого понимания этой архитектуры -- это одной из самых интересных занятий в моей профессиональной деятельности. Идея захватывает тебя почти полностью, становится навязчивой. Ты думаешь о ней неделю, другую -- уже полученный опыт подсказывает, что нельзя браться сразу за конкретику, такие масштабные идеи обязательно должны пожить в голове, уложиться, обрести формы. Ты ходишь и думаешь, моешься в душе и придумываешь, принимаешь пищу и прикидываешь, ложишься в постель ночью и продолжаешь крутить в голове какие-то детали, кусочки, связи, вскакиваешь пораньше утром окрылённый идеей проверить, поддерживает ли какую-то функциональность выбранный язык программирования. В любое время дня внезапно бросаешься в гугл проверить ещё одну догадку, посмотреть возможности каких-то инструментов, глянуть подходы тех, кто решал уже какую-то схожую подзадачу. Потом обязательно нужна стадия экспериментирования: это помогает понять возможности инструментов, выбрать какие-то из них для применения, ещё больше конкретизировать модель архитектуры в голове. Понять, например, что выбор какого-то конкретного инструмента сейчас не важен, что он будет легко отчуждаемый и заменяемый, и сознательно выбросить эти подзадачи из головы, оставить их на потом. Или наоборот, понять, что какие-то задачи можно будет решить только так, и только таким способом -- и тоже учитывать это.
И вот ты садишься писать код. Ещё раз подчеркну, понимания того, что должно получиться в результате, нету и никогда не будет. И вот тут начинается самое красивое, та красота, которая не раз уже восхищала меня, вызывала желание как-то выразить её, поделиться. Красота в рациональной интуиции. Ты делаешь какие-то кусочки, переделываешь их, строишь связи, решаешь какие-то маленькие задачки. Заново осмысливаешь инструменты, перелопачиваешь в голове всю модель архитектуры, и снова делаешь, что-то делаешь. Не пишешь комментарии в коде -- они пока совершенно бесполезны, целые куски кода будут выброшены, переписаны, заменены. Красота в сложности, красота в простоте. Красота в интуитивности подхода -- какие-то кусочки добавляются не потому, что они нужны, а потому что интуиция говорит -- так надо, вот это надо сделать так. Мозг неимоверно напрягается, это всегда выливается в сильный стресс -- сознание постоянно пытается держать всю модель архитектуры в голове, каждый маленький кусочек приложить к этой модели, понять, как он повлияет, как потом можно будет его использовать, как можно будет его развивать и улучшать. Напряжённое верчение всего этого в голове в попытках предугадать, как сделать лучше, что понадобится, а на что не стоит тратить времени, что необходимо сделать и жёстко зафиксировать (потому что потом много чего будет от этого зависеть), а что не настолько важно и можно будет легко переделать, размышление о том, как сделать так, чтобы максимальную часть архитектуры можно было легко переделывать. На всё этот постоянно и очень сильно давит понимание того, что это основа, что от того, насколько хороша будет архитектура, будет зависеть то. как легко и быстро потом будет строиться логика приложения, насколько легко и гибко всё будет меняться, чтобы не спотыкаться об ограничения, заложенные в самый фундамент. От напряжения, сложности модели в голове и огромного количества информации эти кусочки начинают рассыпаются, разум не способен эффективно отслеживать столько связей между кусками в голове, что-то начинает даже ускользать, напряжение достигает предела и вдруг ЩЁЛК! Какая-то очередная логическая цепочка замкнулась и возникает что-то окончательное, что-то нащупалось и зафисксировалось именно в текущем виде в голове. Модель архитектуры в голове приобретает какие-то конкретные очертания в виде программного кода. Но и даже это ещё не самое красивое!
Потом начинается уже такой своеобразный этап реализации этой архитектуры -- её детализация, развёртывание, прописывание вот тех самых кусочков, разворачивание заглушек в коде в какой-то функционал, документирование исходных кодов. Тут уже неплохо бы иметь какие-то прикладные задачи, чтобы потихоньку их начинать решать: пытаться использовать эту новую архитектуру в каких-то частях программного обеспечения, или переделывать старые куски кода на новый лад с использованием этой архитектуры (рефакторинг). И вот наша основа, наш фундамент уже обретает форму, всё меньше кусочков кода переделывается, всё больше связей возникает уже именно в коде, а не в абстрактной модели в голове. Прикладная задача обкатывает архитектуру, направляет её, показывает недостатки, которые устраняются, добавляет идеи по её развитию. Всё больше акцент смещается с расширения и реализации фундамента, на его использование и построения уже логики приложения на этом фундаменте.
И у нас рождается новый инструмент - архитектура программного обеспечения. Расширять фундамент насущной необходимости не остаётся, и всё сводится уже к использованию этого инструмента. Инструмента настолько сложного, изящного и функционального, что самому автору приходится УЧИТЬСЯ использовать этот инструмент! И вот тут явственно проступает красота, проявляются какие-то черты, заложенные в инструмент ещё тогда, когда он был зыбким наброском, какие-то интуитивные решения, которые вот сейчас оказываются верными! Это настолько красиво, это, пожалуй, самое красивое, что есть в моей работе! Ты используешь инструмент так, как и не предполагал его использовать, когда проектировал и продумывал, и он работает эффективно! А если чего-то не хватает, то оно легко добавляется, не нарушая архитектуры и связей, не тянет за собой глобальных переделок, не требует перемен в коде, который уже написан с использованием этого инструмента. И не раз, и не два ты натыкаешься на какие-то кусочки, про которые уже сам не помнишь, почему было сделано так, зачем было это добавлено тогда, ведь совершенно не ясно было, что это понадобится именно в таком виде.
Это удовлетворение, настоящее творческое удовлетворение. Это радость художника, осознающего, что вот тогда в самом начале он совершенно интуитивно мазнул кистью именно так, и тот мазок именно сейчас добавляет красоты в картину целиком. Удивлять результатом своего творчества самого себя -- не самый ли вообще красивый аспект творчества?
К чему я это всё? Ну кроме достаточно простого желания каждого человека делиться красотой в себе, хотелось показаться, что то самое "интуитивно-эмоциональное" правое полушарие в моём деле не менее важно и необходимо, чем левое, рациональное и аналитическое. И показать, сколько красоты в пляске каких-то маленьких искорок именно в том месте, где оба эти полушария соединяются. Не судите слишком строго, ладно?