Чего боятся программисты?
У программистов, как и у всех людей, есть фобии. Кто-то боится маньяков, кто-то — утки, которая следит за человеком, кто-то впадает в панику при нарушении привычного распорядка дня, кого-то начинает штырить от внезапно пропавшей связи в смартфоне.
Все это, если можно так сказать, общечеловеческие фобии, присущие целым поколениям, странам и континентам. Но есть и чисто профессиональные фобии, которые вряд ли будут понятны представителям других профессий.
Фобии — это зло, как в жизни, так и в работе. Потому что предмет страха — выдуманный, а сам страх — настоящий. И последствия страхов вполне реальные.
В этой статье — истории реальных программистов и их профессиональных фобий, которые мешали им жить и работать в свое удовольствие. Люди реальные, имена вымышленные.
Константин
У Кости проблемы с уверенностью в себе. Программистом он стал недавно, раньше был сисадмином, хоть и имел высшее инженерное образование.
Повезло Косте, или нет — не знаю, но он сразу попал в ученики и подчиненные к довольно опытному и уверенному в своей гениальности, и вообще в себе, программисту, который в первый же день взял быка за рога — «щас буду тебя жизни учить».
Учил сразу всему — и алгоритмам, и фреймворкам, и запросам, и архитектуре, и общению с пользователями, и подходам к разработке. Все бы ничего, но очень авторитарно. Наставник считал, что единственно верный вариант решения любой задачи — его собственный.
Если у Кости был свой вариант, Костя получал по заслугам. У него ее было ни опыта, ни наглости, ни умений, чтобы свое мнение отстаивать, поэтому он всегда оказывался в дураках. Наставник не просто убеждал его — он втаптывал его в землю. Это и стало главной фобией Константина. Хотя, в той ситуации, с тем начальником, это была даже не фобия, а вполне нормальная, естественная реакция на неадеквата. Как на собаку бешеную.
Потом Костя ушел на другую работу, и фобия ушла вместе с ним.
Здесь начальник был вполне адекватный, правда, он не сразу рассмотрел, что с Костей что-то не так. Думал, просто особенность какая-то — слишком много Костя тратит времени на раздумья об оптимальном способе решения задачи.
Норм на эту тему вроде нет, но думать 8 часов о том, каким из трех известных способов лучше решить задачу, а потом сделать за 1 час решение — вроде бы перебор. И это при том, что все три варианта Косте известны и понятны, и оптимальность всех трех решений примерно равна.
Помогало Косте «раступить» прямое указание реализовать какой-то определенный вариант. Но такой подход не нравился начальнику — не хотел он быть нянькой при программистах.
Также, опытным путем удалось выяснить, что на Костю нет смысла давить, вроде «давай уже реши что-нибудь и делай» — тогда он вообще впадал в ступор, вплоть до депрессии, и решать его задачу приходилось кому-то другому.
Начальник, как и коллеги, были близки к решению, что Костя — просто скучный, депрессивный, туповатый задрот, и надо гнать его в шею.
Однако, решили дать ему еще один шанс. А точнее — себе дать шанс разобраться в Косте. Создали правильную атмосферу, в которой тот начал раскрываться, и в конце концов рассказал историю о своем первом наставнике. Хотя, Костя не считал ее чем-то выдающимся.
Начальник после рассказа Кости фобию уловил, и попробовал изменить свое поведение. Он понял, почему Костя так долго выбирает вариант решения — по инерции, на подсознательном уровне, боится, что его опять втопчут в землю, если он выберет «не тот» вариант.
А по сути, выбора-то никакого и не происходит в эти 8 часов — Костя просто откладывает неизбежное на максимальный срок, чтобы подольше побыть в иллюзии тревожной безопасности.
Меры начальником были предприняты несложные.
Во-первых, он долго и обстоятельно с Костей разговаривал. Объяснял то, что не удосужился рассказать первый наставник.
Привел банальную арифметику — все три варианта решения можно сделать за три часа, вместо восьми часов ничегонеделания. Да, в живых останется только один вариант, но зато Костя мышцу прокачает — опыт и навыки программирования для него не были лишними.
Во-вторых, в течение некоторого времени, периодически, снижал важность задач — от их решения, в большинстве случаев, не зависит судьба мира и клиента.
В-третьих, стал ежедневно наблюдать за Костей — и лично, и через решенные задачи в трекере. Просто для того, чтобы поймать момент, когда тот опять окажется во власти фобии.
В результате, за 1–2 месяца, фобия ушла, и Костя стал полноценным участником команды. А через некоторое время — лучшим в команде.
Геннадий
Геннадий был толковым программистом. Не самым лучшим в мире, но в определенных нишах, которые он интуитивно для себя выбрал, равные ему встречались редко.
Гена довольно долго работал один, но всегда держал связь с мировым сообществом, потому понимал, как стоит писать код, а как не стоит.
Так получилось, что свои продукты Гена часто распространял, в основном бесплатно, и с открытым кодом. Было это в те времена, когда программисты-потребители еще заглядывали внутрь того, что скачали, клонировали или форкнули.
И вот эти «заглядыватели внутрь» создали Геннадию фобию — они сказали, что Гена пишет классный код. Отныне писать говнокод Гена не имел морального права.
Любую работу, большую и маленькую, Гена должен был делать хорошо — так, чтобы при распространении любой программист мог сказать: написано толково и со вкусом.
Вот эти самые слова — оценки других программистов — стали для Гены наркотиком. Он почти не писал код «для клиента», или «для решения задачи клиента» — он писал код для получения лайков от программистов. Почти все его решения были максимально абстрактными, отторгаемыми, легко применимыми в других решениях и у других клиентов.
Самое странное, что у Гены получалось. Он создал десятки решений, каждое из которых, с одной стороны, полностью (и даже с избытком) удовлетворяло потребности заказчика, а с другой стороны — становилось хитом при бесплатном распространении среди программистов.
Но потом у Гены начались трудности — он не мог больше писать «просто код». У каждого клиента, на каждом проекте и в каждом продукте, есть задачи, которые решаются просто, если не мудрить. И решаются сложно, если мудрить, пытаясь сделать красивое, абстрактное решение, подходящее всем.
Проблема усугублялась тем, что Гена не публиковал все подряд — на это не хватало ни сил, ни времени. Просто выложить код в открытый доступ — недостаточно для получения лайков, нужно еще применять определенные усилия для продвижения, независимо от площадки. В результате у Гены образовалась очередь из решений, которые были рождены для всего мира, а пользовался ими один клиент.
Гена не был идиотом, и понимал — что-то не так. Он делает классные, красивые, технологичные и изящные решения «в стол». Такая ситуация его угнетала. С одной стороны, хотелось найти время и все опубликовать, но со временем были трудности — Гена был хорошим и, следовательно, востребованным программистом. С другой стороны, его не покидало ощущение, что у него фобия, или мания, которая заставляет слишком стараться при решении самых обычных задач. Все чаще он задумывался о том, чтобы бросить свои попытки сделать из каждой строки кода шедевр, т.к. понимал, что эффективность кодирования, а следовательно, и текущие доходы станут значительно выше. В конце концов, монетизировать лайки других программистов Гена не умел.
А фобия продолжала усиливаться. Решая каждую задачу, Гена задумывался: как сделать так, чтобы код получился отторгаемым, и его можно было вытащить и опубликовать, чтобы использовать на других проектах, своих и чужих? Сами понимаете, сколько времени пожирал такой подход. Он не только заставлял тщательно продумывать архитектуру и связи, но и модифицировать условия задачи.
Если Гену просили сделать проверку вводимых пользователем данных, то он делал абстрактный настраиваемый компонент, который мог выполнять любые проверки в любой форме. Если Гену просили нарисовать диаграмму, вроде воронки продаж, то он делал компонент для рисования практически любых диаграмм. Если Гену просили сделать виджет с количеством задач на исполнении у текущего пользователя системы, то он делал компонент для рисования любого количества виджетов, отображающих любые данные системы, в которой он исполнялся. Если Гену просили сделать веб-сервис, который возвращает цены на список товаров, то он делал универсальный сервис, возвращающий любые, возможные по уровню доступа, данные системы, скомпонованные по переданным в теле настройкам.
Проблема усугублялась при смене места работы. Пул решений, которые Гена не успел опубликовать, оставалась на предыдущей работе — нарушать чьи-либо права Гена не хотел. Все попытки рассказать своим преемникам о крутизне оставленных решений заканчивались неудачей — новые программисты предпочитали выкинуть универсальные решения Геннадия и создать свои. Не крутые, не изящные, не абстрактные, но свои. Оно и понятно — программистам платили за создание своего кода, а не за использование чужого. Да и немного подняться в глазах начальства, поливая говном продукты своего предшественника, совсем не грех.
Фобию Геннадия вылечила сама жизнь. После нескольких переходов между компаниями соотношение между опубликованными и потерянными для сообщества решениями стало угрожающим — 1 к 9. Гена понял, что потратил годы жизни зря. Не совсем зря, конечно — опыт-то остался, и когда перед ним стояла задача создать универсальный компонент, равных Геннадию не было. Но таких задач было, на разных работах, от 10 до 50%.
Остальные задачи он перестал решать абстрактно. Точнее, он придумал для себя другой уровень абстракции — личный опыт. Не обязательно создавать именно решение, осязаемый продукт, который можно кому-то дать прямо сейчас. Продуктом является личный опыт решения такой задачи, который появлялся у Гены, ведь на воспроизведение своего кода нужно намного меньше времени, чем на его создание в первый раз.
В итоге, по собственной оценке Геннадия, его суммарная эффективность выросла в 3–5 раз. В эту цифру включались как абстрактные компоненты, так и контекстно-зависимые решения.
Но самое важное — у Геннадия пропала очередь на публикацию универсальных решений. Да, создавать их он стал меньше. Но публиковал 100%. Он просто перестал делать решения, которые не мог сразу опубликовать.
В итоге, общее количество универсальных решений, дошедших до публикации и, следовательно, собравших для Геннадия лайки, выросло в 2–3 раза, потому что исчезла воронка потерь (1 к 9).
Аркадий
Аркадий — продукт 20 века. Предыдущие пациенты тоже родились в прошлом тысячелетии, но Аркадий успел в нем прожить целую жизнь, и встретил новый век уже взрослым, сформировавшимся человеком. Он писал код, когда еще не было интернета, мобильных телефонов и на предприятиях почти не было компьютеров. В те времена программистов и продуктов было настолько мало, что код можно было читать, как журналы — ждать очередного выпуска, смаковать, обсуждать (только в офлайне, разумеется).
Во времена становления Аркадия, как программиста, и задачи были другими — более фундаментальными, жизненными и осмысленными. В те времена компании не заказывали себе то, что модно — только то, что действительно нужно. Уровень владения технологиями тоже требовался совсем другой — нужно было знать все. Хотя, конечно, выбор в те времена был более скудным. Но без ассемблера было не обойтись, тогда даже драйвера приходилось писать самостоятельно, не говоря об интерфейсах обмена данными.
Вся эта реальность наложила на Аркадия серьезный отпечаток — он совсем перестал бояться трудностей, т.к. мог создавать решения любого уровня, а точнее — мог создавать комплексные решения, содержащие в себе все уровни, от низкого до высокого.
В 21 веке Аркадий столкнулся с неприятной для себя тенденцией — чем дальше, тем меньше его понимали другие программисты, которые становились все более узкими специалистами и, если можно так сказать, потребителями. Когда возникала новая задача, программисты бросались искать готовые компоненты. Причем такие, на освоение которых нужно как можно меньше времени. Чем лучше справка по API и проще создание вызов компонента, тем лучше. И самое непонятное для Аркадия — программисты больше вообще не смотрят код. Просто компонуют продукт из готовых решений, минимальными усилиями делают сборку, и в продакшн.
Ни о каких сложных, больших, комплексных решениях программиты не помышляют. О таких продуктах теперь думают только корпорации, в штате которых сотни и тысячи программистов, каждый со своей специализацией.
Реальность современного мира IT создала достаточно большой разрыв между Аркадием и остальными программистами — они перестали понимать друг друга. Что, как и почему делает Аркаша, никто не понимал уже давно. Его решения были масштабными, сложными технически и методически, с высоким уровнем изоляции компонентов и глубоким философским смыслом.
Уже давно не было людей, которые понимали его решения целиком, даже со стороны пользовательского интерфейса, не говоря уже о коде, который смотрели только единицы, и то только при возникновении ошибок.
Ну и что здесь такого, спросите вы? Никто давно не смотрит на чужой код, пока не будет ошибки или задачи по его доработке или рефакторингу.
Да, только Аркадию этого никто не объяснил. Или объяснил, но он не понял. Или понял, но не принял. Или принял, но забыл. Не суть важно.
Важно, что Аркадий до сих пор искренне полагает, что весь мир программистов устроен так же, как он сам, что все смотрят в его код, разбираются в его решениях, могут дать дельные советы по архитектуре и интерфейсу. И сам Аркадий ведет себя именно так — вникает в суть всего, с чем работает.
Уверенность в том, что его код читают, заставляет Аркадия работать соответствующим образом, тратя массу времени на бессмысленную оптимизацию.
Уверенность в том, что в его решениях хотят и будут досканально разбираться, постоянно вгоняет Аркашу в депрессию — мир постоянно показывает, что никто ни в чем разбираться не хочет. Иногда, работая с людьми на проекте, Аркадий год думает, что все во всем разобрались, чтобы потом внезапно убедиться — опять все по верхам, лишь бы быстрее, лишь бы не влетело.
Переживания из-за такого устройства мира могут выбить Аркадия из русла нормальной работы на несколько дней. Бывает так, что за эти несколько дней он не выдает вообще никакого результата, от чего начинает страдать еще больше.
Каждый раз, убеждаясь, что мир не соответствует его ожиданиям, Аркадий удивляется и возмущается. Но со стороны видно — в душе удивления уже нет, или почти нет. Удивление наигранное, не настоящее.
Аркадий со временем свыкается с мыслью о том, что люди вокруг не соответствуют его ожиданиям, а он сам — не такой, как они. И вот эту свою непохожесть он и пытается сохранить, оттого и продолжает картинно удивляться, досконально разбираться в чужих решениях (даже если не будет их использовать), и требовать от других соответствия его критериям и подходам. Говоря проще, Аркаша пытается сохранить свою фобию, хотя давно понял — под ней давно нет никакой почвы. Фобии — они такие, с самозащитой.
Резюме
Я написал про три фобии, которые наблюдал вживую, но вы понимаете, что их намного больше — и людей, и фобий.
Фобии — сложные и опасные, потому что не видны. Человек может выглядеть вполне прилично, хорошо и эффективно работать, улыбаться и быть нормальным участником команды, но в то же время иметь фобию, и страдать от нее.
Если вы понаблюдаете за окружающими и, конечно, собой, то можете заметить признаки фобий. Главный признак — важность. Задачи, действия, атрибута, ритуала, подхода, реакции, хоть чего. Когда есть фобия, есть важность.
Проверить, что вы не ошиблись, можно экспериментально, разведкой боем — уберите, выключите то, что для человека избыточно важно, на чем он зацикливается, какое действие вызывает простой или зависание, торможение процесса.
Если ситуация стала лучше — отлично, вы не ошиблись. Если не стала — верните как было, и наблюдайте снова.
Наблюдение и доверие — лучшие рецепты против фобий, но они работают, в основном, у руководителей. Соответственно, у достаточно малого количества людей. И это — только вероятность.
Мало какой руководитель будет незаметно копаться, мягко выяснять, и незаметно наблюдать с целью определить наличие фобии. Намного ведь проще сказать «да пошли вы в жопу со своими соплями, мужики вы или кто». Поэтому фобии останутся, и таскать их придется с собой. И прятать, чтобы опять в жопу не послали.
Но для правильного руководителя работа с фобиями — это настоящий клад, потому что открывается почти прямой доступ к мотивациям человека. Особенно, если руководитель сможет помочь человеку в преодолении фобии — такое не забывается никогда, как исцеление от какой-нибудь страшной болезни.