«Не устал ли ты сидеть на своей Java 10 лет?» Тимлид из Варшавы — о работе, где язык больше не важен, а код за тебя всё чаще пишет ИИ

«Не устал ли ты сидеть на своей Java 10 лет?» Тимлид из Варшавы — о работе, где язык больше не важен, а код за тебя всё чаще пишет ИИ

Раньше ИТ-рынок часто нанимал бэкендеров по одному критерию — стек. Пишешь на Java — идёшь на Java-вакансию. Сегодня многие компании это правило игнорируют.

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

В конце бонус: открытые вакансии, Cycode прямо сейчас нанимает бэкендеров.


Коротко о Cycode

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

Познакомиться с командой вживую можно на ближайшем
TechSpot в Варшаве — 23 сентября.

Инженеров нанимает On The Spot Development: компания строит локальные R&D-команды для международных технологических компаний.

«Меняются только знаки препинания»

— У нас команда language-agnostic. То есть мне не важно, на чём ты писал раньше. У нас бэкенд на .NET, но человек, который не знает этот фреймворк, зато понимает общие принципы бэкенд-разработки, придёт и будет писать на .NET. Там нет каких-то очень сложных вещей, которые требуют глубокого знания именно языка. Всё плюс-минус одинаковое, меняются только «знаки препинания».

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

Недавно было ровно наоборот. Четыре года назад в СНГ почти никто, кроме процента-двух, не готов был пойти на .NET-вакансию, если основной стек всю жизнь был Java. Это такая правда, к сожалению. А в Израиле, откуда Cycode, к этому относятся спокойно: в армии все учили Python, потом каждый пишет на том, на чём надо. Язык — дело десятое.

«Мы не пишем код сами — мы генерим его»

Чтобы объяснить, чем мы занимаемся, начну издалека. Cycode следит за безопасностью кода на всём его пути: от разработчика до продакшена. Начиналось всё с простого — искали секреты, которые кто-то запушил в GitHub. Потом стали искать всё подряд: уязвимости, мисконфигурации, утечки, дыры в облаке.

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

Чувствуем это на всей компании. Сами писать код мы стали меньше — слишком затратно. Мы не пишем код, мы его генерим. Но стараемся не бездумно.

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

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

«Ты должен управлять агентом, а не быть его фолловером»

Управлять агентом должен ты. Это не должен быть AI-driven development, где ИИ говорит: «Я нашёл решение, оно вот такое», — а ты в силу своих знаний продукта, кодовой базы понимаешь, что решение-то неправильное. Не надо идти за ним как фолловер. Можешь продолжить с ним диалог, разобраться, что он прав. А можешь тупо сказать «да, окей» — и если он был неправ, то в какой-то момент это всплывёт.

Теперь ИИ ещё и сам чинит. Простой пример: у тебя уязвимая зависимость в проекте. Мы нашли, где она сконфигурена, знаем версию, знаем, в какой версии уже есть фикс. Дальше наша задача — просто открыть тебе pull request, который делает исправление. Это не так сложно. А есть и другая сторона — не только чинить постфактум, но и блокировать наперёд сами действия, которые плодят уязвимости. И действия тут уже не только человеческие: ИИ тоже теперь actor.

«Клиент не будет счастлив, если попросить у него 30 реплик»

Разберём на конкретной задаче, которая сейчас у меня открыта в соседнем терминале. Если по-человечески: у клиента тормозит наш сервис, и починить это можно дорого и в лоб, а можно — головой. Мы выбираем головой.

Сервис называется Broker — маленькая штука, которую клиент ставит у себя, чтобы мы могли забирать нужные данные из его закрытой инфраструктуры. Написан он не идеально и под нагрузкой начинает захлёбываться. Самое простое — попросить клиента добавить железа. Только не придёшь же к нему с просьбой «дай мне 30 реплик этого сервиса, и мы будем классно работать» — некрасиво.

Значит, ищем настоящую причину. Сели с Claude, взяли метрики. Сначала грешили на одну строчку в коде — что где-то стоит лишний Time.Sleep. Оказалось, не в ней дело. Проблема прозаичнее: Broker забирал новые задачи только после того, как разгребёт все предыдущие, — работал строго по очереди. Чинится параллелизмом: пусть берёт задачи одновременно. Весь разбор, человек плюс агент, занял примерно час.

В этом, по сути, главная философия команды — быть проактивным: детектить проблему благодаря алертам и решать её до того, как пользователь от неё пострадает.

«Плюс-минус 150 сервисов — и свой SAST-движок на Rust»

Про крафт. Бэкенд у нас на .NET, фронтенд на React и TypeScript. Микросервисная архитектура: плюс-минус 150 сервисов, всё в Kubernetes, на AWS. Kafka как service bus. Из баз — Mongo, Postgres, Redis, ClickHouse. И Rust — на нём мы делаем наш SAST-движок.

SAST-движок Cycode анализирует код на уязвимости ещё до запуска, не выполняя его, а строя упрощённое представление и симулируя, как через этот код текут опасные данные. Это называется taint-flow анализ: движок находит точки, откуда приходят ненадёжные данные (например, пользовательский ввод), и проверяет, доходят ли они до рискованного места использования: SQL-запроса, лога, eval. Раньше, кстати, SAST-сканер просто искал подозрительные паттерны построчно в коде и не знал, срабатывает ли этот код вообще. Сейчас строим стек-деревья, из которых виден реальный путь вызова, это даёт существенно меньше ложных срабатываний алертов.


