StringConcat - разработка без боли и сожалений
3.72K subscribers
99 photos
10 videos
3 files
242 links
Полезный блог от разработчиков для разработчиков. Наш сайт: howto.stringconcat.ru
Download Telegram
Как ИИ превратил плохих менеджеров в плохих разработчиков

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

Но недавно я столкнулся с новым типом кандидатов: плохими менеджерами, которые с помощью ИИ переквалифицировались в плохих разработчиков.
Попался мне один такой. Рассказываю.
Читаю резюме — вроде всё нормально, но нет какого-то коннекта на уровне «свой — чужой». Чувствую подвох. Резюме слишком вылизано, в достижениях слишком много бизнесовых показателей. Разработчики обычно так не пишут.
Открываю тестовое — и там тоже на первый взгляд всё хорошо. Но вместо Gradle вижу build.sh, который заканчивается командой:
javac -d "$BUILD_DIR" "@$SOURCES_FILE"
Уже подозрительно.
На собеседовании выяснилось, что кандидат работал менеджером разработчиков в крупном криптостартапе. После внедрения ИИ многих менеджеров там заставили писать код.
В ядро продукта их, конечно, никто не пустил, но поручили делать сопутствующие инструменты — например, для KYC.
На собеседовании кандидат не смог реализовать ни одного бизнес-требования. А когда мы попросили отрефакторить компонент бизнес-логики и сделать его немного более объектно-ориентированным, он почему-то начал рассуждать про JSON.

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

И на сладкое.
Файл с тестовым заданием назывался ATM-final-v6. Внутри лежал Git-репозиторий с одним-единственным коммитом.
Ну а что? В требованиях было сказано использовать Git. Вот, пожалуйста, использовал.

Расскажите в комментариях как ИИ повлиял на процессы собеседований в ваших командах
🙈20❤11👍1
Я на работе запилил такое правило — мы работаем с подходом Monolith First. Это когда мы сначала запиливаем монолит, а потом нарезаем его по мере необходимости. Тут даже не то чтобы правило, меня прям бомбить начинает от слова «микросервисы».

А всё почему? Да потому что вы, наверное, помните офигительную историю про 80 микросервисов. Выяснилось, что, чтобы собрать эти 80 микросов, нам нужно 220(!) репозиториев. Ну а вендор, который продал это чудище, просто сказал: «У меня лапки, я не могу поддерживать это больше». Даже развернуть на новом стенде оказалось нереально.

И тут хорошо видна ещё одна проблема с вендорами. Мы обычно думаем, что покупаем у них продукт, который потом будем несколько лет развивать и поддерживать. А вендор зачастую думает, что он делает проект. Есть набор задач, за который ему заплатили, — надо этот набор и закрыть. Что будет с системой через два года, когда её придётся обновлять, развивать или просто развернуть на новом стенде, — это уже как бы отдельная история (обычно после нас хоть трава не расти). 

Получается интересная ситуация: мы строим продукт, а вендор закрывает проект. И вот из таких проектов потом и вырастают 80 микросервисов, 220 репозиториев и система, которую уже никто не может нормально собрать.

Зато как красиво звучали слова про масштабируемость (наверное).
💯23👍14🔥7❤3
Notebook → прод, метод на 1000 строк, цикл в цикле в цикле, никто не понимает что происходит - это классика от MLщиков. Мы применили DDD и чистую архитектуру к реальному ML-проекту. Value Objects, агрегаты, доменные сервисы, порты — на конкретных примерах кода (осторожно, петухон).

Читать что получилось →
❤14😁5🔥3👍1
Знаем, что большинству удобнее читать текст, чем смотреть видосики, поэтому решили выложить в открытый доступ текстовую версию видосов про Value Objects.

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

P.S. Если найдёте опечатку или какой-нибудь косяк — пишите прямо там, в комментах. Мы вроде всё вычитывали, но где-то на 35-й странице внимание начинает немного угасать

