Всем привет!
Буквально на днях, спустя три недели после выхода на работу, мой новый программист пишет такой же код, как и трое моих других опытных разработчиков, которые на том же проекте около года. В свою очередь эти трое создают единую архитектуру, дают одинаковые названия сущностям и пишут чистый код, что сильно упрощает проведение code review и облегчает всем понимание кода.
В этой статье я поделюсь своим опытом : за счет чего же я этого достиг. Я думаю мой опыт может быть вами применен в любой сфере IT и не только!
Для *лидов +
Осторожно! Материал ниже составлен для тех, кто своей шкурой отвечает перед бизнесом за сроки и качество продуктовой разработки или просто результат работы команды. В общем *лидам или тем кто им планирует им стать.
Синдром утенка
Давным давно, на заре своей IT карьеры, порядка 10 лет назад, я был на должности руководителя группы отдела технической поддержки. В мои обязанности входило обеспечение техподдержки клиентов компании. Нужно было принимать звонки и помогать клиентам. У нас в отделе было 2 группы. Одной управлял я, другой мой коллега. В каждой группе было где-то 8 — 10 человек. На тот момент мы оба были без опыта обучения и управления людьми, мы были из бывших сотрудников поддержки. Мы хорошо знали как все работает с технической точки зрения, но опыта управления у нас не было. Соответственно нам никто ничего не объяснял, ничему не учил и не передавал опыт. Как следствие мы управляли своим персоналом по наитию и по большому счету делали все то же самое, что делал с нами наш предыдущий «босс», когда мы были обычными инженерами. Так сказать в полной мере воплощали «синдром утенка», повторяли все за ним. Естественно, новых сотрудников нужно было обучать. И следуя синдрому утенка, мы оба, как и наш предыдущий босс, когда всего было 6 человек в отделе, обучали своих подчиненных лично. Садились рядышком с обучаемым на стульчик и объясняли: “вот смотри, тут у нас …”. И в таком режиме обучение проходило пара рабочих дней. Мне кажется, что мы таким образом обучали абсолютно всех инженеров около двух лет. За эти два года я даже умудрился расписать 2 листа А4, с порядка 40 вопросами, которые нужно успеть обсудить с учеником за эти 2 дня. И все бы наверное так и шло своим чередом, пока где-то спустя 2 года, один из моих инженеров подрос профессионально и в один прекрасный летний день спросил у меня: «А зачем ты им постоянно объясняешь одно и то же? Не легче ли описать мануал с типовыми вопросами и дать им читать, а потом что непонятно проговорить лично?». Я не доверительно отнесся к его словам, ведь разве люди способны сами понять такую “сложную” тему как протокол sip или работу с wireshark? Я был просто уверен что однозначно — нет. Но парень вызвался написать данный мануал сам и проконтролировать результаты с обучаемым, я согласился.
Правило Паретто.
Через 3 дня он мне прислал первый мануал по wireshark, с картинками и описаниями всех основных команд которыми мы пользовались и как в нем анализировать sip, rtp трафик и т.д. Я рискнул, дал одному из новых сотрудников изучить работы с wireshark по данному мануалу. Затем они созвонились с обучаемым, и с час что-то обсуждали. После этого я стал проверять знания новичка. И вы знаете, мне понравилось. Новичок действительно с помощью данного мануала усвоил и применял на практике все основные, типовые моменты где-то 80%. Остальные 20% он узнавал от меня, либо при работе с коллегами или в интернете. То есть я на практике видел работу закона Паретто, 20% усилий ( проговорить основные моменты в работе) дают 80% результата. Убедившись в эффективности прокачки людей по гайдам, я перестал их обучать по wireshark вообще, стал давать читать только данный мануал.
Оказывается, люди с высшим образованием способны прочитать материал и понять его сами!
После нескольких успешных обучений wireshark только по гайду, я стал размышлять на тему как так вышло, что я учил сотрудников 2 года лично, тратил на них свое время, силы, повышал на них голос, иногда грубил. Мне казалось что они сами не были способны изучить те темы, которым я их учил и единственный носитель истинности и правды это был - я сам, именно вследствии этого у меня было явное недоверие к тому, чтобы они обучались сами. Но как показала практика, они без меня , сами, прекрасно и спокойно обучились основным моментам, на которые уходило 80% времени. Как так? И тут мне пришла гениальная мысль «А если человек умеет читать, то возможно он способен понять что написано?», тем более мы целенаправленно брали на работу только людей с высшим образованием. А что еще студенты делают, как не читают книги и изучают их, а тем более делают это на результат, чтобы получить оценку? И тут меня осенило: оказывается, люди с высшим образованием способны прочитать материал и понять его.
Масштабирование.
Как только я это осознал, я сразу понял, что подобные гайды просто необходимо масштабировать по другим темам, которым я учил. Я написал порядка еще 7 гайдов, и сложил их в одну папку с говорящим названием «Система обучения». В итоге у меня так впервые за 2 года моей «управленческой карьеры» появилась папка, в которой были собраны основные моменты в работе, там было порядка 20 гайдов и практических заданий.
Делегирование
Мне понравился тот момент , что новичок прокачался без моего участия, а также то, что его знания проверял не я. Я предположил , что данному опытному сотруднику было несложно обучить новичка, т.к новичок перед этим прочитал его гайд. Спустя месяц — два я решил опробовать данный эксперимент с другим опытным инженером. Объяснил ему ситуацию , показал гайд, и поставил задачу обучить очередного новичка wireshark. Особого негатива я у него не увидел, наверное потому-что задача была поставлена в четких рамках, уже был составлен мануал, и нужно было проверить , что человек его прочитал. Результат был такой же, как и в первый раз. И тут меня осенило: оказывается, не обязательно учить людей самому, а можно это делегировать. А для того чтобы у «учителя» не было «молчаливого отрицания», всего-то нужно ему предоставить уже готовый материал и замотивировать. Мне это так понравилось, что я поставил это дело на поток. Теперь за обучение в моей группе отвечал самый опытный инженер, и я практически перестал заниматься этим лично.
Передача опыта.
Время шло, количество сервисов компании увеличивалось, как следствие увеличивалось и количество гайдов. В папке стало лежать порядка 20 гайдов. Новым сотрудникам сложно было понять в какой последовательности что читать. Я стал группировать имеющийся материал по темам, также я смотрел сколько времени в среднем уходит на обучение той или иной темы и стал указывать это время в данном файле. Через некоторое время к нам в компанию пришел «бизнес тренер», который поделился со мной программой для обучения. В ней можно было составлять тесты и назначать их сотрудникам. Я стал пользоваться этим инструментом. В итоге у меня была теоретическая часть, практическая часть, проверка знаний с помощью тестов. В сумме на все первичное обучение требовалось порядка 10 рабочих дней. Оцифровка опыта облегчила мне его передачу между инженерами. С приходом нового инженера я давал ему гайды и через некоторое время он плюс - минус начинал обладать теми же знаниями, что и более опытные сотрудники. Также это делает возможным передачу в случае ухода из компании сотрудника, который был источником знаний. Я просил самых опытных ребят проводить редакцию гайдов. Они делали дополнения, и в итоге весь их основной опыт оставался в компании, что развязывало мне руки при подборе персонала и ротации. Например когда уходил самый сильные инженер, то я давал задачу изучить материал способному инженеру на позицию ниже, и через месяц я получал +/- такого же специалиста. То есть ушедший инженер прокачивал своих последователей даже не зная об этом)
Что в итоге
В итоге, через 4 года у меня была составлена система обучения инженера по первые 6 месяцев работы. Там были материалы на 2 недели, 1 месяц, 3 месяца, 6 месяцев. Чем больше инженер работал , тем более сложным становился материал. Все было описано в одном файле, с четкой градацией по темам и дня работы инженера. При выходе инженера ему автоматически назначались тесты. Отчеты по тестам приходили мне. Обучением занимались самые опытные инженеры, у них для этого был пункт в их системе мотивации. Моего времени на прокачку стало уходить существенно меньше, посчитайте сами, у меня было где-то 9 инженеров со средним сроком работы 22 месяца. 22 / 9 = 2,4. То есть каждые 2.4 месяца мне раньше приходилось с нуля обучать людей, на протяжении нескольких дней — недель.
В итоге система обучения дала:
1) Освободило меня от обучения: я стал тратить больше времени на выстраивание других процессов и работу с персоналом.
2) Предоставило бизнесу четкие сроки и критерии качества обучения новых сотрудников
3) В случае моего ухода весь мой опыт оставался у бизнеса, т.к был оцифрован, что облегчало передачу моего опыта другим менеджерам.
4) Делала обучения всех инженеров единым, т.к у них был один источник знаний.
Переход в разработку.
Время шло, я стал заниматься разработкой софта для техподдержки и клиентов компании. Для своих разработчиков я никаких гайдов не составлял т.к ни я, ни они не понимали как правильно работать в том или ином фреймворке. Где-то через 3 года я прокачался как fullstack angular + node.js , и меня пригласили лидом на angular. Моя основная задача была - поднять качество разработки у разработчиков и сформировать архитектуру проекта. На проекте было 2 разработчика , еще 1-ого нужно было нанять. Когда я посмотрел на проект, то увидел кучу проблем, такие как:
1) Названия у сущностей не отображало их назначение
2) Отсутствие типизации, 60% кода было с any ). Т.к DTO бекенда генерировались через сваггер, это конечно было круто, но благодаря великому и могучему any эти DTOшки моментально расправлялись ни во что.
3) некорректная работа с rxjs ( отсутствие отписок, вложенные подписки, подписки в changes, так где должен был быть 1 эмит было тысячи и наоборот)
4) нарушение правил работы с фреймворком.
5) отсутствие архитектуры, несмотря на то, что ангуляр , как и любой другой фреймворк, отчасти диктует правила «игры», но все равно остается куча мест, в которых можно поступить по-разному. И эти два разработчика так и делали - каждый раз поступали по разному.
6) при работе с массивами вместо .map .find .foreach и т. везде был for (...)
7) Повторение за «другими». Проекту было уже 4 года и в нем работали все подряд, в результате эти программисты просто копировали старые решения, хотя они были в корне не верные.
Все это делало невозможным самостоятельное изучение бизнес логики проекта, каждый раз нужно было спрашивать у текущих разработчиков «А как эта штука работает?» Ребята продолжали «делайвирить» код в том же духе, нужно было срочно что-то с этим делать. Благо какие-то вещи я уже знал как делать, но большинство - нет.
SMART
Все творчество вверенных мне программистов конечно было милым, но явно не тянуло до корпоративного уровня. В нем нужно было что-то менять. Самый простой вариант: собрать всех и сказать, или что ближе к моей манере “наорать!” : “Ребята давайте кодить нормально” - не сработал бы, просто в труху. Я прекрасно это знал по моему опыту в поддержке. И я стал применять наработанный мною подход постановки задачи по SMART. А именно
S однозначное понимание: все ребята должны были также как и я 1х1 понимать как выглядит “качественный код” в моем понимании
M измеряемая: ребята должны понимать, как именно я замеряю качество их кода, критерии оценки должны быть простыми для понимания и не иметь двояких трактовок
A достижимая: ребята должны были понимать, за счет какого ресурса они смогут сделать качественный код
R реальная: качественный код должен быть ими реально сделан
T конкретные сроки: написание качественного кода должно занимать одинаковое время у всех программистов и должно быть согласовано всеми.
Цикл Шухарта–Деминга или PDCA
Было понятно, что нужен единый источник знаний. Я стал искать в интернете гайд «как лучше писать проект на angular» , «angular best practices», но нигде ничего не находил. Были разрозненные статьи на тему того, как поступать в той или иной ситуации, но так, чтобы был единый гайд, в котором был бы «оцифрован» весь лучший опыт, а именно - расписан алгоритм построения монолита с указанием неймингов, структурирования папок, работой с rxjs, работой с фреймворком просто не было. Поэтому я стал формировать этот гайд сам. Когда я начинал создавать гайд, у меня не было чувства страха и, как результат я не испытывал чувство прокрастинации , т.к еще при создании системы обучения саппорта я на своей шкуре работу цикла PDCA (планируй, делай, контролируй, корректируй) и понимал как эта штука работает. Суть цикла простая - любую процессную деятельность нужно периодически контролировать и корректировать. В результате этого, а именно после корректировки, деятельность начнет расти. И что самое главное, так это то, что заранее не нужно знать как правильно или не правильно поступать, достаточно начать. Важно как можно проще подойти к PLAN, DO и сделать их. PLAN у меня уже был, кидать в txt файлик кривой код. Осталось только начать, перейти к DO. Не нужно боятся сделать не правильно, главное сделать. Например поставить людям задачу, а когда они сделают "Г", посмотришь на нее в живую и мысли как ее улучшить прийдут сами собой, а если не прийдут, то обязательно какой-нибудь умник подскажет как ее улучшить (A), он есть в каждом коллективе, даже состоящим из 1 человека)
Как я сделал свой первый Do
Первым делом я создал на рабочем столе txt файлик ))))) - «Новый документ» и стал в него вносить ошибки в коде, которые я явно видел.
1) В нем я стал помечать ошибки в коде. Каждый раз когда я проводил code review одного из программистов, я помечал в коде участок кривого кода фразой. «// TODO CR Описание ошибки.“. Стоит отметить, что у нас были «ошибки» двух типов: обязательные и вкусовщина. По обязательным решение принимал я, за мной было последнее слово. Мы вместе обсуждали проблемные зоны, но конечное решение было за мной. Когда я не знал, как поступать в той или иной ситуации, я начинал исследовать проблему. Спрашивал у более опытных коллег в чатах, искал в интернете, воспроизводил проблемы в тестовом проекте. Когда я находил решение, я собирал ребят, показывал им решение и они обязывались его соблюдать в разработке , а я при code review. При вкусовщине мы принимали решение по большенству: как большинство решило , так мы и поступали.
2) Затем я собрал ребят и объяснил им, как я буду проводить code review, например, как помечаю ошибки в коде, а они обязаны до релиза их исправить. (это можно еще делать в merge request , но было удобней так)
3) Я настроил фильтр TODO в своей IDE и показал ребятам как его настроить у них, чтобы он попадал в глаза. Стало выглядеть так.
Каждый раз когда я видел новую ошибку в коде , я ее полностью вставлял ее в текстовый документ, например:
4) Один раз в неделю мы собирались с ребятами и обсуждали каждый кейс из моего файлика, то есть я занимался их прокачкой, причем на базе реального примера из нашего общего проекта. Я говорил как нужно делать, как не нужно и почему, затем мы все вместе договаривались, как будем поступать в подобных ситуациях. Составленные договоренности попадали в гайд.
5) Иногда мы вырабатывали решение, но в процессе работы кто-то показывал что оно не работает, находил не рабочие кейсы или читал статью, что так нельзя делать, в итоге мы это решение переписывали и так больше не делали ( реализация CA из PDCA)
5) Я не всегда успевал скопировать пример “кривого» кода в файлик и тут мне на подмогу приходили коммиты, Каждый раз при указании тудухи я делал коммитит по одному и тому же шаблону «Номер таски Название таски Add TODO CR» и пушил коммит в бранч. В итоге в поиске коммитов по слову «Add TODO CR» я всегда мог найти и просмотреть не учтенные мною коммиты, добавить их в файлик и потом обучить по ним ребят. В принципе это все можно делать и в merge request в вашей git системе, но мне было удобней так, т.к при review code в ide легче прослеживать всю логику решения.
6) Для того чтобы ребята не держали правила в голове и они были всегда под глазами, я перенес все данные из файлика с моего рабочего стола в “README.md” git репозитория и дал ссылку на него ребятам. В итоге у них появился единый источник знаний , на который мы все обязаны были равняться. Если какая-то наша договоренность становилась неактуальной, я всех собирал, и мы обсуждали новое правило, естественно, как следстви редактировали гайд. Таким образом , гайд всегда был в актуальном состоянии.
7) Я настроил рассылку из репозитория на почту, при слитии в master ветке. Таким образом, те ребята, которые находились в отпуске, с легкостью просматривали изменения в гайде за время их отсутствия.
8) Настроили интеграционные тесты Cypress и встроили их в CI
9) Правила мы составляли не только для кода, но и для тестов
10) Под часть правил мы стали настраивать линтеры и также их встроили в CI
Результаты
Гайд постоянно улучшался, и так за 3 месяца его существования я описал там все основные моменты построения монолитного приложения на angular для моей команды. Конечно, гайд продолжал развиваться больше, но на выработку и описание основных решений у меня ушло 3 месяца.
В итоге гайд дал результаты, аналогичные тем, которым я получил в техподдержке, а именно:
я потратил минимум своего времени на обучение нового программиста
все мои программисты обладали одинаковыми знаниями и одинаково применяли его на практике
было легко контролировать время первичного обучения, как и его результат на выходе, с помощью проверочного задания
поднятие психологического климата в коллективе, т.к каждый знал, что сосед пишет такой же “качественный” код как и он сам.
облегчило работу с возражениями при постановке задачи на доработку, багфикс чужого кода.
облегчило делегирование код ревью. Теперь мидл мог ревьюить джуна и возражения джуна отрабатывать уже со ссылкой на гайд.
Для меня как менеджера, безусловно, эти профиты были на порядок выше , чем затраты на создание и поддержку гайда. В итоге, более, чем через 3 месяца это развязало мне руки , и я, как настоящий менеджер, стал большую часть времени заниматься именно тем, чем и должен заниматься каждый хороший менеджер, а именно своими делами. Например просмотром хабра или ютуба, а не ответами на вопросы и контролем работы. При этом качество кода выросло, а мое участие в разработке упало.
Резюмируя
Прочитав вышеизложенное, я надеюсь, вы увидели, что просто позвать программиста и попросить его или наорать кодить нормально у вас не получится. Для этого вы должны объяснить ему все нюансы кодинга, причем именно так, как вы это понимаете сами, иными словами вам нужно поставить задачу по SMART, а не HATEy, STEBU или ORAT. Для того чтобы поставить задачу по SMART очевидно вам нужно оцифровать ваш опыт или передать опыт других людей, здорово если такой есть. Если у вас его под рукой нет, то вам придется его составлять самому. Как это сделать? По PDCA. Для этого вам нужно начать его оцифровывать, сразу написать гайд за 1 час у вас не получится, т.к вы не вспомните даже 10% тех кейсов с которыми сталкивается разраб. Что вам может в этом помочь? Конечно ваши merge request`ы , посмотрите на ту дичь которую люди пушили в бранч и перенести их в гайд, с комментарием “так мы больше не делаем, потому что…” Как часто это делать? Решать вам, периодически, это процессная деятельность. Любой процесс требует корректировки, написать один раз гайд, регламент и всегда почивать на лаврах у вас не получится. Дело в том, что бизнес процессы в компании, ваш личный опыт, опыт ваших коллег, обстановка на рынке, законодательстве, все это постоянно меняется. Поэтому подобного рода задачи нужно делать переодически, по PDCA. Иначе оно быстро устареет и превратится никому ненужную писанину. Лично я это делал 1 раз в 2-3 недели. В итоге у ваших кодеров будет всегда один, актуальный источник знаний, на который они будут равняться и корректировать свою работу синхронно. Все ли писать в гайде? Я считаю что нет, нужно придерживаться правила Паретто. Стараться описать те 20% кейсов которые перекроют 80% случаев с которыми столкнется разраб. Как вариант, для начала, вы можете описывать абсолютно все случаи, и раз в квартал или пол года, удалять лишнее.
Кому нужны гайды
Я считаю, что подобного рода гайды нужны, если у вас в подчинении 3 и более сотрудников и для вас важна долгосрочная поддержка проекта. В этом случае вы уменьшаете себе время на обучение сотрудников, так если у вас 3 сотрудника со средним временем жизни 24 месяца, то вы будете обучать нового каждые 8 месяцев + время на его поиск. Я думаю, что на обучение и поиск вы будете минимум тратить 1 месяца. Итого каждый 9 месяц в году у вас в труху. А что если вы аутсорс, с более чем 20+ разработчиков на одном фреймворке, то у вас веселее, почти каждый месяц у вас новый разраб. Где же ваши гайды? Вынесите их в open source, где вы можете получить обратную связь для их улучшений.
Также в гайде или базе знаний остается весь опыт вашего лида, что очень выгодно бизнесу. Т.к в случае ухода лида из компании весь его опыт остается внутри компании. Так же это развязывает руки при найме сотрудников, т.к когда у вас есть база знаний , вы можете брать сотрудника на уровень ниже на все позиции Junior,Middle,Senior, Lead. Главное чтобы у кандидата было желание обучаться, остальному он научится сам по гайдам. Я считаю, что это особенно важно для аутсорс компаний, для которых критично нанимать слабых разработчиков, а выдавать за сильных. С гайдами их слабые разрабы через 3-4 месяца работы сильно вырастут.
С точки зрения принятия решений. Так , если какое-либо решение, принятое вашей командой, оказалось неуспешным, напишите в нем, по какой причине оно вам не подошло, и в будущем это может помочь в принятии решении другими разработчикам.
Примеры гайдов
Это собственно мой гайд по angular https://github.com/evoytenkoapps/angular-best-practices
Самый распространненый гайд по node.js https://github.com/goldbergyoni/nodebestpractices
Интересный пример комплексного архитектурного решения для node.js metarhia https://github.com/HowProgrammingWorks/Index
А где ваш гайд?
Комментарии (31)
BugM
23.02.2022 23:55+29Простенький стайлгайд это совсем не архитектура.
Архитектура это что-то вроде правил:
Сделали прием файлов от пользователей? Сливайте их в максимально надежную и максимально безразмерную трубу. s3 оптимальный вариант. Не забудьте подумать про максимальные размеры файлов и нагрузку. ООМы это реальность, потоковая обработка немного сложнее зато надежнее.
По клику пользователя делайте минимум вещей. Если можно не ходить во внешний сервис не ходите. Если можно обойтись одним походом в sql базу, а все остальное сделать асинхронно потом то так и делайте. Всегда помните что любой внешний сервис иногда ломается и подумайте что делать в этом случае.
Вас будут спамить в любой метод который это в теории позволяет. Все что позволяет сделать запись которую увидит другой пользователь подходит для спама. Защититесь от всех самых невероятных вариантов заранее.
Клиенты любят писать скрипты к вашему АПИ. Иногда они пишут плохие скрипты. Выдать 1000 рпс с одного компа можно вообще без проблем. Подумайте и защититесь заранее.
И тому подобное. И это только про внешние взаимодействия. Не касаясь архитектуры кода вообще.
Из архитектуры кода мое любимое: Любой вечный таймаут рано или поздно окажется на самом деле вечным. Даже если этого не может быть вообще никогда. Сделайте разумное время ожидания везде. И напишите хоть какой-нибудь обработчик на случай если оно вышло.
XaBoK
24.02.2022 02:25+3Сейчас модно везде ставить слово "архитектура". Это такой новый "менеджер". Заходите в кафе, а там архитектор обслуживания проводит вас к столику и резюмирует ваши требования архитектору кофе.
victor_1212
24.02.2022 03:07именно, тоже "стэк" весьма людям нравится прямо по Фрейду, надеюсь дожить услышать чего-нибудь типа "стэк архитектур" :)
ps
как там у Зощенко:
"... посмотреть с точки зрения, вступить, так сказать, на точку зрения и оттеда, с точки зрения ..."
Upravlenets Автор
24.02.2022 09:40А кто ещё кроме вас это знает?
BugM
24.02.2022 22:14+1Сеньоры и лиды точно знают. На то они и сеньоры с лидами.
Остальным пару раз в месяц устраиваем что-то вроде маленьких внутренним митапов и рассказываем всякое-разное. Писать это бесполезно. Это надо понять, а не прочитать. В виде рассказа с примерами из рабочего кода достаточно эффективно выходит. В виде текста абсолютно неэффективно, я пробовал.
amakhrov
25.02.2022 00:59+1Ну, у фронтенд-приложения тоже может быть архитектура, разве нет?
Речь, конечно, не о стиле написания кода и модификаторах доступа. А о том, как мы управляем общим состоянием, как осуществляется работа с api, как выполняется логирование и мониторинг. Как переиспользовать код между несколькими проектами, в конце концов.
Организацию кода по файлам и директориям, в принципе, тоже сюда можно отнести.
BugM
25.02.2022 01:24Конечно. Может и должна.
Я написал примеры из бекенда потому что я с ним работаю и его знаю.
Если можете про фронт написать - пишите. Дело хорошее. Есть витающие слухи что у фронтов с архитектурой все плохо и эта статья типичный пример. Вместо архитектуры стайлгайд.
mvv-rus
24.02.2022 04:50Здравствуйте!
Спасибо за статью — очень информативно. Однако по прочтении вашей статьи меня осталась пара вопросов, ответы на которые я не нашел в статье. Не могли бы вы ответить на них дополнительно?
1.Для меня как менеджера, безусловно, эти профиты были на порядок выше, чем затраты на создание и поддержку гайда.
Я понял про ваши выгоды. Но есть ли от такого режима работы какая-то выгода для разработчиков? Вы же, как хороший менеджер, вряд ли им позволите «большую часть времени заниматься именно тем, чем и должен заниматься каждый хороший менеджер, а именно своими делами, например просмотром хабра или ютуба» (то, в чем, по вашим словам, состояла часть вашей выгоды)?
2.вы можете брать сотрудника на уровень ниже на все позиции Junior,Middle,Senior, Lead. Главное чтобы у кандидата было желание обучаться, остальному он научится сам по гайдам. Я считаю, что это особенно важно для аутсорс компаний, для которых критично нанимать слабых разработчиков, а выдавать за сильных. С гайдами их слабые разрабы через 3-4 месяца работы сильно вырастут.
Я правильно вас понял, что таким образом вы фактически снижаете зарплаты своих разработчиков? Причем — не на 3-4 месяца, которые им понадобятся, чтобы вырасти, а на больший срок: потому как они вырастут только в проекции на нужды вашей фирмы, и ценность их на рынке труда, где нужды бывают сильно разные, от этого не повысится?Fen1kz
24.02.2022 07:05+1Отвечу с позиции разработчика, к автору отношения не имею:
Выгода в таком стайлгайде для разработчиков в том, что даже если он и требует лишних телодвижений вначале, он спасает от вырванных волос в будущем. Я тут работал с одним "джуном" (перешел из аналитиков), так вот у нас постоянно были споры вида:
— Ты делаешь неправильно, надо вот так.
— Ну работает же.
— Да, но это не поддерживаемо и не расширяемо.
— Ну ведь работает.Пример для реакта — мы используем material-ui
Стили там можно делать так:
1)<div style={{flex: 1}} />
2)<Box flex=1 />
3)useStyles(theme => ({box: {flex: 1}})) + <div className={classes.box}/>
4)styled('div')({flex: 1})
Так вот он мешает все 3 подхода в абсолютно рандомном порядке и без оглядки. Есть конструкции вида
<Box flex=1 className={classes.box} style={{...}}/>
Работает же, круто. Я бы очень хотел стайлгайд который бы мне позволял без всяких споров говорить, почему так делать не стоит.
Или вот мы давным давно договорились, что хендлеры в параметрах мы называем onX. onAddButton, onEditButton. Недавно смотрю — конечно он сделал />
В общем, стиль, нейминг, архитектура — беру всё.
S-e-n
24.02.2022 08:05+1Такое бывает, когда человек копипастит и комбинирует из разных мест. Возможно он вообще практически не понимает, что делает.
Upravlenets Автор
24.02.2022 09:39Да, вы правы. Гайд помогает достигнуть единый подход в разработке и отрабатывать возражения умников, если вам пришлось их ревьюить
mvv-rus
24.02.2022 21:20Выгода в таком стайлгайде для разработчиков в том, что даже если он и требует лишних телодвижений вначале, он спасает от вырванных волос в будущем.
Вот именно выгоды — той самой, что измеряется в деньгах — я и не увидел: разрботчику ведь деньги платят за потраченное на работу время, не так ли? А если так, то какая ему разница, пишет ли лично он код быстро или, из-за плохого смежника, медленно.
Так чего же ради волосы-то рвать?
PS Не, про эстетическое чувство я в курсе, но в деньгах оно не измряется. А мой вопрос был чисто про деньги.Upravlenets Автор
24.02.2022 22:36выгоды для лида, что ему меньше тратить своего времени на прокачку людей, объяснение что и как и отработку возражений при ревью. Каждый разраб нужен чтобы развивать бизнес, чем быстрее, тем лучше. Гайд ускоряет этот процесс.
mvv-rus
24.02.2022 23:48выгоды для лида,
В выгодах для менеджера я и не сомневался. Я интересовался чисто про выгоды рядового наемного разработчика. Я их не вижу. Может, вы мне их способны показать?Каждый разраб нужен чтобы развивать бизнес.
Но нужно ли это, если чисто объективно, самому разработчику? Меня, как человека, вооруженного с ранней юности учением Маркса-Энгельса-Ленина о классовой борьбе, учили, что материальные интересы пролетария-разработчика и каписталиста-предпринимателя находятсяв непримиримом противоречии. И по жизни это тоже так — потому что распределение дохода между зарплатой и прибылью есть игра с нулевой суммой.
Вы согласны с этим?
PS Вспомнил цитату на обсуждаемую тему.«Карась любит, чтобы его жарили в сметане». Это знают все — кроме карасей. Их даже и не спрашивали — не только насчет сметаны, но и любят ли они поджариваться вообще. Такова сила мнения.
К. Прутков-инженер. Мысль № 12.
Upravlenets Автор
24.02.2022 22:341) выгода для разрабов в том, что у них есть готовое решение как поступать в большинстве кейсов им не нужно ломать голову что и как делать, также при ревью им придется меньше переделывать.
2) денег никто не понижает. просто вы сможете быстрей джуна вырости до мидла.
mvv-rus
25.02.2022 00:091) выгода для разрабов в том, что у них есть готовое решение как поступать в большинстве кейсов им не нужно ломать голову что и как делать, также при ревью им придется меньше переделывать.
Выгоды для разработчиков не вижу (я об этом уже писал в другом ответе, чуть выше): разработчикам платят не сдельно, а повременно, поэтому им объективно без разницы, сколько кейсов они решили, и их интересам совсем не противоречит в оплачиваемое время поломать голову, вместо того, чтобы ломать свои руки об клавиатуру и наживать себе туннельно-запястный синдром.
Вы согласны?2) денег никто не понижает. просто вы сможете быстрей джуна вырости до мидла.
Использование джуна вместо мидла на одной и той же позиции очевидно позволяет изначально снизить для этой позиции зарплату. Это, в общем-то, справедливо — но есть нюанс, именно про который я и спрашивал: когда джун вырастет до мидла, то будет ли ему увеличена компенсация до уровня того же самого мидла? Учитывая, что вырастает джун скорее всего только в том направлении, которое требуется фирме и никуда более (потому что гайды), я сомневаюсь, что такой специально выращенный «одомашенный» мидл будет столь же конкурентоспособен на рынке труда, как и выросший в естественной среде. А потому я сомневаюсь, что бизнес (в лице менеджера) согласится платить ему «по рынку» для его «грейда»: никаких объективных причин я для этого не вижу.
Вы можете развеять мои сомнения?
Keroro
24.02.2022 08:41А эти гайды в итоге лежат в виде вордовских файлов в папке, да? Какую-то систему типа вики или bookstack не делали?
Upravlenets Автор
24.02.2022 09:43В саппорте были файлики и прога webtutor. Для кодеров у меня сейчас только репозиторий с ридми и примерами
amakhrov
25.02.2022 01:10Большую часть описанного в статье я бы заменил на автоматизированные проверки.
Хотите OnPush? Используйте prefer-on-push-component-change-detection .
Модификаторы доступа? explicit-member-accessibility .
Боритесь с null? Включите все strict настройки для компилятора (TS и Angular)
Что-то специфическое для проекта? Напишите тест или свое правило для eslint. Для случаев попроще можно обойтись правилом no-restricted-syntax (там очень гибкий синтаксис селекторов, можно много наворотить).
И приправить официальным styleguide от Angular, в котором уже многие рекомендации расписаны (обычно, в более легкочитаемом виде, чем свой README файлик)
Upravlenets Автор
25.02.2022 10:44Супер, кто еще кроме вас знает что так можно?
amakhrov
25.02.2022 10:56В этом и прелесть автоматизации. Главное, чтобы про это знали pre-commit хуки и CI pipeline.
А знакомиться с документацией Ангуляра и RxJS посылаем всех новоприбывших - потому что а как еще? Ридми этому не замена.
Нет, ну понятно, что всегда есть что-то, что не автоматизируешь, и что специфичто для проекта. Это описываем в ридми.
Моя мысль в том, что в первую очередь стараемся автоматизировать все, что можно - гораздо более эффективно, чем записывать в текстовый файл и надеяться, что все всё будут помнить потом.
Upravlenets Автор
25.02.2022 10:59Описание и автоматизация дополняют друг друга, а не противоречат. У вас люди знают какие именно проверки вы в строили в си? Или пишут вам с вопросом почему папйп не прошёл? Обязательно нужно расписать кратко какие проверки в си, чтобы люди знали это до пуша.
amakhrov
25.02.2022 11:04Это же не черный ящик с "прошло / не прошло" на выходе. Видно, на каком шаге ошибка, в чем она заключается.
Полностью согласен, что описание и автоматизация дополняют друг друга.
Upravlenets Автор
25.02.2022 11:06Поверьте черный ящик, ибо практически везде ошибки не информативные и ничего кроме стресса ваш новый разраб не получит прочитав их.
Upravlenets Автор
25.02.2022 11:51Вот в этой ошибке линта кодеру что нужно сделать?
29:9 error Expected blank line before this statement padding-line-between-statements
amakhrov
25.02.2022 12:16В идеале - ничего. Форматирование должно автоматически применяться - это последнее, что должно заботить разработчика.
amakhrov
25.02.2022 12:19А если по сути вопроса - разработчик должен вставить пустую строку перед выражением на строке 29, как следует из текста ошибки
LeshaRB
Это я так понял Style Guide
У нас в Idea за основу были импортированы Google Style, и немного измененные под наши нужды
https://github.com/google/styleguide