Про это можно послушать вживую

23 сентября Cycode и On The Spot проводят в Варшаве TechSpot-митап про кибербезопасность в эпоху ИИ.

С докладами выступят:

• Software Engineer из команды Cycode. Расскажет про SAST-движок, который они делают для скана кода на уязвимости: как устроен сканер, как он отслеживает путь опасных данных через код (taint-flow анализ), и почему ИИ не заменяет SAST-сканирование, но удачно его дополняет. А ещё — почему в принципе нельзя выполнить статическое сканирование идеально.

• Senior AppSec-специалист и по совместительству преподаватель Military University of Technology. Разберёт идентичность ИИ-агентов, корректные способы их аутентификации и авторизации.

Кроме того, на ивенте будет AppSec Case Clinic: панелисты вживую разберут сложные кейсы, которые участники ивента принесут с собой.

Регистрация

По людям устроено так: любую большую вещь, в принципе, разработчик ведёт сам, от дизайна до релиза, один или двое. Архитектуру обсуждаем в узком кругу; если заворачиваем, то с конкретным объяснением, а не «мы так не хотим».

Я в Варшаве веду команду интеграций. У Cycode их около 45 — со всеми соседями по рынку: Snyk, SonarQube, Black Duck, Coverity, Orca. Клиент редко покупает один инструмент безопасности, обычно несколько — и хочет видеть все находки в одном месте, сравнивать: кто находит больше, у кого меньше ложных срабатываний.

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

«"Если бы сделали на Rust, было бы супербыстро" — вечный вброс»

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

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

«Думать головой, а не думать Claude»

Несмотря на то, что Claude — это главный инструмент в Cycode, у нас приживается человек, который умеет и хочет думать. Если ты общаешься с Claude, то это ты ему объясняешь, что тебе надо, а не он тебе. Потому что, если клод неправ и ты идёшь за ним — вы оба потом неправы, но ответственность несёшь ты. Мы хотим на 100 процентов, чтобы человек думал головой, а не думал Claude.

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

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

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

«Первые три месяца лид катает тебя по продукту»

Как выглядит старт. Первую неделю, кроме всякой бюрократии с лэптопом, даём небольшие понятные задачи: баги, где ясно, как чинить, или «добавь по примеру». Смысл в том, чтобы человек потрогал код, а не утонул сразу.

Потом месяца три основная задача уже моя, как лида, — покатать человека по продукту, по всей зоне ответственности команды. Чтобы он всё пощупал и в голове сложился кругозор: где он вообще работает. Желательно, чтобы за эти три месяца у него уже были и своя фича, и таска, и починённый баг. Обычно выходит больше.

«Если ты любишь прожигать время — это не то место»

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

А что ты получишь за два-три года, чего не получишь в спокойном месте, в каком-нибудь большом аутсорсе? Главное — production-опыт. В аутсорсе ты написал, проект зарелизили, и в лучшем случае остался на суппорте, а всех перекинули на следующий. А тут продукт с живыми клиентами, реальным мониторингом, инцидентами. Учишься где-то на своих, где-то на чужих ошибках. Это как вулкан: ты знаешь, что он будет извергаться, но не знаешь, с какой стороны польётся лава.

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

У нас, кстати, процессы очень прямые. Фаундер может прийти и сказать: «У вас тут не работает» — вместо того чтобы гонять это через три круга бюрократии. Петля получается сильно короче. Иногда даже слишком: был период, когда фаундер заходил и мержил все pull request'ы на фронтенде, что висели больше дня. Новый человек приходит — а у него PR уже замержен, и не факт, что кто-то его проверил. Такое мы, наоборот, стараемся гасить.

«Не устал ли ты 10 лет делать одно и то же?»

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

Не устал ли ты сидеть на своей Java 10 лет? Не устал быть тем, кто годами делает одно и то же?

Хотя, честно, сильные бэкендеры обычно не сомневаются. Они и так понимают, где профит.


Сейчас мы нанимаем пять бэкенд-разработчиков в команду в Варшаве:

Если вы сами не ищете работу, рекомендуйте друзей. В случае успеха бонус — 1,000$ 😉

Читать дальше

Вы имеете право на понагление даже при «заморозке» сроков: решение суда

Вы имеете право на понагление даже при «заморозке» сроков: решение суда

Суд в Познани обязал воеводу рассмотреть заявление на карту побыту, признав незаконным бездействие на основании 'заморозки' сроков. Решение позволяет подавать понагление даже при приостановке по статье 100d спецуставы.

Открыли график на торговой платформе и ничего не поняли? Вот с чего начать

Открыли график на торговой платформе и ничего не поняли? Вот с чего начать

Непонятные красные и зелёные столбики, обозначения 1m, 1h и 1D, десятки кнопок по краям. Первый график на торговой платформе выглядит так, будто его сделали для людей, которые уже всё знают. Для начала достаточно понять, что именно показывает график и как читать одну свечу. Этот текст — часть совместного проекта DZPK и

«Путь борьбы»: потерял работу и мыл посуду в ресторане — история айтишника

«Путь борьбы»: потерял работу и мыл посуду в ресторане — история айтишника

Кирилл специализируется на Salesforce, но одно время был вынужден работать на «змыварке» — мойке посуды в ресторане. Как это было, он рассказал DZPK. Как так вышло — Я переехал в Польшу году 2023-м, — вспоминает Кирилл. — Но ещё до того, как началась война, мы с приятелями на пару месяцев перебрались в Грузию — ради