{"id":14285,"url":"\/distributions\/14285\/click?bit=1&hash=346f3dd5dee2d88930b559bfe049bf63f032c3f6597a81b363a99361cc92d37d","title":"\u0421\u0442\u0438\u043f\u0435\u043d\u0434\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u044f","buttonText":"","imageUuid":""}

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

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

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

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

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

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

Я сразу сказал прямо — это не код, это дырявый пакет с мусором, мы всё здесь к чертям перепишем.

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

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

Как у любого стартапа, у этого был ограниченный бюджет. И я убедил всех, что его надо тратить на правильный код, продуманную архитектуру и глубокое тестирование. «Это самая правильная инвестиция, — настаивал я. — Знаете, почему 90% стартапов схлопываются? Потому что у них все начинает валиться из-за ранних ошибок, и весь бюджет уходит на латание дыр в прототипе, из которого они решили растить продукт, не переписывая. А могли бы разрабатывать новые фичи».

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

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

«Эй, вы меня наняли, чтобы повысить качество разработки — мы его повышаем». Но это моя логика. Кроме логики есть ещё эмоции, и я начал сопереживать. На самом деле я понимал, что им не нужно качество. Если вы любите работать на результат — попробуйте меня понять. Представьте, что вы попали в компанию вечного процесса, где релиз вечно откладывается все дальше и дальше, и вы начинаете понимать, что никто к нему особо и не стремится. Как быстро вы сбежите?

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

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

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

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

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

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

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

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

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

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

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

0
397 комментариев
Написать комментарий...
Artemy Abubakirov

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

Украду(адаптирую) пример у дяди Боба: Если хирургу говорят не мыть руки перед операцией из-за того, что так дольше, то любой хирург все равно пойдет мыть. С программистами аналогичная ситуация. Да есть всякие MVP, когда можно не думать о качестве, но если мы говорим о реально продукте, а не прототипе, то "руки мыть надо".

Ответить
Развернуть ветку
Илитный Иксперт

Хорошие программисты не ссылаются на дядю Боба

Ответить
Развернуть ветку
Макс Мухарёв

Почему?

Ответить
Развернуть ветку
Илитный Иксперт

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

Ответить
Развернуть ветку
Макс Мухарёв

Ок, если "Чистая архитектура" так плоха, то какие альтернативы лучше?

Ответить
Развернуть ветку
Илитный Иксперт

Не существует некоей общей архитектуры подходящей асболютно подо все. 

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

Ответить
Развернуть ветку
Макс Мухарёв

Это все замечательно, конечно, но абсолютно нереалистично. Есть разные принципы - SOLID, DRY и т.д. Если им не следовать, то каким образом вы полагаете программист должен структурировать и передавать свой опыт? И каким образом программист должен этот опыт нарабатывать, если у него нет никаких критериев качества архитектуры?

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

Ответить
Развернуть ветку
Илитный Иксперт
но абсолютно нереалистично

Что нереалистично? Понимаете, есть два подхода к обучению. Первый - делать свои проекты, проектировать и т.п. А второй - делать таски которые тимлид дает и читать исключительно хайповую литературу.

Даже такой очевидный принцип как DRY можно понять на собственном опыте (обычно он понимается в первые 2 недели программирования), а можно заучить как считалочку, типа "2-3 раза код написал, значит надо вынести в функцию". И между двумя этими подходами - пропасть. Не поверите, есть кейсы где лучше repeat yourself, например.

И каким образом программист должен этот опыт нарабатывать, если у него нет никаких критериев качества архитектуры?

А у вас они есть? Лол. Вы упомянули SOLID и DRY, но не сказали про KISS. Это четкий маркер. Понимаете, опыт такая штука, он как раз и дает понимаение всех этих критериев, они все исходят из опыта. Принципы - это способ ускорить обучение, подолкнуть получение опыта в нужном направлении, а не основа мышления.

Если им не следовать

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

Программирование и вся эта ебучая архитектура это не рокет саенс. Критерий качества архитектуры ровно один - простота, при соблюдении требований к системе. Грубо говоря, система должна делать A,B,C, желательно D, а в будущем еще E и F. Наиболее простая система, которая удовлетворяет всем этим требованием - и есть наиболее качественная. Гибкость, расшираемость - это не критерии качесвтва, а требования к системе. Вся остальная хуйня, типа поддерживаемости, количества ошибок и понятности - прямое следствие простоты. Это на интуитивном уровне очевидно любому кто имеет более-менее большой опыт проектирвования, это не я придумал, принципу KISS сто лет в обед.

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

Clean Architecture - туда же. Это второй аджайл, она придумана чтобы заработать на книгах и продаже курсов и тренингов, а не чтобы передать вам какойто опыт. К программированию по большому счету она отношения не имеет.

У чистой архитектуры, есть только одно полезное применение - наряду с Gang of Four, TDD и прочими hype driven development это лучший маркер долбоеба. Если человек на серьезных щах упоминает что-то из этого списка, его уровень понятен и хорошего программиста из него наврядли получится.

Ответить
Развернуть ветку
Макс Мухарёв

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

Но я понял, вам SOLID не зашёл. У меня тоже возникает к нему куча вопросов. Как впрочем и к определению полиморфизма, которое каждый вертит как хочет. Но простого и понятного новичку я ещё не видел.

Но все же, чистая архитектура предлагает некий подход организации приложения. Чем это плохо?

Ответить
Развернуть ветку
Alex Chernyshev

'Но простого и понятного новичку я ещё не видел.'
Этого и быть не может, по определению.   
Вообще на серьезных щщах говорить о недостатках архитектрурных концептов можно после долгой практики, откатав те же 10 000 часов в разработке, получив профильное CS образование. 

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

Поэтому все эти споры по-большей части теоретические. 

Ответить
Развернуть ветку
Илитный Иксперт
Поэтому все эти споры по-большей части теоретические.

Теоретические они только для нынешнего поколения разрабов. Которые всю карьеру пилят rest-клиенты по готовому шаблону и считают себя при этом разработчиками.

Ответить
Развернуть ветку
Илитный Иксперт
Я и GRASP не упомянул

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

KISS - это вообще на столько абстрактная ерунда

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

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

Это все люди на вашем уровне компетентности в проектировании. На околонулевом.

У меня тоже возникает к нему куча вопросов

Аргументированных вопросов к SOLID с вашим профессиональным уровнем быть не может.

Но все же, чистая архитектура предлагает некий подход организации приложения. Чем это плохо?

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

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

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

Ответить
Развернуть ветку
394 комментария
Раскрывать всегда