🎬Мы начинаем анонсировать программу Летнего ProIT Fest 11 июля в Питере. И начинаем мы с того, кого очень ждет наша аудитория: Кирилл Мокевнин — сооснователь образовательной платформы «Хекслет» и по-прежнему программист. Ведущий подкаста Организованное программирование. И многие уже видели его мем, где джун обходится дешевле, чем токены.🤖 AI-разработка прошла путь от "работающих промптов" к агентным системам, работающим внутри большого инженерного контекста. Разберём, как context engineering заменил prompt engineering, из чего на самом деле состоит контекст современных AI-агентов и почему качество работы модели теперь зависит не столько от промпта, сколько от структуры проекта, документации, памяти, tools и интеграций. Поговорим про AI-readability, практики организации контекста (AGENTS.md, CONTEXT.md, MCP, Skills), а также про интеграцию AI-агентов с трекером задач, CI и коллекторами ошибок.📅 1 июня стоимость билетов на Летний ProIT Fest повысится!
Давайте встречатьсяПоследнюю неделю я молчал не просто так, все время ушло на подготовку и перелет на родину. Прилете до августа порешать кучу накопившихся домашних задач и заодно немного фестивалить на конференциях. Собственно где меня можно встретить:22-23 июня, питер, HighLoad++25-26 июня, питер, TeamLead++6 июля, москва, AgenticConf11 июля, питер, Pro IT Fest17-19 июля, ульяновск, Ulcamp Список возможно будет пополняться. Если есть желание и возможности, могу заехать в гости к вашей команде разработки, поесть вкусняшек, толкнуть какую-нибудь тему и поболтать за жизнь нашу бренную.И житейское. Я когда планировал перелет, мне все пели как тут тепло. Мы с сыном на радостях ничего кроме шорт не взяли. Так вот, вся неделя что мы тут, это сплошные дожди и +6. Доколе? Но зато он теперь от метро тащится, мы единственные кто там ездим в летне приподнятом настроении с раздражающим окружающих загаромp.s. Пока писать буду не регулярно, я перемещаюсь от отелей к отелям и мне постоянно надо чем-то занимать сына 🙂Telegram | YouTube | Сообщество
Псс, знаю что вам не хватает меня в экране, поэтому вот вам еще один подкаст. В этот раз мы вместе с подлодкой записали большой и эпический выпуск про Rails. Выпуск долго готовили и делали монтаж, зацените как там все ваще вау https://www.youtube.com/watch?v=EL53I0klc2wTelegram | YouTube | Сообщество
Агент коммититДолгое время я коммитил и пушил сам, но с прошлой недели делегировал эту задачу агентам и вот что из этого получилось. tldr; получилось хорошо :)Сначала мы интегрировали нашу тикетницу (яндекс трекер) с агентом по mcp. Это встроенная фича yandex cloud (конкретно ai studio), но она полурукопашная. Там сначала писать в саппорт надо, потом создавать mcp, причем свой под каждого пользователя, короче гемморой, поэтому я долго откладывал. Надеюсь у них появится официальная cli, но пока ее нет. Ну да ладно, интегрировали.И с этого момента, наконец-то, получилось перейти в режим скидывания тикетов в агента, где он собирает весь контекст задачи сам. Причем не только из тикета и кода. Для изучения багов он идет в Sentry, по разным докам может сходить на диск и поискать там. Эта часть еще требует улучшения, но начало положено.Дальше мы уже внутри агента планируемся вместе до тех пор пока я не пойму, что все хорошо. Тут я навнедрял, набирающих сейчас популярность, фишек типа CONTEXT.md и grill-me. Про них расскажу в других постах. Ну и когда все готово, он приступает к реализации.Затем в зависимости от разных факторов я могу залить это сразу в main либо попросить его бахнуть пулреквест. Независимо от подхода, агент делает три вещи на базе новых инструкций в AGENTS.md• Делает название тикета по схеме нужной трекеру, чтобы все автоматом соединялось + было понятно что за тикет + само название формируется на базе тикета• Делает техническое описание в коммите (достаточно большое) с обязательным объяснением зачем мы это сделали• Добавляет комментарий в тикет с не техническим описанием всех изменений для маркетологов/продактов и любых других людей, которые этот тикет поставили или следят за нимИ, черт побери, мне это насколько упростило жизнь, как человеку который не любит все это оформлять, вы не представляете. Сегодня буквально спрашивал у своего продакта, как ему? Говорит что приятно видеть такие описания в комментариях.И еще, наверное самое интересное. Когда я так
Выпуск подкаста уже доступен для просмотра и прослушивания. Тема выпуска кодогенерация для SQL. https://www.youtube.com/watch?v=u9uXU9Nam8gАльтернативные ссылки: Аудио | vk
Кто такой бизнес?Регулярно замечаю, когда речь заходит о бизнесе, то многие сводят это к своим менеджерам. Для линейных сотрудников действительно все кто выше кажутся единой массой принимающей решения, причем как правило кривые :)Мне хочется разложить эту тему, потому что меня немного коребит, когда разработчики жалуются на своих менеджеров сопровождая это словами "бизнес не понимает чего хочет" и тому подобным. Хочется кричать, ребята, эти менеджеры от бизнеса бесконечно далеки. Не как что-то плохое, а просто по объективным причинам которые я ниже опишу.Давайте разложу для вас, чтобы было понятно как на это смотрят владельцы компании. В компании все важны и полезны, но большинство закрывает только какую-то узкую зону и не видит картины в целом. И чем дальше от центра принятия решений, тем хуже связь.Бизнес это всегда про деньги и риски. Упрощая можно сказать так, что если у человека нет денежного KPI и риска потерять реальные деньги (в смысле он прямо отвечает за деньги, а не косвенно через готовность проекта найм и так далее), а не только работу, то он не про бизнес.Да все за что то переживают и отвечают, но одно дело когда вы вкладываете свои личные миллионы и всегда есть риск потерять все в одну секунду (а еще остаться должным и понести огромные репутационные потери), другое дело вы распоряжаетесь бюджетом на ваш отдел и худшее что может произойти, вы его превысите/не выполните задачи в срок/отодвинется запуск проекта. Бывает и хуже да, но не настолько, чтобы все загнулось.И так, главный про бизнес в компании это фаундер. Тут человек несет полную ответственность и риски. Если что-то пойдет не так, он единственный кто не сможет уволиться и найти другую работу. Такое конечно бывает, что не задалось и надо идти работать, но сама процедура закрытия, когда у вас обязательства, это слегка сложнее чем просто увольнение. Там обычно и суды и банкротства и разборки разного рода.Есть еще акционеры, но тут очень сильно зависит от конкретной компании. В целом это люди которы
В каких компаниях искать работуВокруг одни бигтехи. Где работать если я устал от банков? Вот такой твит я увидел неделю назад и опечалился. Даже в реплаях было сплошное "а чо ты хотел", "такой мир". Есть и другой мир черт побери.Сначала небольшая историческая справка. Действительно со временем присходит консолидация, крупные компании поглощают мелкие и выстраивают целые экосистемы замыкая на себе все до чего могут дотянуться. Сервисы типа читалок книг, кино, машины и многие другие были независимыми. Со временем их скупил яндекс и другие ребята. Куда не ткни в b2c, там на фоне обязательно какой-нибудь крупняк, который им владеет. Ну а торговля вообще уехала в маркетплейсы, больше никто не делает интернет-магазины на заказ (почти).И понятно почему это происходит, такие проекты сложно и дорого масштабировать (с бизнесовой точки зрения), а крупные экосистемы имеют свои каналы дистрибуции, что позволяет достаточно легко выходить на очень большие аудитории. В таких случаях у частников просто никаких шансов. Какому нибудь сберу достаточно разместить кнопку в своем приложении и уже миллионы пользователей.Однако это не отменяет того, что даже если сервисом владеет какой-то крупняк, значит он обязательно работает по формату бигтеха. Со всеми вытекающими. В любом случае даже бигтехов больше, чем может показаться. Существует рейтинг https://smartranking.ru/ru/ranking/big-tech/, где можно посмотреть их список, кто сколько зарабатывает и возможно найти себе будущего работадателя.А куда еще можно податься? Из всех направлений я бы выделил четыреКомпании где ИТ имеет важную роль, но это все таки обслуживание, а не основа бизнеса. Например нефтянка, заводы и всякое другое. Я плохо знаком с этим направлением (хотя когда то нанимал c++ девов с завода и дивился тому как у них там работает).Аутсорсеры/агенства/студии - Вот тут реально много разработчиков и эти компании живут тем что чем больше девелоперов тем больше зарабатываем (если есть заказы естессно). Тут обычно зп ниже, но зато
Всегда хотелось придумать какой-то этакий слоган для Хекслета, чтобы он сразу возникал в голове у всех кто слышал про нас. В общем с клодом и божьей помощью я таки родил: "Хекслет - нормальные it-курсы". Запомните этот пост, через год у вас у всех будет эта фраза в голове!Теперь есть где разгуляться, когда мне чо то будут говорить 🙂"Не супер конечно, но вполне нормально""- Инфоцигане! - Да не, нормальные курсы"Ну и буквально через час старт вебинара, если вы еще не, то уже надо. Сегодня будет формат воркшопа, я кожу вы смотрите
Вчера AI-агент уничтожил производственную базу данных небольшого SaaS-бизнеса. За 9 секунд.Jer Crane, основатель PocketOS, сервиса для компаний по аренде автомобилей. Агент Cursor (на базе Claude Opus) работал в staging-среде, наткнулся на ошибку credentials и сам решил "починить" проблему: удалил Railway-volume одним GraphQL-запросом.Токен, который он нашёл в случайном файле, был создан для управления доменами. Но Railway не разграничивает права токенов: каждый из них фактически является root-доступом. Никакого подтверждения не потребовалось.Бэкапы? Они хранились в том же volume и ушли вместе с данными. Последний восстановимый бэкап был трёхмесячной давности. Когда Jer спросил агента, почему он так поступил, тот ответил письменно и перечислил все правила безопасности, которые нарушил: угадывал вместо того, чтобы проверять, выполнил деструктивное действие без запроса, не прочитал документацию перед удалением и не спросил разрешения.Итог: малый бизнес потерял данные клиентов за три месяца. Люди приходили в субботу забирать арендованные машины и не находили своих записей.Главный вывод: системные промпты не могут быть единственным слоем защиты. Безопасность должна быть встроена в API, токены и обработчики деструктивных операций, а не в текст, который модель "должна прочитать и соблюдать".Если вы используете Railway и AI-агенты в проде, сегодня хороший день проверить скоупы токенов и то, где реально хранятся ваши бэкапы.А чтобы такого не происходило, приходите ко мне на завтра на вебинар на нем я буду стримить как я работаю с агентом для решения типовых задач, мы обязательно сделаем что-нибудь деструктивное (зловещий смех на фоне)Telegram | YouTube | Сообщество
Поиск в гитхабе через гуглПомните у меня был подкаст про поиск? Я там сказал как ищу что-то на гитхабе и очень удивился, когда в комментах удивились на то как удивился я. Синхронизируемся. По мне поиск на большинстве сайтов работает настолько хреново, что им лучше не пользоваться. Например на гитхабе нормально искать что-то внутри репы (это тупое сопоставление), но когда тебе надо найти какие-то репы по описанию, то все приехали. И гугл в этом плане справляется в тыщу раз лучше.Но тут есть хитрость, если просто искать что-то в надежде что покажет гитхаб, то конечно он так ничего не найдет. Как минимум надо добавить в начале или конце github. Типа "web framework go github". Но если настоящий кулхацкер, то знаете, что у любого поисковика есть свой язык запросов, который позволяет сделать этот поиск еще лучше. Если мы хотим четко искать на гитахбе, то надо набрать волшебные буквы "site:github.com" и тогда он будет искать строго по одному домену:coding agent site:github.comА какие еще фишки вы используете в поиске, которые вам помогают искать?Telegram | YouTube | Сообщество
Операция "Эпическая подписка"Начиная с этой недели, часть больших программ "с нуля" становятся доступными в стандартной подписке для самостоятельного обучения. Наконец-то скажете вы и будете правы! Подробнее:У Хекслета есть два режима работы: покупка курса и подписка.Покупка включает курсы с поддержкой наставников, группами, кураторами, помощью в наработке коммерческого опыта, стажировками и так далее. Эти курсы создаются в основном для тех кто с нуля, долго идут и заканчиваются трудоустройством (если нужно). Такие курсы оплачиваются по какой-то фиксированной цене. При этом тут есть тарифы с разными ништяками, например персональным наставником.Подписка, это, в основном, небольшие навыковые курсы, где обучение полностью самостоятельное (сюда включены практики, проекты и ии-ассистент). Подписка идеально подходит для повышения квалификации. Ее в первую очередь берут те, кто уже в теме и кому надо просто добрать каких-то навыков.Теперь это меняется и мы возвращаемся к старому доброму Хекслету образца 2017 года. Часть больших программ обучения становится доступной по подписке. Сюда входят: java, php, python, javascript, ручное и автоматизированное тестирование, аналитика и некоторые другие. Вообще состав таких программ не фиксирован и со временем может меняться.Что это значит? Если вы хотите прямо обучиться какому-то направлению, то теперь это можно сделать по подписке. Единственное надо помнить про самостоятельность, вы должны быть уверены что справитесь сами. А помогут вам в этом наше дружное сообщество и ТотаИИ. Последний кстати еще будет развиваться, у нас большие планы по добавлении автоматики в проекты, чтобы получать еще больше фидбека.Одновременно с этим. Если вам нужно сопровождение и помощь в трудоустройстве, то эта опция никуда не девается и любую программу "с нуля" можно взять по фиксированной цене.Но есть все таки часть программ, которые доступны только в трехлетней подписке. Как правило это новые программы. Концепт этой подписки в том, что помимо самой деше
Подкаст про кишки агентов для разработки уже доступен для просмотра. У меня в гостях Дмитрий Коваленко (уже третий раз!), который разработал эффективный поиск (инструмент + алгоритмы) сначала для nvim, а потом и сделал его самостоятельным решением, благодаря чему его воткнули в OpenCode. youtube.com/watch?v=Jcx-JclhB18Альтернативные ссылки: Аудио | vk
Домашнее: Прием у доктораВроде бы обычная процедура, но насколько же сильно она отличается в штатах. Прием у докторов по широким (массовым направлениям) это еще то приключение, которое может занять в лучшем случае час (редко), но обычно два или больше. Причем никто заранее не знает сколько займет это времени, даже если у вас достаточно простой случай. Поэтому если у моего ребенка прием у педиатра, то я этот день вычеркиваю со словами "потрачено".Как мы привыкли? Есть доктор у него кабинет и туда заходят пациенты один за другим. Приходишь ко времени и плюс минус вовремя попадаешь особенно если это платная медицина и не просто живая очередь.Тут работает ваще не так. В целях оптимизации, в штатах у таких докторов как педиатров (куда толпами ходят), прием идет параллельно. Внутри клиники от десятки специальных комнат, куда вас заводят после того как вы подождали снаружи в приемной (может занимать до часа легко). Тут медсестра сразу вас осматривает, снимает температуру, записывает рост, вес, давление и задает вопросы. Дальше говорит "доктор скоро подойдет" и уходит. А в это время, несколько докторов, ходят по очереди по этим комнатам. И в каждой из них они могут зависать надолго. В нашей клинике таких комнат около 35. То есть они запускают в течение короткого времени всю эту толпу, а дальше большую часть времени ты сидишь и тупишь в ожидании доктора. И даже если доктор зашел, может оказаться, что нужна какая-то процедура. В таком случае доктор говорит "сейчас придет медсестра и все сделает", а сам уходит к следующему пациенту. Думаю не надо говорить, когда в следующий раз он к вам зайдет. И вот эта все хрень с ожиданиями может занимать и будет часы.Получается что для конкретного пациента время приема это время когда начинается процесс ожидания в приемной, а не прием у доктора. А для клиники это возможность обслужить в день тысячи пациентов, а не десятки и сотни.Кто-то скажет, так воспользуйся платной медициной, делов то. Проблема в том, что в штатах вся медицина платная
Попросил ИИ сгенерить картинку на тему идеального конечного результата для программистов (ТРИЗ). Как вы думаете, у нее получилось передать суть? (я фигею от того как gpt генерит картинки)
Точные типы DTO для ИИЕсть такая проблема с DTO, что если делать их достаточно универсальными, то почти все поля внутри получаются nullable. Потому что любая сущность в режиме "создаем новую" практически всегда пустая, за исключением может каких-то флагов и статусов с дефолтными значениями. А вот в режиме редактирования как минимум заполнены id, name и тому подобное.type Course = { id: number | null; slug: string | null; name: string | null; state: CourseState | null; updated_at: string | null; created_at: string | null;}При таком подходе в коде приходится делать что-то типа course.name!, когда мы говорим компилятору мол не парься, мамой клянусь тут есть name. Некрасиво, но жить можно. Казалось бы, а что мешает делать разные DTO под разные операции с нормальными типами? Лень. Если это не автогенерация, то может быть просто гемморойно постоянно все это поддерживать и добавлять. По крайней мере так можно было говорить раньше, но сейчас ситуация поменялась.И дело даже не в том, что ИИ может сама нагенерить все что надо, а в том, что типы для ИИ это главный источник понимания вашего кода. Вы даже словами не всегда можете переубедить ИИ если она видит другие типы. Так вот, если все поля nullable, то ИИ по дефолту начнет втыкать проверки и фильтрацию на каждом шагу. Мне тут понадобилось сделать сортировку через drag and drop и для этого я завязал хук в плане к ии на id, который есть гарантированно во всех сохраненных сущностях. Что бы вы думали? Эта фигня видя такие типы, начала фильтровать данные по наличию id в объектах. Причем когда я дал команду так не делать, она просто перенесла логику в другое место, потому что тип явно говорит о том что id может не быть.В общем закончилось тем, что я сделал файлик, куда автоматом нагенерил типов на базе моделей в беке (с валидациями):type Course = { id: number; slug: string;}Ну а тем у кого design-first чуть проще, там генерятся любые DTO из спеки. Если используются правильные инструменты.p.s. Вы сталкивались с этим?Telegr
Вы ведь заметили что последние месяцы я часто говорю про Mantine (React Component LIbrary)? Так вот сегодня в очередном выпуске подкаста будет говорить его создатель - Виталий Ртищев. А еще в подкасте прошлись по tailwind, mui, shadcn и chakra. Наслаждайтесь https://www.youtube.com/watch?v=r0uUJwyBJAcАльтернативные ссылки: Аудио | vk
Entity-based VS Consumer-oriented APIИз всех способов организации апи, можно выделить два основных: ориентированных на клиентов или ориентированных на внутренние сущности и структуру данных системы.Последний способ это когда API напрямую отражает внутреннюю модель: сущности, связи и CRUD-операции. По началу он кажется удобнее, потому что подходит сразу для всех, не надо дублировать эндпоинты под разные сценарии и хорошо ложится на задачи решаемые сервисом.Потом внезапно оказывается, что для фронтендовых страниц нужен один набор данных, для мобилки другой. И если оставаться в рамках единого апи, то приходится выкручиваться делая серии запросов и объединяя данные на клиенте. А еще разные уровни доступа, разные способы аутентификации и так далее. Каждый раз когда меняется любой эндпоинт, надо помнить про всех возможных клиентов и случайно не сломать логику, которая затрагивает всех, например изменив выборки в коллекциях. В этом случае интерфейс не ломается, но данные будут другими.Немало людей сталкиваясь с этими проблемами, начинают винить REST, что это его ограничения и его природа. Но нет, просто невозможно спроектировать entity-based API как внешний контракт, хорошо подходящее сразу и идеально для всех. Поэтому есть другой способ, это api ориентированное на клиента. Когда API проектируется от конкретных сценариев использования (use cases), а не от структуры данных. В этом случае у нас нет просто общих эндпоинтов, все эндпоинты разделены по своим неймспейсам, одни для админки, другие для мобилки, третьи для клиентской части сайта, ну и классическое апи для внешних клиентов (не браузера и не мобилки).При таком подходе обязательным становится внедрение сервисного слоя (use cases), чтобы обработчики эндпоинтов делегировали работу дальше, а не пытались ее выполнить сами, например, взаимодействуя с базой данных.Entity-based API хорошо подходит как внутренний слой (Service API), но в качестве внешнего API почти всегда приводит к усложнению клиентов и росту связности. Cons
Выпуск про SEO уже доступен на канале. Все что вы хотели узнать про поисковую оптимизацию но боялись спросить. От понятия спроса, до поведенческих факторов и технической оптимизации сайта. Как и зачем собирать семантическое ядро, откуда взялся page rank и зачем делать перелинковку на сайте. Садитесь по удобнее, будет интересно!https://www.youtube.com/watch?v=gaWh8FSJ0a4Альтернативные ссылки: Аудио | vk
Конец эпохиТак получается, что последние месяцы я практически перестал писать код руками. Причем самого кода, я выдаю больше чем было до и да это код, который я бы написал сам (человек со стороны не смог бы сказать что его писал не я). И все это невольно заставляет задуматься о том, что по настоящему важно, а что нет. И если базовые принципы, которые я пропагандирую последний десяток лет как будто бы только усиливаются, то всякое вокруг может терять смысл.Поэтому я немного в растерянности. А нужно ли оно? Стоит ли вообще про это рассказывать или фокусироваться вокруг концептов и подходов того как жить в мире ии-кодогенерации? Постоянно подмывает рассказывать про то как эффективно проектировать и создавать системы через агентов, но каждый раз я останавливаюсь и думаю, а сколько таких людей которые вошли в этот режим? А джуниоры вообще так себе это видят или нет? Им же банально не хватает базы и опыта написания кода руками.Что например меняется при переходе в агентскую разработку? Гораздо меньше имеет значения как написано внутри, важнее становится то из каких элементов собирается система и как текут/не текут абстракции, баланс между использованием готового и самопального, наличие хороших примеров, единообразие, правильное описание проекта (включая скилы). Остается и даже усиливается то как пишутся тесты, потому что агенты любят в тестах трешак разводить. И еще много всякого, но через призму агентской разработки.Вроде бы и раньше все тоже самое было важно, но немного меняется угол зрения, скорость проведения экспериментов, возможность быстро все переписать, оценить плюсы минусы и отдебажить.Что вы обо всем этом думаете? Где находитесь сами и куда мы идем?Telegram | YouTube | Сообщество