Главная » Хабрахабр » Я растерял веру в разработку, выгорел, но меня спас культ инструмента

Я растерял веру в разработку, выгорел, но меня спас культ инструмента

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

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

Чем бы оно ни было, я эту фигню не понимал никогда.

А я всегда пытаюсь понять, как тупицы стали тупицами, и почему тупицей не стал я. Сторонники культов кажутся мне непроходимыми тупицами. — понял, что все-таки стал. Начал думать и бам! И конечно за этим есть история.
Я тупица-культист, который восхваляет F#.

Я начал карьеру как junior C# dev. Сырой тогда еще Xamarin, разработка под android. Первые шаги на первой работе были наполнены болью. Я в одиночку делал приложение по скриншотам и гифкам из iOS версии. Все билдилось через раз, проблем была куча, а единственный фидбек, который я получал — «а че не как на картинке?». Это был кошмар, и я быстро ушел.

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

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

На ломанном английском я откровенно врал: «ол паст вик ай серч фор баг. В какой-то момент я заметил, что делаю все меньше и меньше, но ничего не меняется. Вил континью» Стил ноу саксес.

«Ок, Фил, саундс грейт», говорили из-за океана.

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

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

Нихера не получилось.

Код на помойку, беру новую идею, бросаю, все повторяется несколько раз. Решил — идея говно. Как же так? Рассказываю коллегам, они недоумевают. Ведь я же делаю все в точности так же, как и те, кто уже урвал свой кусок.

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

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

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

Неплохо». Стукнувшись об самое дно, абсолютно случайно прочитал статью на Хабре про F#, попробовал, и такой: «Хм! Мой работодатель с удовольствием оплатил мне месяц обучения (он, правда, об этом не знает).

И вот я понял, что могу перенести на F# любой свой проект. F# было не сложно изучать, у него тот же рантайм, что и у C#, а функциональный подход к программированию я и так ежедневно применял в TypeScript. В тех командах, где я работаю сейчас — я крутой, а в команде, скажем, разработчиков F# я мог бы претендовать, самое большее, на позицию помощника уборщицы. Оставим мой технический скилл за скобками, потому что скилл — штука относительная.

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

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

Минус 30, я в осенней куртке человека, который собирался поехать домой в теплой машине. Через пять минут паники и хаоса остался только старый обгорелый кусок дерьма и видюшки всяких оболтусов, которые потом набирали тысячи просмотров в местных «подслушано». Денег на такси нет, общественный транспорт для черни. Задолбанный в конец, совершенно разбитый морально. Дома нужно помочь жене с ребенком, поесть, уложить их спать, сделать тысячу вещей. Я пошел домой пешком, километров десять. Но настает ночь, отвлекающие дела заканчиваются, отмазки тоже, и я остаюсь один на один с разочарованиями и бессонницей — я ни на что не годен, ничего ни с чем никогда не получится.

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

Я сел и решил писать маленький цифровой биом на F#, где юниты на машинном обучении будут взаимодействовать сами с собой, развиваться, а я буду крутить параметры и смотреть, во что они этот мирок превратят.

И да, возможно я тогда немного поехал рассудком.

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

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

У меня было видение проекта, в общих чертах. С F# я применил тот же подход. Ты продумываешь один кейс за другим, и в какой-то момент понимаешь — все, ты уже знаешь, как это закодить. В голове кирпичик за кирпичиком выстраивается реализация. Мысли не переносятся на ЯП, хоть тебе и казалось, что ты мыслишь как бы на нем. А потом садишься кодить, и понимаешь, что нет. У меня так постоянно.

Я создал txt файл в VSCode, и написал псевдокод функции, которая описывает жизненный цикл моего приложения. Но тут вышло по-другому. Ничего не нужно менять, я только что написал главную функцию проекта. И понял, что мой псевдокод — валидный F#. Вот есть функция жизненного цикла. Окей, поменял расширение у файла, добавил его в чистый солюшн. Она принимает текущее состояние мира, штуку, которая его обрабатывает (собственно, сам мир) и выплевывает обновленное состояние, штуку, которая превращает состояние в набор параметров для ИИ и обратно, и сам ИИ, который получает свои параметры, и плюется принятым решением.

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

Я пишу то, что у шарпистов-джавистов называется крутым термином Inversion of control container — функция, которая берет функцию жизненного цикла, и пробрасывает ей в параметры функции из моих модулей (II, Game). Но суть тут в том, что мне уже не нужно думать об архитектуре. Но я получил главное — как только красные подчеркивания исчезнут, и проект можно будет сбилдтить — решение готово. VScode подчеркивает ее красным, потому что ни модулей, ни функций в них еще нет.

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

Никаких интерфейсов, абстрактных фабрик, Ioc-ов, всех этих DefaultInterfaceNameClass и прочей херни, которую мне в C# надо сделать еще до того, как я пойму, что я вообще хочу сделать. Вся архитектура — 10 строк кода, написанные за минуту. Ты берешь, и пишешь тупой код, который просто решает задачу, а он у тебя получается еще качественней, чем твои энтерпрайзные страдания на этих джавах-шарпах.

В местах, где на C# я бы писал план работы в комментах к коду, я фигачил работающие функции. Я делал это, просто вбивая свои мысли в редактор, как будто я думал на F#. Сбилдил. Вместо описания десятков, а потом и сотен интерфейсов — один маленький файл с доменной моделью приложения. За ночь. Получил работающее решение. Вот так просто. С хорошим кодом, который потом не боялся показывать на собесах.

Но я вернул себе веру, и это было главным. Утром я написал на работу, что заболел, и погрузился с головой в проект на неделю, пока не понял, что идея-то моя — уже давно реализована и никому не нужна.

Важно то, что на тот момент я тонул, и мне нужен был спасательный круг. Я не знаю, в чем тут дело — это F# охереннейшая технология, или просто она слишком хорошо подходит именно мне, или она создана именно для таких задач — какая разница? Теперь это для меня не просто бездушная технология — это огромный эмоциональный скоуп. Жизнь кинула мне F#, и я выкарабкался.

Игрушка для задротов...» — тут же вспоминается зимняя темень, горящая тачка, сигарета, примерзшая к губам, подавленное состояние и F#, который меня из него вытащил. Когда кто-то при мне посмевается над F#: «Мертворожденная технология! Моя реакция очевидна — мне обидно, и я зол. То есть, они как будто моего лучшего другана дерьмом обкидали.

Думаю, что так у всех культистов технологий. Это выглядит странно со стороны, но если бы вы прожили тот день вместо меня, вы бы реагировали также. А я тут прихожу, и плюю им в душу. Они влюбились в свои япы, потому что обстоятельства, при которых они с ними познакомились, очень остры лично для них. Я идиот. Ну и кто идиот? Надеюсь, больше не буду.

Если что, про F# тут.


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

[Перевод] Конфигурируйте Visual Studio в вашей организации с помощью .vsconfig

В Visual Studio 2017 Update 15.9 мы добавили возможность экспорта и импорта рабочей нагрузки и выбора компонентов в файл конфигурации установки Visual Studio. Разработчики могут импортировать эти файлы в новые или существующие установки. Проверка этих файлов в ваших исходных репозиториях ...

Тест-драйв nanoCAD СПДС Стройплощадка 8. Часть 1

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