Ну и ставьте лойсы и делитесь постом. Если такой формат зайдёт — будем делать больше текстовых материалов.
❤27👍12🔥2
В комментариях к предыдущему посту читатели оставили пару комментов. Они интересные, поэтому давайте разберём. Кратко передам суть первого:

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


То, что логика локальная, — это не значит, что её необходимо оставлять как есть (иначе получатся анемичные объекты с логикой в агрегатах). Конкретно в моём случае эта логика постоянно переиспользовалась в разных местах, в том числе за пределами агрегата (для построения графиков, отчётиков и т. д.).

Сам VO распространяется не на все контексты — ограничение таки есть (это сам контекст как раз). Также в тексте есть про общие типы, которые могут использоваться везде. Это как раз норм, так как логика 100% всегда одинаковая (email он и в Африке email), но там тоже есть оговорки (подробнее в статье).

Второй комментарий придётся разобрать по частям.

Получается, во-первых, что VO должен что-то знать об объектах, из которых он может быть сконвертирован (например, IP-адрес знает о том, что может быть создан из строки и о формате этой самой строки),


В целом это норм, обычно на практике проблем не вызывает. При работе с VO мы примерно представляем, из чего собирается объект (email — строка, денежка — double BigDecimal). Если есть проблемы с тем, во что сериализовывать и десериализовывать, — можно воспользоваться механизмом функций-расширений (об этом тоже есть в статье).

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


Вот как раз-таки и не должен. У VO клиент — это вызывающий его код, а не конечный потребитель. Вы бы знали, сколько раз я переделывал с JSON-ов не на JSON-ы и обратно, подключал вообще не HTTP-каналы и т. д. Если логика отображения заложена в VO, вы никогда больше не сможете поменять бизнес-логику, потому что «ой-ой, у нас отображение формочки сломалось».

Плюс множество встроенных валидаторов этих инструментов, которые придётся тогда игнорировать и велосипедить.


«А минусы?» Тут возникает проблема — а какой валидатор брать? Спринговый? Хиберовский? Ещё какой-то? Выпилили/обновили Хибер — а что теперь делать? Поэтому вся логика валидации аккуратно запихана в сам домен. Вообще мы используем инструмент для валидации в виде ArrowKt, про это тоже есть в посте. Он действительно упрощает сбор ошибок, и мы считаем его частью домена на системном уровне.

На другой стороне инфраструктуры (ORM) тоже достаточно заморочек с сериализацией/поиском по ValueObject. Entity Framework дотнетовский за последние годы многому в этом направлении научился, но всё равно сохраняются ограничения на применимость VO-подхода "мощностью" нижележащего ORM-фреймворка.


Собсна, в этом и заключается суть чистой архитектуры — отделить инфру от домена. Очень любим такой подход, потому что уже наелись. Про сохранение тоже в статье было — проблем, как правило, не вызывает, если умело пользоваться.
👍13❤2🔥2
Начинаем сезон видосиков с обзора карьерных путей (не переживайте, духота тоже будет, но попозже).

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

Смотреть YouTube | VK
🔥11👍5❤‍🔥3😁1👀1
Евгений
Я на работе запилил такое правило — мы работаем с подходом Monolith First. Это когда мы сначала запиливаем монолит, а потом нарезаем его по мере необходимости. Тут даже не то чтобы правило, меня прям бомбить начинает от слова «микросервисы». А всё почему?…
Продолжаем обзор микросервисных изделий. На этот раз подписчики прислали мне архитектуру, состоящую примерно из сотни микросов. Вы скажете: а что такого? Где 80, там и 100, невелика разница. Но есть маааааленький нюансик. Это — коробочное решение, то есть программа, которая продается в товарных количествах.

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

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

Высший пилотаж — обновление без простоя, но, учитывая, кто это будет делать, — лучше не надо. Отчасти это решается скриптами автоматизации, контейнеризацией и прочим, но не до конца. Мы сначала передали поддержку (развертывания и обновления) вендору, но он через некоторое время исчез и перестал отвечать (интересно, почему?).

