Я чёртовы сутки просидел над таской. Нужно было спроектировать самостоятельный модуль, а людям с тяжелой формой перфекционизма нельзя давать задачи на проектирование.
У меня была неделя — целая бесконечность, которой мне не хватило. Снова и снова я перебирал в голове варианты использования того, что должен сделать, но картинка идеального модуля не клеилась. Всегда находился кейс, который хорошо показывал: такой дизайн — говно. Я думал, играл на гитаре, пробовал писать, тупил в монитор, гуглил, играл с детьми, снова думал — голова всегда была занята дурацким модулем.
В последний день я был на пределе, потратил двадцать часов на работу не вылезая. И вот — вечер воскресенья, я безумно хочу спать, но всё ещё сижу и пытаюсь придумать подходящее название для какого-то класса в своём псевдокоде, чей дизайн, конечно же, отправиться на помойку сразу, как только я его закончу, потому что он слишком неидеальный. За несколько часов до дьюдейта у меня не было ничего, кроме убитой поисками недели.
В понедельник утром я отправил пулл реквест. Его приняли с восторгом. Но способ, на который я пошел… вот уж никогда не думал, что отважусь на такое.
Говорят, разработка — коллективный труд. Я бы сказал по-другому: в разработке коллективное все, кроме самой разработки. Коллективный результат, коллективные обсуждения, синкапы, где вы проговариваете планы. Но сам процесс работы над кодом — просто солипсически изолированный от остальных людей.
Когда задачи распределены (а описание задачи — это 1% от дела), каждый сам за себя. Ты продумываешь свой код один, пишешь его один — причем не дай бог кому заглянуть в твой монитор в этот момент. Ты выбираешься из своей головы в люди, когда у тебя уже есть, что им показать. Вы обсуждаете, а потом снова изолируетесь в своих одиночествах.
Показать неготовый набросок — катастрофа. Как будто тебя увидят не просто голым, а без кожи, без черепа. Увидят все твои обычные несовершенные мысли, которые еще не оформились в умные решения.
То есть “коллективная работа” это не какой-то десятимозговый организм, где все вместе, все в десять раз быстрее, лучше, и купаются в синергии. Коллективная работа — это все та же работа в одиночестве, просто с ритуалом скидывания наделанного в одиночестве в общую кучу.
В готовых проектах намешаны строки сотен людей, и сливаясь в одном файле, они теряют авторство. Но нельзя прийти в команду и сказать “вот вам мои руки, мозжечок, и правая дуга
Чтобы чувствовать себя частью команды, надо приносить коллективу результаты, рассказывать о них и слушать. Это всегда путь тысяч компромиссов. А с компромиссами у меня большие проблемы.
Вот один из худших — если хочешь работать хорошо, иногда нужно писать плохой код, чтобы успевать за сроками. Я попробовал, и не смог. Не знаю, болезнь это, издержки чсв или что-то ещё, но я просто не могу закоммитить то, что считаю говном. С одной стороны, вроде это и не проблема. Качество моих решений создаёт мне репутацию парня, который работает оправданно долго. Мне никогда не дают таски, которые горят. потому что я сразу начну «трахать всем мозг». Меня спрашивают, почему так долго, я доходчиво объясняю, какие проблемы я пытался решить, почему это не тривиально, и почему важно было сделать это по-настоящему качественно. Меня не слушают, но верят.
Почему-то так важно, чтобы люди думали — совершенны не только мои результаты, но и мои мысли. А если кто-то увидит мой процесс
Конечно, я слишком часто оказывался в ситуациях, когда мне не хватало понимания или мозгов, что бы сделать таск идеально. Но я всегда считал, что помощи просят только слабаки. Это тоже часть самообмана. Якобы чтобы стать достойным коллектива, надо уметь быть абсолютно самостоятельным.
Другими словами — чтобы я чувствовал себя полноценным, мне хочется одновременно быть и в коллективе, и одиночкой внутри него. Чувствуете противоречие? Я тоже, но ничего не могу поделать. И путь обмана и самообмана всегда казался мне приятнее пути компромиссов.
У меня есть друг, тоже разработчик. Мы никогда не работали на одной работе, у нас совершенно перпендикулярные стеки, но мы очень много обсуждали программирование. Работая на примерно одинаковых должностях мы очень любили встретиться, и поврать друг другу вдоволь, как круто мы всех разносим на своих работах.
Тот момент, когда тебя впервые называют Senior — охеренный, он случился у нас одновременно. Болтая, мы высмеивали своих коллег (иногда выдуманных), потому что наша с ним дружба всегда содержала очень высокий градус конкуренции и взаимного уважения. Нельзя было просто так прийти и сказать: «Антоха, а вот сегодня я по-настоящему облажался». Мы два самозванца, которые раздувают свою самооценку до астрономических масштабов, чтобы спастись от своей никчёмности.
Но когда моя неделя на проектирование модуля подошла к концу, от никчемности было уже не спастись.
Мне в скайп позвонил Антоха. Хотел обсудить, как круто он сегодня нахамил ПМу, которая не понимает, как устроена разработка. Видимо, я был в таком отчаянии, что самооценка не сработала. Я просто пошарил экран, открыл описание таски, и спросил: «Как мне это сделать?». Это было мощное нарушение негласного контракта нашей дружбы, но Антоха просто сказал: “открывай IDE”.
Код надо было писать на C#, с которым он никогда не работал, поэтому в голове промелькнуло — потрачу кучу времени бестолку. Лучше уж поспать, и на синке сказать, что эстимейт был неверный, буду работать дальше. В IDE был как раз открыт текстовый файл, где я описал последний вариант дизайна модуля. И Антоха сразу — «Я бы назвал эту штуку вот так.». Охереть можно, название подошло идеально.
Он начал задавать вопросы — почему тут так, это что такое, как эти вещи связаны. Работа закипела. Мы много спорили в процессе, но это как интерактивное код ревью, причем такое, которое делается на совесть (когда не просто указываешь на проблемы, но и предлагаешь решение). Мы быстро ушли от псевдокода. Солюшн, фолдеры, интерфейсы, дока, имплементации, IoC. Модуль не получался идеальным, он получался хорошим, а тот факт, что так считал не я один — легко побеждал мой перфекционизм.
Мы сделали недельную работу за несколько часов. Не закрывая скайп, я довольный вбивал git commit, push. Вместе написали дескрипшн к пулл реквесту. Я сказал, что для меня было честью работать вместе, и ушёл спать.
На следующий день я стал всё это обдумывать, и понял, что произошло какое-то дерьмо. Антоха не знает C#, никогда не работал с дотнетом, но работал со мной на равных, если не лучше. Получается он что, засранец, лучше меня что-ли?
Сразу захотелось поделать его работу вместе с ним, чтобы в очередной раз проверить себя. Но как такое предложить, я не знал. Решил подождать, вдруг сам попросит, втайне начав изучать его стек. И он попросил. Пошарил экран, показал, где застрял. Я сразу увидел несколько вариантов решений. Начали обсуждать, он принялся кодить. Быстро и круто. Из меня js-ник, как из гофера дженерик, но я действительно ему помог. Хрен его знает, как это устроено, но с тех пор, всегда, когда я пишу код — у меня в голове воображаемый Антоха, который мне помогает. Ты невольно примеряешь манеру
Есть, правда, одна проблема. Дурацкие NDA. Я её игнорирую, потому что верю, что Антоха не понесётся выкладывать подсмотренный IMessageReceiver в свой инстаграм.
Я долго думал, почему это работает, и решил, что тут дело не в свежем взгляде. Каждый разработчик подходит к задачам по-своему. Есть вещи, которые человек с моей манерой
Но та концепция командной работы, которая есть сейчас — не работает. Когда тебе страшно быть слабым звеном, страшно осознавать, что твой вклад меньше, чем у других. Что если ты в чем-то слаб — команда тебя выкинет.
Я слышал у сценаристов, которые сидят вместе и толпой на ходу сочиняют сюжеты, есть термин “эмоциональная оголенность”. Это состояние, когда люди вообще не боятся думать сырые мысли вслух и публично, а чужие мысли, звучат как свои. Так вот, если найдёте себе партнера, с которым сможете работать так же легко, как с собой, считайте, что все ваши профессиональные проблемы решены.
Сильнейшее лекарство от всех сомнений и профессиональных болячек — когда кто-то относится к твоей неидеальности нормально.
Автор: Philipp Ranzhin