Как писать скучный код

Если кому-то далекому от программирования за бутылочкой пива пожаловаться, что тебе иногда скучно писать код, то боюсь удивление вызовет только слово "иногда". Ведь что бы было интересно и весело нужно делать что-то эдакое! Игры, например. Или какой-то популярный и социально значимый проект, типа фейсбука. Ну, на крайний случай должно быть что-то перспективное в денежном плане. Криптостартап, или хотя бы монетизируемое мобильное приложение. А если ты несколько месяцев подряд пилишь очередной REST-бэкэнд для бизнес-процессов клиента на PHP, то это понятное дело не круто и не весело. И по тому совсем не странно, что скучно. А раз скучно, то нужно со всем этим завязывать, что бы потом не было мучительно больно за бесцельно прожитые годы.

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

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

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

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

Любое занятие перестает быть скучным, как только вы в него вовлекаетесь, собираете на нем все внимание, начинаете жить его внутренними процессами. Йоги и буддисты могут часами просиживать в состоянии медитации и им не скучно, по тому, что они полностью вовлечены в процесс наблюдения своего внутреннего состояния. Что уж говорить о бухгалтерах, охранниках, и других профессиях, которые принято считать скучными.

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

Не всегда будет получаться

Мы с вами живем в реальности, а не в идеальном мире фантазий коучей личностного роста. Что-то у нас получается, что-то нет. Иногда получается настроиться на работу, иногда нет. Что-то дается сложно, что-то легче. И это нормально. Это рабочий процесс.

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

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

Вовлечение и вовлеченность

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

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

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

Как разогреться?

И так, все что нам нужно - начать накапливать сигнальную массу в нейронах.

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

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

Если все еще тяжело сконцентрироваться, пообещайте себе, что проработаете только пять минут, после чего вернетесь к чему-то более интересному. Двигайтесь такими пятиминутными спринтами. Скорее всего даже по окончанию первых пяти минут вы скажите - "Эй! Я еще не все!" А может быть потребуется 3-4 таких захода и полчаса-час рабочего времени.

Главное, не переживайте и не ругайте себя! Это все не лень, а естественный процесс набора концентрации.

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

Не меняйте инструменты

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

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

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

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

Сконцентрируйтесь на методах

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

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

Программирование дисциплина инженерная. От латинского слова ingenium — "искусность", "изобретательность". Да, инженерия опирается на науку, но у нас никогда нет таких жестких рамок, как в математике, или физике. Даже для решения скучных задач спустя много лет можно находить какие-то искусные инженерные решения. В поиске таких решений и состоит смысл жизни программиста (как профессионала).

Цитируя великих:

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

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

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

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