{"id":14270,"url":"\/distributions\/14270\/click?bit=1&hash=a51bb85a950ab21cdf691932d23b81e76bd428323f3fda8d1e62b0843a9e5699","title":"\u041b\u044b\u0436\u0438, \u043c\u0443\u0437\u044b\u043a\u0430 \u0438 \u0410\u043b\u044c\u0444\u0430-\u0411\u0430\u043d\u043a \u2014 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0433\u043e\u0440\u0435","buttonText":"\u041d\u0430 \u043a\u0430\u043a\u043e\u0439?","imageUuid":"f84aced9-2f9d-5a50-9157-8e37d6ce1060"}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0
397 комментариев
Написать комментарий...
Илитный Иксперт
Не нанимайте крутых программистов

Начнем с того, что Фил не имеет отношения к крутым программистам. Ну может он конечно общался с ними, жал им руки. Но сам - нет.

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

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

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

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

Хорошие тесты - это не 100% покрытие, а тесты в местах где ошибки реально критичны, и где ошибок и времени на их фикс больше чем на написание тестов. И уж тем более ни тогда, когда код или архитектура проекта специально приспосабливается под тесты - это конечная остановочка.

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

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

А вообще начинать технический стартап не имея скилла в этой области или доверенного человека с такими скиллами - это лотерея.

Ответить
Развернуть ветку
Фил Ранжин
Автор

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

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

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

Твои опытные разрабы, которые пишут быстро и с приемлемым качеством хороши во всем, но у них одна проблема - они вымышленные.

Классная архитектура, это как в книжке той же "Банды Четырех", каждый из которых писал приложения, размеры и важность которых недостижимы ни для тебя ни для меня.

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

Качественно писать код - это качественно писать код. А городить костыли ради экономии бюджета - это качественно вести бизнес.

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

Ответить
Развернуть ветку
Илитный Иксперт
Классная архитектура, это как в книжке той же "Банды Четырех"

Три раза кек.

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

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

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

Привожу твои слова

Всю свою карьеру я вносил мизерный вклад в гигантские системы

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

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

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

Классная архитектура, это как в книжке той же "Банды Четырех", каждый из которых писал приложения, размеры и важность которых недостижимы для меня.

Пофиксил тебя.

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

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

Если обратиться к реальной архитектуре, всмысле домов, то мы увидим что из готовых блоков можно построить хрущевку, в 3 этажа или в 5, в 5 подъездов или в 10. Но ничего кроме хрущевки нельзя. Ни мост, ни любое другое нормальное здание. Только ебучую панельку.

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

Ты ссылаешься на книгу, смысла которой не понимаешь, чтобы аргументировать свою "правоту" в теме, в которой ничего не понимаешь. Это унизительно.

а судя по херне про неважность архитектуры

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

а судя по херне про неважность тех же наименований

Да, да, да. В проектировании архитектуры здания самое важное каким шрифтом подписи в чертеже делать. 

Твои опытные разрабы, которые пишут быстро и с приемлемым качеством хороши во всем, но у них одна проблема - они вымышленные.

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

Качественно писать код - это качественно писать код.

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

Рефакторинг, блядь. А то о чем ты говоришь - это переработка.

Как-то давным давно я зашел в магазин техники, чтобы купить вайфай роутер. Подошел к продавцу, и попросил показать роутеры. Он долго не мог ничего найти и показывал мне какуюто странную хуйню. На вопрос "что за хуйня?" он сказал что wifi - это маршрутизатор, а не роутер. Я покекал и унес домой коробку с моим роутером на одной стороне который было написано "маршрутизатор", а на другой "router". Так вот вопрос, это был не ты?

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

Ответить
Развернуть ветку
Фил Ранжин
Автор

Т.е. свой обсёр с тестами и рефакторингом ты решил просто не заметить?

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

Обсер - это когда ты не смог понять текст комментария. Или ты 5к символов решил не заметить? Ладно, проиллюстриую свою мысль более понятным примером.

Если приводить аналогии, то код - это чертеж здания, а программа которую он описавает это само здание.

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

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

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

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

Твой уровень - это уровень секретарши, не разработчика, не инженера - а секретарши. Красиво и правильно оформить бумажки. И не видеть за этими бумажками сути.

А теперь я отвечу на твои предъявы

Обсер с рефакторингом

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

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

Те, кто сначала рисует линии, а потом только подписи по твоему некомпетентные болваны.

Я бы написал свое личное мнение про то что в TDD буква D обозначает "долбоеб", и то что если хочешь рисовать чертеж жопой - рисуй, твое право, каждый извращается как хочет. Может в этом даже реально свои плюсы есть. 

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

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