Поэтому мне сложно представить, каково это — поддерживать коробочное решение из сотни микросов. Может, сейчас появились какие-то модные практики, но, глядя на то, как работает куча вендоров, как будто бы ничего не поменялось.
😁17😱5👍3🌭2
Евгений
А теперь первый душный пост на нашем новом ресурсе. Выжимка из опыта — как собрать команду мечты. Внутри: - Почему команда мечты — это не 10 суперзвёзд, работающих по 16 часов (а суперзвезда вообще антипаттерн) - Каких людей надо гнать ссаными тряпками в…
Я частенько в своих постах упоминаю ключевую характеристику для сотрудника — автономность. Хотелось бы проиллюстрировать реальным примером, как это может выглядеть.

Ситуация следующая. Сотрудник взял микроотпуск на один день. Чтобы ничего не простаивало — дела были переданы другому, так как задача важная и горящая.
И вот примерно такая переписка происходит перед его уходом:
— По колбекам: там короче внешняя система пытается нам колбек отправить, но, как и выяснилось, у неё нет доступа. Нашли в логах пример того, что она пытается нам отправить — приложу в тикет. Ещё в логах нашёл полный объект, который она пыталась отправить
— Ещё нашёл заметки предыдущего разработчика по раскопкам этой шляпы. всё сюда приложил: и раскопки по реализации колбеков, и пример из логов
— Ещё на почту отправил тебе куски исходников этой системы, если вдруг захочешь в них разобраться. К логам ты сам доступа, скорее всего, не получишь, но вот человек, который может посмотреть
— Задачу на тебя перекинул на понедельник, чтобы не потерялась. убежал, хороших выходных 💖


Вместо того чтобы сказать «да сами разберетесь», было предусмотрено всё, чтобы работа не простаивала. Вот вам исходники, логи теребить через вот этого чела, вот что уже накопал, вот задача, чтобы не потерялась. Причём никто не просил его составлять какой-то план передачи дел, тем более на один день. Он просто сам подумал, что понадобится человеку, который будет разбираться с задачей без него. Если у вас есть такой сотрудник — целуйте его в жопу.
❤30😁5🤣3👍2🔥2💯2
Сегодня необычный выпуск — подкаст с нашим старым бро Константином Могилевкиным.

Константин — IT-предприниматель, в айтишечке с незапамятных времён, как и мы.

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

Смотреть: YouTube | ВК
🔥17❤5👍3💯3
А сегодня снова не совсем обычный пост (пока я занят написанием духоты).
Знаю, что у многих подписчиков есть собственные каналы, а кто-то задумывается о том, чтобы изготовить из себя личный бренд. Поскольку мы занимаемся чем-то похожим и у нас есть опыт помощи другим, я решил оформить это в виде небольшого гайда, в течение которого буду всячески отговаривать вас заниматься подобными вещами.
Если будет интересно, в следующем посте обсудим монетизацию.

Как стать инфоцыганом. Личный бренд для ИТшника 

А если вам нужно подушнее, то рекомендуем к ознакомлению:
- Кто мы такие (открытый пост)
- Полное руководство по Value Objects (открытый пост)
- DDD в машинном обучении - опыт реального проекта
- Как собрать команду мечты
👍14❤4😁4
Вы не заметили, но в интернетах разразился скандал вселенского масштаба. Вопрос вот в чём: «Можно ли брать iced coffee на интервью?»
Казалось бы, спор и яйца выеденного не стоит, но нет.

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

Хотел спросить: «А как бы отнеслись в вашей компании к кандидату с iced coffee?»
У нас бы даже не заметили. Но если бы я пришёл на интервью с кофе, мне было бы немного некомфортно от того, что я могу что-то пить, а противоположная сторона вынуждена глотать слюнки.
В общем, высказывайтесь в комментариях, да разверзнутся небеса!
😁27😱1