Что я понял о разработке начав общаться с бизнесом
Было время, когда я долго не мог отпустить разработку и мне было страшно от мысли, что я перестану общаться с этим кругом людей, где так здорово можно обсуждать новые фреймворки, функциональное программирование и высокие нагрузки. Но понемногу проблемы и задачи компании меня поглотили и разработки в моей жизни стало не более 10% времени.
Дальше произошло интересное, я вдруг увидел, что общаться с бизнесом не просто интересно, а очень интересно и, что меня особенно поразило, то как изменился формат общения.
Когда между собой общаются владельцы бизнесов в одной нише, то они всегда с жадностью слушают других, пытаясь узнать все до деталей и найти точки улучшения, например, подтвердить и опровергнуть существующие гипотезы, чтобы не тратить на это свои ресурсы. Споры, при этом, возникают редко, так как всегда можно показать работу тех или иных вещей на конечных цифрах. Например в эдтехе есть такой рейтинг, где можно понять кто есть кто и куда мы часто обращаемся https://edtechs.ru/
С разработкой же все часто по другому. При сравнении проектов друг с другом, у разработчиков часто возникает желание не разобраться в том как у них, а скорее получить подтверждение что у нас лучше, что мы правильнее. Причем я сам ловлю себя на мысли, что когда начинаю общаться с девами, то могу не заметить, как оказываюсь посреди спора о том, какой стек для бека надо выбрать или как лучше выстроить систему обработки событий.
В целом, такие споры конечно же нужны, но, все же, разработчики слишком категоричны. Вот так правильно вот так не правильно. Вы делаете по другому, значит у вас не правильно (посмотрите просто реакцию на некоторые мои твитты).
Я думаю, что одна из причин такой ситуации в том, что в разработке практически нет объективных показателей, позволяющих сравнивать команды и проекты между собой. Нельзя понять насколько вот то о чем говорит команда это нормально и сделать проще было нельзя. Все что происходит внутри это магия. Да можно долго рассказывать как все круто на конфах, а потом приходит Маск, увольняет большую часть инженеров и в течение года в разы уменьшает нагрузки, кодовую базу и сложность системы, значительно сокращая стоимость разработки и сопровождения. https://twitter.com/XEng/status/1717754398410240018
Выводов никаких нет, просто наблюдение. А вы чувствуете что-то в среде программистов?
Было время, когда я долго не мог отпустить разработку и мне было страшно от мысли, что я перестану общаться с этим кругом людей, где так здорово можно обсуждать новые фреймворки, функциональное программирование и высокие нагрузки. Но понемногу проблемы и задачи компании меня поглотили и разработки в моей жизни стало не более 10% времени.
Дальше произошло интересное, я вдруг увидел, что общаться с бизнесом не просто интересно, а очень интересно и, что меня особенно поразило, то как изменился формат общения.
Когда между собой общаются владельцы бизнесов в одной нише, то они всегда с жадностью слушают других, пытаясь узнать все до деталей и найти точки улучшения, например, подтвердить и опровергнуть существующие гипотезы, чтобы не тратить на это свои ресурсы. Споры, при этом, возникают редко, так как всегда можно показать работу тех или иных вещей на конечных цифрах. Например в эдтехе есть такой рейтинг, где можно понять кто есть кто и куда мы часто обращаемся https://edtechs.ru/
С разработкой же все часто по другому. При сравнении проектов друг с другом, у разработчиков часто возникает желание не разобраться в том как у них, а скорее получить подтверждение что у нас лучше, что мы правильнее. Причем я сам ловлю себя на мысли, что когда начинаю общаться с девами, то могу не заметить, как оказываюсь посреди спора о том, какой стек для бека надо выбрать или как лучше выстроить систему обработки событий.
В целом, такие споры конечно же нужны, но, все же, разработчики слишком категоричны. Вот так правильно вот так не правильно. Вы делаете по другому, значит у вас не правильно (посмотрите просто реакцию на некоторые мои твитты).
Я думаю, что одна из причин такой ситуации в том, что в разработке практически нет объективных показателей, позволяющих сравнивать команды и проекты между собой. Нельзя понять насколько вот то о чем говорит команда это нормально и сделать проще было нельзя. Все что происходит внутри это магия. Да можно долго рассказывать как все круто на конфах, а потом приходит Маск, увольняет большую часть инженеров и в течение года в разы уменьшает нагрузки, кодовую базу и сложность системы, значительно сокращая стоимость разработки и сопровождения. https://twitter.com/XEng/status/1717754398410240018
Выводов никаких нет, просто наблюдение. А вы чувствуете что-то в среде программистов?
edtechs.ru
ED Tech | Рейтинг крупнейших компаний на рынке онлайн-образования
Ежеквартальный рейтинг крупнейших компаний в сфере онлайн-образования от Smart Ranking. Изучайте, кто растет быстрее всего в России в этом сегменте.
👍36❤7🤔3🥰2😁2😢1💩1
Что отличает разработку от остальных направлений
Последний пост про отношение бизнеса и разработки. Дальше переключимся на технические темы
Когда управляешь компанией, то разработка становится одним из многих компонентов системы, причем в случае Хекслета, довольно автономным, команда отлично справляется и ее не нужно контролировать. Гораздо больше приходится заниматься образовательной частью, финансово-административной, наймом и другими вещами. Но несмотря на это, разработка занимает особое место в система из-за одной особенности, которая в других направлениях так не проявляется.
Речь идет про принятие решений в подразделениях и их дальнейшее влияние на компанию. В большинстве подразделений, ошибки на уровне исполнителей не являются фатальными. Даже если мы потеряли деньги, то сама ситуация обычно легко выправляется исправлением процессов, обучением или заменой людей. Принятие решений сейчас не имеет сильного влияние на решения принятые потом с точки зрения их реализации. Обычно мы можем сказать “забыли что было, делаем по новому”.
Так работает почти везде кроме нескольких направлений среди которых разработка. Главный риск с разработкой связан с тем, что неверно принятые решения сейчас, могут потом тянуть нас вниз годами вплоть до самого конца существования проекта без шансов это изменить. Причем это не всегда зависит от разработки, обстоятельства могут поменяться так сильно, что система просто для этого не преспособлена и это сказывается на time to market. Архитектура проекта имеет чертовски важное значение и поэтому человек, который отвечает за него с технической точки зрения, должен быть очень здравым и прокаченным одновременно.
С этим связана проблема, что при поиске такого человека, никто не может оценить его уровень, в отличии от остальных направлений, где владелец компании либо уже разбирается либо разберется. Поэтому очень часто такие люди являются сооснователями проектов.
Последний пост про отношение бизнеса и разработки. Дальше переключимся на технические темы
Когда управляешь компанией, то разработка становится одним из многих компонентов системы, причем в случае Хекслета, довольно автономным, команда отлично справляется и ее не нужно контролировать. Гораздо больше приходится заниматься образовательной частью, финансово-административной, наймом и другими вещами. Но несмотря на это, разработка занимает особое место в система из-за одной особенности, которая в других направлениях так не проявляется.
Речь идет про принятие решений в подразделениях и их дальнейшее влияние на компанию. В большинстве подразделений, ошибки на уровне исполнителей не являются фатальными. Даже если мы потеряли деньги, то сама ситуация обычно легко выправляется исправлением процессов, обучением или заменой людей. Принятие решений сейчас не имеет сильного влияние на решения принятые потом с точки зрения их реализации. Обычно мы можем сказать “забыли что было, делаем по новому”.
Так работает почти везде кроме нескольких направлений среди которых разработка. Главный риск с разработкой связан с тем, что неверно принятые решения сейчас, могут потом тянуть нас вниз годами вплоть до самого конца существования проекта без шансов это изменить. Причем это не всегда зависит от разработки, обстоятельства могут поменяться так сильно, что система просто для этого не преспособлена и это сказывается на time to market. Архитектура проекта имеет чертовски важное значение и поэтому человек, который отвечает за него с технической точки зрения, должен быть очень здравым и прокаченным одновременно.
С этим связана проблема, что при поиске такого человека, никто не может оценить его уровень, в отличии от остальных направлений, где владелец компании либо уже разбирается либо разберется. Поэтому очень часто такие люди являются сооснователями проектов.
👍14✍13💯5❤4💩1
Выложили мой доклад "Конечные автоматы как способы значительно упростить логику и понимание кода" https://youtube.com/watch?v=knoVv2ncwVI Если вам кажется что конечные автоматы это что-то на университетском, то обязательно посмотрите
YouTube
Кирилл Мокевнин, Конечные автоматы как способ значительно упростить логику и понимание кода
Kolesa Conf'23, доклад
В этом докладе мы увидим, что практически любая бизнес-логика в коде укладывается в модель конечного автомата, то есть состоит из набора состояний и переходов между ними. Такой взгляд на происходящее позволит изменить подход к проектированию…
В этом докладе мы увидим, что практически любая бизнес-логика в коде укладывается в модель конечного автомата, то есть состоит из набора состояний и переходов между ними. Такой взгляд на происходящее позволит изменить подход к проектированию…
🔥60👍26💩2❤1🤔1
Зачем спрашивать алгоритмы на собесах?
Недавно я записывался в подкасте, где мы с ребятами обсуждали вопрос требований опыта и накрутки опыта. Например в вакансии часто написано +3 года опыта или что-то такое. Многие от этого негодуют, так как увидеть разницу между теми кто в области 2 года и 3 очень непросто. Тут скорее уже зависит от того где и как конкретно провели эти два года человек. В целом, же, отношение со стороны разработчиков к этому скорее негативное, мол нафига они это делают и сами заставляют накрутить опыт, вот вам примеры.
И хотя я согласен, что с точки зрения реальных скилов +5 или +7 не делают разницы в большинстве случаев, мне же все же хочется подсветить эту проблему со стороны нанимающих. Почему многие компании делают такие ограничения. И не только такие. Например ставят на входе алгоритмические задачки или еще что похуже.
А ответ тут очень простой. Если у вас входящий поток больше чем требуется или его качество ниже чем вы бы хотели, то в этот момент начинается подкрутка таким образом, чтобы вход был более качественным. Причем ни у кого нет ни времени ни желании разбираться в том, какой с той стороны гениальный программист и даже со своим небольшим опытом, он даст фору всем остальным. Это все слишком долго и сложно. Гораздо проще выставить формальные критерии, которые оставят такой поток, который достаточно хорош чтобы с ним работать. А что если мы пропустим хорошего? В этом и смысл. Невозможно создать систему которая четко разграничивает правильных людей от неправильных. Если у вас низкие требования, то тогда попадает много ребят, которых вы бы не хотели брать на работу (и тратить ресурсы компании на работу с ними), если у вас высокие требования, то тогда вы начинаете пропускать хороших кандидатов и, что очень важно, это осознанный выбор таких компаний.
Сюда же, во многом, относится требование алгоритмов на собесах, даже если они на практике не понадобятся. Просто таким образом мы регулируем качество потока (а не отдельных личностей) плюс это влияет на культуру компании, так как ребята с таким бекграундом мыслят немного по другому, чем, например, самоучки (типа меня).
Для крупных компаний уровня фанга, гораздо важнее “не впустить в компанию неподходящего кандидата”, чем “упустить хорошего”.
Да от этого бывает больно, но система важнее, чем локальные оптимизации.
Классно об этом написано в книге https://market.yandex.ru/product--uiliam-paundstoun-kak-sdvinut-goru-fudzi-podkhody-vedushchikh-mirovykh-kompanii-k-poisku-talantov/1781729839
Недавно я записывался в подкасте, где мы с ребятами обсуждали вопрос требований опыта и накрутки опыта. Например в вакансии часто написано +3 года опыта или что-то такое. Многие от этого негодуют, так как увидеть разницу между теми кто в области 2 года и 3 очень непросто. Тут скорее уже зависит от того где и как конкретно провели эти два года человек. В целом, же, отношение со стороны разработчиков к этому скорее негативное, мол нафига они это делают и сами заставляют накрутить опыт, вот вам примеры.
И хотя я согласен, что с точки зрения реальных скилов +5 или +7 не делают разницы в большинстве случаев, мне же все же хочется подсветить эту проблему со стороны нанимающих. Почему многие компании делают такие ограничения. И не только такие. Например ставят на входе алгоритмические задачки или еще что похуже.
А ответ тут очень простой. Если у вас входящий поток больше чем требуется или его качество ниже чем вы бы хотели, то в этот момент начинается подкрутка таким образом, чтобы вход был более качественным. Причем ни у кого нет ни времени ни желании разбираться в том, какой с той стороны гениальный программист и даже со своим небольшим опытом, он даст фору всем остальным. Это все слишком долго и сложно. Гораздо проще выставить формальные критерии, которые оставят такой поток, который достаточно хорош чтобы с ним работать. А что если мы пропустим хорошего? В этом и смысл. Невозможно создать систему которая четко разграничивает правильных людей от неправильных. Если у вас низкие требования, то тогда попадает много ребят, которых вы бы не хотели брать на работу (и тратить ресурсы компании на работу с ними), если у вас высокие требования, то тогда вы начинаете пропускать хороших кандидатов и, что очень важно, это осознанный выбор таких компаний.
Сюда же, во многом, относится требование алгоритмов на собесах, даже если они на практике не понадобятся. Просто таким образом мы регулируем качество потока (а не отдельных личностей) плюс это влияет на культуру компании, так как ребята с таким бекграундом мыслят немного по другому, чем, например, самоучки (типа меня).
Для крупных компаний уровня фанга, гораздо важнее “не впустить в компанию неподходящего кандидата”, чем “упустить хорошего”.
Да от этого бывает больно, но система важнее, чем локальные оптимизации.
Классно об этом написано в книге https://market.yandex.ru/product--uiliam-paundstoun-kak-sdvinut-goru-fudzi-podkhody-vedushchikh-mirovykh-kompanii-k-poisku-talantov/1781729839
Яндекс Маркет
Нехудожественная литература Альпина Паблишер — купить по низкой цене на Яндекс Маркете
Нехудожественные книги - купить по выгодной цене с доставкой. 2008 моделей в проверенных интернет-магазинахПоиск по параметрам, удобное сравнение моделей и цен на Яндекс Маркете.
👍55❤12💩9😢5🤔3🔥2🕊2👎1
Forwarded from Помогите, я джун
Мы готовы врываться снова в эфир! Второй сезон подкаста "Помогите, я джун" можно официально считать открытым!🎉
Выпуск с Кириллом уже на Яндекс.Музыка, YouTube, Spotify и других привычных платформах
Мы ожидали разговора про лайф хаки при подготовке к теоретическим вопросам и практическим заданиям, но Кирилл поднял вопросы о моральной подготовке, стрессе и рассказал много своих историй.
- Что поможет ощутить уверенность в готовности к первым собеседованиям?
- Что о вас скажет ваша реакция на стресс?
- Как подготовиться к теоретическим вопросам и лайв кодингу?
Вот ссылка на сборник тестовых заданий, о которых говорил Кирилл
Понравился выпуск? Нам тоже! Поддержите нас лайком на платформе, где вы прослушали выпуск. Нам это будет очень приятно ❤️
Выпуск с Кириллом уже на Яндекс.Музыка, YouTube, Spotify и других привычных платформах
Мы ожидали разговора про лайф хаки при подготовке к теоретическим вопросам и практическим заданиям, но Кирилл поднял вопросы о моральной подготовке, стрессе и рассказал много своих историй.
- Что поможет ощутить уверенность в готовности к первым собеседованиям?
- Что о вас скажет ваша реакция на стресс?
- Как подготовиться к теоретическим вопросам и лайв кодингу?
Вот ссылка на сборник тестовых заданий, о которых говорил Кирилл
Понравился выпуск? Нам тоже! Поддержите нас лайком на платформе, где вы прослушали выпуск. Нам это будет очень приятно ❤️
👍29❤7💩5🔥3🤔1
Насколько сложно поменять стек разработки?
Моя грубая оценка такая. Выход на тот же уровень производительности в другом стеке в том же направлении, например, беке или фронтенде займет полгода. Что входит в это время?
Самое простое это изучение нового языка. Для опытного разработчика, переход на соседний язык (та же парадигма) довольно простая задача. Пару недель на основы и еще пару месяцев на то, чтобы постичь более сложные концепции, которые будут встречаться в работе. Сюда же можно отнести адаптацию к новым подходам, которые приняты в языке или являются следствием его дизайна. Например в Ruby много метапрограммирования, в Java шаблонов проектирования, в JavaScript асинхронности, а в Go флоу построенного на горутинах.
Дальше идет экосистема. Вот эта часть пожалуй одна из самых сложных, так как количество библиотек и особенностей их использования в каждой экосистеме невообразимое количество. Чем более навороченная экосистема, тем сложнее и дольше будет этот процесс. Например переход на Spring Boot с фреймворков Rails, Django или Laravel это сложное занятие из-за количества компонентов и их глубины. По некоторым типа Spring Security пишут целые книги.
Ну и последняя часть инфраструктурная. Способы сборки, доставки, саппорта могут отличаться. То как собирается фронтенд это свой собственный мир. У статических языков есть этап компиляции и много построено вокруг этого. У динамики проще всего, но тоже есть свои особенности. В целом этот этап изучается довольно быстро, если конечно вам не приходится настраивать webpack.
Вы меняли стек? Сколько заняло время и откуда куда?
Моя грубая оценка такая. Выход на тот же уровень производительности в другом стеке в том же направлении, например, беке или фронтенде займет полгода. Что входит в это время?
Самое простое это изучение нового языка. Для опытного разработчика, переход на соседний язык (та же парадигма) довольно простая задача. Пару недель на основы и еще пару месяцев на то, чтобы постичь более сложные концепции, которые будут встречаться в работе. Сюда же можно отнести адаптацию к новым подходам, которые приняты в языке или являются следствием его дизайна. Например в Ruby много метапрограммирования, в Java шаблонов проектирования, в JavaScript асинхронности, а в Go флоу построенного на горутинах.
Дальше идет экосистема. Вот эта часть пожалуй одна из самых сложных, так как количество библиотек и особенностей их использования в каждой экосистеме невообразимое количество. Чем более навороченная экосистема, тем сложнее и дольше будет этот процесс. Например переход на Spring Boot с фреймворков Rails, Django или Laravel это сложное занятие из-за количества компонентов и их глубины. По некоторым типа Spring Security пишут целые книги.
Ну и последняя часть инфраструктурная. Способы сборки, доставки, саппорта могут отличаться. То как собирается фронтенд это свой собственный мир. У статических языков есть этап компиляции и много построено вокруг этого. У динамики проще всего, но тоже есть свои особенности. В целом этот этап изучается довольно быстро, если конечно вам не приходится настраивать webpack.
Вы меняли стек? Сколько заняло время и откуда куда?
👍62🤔8🔥7💩5❤2❤🔥1
Организованное программирование | Кирилл Мокевнин pinned «Выложили мой доклад "Конечные автоматы как способы значительно упростить логику и понимание кода" https://youtube.com/watch?v=knoVv2ncwVI Если вам кажется что конечные автоматы это что-то на университетском, то обязательно посмотрите»
Не могу молчать. Ребят я очень рад тому что почти под каждым постом возникает большая дискуссия. Вы вдохновляете на то, чтобы продолжать писать! За какашку тоже спасибо, она радует глаз 🙂 p.s. Давайте посчитаемся сколько нас тут реально читает. Поставьте какашку если вы видели пост)
💩739😁19🤡8❤7👀5🫡2👍1
Вот вы все спорите про накрутку опыта, и ее причины, а есть проблема поважнее, это эйджизм в IT, компании хотят себе не сильно старых сотрудников, <30 lol
Такой твит написал Сергей Андреев (СТО в XYZ). Я подумал, а чего бы не спросить об этом у моих американских знакомых, чтобы понять, является ли ситуация в России особой или везде плюс минус так или даже хуже. В общем задал я вопрос в группе ребят, которые работают в штатах десяток другой лет и заодно погуглил. И вот что нашел.
Так или иначе, многие слышали что в штатах есть законы запрещающие дискриминацию по возрасту. Об этом не спрашивают, про это не пишут. Многие люди действительно против такой дискриминации и считают что это абсолютное зло. И казалось бы вот оно счастье. Но:
> имхо везде где работал так или иначе смотрят на возраст по нескольким причинам:
- молодые могут пахать днями и ночами, тогда как у возрастных людей семья дети и т.д.
- средний возраст команды, тоже влияет
> С возрастом от тебя ожидается, что ты уже занимаешь лидерские и менеджерские позиции, поэтому 50ти летние Sr или мидлы начинают жаловаться, что их на работу не берут
> Сталкивался с этим на прошлом месте работы когда обсуждали потенциальных кандидатов на должность Front End разработчика и тогда был пик буткэмпов.
Я был на должность директора, но окончательное слово было за VP с которым проводилось последнее собеседование. Примерный ход его мыслей в тот момент:
Человек пошел на bootcamp = он знает только основы новой профессии , в любом случае нужно будет дополнительное внимание и доп обучение со стороны менеджеров и команды. Для кандидата 50+ этот процесс более сложный в силу работоспособности в сравнении с молодежью.
Два способа это обойти, в моем понимании:
- быть на голову выше всех кандидатов, что довольно сложно после 6 мес. обучения
- фейковый опыт в резюме (+ 5-7 лет работы как делают ребята из Индии и Бангладеша) и знание предмета чтобы успешно пройти собеседование, в этом случае возникнет меньше вопросов.
p.s. Насколько часто вы с этим сталкиваетесь?
Такой твит написал Сергей Андреев (СТО в XYZ). Я подумал, а чего бы не спросить об этом у моих американских знакомых, чтобы понять, является ли ситуация в России особой или везде плюс минус так или даже хуже. В общем задал я вопрос в группе ребят, которые работают в штатах десяток другой лет и заодно погуглил. И вот что нашел.
Так или иначе, многие слышали что в штатах есть законы запрещающие дискриминацию по возрасту. Об этом не спрашивают, про это не пишут. Многие люди действительно против такой дискриминации и считают что это абсолютное зло. И казалось бы вот оно счастье. Но:
> имхо везде где работал так или иначе смотрят на возраст по нескольким причинам:
- молодые могут пахать днями и ночами, тогда как у возрастных людей семья дети и т.д.
- средний возраст команды, тоже влияет
> С возрастом от тебя ожидается, что ты уже занимаешь лидерские и менеджерские позиции, поэтому 50ти летние Sr или мидлы начинают жаловаться, что их на работу не берут
> Сталкивался с этим на прошлом месте работы когда обсуждали потенциальных кандидатов на должность Front End разработчика и тогда был пик буткэмпов.
Я был на должность директора, но окончательное слово было за VP с которым проводилось последнее собеседование. Примерный ход его мыслей в тот момент:
Человек пошел на bootcamp = он знает только основы новой профессии , в любом случае нужно будет дополнительное внимание и доп обучение со стороны менеджеров и команды. Для кандидата 50+ этот процесс более сложный в силу работоспособности в сравнении с молодежью.
Два способа это обойти, в моем понимании:
- быть на голову выше всех кандидатов, что довольно сложно после 6 мес. обучения
- фейковый опыт в резюме (+ 5-7 лет работы как делают ребята из Индии и Бангладеша) и знание предмета чтобы успешно пройти собеседование, в этом случае возникнет меньше вопросов.
p.s. Насколько часто вы с этим сталкиваетесь?
👍25😢7🔥6💔3❤2🤔1💯1
Channel name was changed to «Организованное программирование | Кирилл Мокевнин»
Можно ли называть синьорами разработчиков с большим опытом, которые
⁃ Не понимают как под капотом работает тот фреймворк, на котором они ведут разработку
⁃ Не умеют пользоваться отладчиком на рабочем языке
⁃ Не умеют писать автоматизированные тесты и не пишут их
⁃ Не владеют навыками функционального программирования и не знают что это
⁃ Не знают ни одного классического алгоритма
⁃ Знают только один язык программирования
⁃ Не используют миграций и ручками вносят исправления в базе данных (для беков)
⁃ Настраивают локальное окружение всегда руками, не используя автоматизацию
⁃ Не знают как работает деплой их приложения/сервиса и не могут его настроить сами
Что вы об этом думаете? Палец ввер можем, палец вниз не можем
⁃ Не понимают как под капотом работает тот фреймворк, на котором они ведут разработку
⁃ Не умеют пользоваться отладчиком на рабочем языке
⁃ Не умеют писать автоматизированные тесты и не пишут их
⁃ Не владеют навыками функционального программирования и не знают что это
⁃ Не знают ни одного классического алгоритма
⁃ Знают только один язык программирования
⁃ Не используют миграций и ручками вносят исправления в базе данных (для беков)
⁃ Настраивают локальное окружение всегда руками, не используя автоматизацию
⁃ Не знают как работает деплой их приложения/сервиса и не могут его настроить сами
Что вы об этом думаете? Палец ввер можем, палец вниз не можем
👎193👍69🤷♂27🤔5❤4💩2🤡2🔥1😁1
На следующей неделе уезжаю в небольшой отпуск, у нас тут день благодарения, редкий случай когда есть возможность вырваться, так как нет школы у детей. Писать врядли получится, но чтобы вам не было скучно, рекомендую почитать мою серию постов "совершенный код", в которых рассказываются неустаревающие вещи про разнообразные технические решения, которые стоит выбирать или на что стоит ориентироваться при их выборе: https://ru.hexlet.io/u/mokevnin/blog_posts Всем чмоки
👍59❤17🔥10❤🔥2🤔1🎉1
Как мы нанимаем
Некоторое время назад мы начали собеседовать мидлового rails-программиста в Хекслет и когда я об этом написал, то люди начали спрашивать, а как мы собственно собеседуем. Рассказываю 🙂
Вообще у нас процесс двух-трех этапный. Сначала рекрутер отбирает резюме по формальным требованиям, куда например входит время работы на последних 3-4 работах. Если человек везде скакал работая по полгода, то это не наш клиент. Если решал похожие задачи, то наш. Кстати, сопроводительное работает если оно хорошо написано и раскрывает что-то полезное.
Дальше рекрутер передает отобранных ребят руководителю направления, который уже отмечает тех кто ему интересен.
Следующий шаг это, как мы называем, прескрин, это небольшое интервью с рекрутером, где он задает вопросы по списку согласованному с руководителем направления. Рекрутер на этом этапе не оценивает проф качества, его задача выяснить какие-то детали и затем передать их руководителю. Например один из ключевых вопросов для руководителей это то по каким KPI они работали. Плюс мы всех спрашиваем о том почему они уволились. Единственное, что оценивается рекрутером на этом этапе, это коммуникация. Это важный этап, так как позволяет значительно экономить время нанимающих руководителей.
Дальше уже идет собеседование с руководителем подразделения и специалистами. Этот этап сильно зависит от направления. Конкретно в программировании мы пытаемся понять насколько человек ориентирован на бизнес, а не код ради кода, насколько он может превращать задачи в решения (на примере кейсов) по пути задавая правильные вопросы и как конкретно он пишет код. Подробнее про этот этап у программистов я расскажу в следующим посте.
Для части вакансий в этот процесс встраивается тестовое задание. Где-то оно идет до общения с руководителем направления (но после разговора с рекрутером), где-то после.
Ну и последний этап, который выполняется без участия соискателя, это сбор референсов. Сейчас мы это делаем для всех сотрудников, которых нанимаем. Очень часто помогает избежать катастрофы, когда неопытные нанимающие менеджеры (и даже опытные), пропускают людей, которые плохо себя показали на предыдущем месте или вообще обманывали.
В целом, когда все это выстроено, то весь процесс занимает в районе недели (без тестового). Кстати весь этот процесс делается в талантиксе.
p.s. А как построено у вас? Вам нравится ваш процесс найма?
Некоторое время назад мы начали собеседовать мидлового rails-программиста в Хекслет и когда я об этом написал, то люди начали спрашивать, а как мы собственно собеседуем. Рассказываю 🙂
Вообще у нас процесс двух-трех этапный. Сначала рекрутер отбирает резюме по формальным требованиям, куда например входит время работы на последних 3-4 работах. Если человек везде скакал работая по полгода, то это не наш клиент. Если решал похожие задачи, то наш. Кстати, сопроводительное работает если оно хорошо написано и раскрывает что-то полезное.
Дальше рекрутер передает отобранных ребят руководителю направления, который уже отмечает тех кто ему интересен.
Следующий шаг это, как мы называем, прескрин, это небольшое интервью с рекрутером, где он задает вопросы по списку согласованному с руководителем направления. Рекрутер на этом этапе не оценивает проф качества, его задача выяснить какие-то детали и затем передать их руководителю. Например один из ключевых вопросов для руководителей это то по каким KPI они работали. Плюс мы всех спрашиваем о том почему они уволились. Единственное, что оценивается рекрутером на этом этапе, это коммуникация. Это важный этап, так как позволяет значительно экономить время нанимающих руководителей.
Дальше уже идет собеседование с руководителем подразделения и специалистами. Этот этап сильно зависит от направления. Конкретно в программировании мы пытаемся понять насколько человек ориентирован на бизнес, а не код ради кода, насколько он может превращать задачи в решения (на примере кейсов) по пути задавая правильные вопросы и как конкретно он пишет код. Подробнее про этот этап у программистов я расскажу в следующим посте.
Для части вакансий в этот процесс встраивается тестовое задание. Где-то оно идет до общения с руководителем направления (но после разговора с рекрутером), где-то после.
Ну и последний этап, который выполняется без участия соискателя, это сбор референсов. Сейчас мы это делаем для всех сотрудников, которых нанимаем. Очень часто помогает избежать катастрофы, когда неопытные нанимающие менеджеры (и даже опытные), пропускают людей, которые плохо себя показали на предыдущем месте или вообще обманывали.
В целом, когда все это выстроено, то весь процесс занимает в районе недели (без тестового). Кстати весь этот процесс делается в талантиксе.
p.s. А как построено у вас? Вам нравится ваш процесс найма?
👍31❤5👎4🤔2
На той неделе в штатах бомбанула такая история https://twitter.com/GergelyOrosz/status/1729268790033306105 про фейковых докладчиков девушек на конфе. Я не любитель обсуждать такие штуки, но меня кое что зацепило. На эту историю среагировал дядя боб (роберт мартин), который в рунете считается полубогом и дальше понеслось. Прочитайте этот тред в твиттере, чтобы просто быть в курсе происходящего и составить свое мнение.
X (formerly Twitter)
Gergely Orosz (@GergelyOrosz) on X
Anyway IMO this is one more reason why fewer and fewer people look up to Uncle Bob - including me.
I enjoyed his books a decade and a half ago. But cannot relate to any of his views or reactions the past several years.
I respect people differ in opinions…
I enjoyed his books a decade and a half ago. But cannot relate to any of his views or reactions the past several years.
I respect people differ in opinions…
🥱11❤3👍3💩2😁1🤔1
Как мы собеседуем программистов
В основном мы нанимаем разработчиков на rails которые либо уже фулстек либо с потенциалом на фулстек. Но есть важная особенность. Я никогда не был сторонником брать людей, которые работали именно на том стеке, который мне нужен. Установка была всегда нанимать хороших ребят с любых смежных стеков. Например на нашу позицию отлично подходят те кто работали с бекенд фреймворками типа laravel, django, spring boot и другими, но не микрофреймворками. Наши самые успешные кейсы и ребята как раз были такими свитчерами. Эта особенность сильно влияет на само собеседование. Оно делится на три основные части.
Первая коммуникационная, которая проходит на прескрине с hr, где hr задает вопросы (спроектированные вместе с нанимающим менеджером) и составляет какую-то свою примерную картинку с впечатлением о человеке, о том насколько он впишется в нашу культуру. На этом этапе hr не принимает никаких решенй, он всегда это показывает менджеру, который либо просит назначить собес, либо пишет отказ. В дальнейших этапах коммуникация тоже проверяется, но уже скорее фоном к остальному.
Бизнесовая, где мы узнаем у человека о его опыте взаимодействия с бизнесом. Насколько человек понимает тоб что он делал для чего и как это влияло на бизнес. То как принимались решения, какие были приняты компромисы и совершены ошибки. Как человек ведет себя когда не до конца понимает задачу или видит что это слишком сложно или чувствует что это не поможет. Чем более опытный человек, тем большего погружения в бизнес мы ждем. Например на этом этапе в том числе отсеиваются те, кто фанатично подходит к выбору технологий. Нам ближе люди, которые понимают что технология это следствие задач и они готовы выбирать и изучать инструмент по необходимости.
Вторая часть техническая. Как правило все собеседование длится один час и строится вокруг одного рабочего кейса, который предлагается решить. Кейс подобран таким образом, чтобы его можно было бесконечно развивать в разные направления в зависимости от того что человек ответит. Причем сам кейс никак не связан с технологией, он плюс минус одинаково делается на любом бекендовом фреймворке. Чаще всего я спрашиваю такое: “у хекслета есть аккаунт в страйпе, который шлет чеки людям на почту, после оплаты. Почта передается в страйп при первой оплате, при повторных платежах (в случае подписки) страйп использует эту почту. На Хекслете внедрили смену емейла и получилась ситуация, когда емейл в страйпе старый и человек может не получить чек. Как бы реализовали логику обновления емейла в страйпе при изменении емейла на хекслете”. Само решение этой задачи очень короткое, но по пути здесь всплывает очень много интересных моментов, показывающих реальное понимание вещей. На основе этого мы уже принимаем решение о найме.
p.s. Домашнее задание: напишите в комментарии как бы вы решили эту задачу в вашем стеке
В основном мы нанимаем разработчиков на rails которые либо уже фулстек либо с потенциалом на фулстек. Но есть важная особенность. Я никогда не был сторонником брать людей, которые работали именно на том стеке, который мне нужен. Установка была всегда нанимать хороших ребят с любых смежных стеков. Например на нашу позицию отлично подходят те кто работали с бекенд фреймворками типа laravel, django, spring boot и другими, но не микрофреймворками. Наши самые успешные кейсы и ребята как раз были такими свитчерами. Эта особенность сильно влияет на само собеседование. Оно делится на три основные части.
Первая коммуникационная, которая проходит на прескрине с hr, где hr задает вопросы (спроектированные вместе с нанимающим менеджером) и составляет какую-то свою примерную картинку с впечатлением о человеке, о том насколько он впишется в нашу культуру. На этом этапе hr не принимает никаких решенй, он всегда это показывает менджеру, который либо просит назначить собес, либо пишет отказ. В дальнейших этапах коммуникация тоже проверяется, но уже скорее фоном к остальному.
Бизнесовая, где мы узнаем у человека о его опыте взаимодействия с бизнесом. Насколько человек понимает тоб что он делал для чего и как это влияло на бизнес. То как принимались решения, какие были приняты компромисы и совершены ошибки. Как человек ведет себя когда не до конца понимает задачу или видит что это слишком сложно или чувствует что это не поможет. Чем более опытный человек, тем большего погружения в бизнес мы ждем. Например на этом этапе в том числе отсеиваются те, кто фанатично подходит к выбору технологий. Нам ближе люди, которые понимают что технология это следствие задач и они готовы выбирать и изучать инструмент по необходимости.
Вторая часть техническая. Как правило все собеседование длится один час и строится вокруг одного рабочего кейса, который предлагается решить. Кейс подобран таким образом, чтобы его можно было бесконечно развивать в разные направления в зависимости от того что человек ответит. Причем сам кейс никак не связан с технологией, он плюс минус одинаково делается на любом бекендовом фреймворке. Чаще всего я спрашиваю такое: “у хекслета есть аккаунт в страйпе, который шлет чеки людям на почту, после оплаты. Почта передается в страйп при первой оплате, при повторных платежах (в случае подписки) страйп использует эту почту. На Хекслете внедрили смену емейла и получилась ситуация, когда емейл в страйпе старый и человек может не получить чек. Как бы реализовали логику обновления емейла в страйпе при изменении емейла на хекслете”. Само решение этой задачи очень короткое, но по пути здесь всплывает очень много интересных моментов, показывающих реальное понимание вещей. На основе этого мы уже принимаем решение о найме.
p.s. Домашнее задание: напишите в комментарии как бы вы решили эту задачу в вашем стеке
👍41🤔3❤2
В чем секрет популярности питона? (не простота)
Во многих рейтингах питон занимает первое место по популярности, что порождает всякие мифы на тему того почему так происходит. Очень многие включая совсем новичков любят повторять что питон очень простой и его легко учить. Но мы то с вами знаем, что на базовом уровне такие же простые практически все скриптовые языки. С таким же успехом можно было бы учить js и например мы так делаем не только на Хекслете но и в колледже.
Другой причиной называют наличие большого количества работы. С одной стороны да, если посмотреть на вакансии, то их много, но есть нюанс. Это совсем разные вакансии, среди которых можно выделить:
⁃ Веб программирование (django и вот это все)
⁃ Аналитика
⁃ Администрирование
⁃ Какой-то скриптинг, здесь все остальное
И между этими направлениями нет почти ничего общего, более того, в некоторых из них знание питона это наименьшее из знаний, которыми должны обладать эти специалисты, например админы или аналитики. В итоге получается что если человек учится на одну из этих специальностей, то претендовать на другую без шансов.
Реальная же причина кроется в том, что питон стал намбер ван языком при обучении в системе образования большинства стран. Начиная от школы заканчивая университетами. Да это не единственный язык которому учат, но питона там много и становится больше. Мог ли быть на его месте другой язык? Конечно, питону в каком-то смысле повезло оказаться на этом месте, в чем скорее заслуга людей, которые его продвигали в этой среде, а не самого языка.
p.s. А что у вас было во время обучения в школе и универе?
Во многих рейтингах питон занимает первое место по популярности, что порождает всякие мифы на тему того почему так происходит. Очень многие включая совсем новичков любят повторять что питон очень простой и его легко учить. Но мы то с вами знаем, что на базовом уровне такие же простые практически все скриптовые языки. С таким же успехом можно было бы учить js и например мы так делаем не только на Хекслете но и в колледже.
Другой причиной называют наличие большого количества работы. С одной стороны да, если посмотреть на вакансии, то их много, но есть нюанс. Это совсем разные вакансии, среди которых можно выделить:
⁃ Веб программирование (django и вот это все)
⁃ Аналитика
⁃ Администрирование
⁃ Какой-то скриптинг, здесь все остальное
И между этими направлениями нет почти ничего общего, более того, в некоторых из них знание питона это наименьшее из знаний, которыми должны обладать эти специалисты, например админы или аналитики. В итоге получается что если человек учится на одну из этих специальностей, то претендовать на другую без шансов.
Реальная же причина кроется в том, что питон стал намбер ван языком при обучении в системе образования большинства стран. Начиная от школы заканчивая университетами. Да это не единственный язык которому учат, но питона там много и становится больше. Мог ли быть на его месте другой язык? Конечно, питону в каком-то смысле повезло оказаться на этом месте, в чем скорее заслуга людей, которые его продвигали в этой среде, а не самого языка.
p.s. А что у вас было во время обучения в школе и универе?
👍31😢4🤔3👎2🔥1
Вакансии пост. Если вы или ваши друзья разрабатывают на rails/spring boot/asp.net/django/laravel/symfony/любой другой бек фреймворк, в течении года-двух, то мы бы с удовольствием поговорили https://hh.ru/vacancy/88545320 вакансия немного заточена под rails, но на практике мы ищем не только рельсовика (чаще мы даже переучиваем).
Задачи которые мы решаем в ближайшие месяцы:
- выпиливаем страйп и переходим на клаудпейментс для зарубежных карт
- перерабатываем механику проверки проектов наставниками и менторами (довольно большая штука)
- вводим наставников для b2b, у них там своя атмосфера и нужны возможности похожие на групповое обучение хекслета
- готовим хекслет к запуску в латинской америке (тут все включая переводы, события, интеграция систем)
- интегрируем chatgpt в процесс обучения, чтобы он подсказывал по коду и по урокам
- еще 150 тикетов в беклоге, до которых не добрались :)
Чему у нас можно научиться:
- У нас офигенный код и культура разработки. Линтеры, тесты все как полагается. Прагматично, без "покрытие 90%", без юнитов на каждый чих и так далее. Все само собирается на ci, деплоится всеми по тегу в куб. В докер тоже само сворачивается. Весь набор тестов пробегает минут за 5. В продакшен катим по 5 раз в день
- По проекту это сотни тысяч строк кода, около 300 моделей, десяток подпроектов, десятки серверов, много автоматизаций вокруг (сборка и запуск практик), тысячи репозиториев, образов, много сторонних сервисов. Все это обслуживается командой из 3 фултайм кор девелоперов
- Никакого скрама головного мозга. У нас свой процесс, с минимум всяких плясок и чайных церемоний. Если надо адаптируем под ситуацию
- Все разработчики хекслета в процессе учатся и могут во фронт (реакт) в ops (ansible, куб, докер, терраформ, облака, мониторинг, алертинг)
- Разработка очень интегрирована с бизнесом и принимает много участвия в принятии решений. Мы всегда смотрим на то чтобы решать задачи просто, даже если для этого надо поправить бизнес требования. Ребята понимают как их действия отражаются на метриках в том числе денежных. Между продактом и разработкой нет проджектов.
- У нас фронт внедрен как виджеты, это значит что нет всяких сложных схем аля отдельный фронт отдельное апи и надо все дружить. У нас классический рендеринг на беке с шаблонизатором haml/slim. Мы юзаем бутстрап без кастома и всегда легко под него подстариваемся. Экономим кучу времени и не отвлекаемся на верстку (кроме всяких маркетинговых штук, но для этого есть свои люди). Каждый человек делает задачу от начала и до конца и ни от кого не зависит почти всегда. От идеи до выкатил проходит очень мало времени.
- Все наши ребята участвуют в разработке опенсорса, который мы делаем всегда когда можем. Его уже много и если можем делаем больше
- Меня отстранили от разработки и больше в код не пускают :D
Задачи которые мы решаем в ближайшие месяцы:
- выпиливаем страйп и переходим на клаудпейментс для зарубежных карт
- перерабатываем механику проверки проектов наставниками и менторами (довольно большая штука)
- вводим наставников для b2b, у них там своя атмосфера и нужны возможности похожие на групповое обучение хекслета
- готовим хекслет к запуску в латинской америке (тут все включая переводы, события, интеграция систем)
- интегрируем chatgpt в процесс обучения, чтобы он подсказывал по коду и по урокам
- еще 150 тикетов в беклоге, до которых не добрались :)
Чему у нас можно научиться:
- У нас офигенный код и культура разработки. Линтеры, тесты все как полагается. Прагматично, без "покрытие 90%", без юнитов на каждый чих и так далее. Все само собирается на ci, деплоится всеми по тегу в куб. В докер тоже само сворачивается. Весь набор тестов пробегает минут за 5. В продакшен катим по 5 раз в день
- По проекту это сотни тысяч строк кода, около 300 моделей, десяток подпроектов, десятки серверов, много автоматизаций вокруг (сборка и запуск практик), тысячи репозиториев, образов, много сторонних сервисов. Все это обслуживается командой из 3 фултайм кор девелоперов
- Никакого скрама головного мозга. У нас свой процесс, с минимум всяких плясок и чайных церемоний. Если надо адаптируем под ситуацию
- Все разработчики хекслета в процессе учатся и могут во фронт (реакт) в ops (ansible, куб, докер, терраформ, облака, мониторинг, алертинг)
- Разработка очень интегрирована с бизнесом и принимает много участвия в принятии решений. Мы всегда смотрим на то чтобы решать задачи просто, даже если для этого надо поправить бизнес требования. Ребята понимают как их действия отражаются на метриках в том числе денежных. Между продактом и разработкой нет проджектов.
- У нас фронт внедрен как виджеты, это значит что нет всяких сложных схем аля отдельный фронт отдельное апи и надо все дружить. У нас классический рендеринг на беке с шаблонизатором haml/slim. Мы юзаем бутстрап без кастома и всегда легко под него подстариваемся. Экономим кучу времени и не отвлекаемся на верстку (кроме всяких маркетинговых штук, но для этого есть свои люди). Каждый человек делает задачу от начала и до конца и ни от кого не зависит почти всегда. От идеи до выкатил проходит очень мало времени.
- Все наши ребята участвуют в разработке опенсорса, который мы делаем всегда когда можем. Его уже много и если можем делаем больше
- Меня отстранили от разработки и больше в код не пускают :D
hh.ru
Вакансия Backend-разработчик в Москве, работа в компании Хекслет (вакансия в архиве c 13 декабря 2023)
Зарплата: от 150000 до 200000 ₽ за месяц. Москва. Требуемый опыт: 1–3 года. Полная занятость. Дата публикации: 10.12.2023.
🔥38😁11👍10🤩2❤1👎1🤔1💔1
Что значит фраза программиста: “задача готова” ?
В зависимости от компании, готовность задачи может определяться как:
⁃ Подготовил пулреквест
⁃ Передал тестировщикам
⁃ Влил в основную ветку
⁃ Выкатил на продакшен
Большинство мест в которых я работал как программист, под готовностью понимали первые три пункта в разных вариациях. Я в этом не видел никаких проблем, до тех пока не случилось две вещи.
Первое я начал интересоваться процессами, познакомился с канбаном, дао тойоты, теорией ограничений и так далее. Тогда стало понятно, что задача которую сделали, но не отгрузили (выкатили в прод), это проблема, так как пока задача висит, ситуация может поменяться и код придется допиливать. Программист в это время уже занят другим и возвращаться обратно ему будет сложно, плюс потраченное время на вспомнить контекст. Остальные же просто не учитывают сделанные изменения в своей работе и при слиянии мы можем получить серьезные конфликты.
Второе, у меня появился собственный бизнес и я увидел что любая задача, которая “сделана”, но ей никто не пользуется, на самом деле является пустой тратой денег. Не важно что она лежит в ветке, важно что это не приносит никакой пользы бизнесу. Особенно это бьет по задачам, которые в итоге зависают на выходные или, что еще хуже, на праздники. Представьте что мы сделали важное изменение перед новогодними, но не задеплоили. Получается что 10 дней потеряны у нас ни аналитики, ни эффекта.
Но есть и еще кое что. Готовность задачи приносит психологическое успокоение, что я свою работу сделал, дальше не моя забота. В итоге любые возникающие сложности, например ошибки на уровне тестирования или деплоя, рождают скорее раздражение, чем желание заниматься задачей, которая уже готова. А хотелось бы, чтобы программист был вовлечен до конца и хотел чтобы его изменение как можно быстрее оказывалось в продакшене.
Исправить эту ситуацию оказалось очень просто. Достаточно поменять семантику слова готовность. Done в наших досках означает что задача уже выкачена и ее результатами пользуются. В таком случае у программистов свербит, что надо приложить усилия и довести ее до конца.
p.s. А что значит “задача готова” в вашем проекте и хорошо ли это работает?
В зависимости от компании, готовность задачи может определяться как:
⁃ Подготовил пулреквест
⁃ Передал тестировщикам
⁃ Влил в основную ветку
⁃ Выкатил на продакшен
Большинство мест в которых я работал как программист, под готовностью понимали первые три пункта в разных вариациях. Я в этом не видел никаких проблем, до тех пока не случилось две вещи.
Первое я начал интересоваться процессами, познакомился с канбаном, дао тойоты, теорией ограничений и так далее. Тогда стало понятно, что задача которую сделали, но не отгрузили (выкатили в прод), это проблема, так как пока задача висит, ситуация может поменяться и код придется допиливать. Программист в это время уже занят другим и возвращаться обратно ему будет сложно, плюс потраченное время на вспомнить контекст. Остальные же просто не учитывают сделанные изменения в своей работе и при слиянии мы можем получить серьезные конфликты.
Второе, у меня появился собственный бизнес и я увидел что любая задача, которая “сделана”, но ей никто не пользуется, на самом деле является пустой тратой денег. Не важно что она лежит в ветке, важно что это не приносит никакой пользы бизнесу. Особенно это бьет по задачам, которые в итоге зависают на выходные или, что еще хуже, на праздники. Представьте что мы сделали важное изменение перед новогодними, но не задеплоили. Получается что 10 дней потеряны у нас ни аналитики, ни эффекта.
Но есть и еще кое что. Готовность задачи приносит психологическое успокоение, что я свою работу сделал, дальше не моя забота. В итоге любые возникающие сложности, например ошибки на уровне тестирования или деплоя, рождают скорее раздражение, чем желание заниматься задачей, которая уже готова. А хотелось бы, чтобы программист был вовлечен до конца и хотел чтобы его изменение как можно быстрее оказывалось в продакшене.
Исправить эту ситуацию оказалось очень просто. Достаточно поменять семантику слова готовность. Done в наших досках означает что задача уже выкачена и ее результатами пользуются. В таком случае у программистов свербит, что надо приложить усилия и довести ее до конца.
p.s. А что значит “задача готова” в вашем проекте и хорошо ли это работает?
👍63🔥17❤4🤔1
Гибкость добавляет сложность или убирает ее?
Когда я слышу что кто, то говорит “у нас очень гибкая система и код”, то меня это скорее пугает. Дело в том что любая гибкость увеличивает сложность. Чем гибче чем сложнее. Почему так получается?
Представьте что в вашей системе один способ оплаты. Весь код завязан на эту платежную систему и он довольно прямолинейный. Дальше вам говорят что нужно добавить вторую платежную систему после чего будут и другие. Вы принимаете решение о том, чтобы сделать систему гибкой, готовой к простому добавлению новых платежных систем. Для этого нужно абстрагироваться от конкретных систем, выделить общие концепции и реализовать в коде это в виде подсистемы, готовой к подключению конкретных реализаций. В этом коде постоянно будут возникать проблемы связанные с тем что все платежки работают чуть по другому. Во всех интерфейсах надо учитывать возможность переключение реализации. В базе данных нужно вводить новые сущности чтобы связывать продажи со способом оплаты.
Из недавнего опыта. Я искал для проектов Хекслета фронтенд систему, которая позволяет генерировать интерфейсы из готовых элементов в коде, чтобы не тратить время на ручное их написание там, где нам это не нужно. Например нам такое нужно во всех проектах, где делается бекенд, а фронтенд предоставляем мы сами. После изучения вопроса стало понятно что есть два основных решения: https://refine.dev/ и https://marmelab.com/react-admin/ Если посмотреть их документацию, то видно что первое решение более гибкое и например позволяет менять внешний вид так как работает с разными css-фреймворками. Но если посмотреть на код, эта гибкость дается дорого, количество кода, которое надо писать в refine, значительно больше чем в react-admin, где из коробки material который не поменяешь, но зато весь css скрыт на 100%. В итоге я выбрал react-admin, а реализация того что нам нужно составила около 100 строк кода (несколько крудов, аутентификация, связь с бекендом).
Все тоже самое проявляется и на более низком уровне:
⁃ Отсутствие внедрения зависимостей VS внедрение зависимостей (усложняет систему очень сильно)
⁃ Работа с конфигами из файлов VS универсальная штука загрузки конфигов
⁃ Модель с фиксированными полями VS модель с динамическим набором полей
⁃ Active Records VS Data Mapper
⁃ Работа с одной базой данных VS Поддержка любых баз данных (особенно если NoSQL смешивается с SQL)
Все это не значит что гибкость не нужна, но нужно правильно оценивать эту гибкость. Часто она дается настолько дорого, что лучше все же не обобщать. Хорошим примером может служить Java и Spring Boot где все сильно обобщено, есть множество интерфейсов на все случаи жизни, которые все реализуют. Огромная куча абстракций, которую не так то просто выучить. Зато все можно подменить и в теории это работает. С другой стороны находятся фреймворки динамических языков типа Django, Ruby On Rails, Laravel, где шли другим путем, давали готовые решения, которые не такие гибкие, но зато очень простые, легкие в изучении и использовании.
p.s. Какая концепция вам ближе? Spring Boot или Django/Rails/Laravel?
Когда я слышу что кто, то говорит “у нас очень гибкая система и код”, то меня это скорее пугает. Дело в том что любая гибкость увеличивает сложность. Чем гибче чем сложнее. Почему так получается?
Представьте что в вашей системе один способ оплаты. Весь код завязан на эту платежную систему и он довольно прямолинейный. Дальше вам говорят что нужно добавить вторую платежную систему после чего будут и другие. Вы принимаете решение о том, чтобы сделать систему гибкой, готовой к простому добавлению новых платежных систем. Для этого нужно абстрагироваться от конкретных систем, выделить общие концепции и реализовать в коде это в виде подсистемы, готовой к подключению конкретных реализаций. В этом коде постоянно будут возникать проблемы связанные с тем что все платежки работают чуть по другому. Во всех интерфейсах надо учитывать возможность переключение реализации. В базе данных нужно вводить новые сущности чтобы связывать продажи со способом оплаты.
Из недавнего опыта. Я искал для проектов Хекслета фронтенд систему, которая позволяет генерировать интерфейсы из готовых элементов в коде, чтобы не тратить время на ручное их написание там, где нам это не нужно. Например нам такое нужно во всех проектах, где делается бекенд, а фронтенд предоставляем мы сами. После изучения вопроса стало понятно что есть два основных решения: https://refine.dev/ и https://marmelab.com/react-admin/ Если посмотреть их документацию, то видно что первое решение более гибкое и например позволяет менять внешний вид так как работает с разными css-фреймворками. Но если посмотреть на код, эта гибкость дается дорого, количество кода, которое надо писать в refine, значительно больше чем в react-admin, где из коробки material который не поменяешь, но зато весь css скрыт на 100%. В итоге я выбрал react-admin, а реализация того что нам нужно составила около 100 строк кода (несколько крудов, аутентификация, связь с бекендом).
Все тоже самое проявляется и на более низком уровне:
⁃ Отсутствие внедрения зависимостей VS внедрение зависимостей (усложняет систему очень сильно)
⁃ Работа с конфигами из файлов VS универсальная штука загрузки конфигов
⁃ Модель с фиксированными полями VS модель с динамическим набором полей
⁃ Active Records VS Data Mapper
⁃ Работа с одной базой данных VS Поддержка любых баз данных (особенно если NoSQL смешивается с SQL)
Все это не значит что гибкость не нужна, но нужно правильно оценивать эту гибкость. Часто она дается настолько дорого, что лучше все же не обобщать. Хорошим примером может служить Java и Spring Boot где все сильно обобщено, есть множество интерфейсов на все случаи жизни, которые все реализуют. Огромная куча абстракций, которую не так то просто выучить. Зато все можно подменить и в теории это работает. С другой стороны находятся фреймворки динамических языков типа Django, Ruby On Rails, Laravel, где шли другим путем, давали готовые решения, которые не такие гибкие, но зато очень простые, легкие в изучении и использовании.
p.s. Какая концепция вам ближе? Spring Boot или Django/Rails/Laravel?
refine.dev
Refine | Open-source Retool for Enterprise
Build React-based internal tools, admin panels, dashboards & B2B apps with unmatched flexibility.
👍29🤔13❤5💯5🐳1
Как нас шантажирует человек, пересмотревший пацанов
> это слито с вашего дырявого сайта...Во шухер будет...удачи чушпаны!!!)))
Ох ребята, прямо на наших глазах сейчас разворачивается интересная история. Начну с конца. Некий человек, прислал нам логины (емейлы) и пароли части пользователей Хекслета с требованием выплатить деньги. Прямо сейчас мы продолжаем переписку и проработку по этой ситуации так как она отличается от того, что обычно бывает в случаях серьезных проблем с безопасностью.
Как обычно все происходит в случае, если человек нашел серьезную дыру в безопасности на сайте? У многих компаний есть вполне стандартная процедура, которую знают те кто находят такие ошибки. Человек, который нашел баг, пишет о том что у вас мол такой баг и показывает доказательства его присутствия. Обычно, человек уточняет есть ли у компании баг-баунти программа и если есть то сначала договаривается о сумме выплат, затем рассказывает про баг и получает деньги. Компания после этого чинить баг и в идеале меняет внутренние процессы так чтобы подобные баги не воспроизводились.
Но здесь все пошло не так. Началось все плюс минус стандартно и мы действительно увидели что пароли подходят. Однако, была загводзка, мы не храним пароли в открытом виде и мест в которых эти пароли можно было бы получить буквально два, это форма регистрации и логина. Плюс все под https. Фактически получить логин и пароль можно было бы внедрив XSS напрямую на страницы сайта или через внешние сервисы, которые мы подключаем на сайте. Обычно они подключаются через GTM. Все это маловероятно, учитывая то, что мы хорошо понимаем эти атаки и превентивно об этом думаем.
Где-то в этот момент в голову пришла мысль о том, что человек просто использует слитые базы паролей. Это прокатывает так как у большинства пользователей один и тот же. Пошли проверили и да, все логины и пароли находятся в слитых базах. Дальше стало понятно, что нас скорее всего разводят. Поэтому мы сделали следующую вещь, взяли один аккаунт, выставили ему новый пароль, скинули нашему хакеру этот емейл и попросили прислать пароль. При этом написали что если он это сделает, то мы без вопросов заплатим ему деньги. Эту просьбу он проигнорировал и написал нам уже угрозу, что сделает рассылку по всем емейлам которые у него есть о том, что он слил пароли на Хекслете (что пока он не доказал).
Мы принимаем разные меры (но я не расскажу какие потому что он скорее всего меня читает lol), чтобы разрулить эту ситуацию правильно. Но при этом хочется сказать несколько важных вещей. 2fa штука важная, будем внедрять. Надо во все курсы встраивать урок про безопасность паролей)
> это слито с вашего дырявого сайта...Во шухер будет...удачи чушпаны!!!)))
Ох ребята, прямо на наших глазах сейчас разворачивается интересная история. Начну с конца. Некий человек, прислал нам логины (емейлы) и пароли части пользователей Хекслета с требованием выплатить деньги. Прямо сейчас мы продолжаем переписку и проработку по этой ситуации так как она отличается от того, что обычно бывает в случаях серьезных проблем с безопасностью.
Как обычно все происходит в случае, если человек нашел серьезную дыру в безопасности на сайте? У многих компаний есть вполне стандартная процедура, которую знают те кто находят такие ошибки. Человек, который нашел баг, пишет о том что у вас мол такой баг и показывает доказательства его присутствия. Обычно, человек уточняет есть ли у компании баг-баунти программа и если есть то сначала договаривается о сумме выплат, затем рассказывает про баг и получает деньги. Компания после этого чинить баг и в идеале меняет внутренние процессы так чтобы подобные баги не воспроизводились.
Но здесь все пошло не так. Началось все плюс минус стандартно и мы действительно увидели что пароли подходят. Однако, была загводзка, мы не храним пароли в открытом виде и мест в которых эти пароли можно было бы получить буквально два, это форма регистрации и логина. Плюс все под https. Фактически получить логин и пароль можно было бы внедрив XSS напрямую на страницы сайта или через внешние сервисы, которые мы подключаем на сайте. Обычно они подключаются через GTM. Все это маловероятно, учитывая то, что мы хорошо понимаем эти атаки и превентивно об этом думаем.
Где-то в этот момент в голову пришла мысль о том, что человек просто использует слитые базы паролей. Это прокатывает так как у большинства пользователей один и тот же. Пошли проверили и да, все логины и пароли находятся в слитых базах. Дальше стало понятно, что нас скорее всего разводят. Поэтому мы сделали следующую вещь, взяли один аккаунт, выставили ему новый пароль, скинули нашему хакеру этот емейл и попросили прислать пароль. При этом написали что если он это сделает, то мы без вопросов заплатим ему деньги. Эту просьбу он проигнорировал и написал нам уже угрозу, что сделает рассылку по всем емейлам которые у него есть о том, что он слил пароли на Хекслете (что пока он не доказал).
Мы принимаем разные меры (но я не расскажу какие потому что он скорее всего меня читает lol), чтобы разрулить эту ситуацию правильно. Но при этом хочется сказать несколько важных вещей. 2fa штука важная, будем внедрять. Надо во все курсы встраивать урок про безопасность паролей)
❤110😁45👍37🔥13❤🔥5🥰3👨💻3🤡1