Пульс индустрии
Как меняется активность вокруг языков программирования.
Изменение за 8 недель
Сюжеты
Большая тема, разложенная на цепочку материалов. Читается по порядку — или с любого места.
Материалы
Фильтр по тому, кому материал полезнее в первую очередь. Показаны все 94.
Миграции базы без простоя: порядок, который работает
Как сделать так, чтобы приложение работало с базой во время любых изменений схемы
CORS: почему браузер блокирует запрос и что менять на сервере
Как браузер проверяет безопасность запросов и почему сервер должен правильно настраивать CORS
502 и 504: кто именно не ответил и что чинить
Как диагностировать и устранять ошибки 502 и 504, чтобы восстановить работу серверной инфраструктуры
Уровни логирования: что писать, а что выключить
Как правильно выбирать уровни логирования и что писать в логах, чтобы быстро находить причины сбоев
Пароли пользователей: как хранить и что проверить сегодня
Как определить уязвимости в хранении паролей и быстро исправить их в своём проекте
Протокол вместо фреймворка: что изменилось в сборке агентов
Где проходит граница между вашим кодом и чужими системами и что протокол не решает
Мультиагентность: зачем её пробуют и где она рассыпается
Роли по образцу команды не работают: где схема теряет смысл на каждой передаче
JSON как контракт: где он подводит
Формат, который читается без описания, обычно и передают без описания. Что записать отдельно от кода, чтобы обмен пережил расхождение версий.
Поиск по своим данным: когда нужен отдельный движок
Отдельный движок окупается, когда поиск — основной способ добраться до данных. Модель расчёта в часах, куда подставляются свои значения.
Соединения таблиц: почему строк больше, чем ожидали
Число строк результата определяется кратностью связи, а не таблицами. Одна проверка до запроса ловит почти все завышенные суммы в отчётах.
Слой трансформаций: движок в процессе против конвейера
Почему вычисление переезжает внутрь процесса и где эта схема ломается
Кеширование по HTTP: заголовки, которые действительно работают
Срок годности и проверка — разные механизмы, и путают их чаще всего
Очередь между сервисами: когда она окупается
Модель расчёта в часах: когда очередь окупается, а когда никогда
Обратный прокси: что он решает и что ломает
Что он действительно снимает с приложения и что ломает молча
Асинхронность: что она ускоряет, а что нет
Асинхронность не ускоряет вычисления — она позволяет не простаивать в ожидании. Как понять, поможет ли она, до того как переписывать код.
Память течёт: как найти и чем мерить
Порядок действий, который доводит до причины, и порядок, который нет
Инструменты переписывают на Rust: считаем, стоит ли переезжать
Считаем переезд в часах: окупается то, чего ждёт человек, а не фоновый прогон
Время в приложении: где оно ломается
Под одним словом прячутся момент, местное время и намерение на будущее. Путаница между ними двигает встречи и ломает суточные отчёты.
Векторная база: когда она окупается, а когда хватит обычного поиска
Модель расчёта в часах: когда векторный поиск окупается, а когда только мешает
Что растёт и что сдувается в экосистемах
Наш замер реестров: что команды сейчас кладут в сборки, а что перестали
Доля языков: кто теряет, а кто набирает
Наш замер долей: полезное в таблице — не порядок лидеров, а изменение малых величин
Где чаще всего остаются без ответа
Наш замер: без ответа остаётся то, что нельзя воспроизвести у себя
Сертификат истёк: почему это повторяется
Почему напоминание в календаре не спасает и чем его заменить
Токен в браузере: где его хранить
Вопрос о месте хранения решается моделью угрозы, а не удобством. Две популярные ответа защищают от разных вещей, и одно хранилище не даёт обоих свойств.
Браузерные тесты: что автоматизировать, а что оставить руками
Что проверять браузером, что оставить глазам и как пережить с этим полгода
Почему текст превращается в кракозябры
Испорченный текст почти никогда не испорчен: его читают не той таблицей, какой записали. Что делать и чего не делать ни в коем случае.
Конфликт слияния: почему он ваш и что с ним делать
Конфликт означает не «код сломан», а «два намерения пересеклись». Почему выбор стороны — это потеря, и как разрешать, ничего не теряя.
Регулярное выражение, которое можно поддерживать
Выражение пишут один раз, а читают годами. Что делает его поддерживаемым и где регулярные выражения — неправильный инструмент.
Скрипт на shell, который не сломается
Shell по умолчанию продолжает работу после ошибки. Четыре строки в начале файла переводят скрипт из режима «молча делает не то» в режим «останавливается и говорит».
Почему инструменты разработчика вдруг стали быстрее
Без терминов: три причины, почему ожидание у разработчиков сократилось
Медленный запрос в PostgreSQL: с чего начинать
Порядок действий, который дешевле наугад повешенного индекса: статистика, план выполнения, условие — и только потом индекс.
Состояние в React: когда нужна библиотека, а когда нет
Состояние бывает четырёх видов, и библиотека нужна только для одного. Как понять, для какого именно, и когда решение вообще пора принимать.
Образ, который собирается минуту вместо десяти
Время сборки определяется не объёмом работы, а тем, какая её часть выполняется заново. Одна перестановка строк даёт больше, чем подбор базового образа.
Java никуда не делась: где она осталась и почему
Решение о языке принимает не мода, а тот, кто платит за содержание системы десять лет. Что стоит считать, прежде чем спорить о синтаксисе.
Python тормозит: что действительно ускоряет
Под «медленно» прячутся три разные ситуации, и лечатся они по-разному. Как понять, в какой вы, прежде чем переписывать код на другом языке.
Новые инструменты живут без вопросов
У инструмента, о котором все говорят, может не быть ни одного публичного ответа о себе. Разрыв между массовыми и новыми темами — в четыре порядка.
Куда делись вопросы разработчиков
Публичный архив ответов по программированию перестал пополняться: по пяти крупнейшим темам поток вопросов упал в двадцать раз. Что это меняет в оценке задач.
Доступность как инженерная задача, а не как галочка
Почему чек-листы и оверлеи не делают сайт доступным, где на самом деле живут барьеры и как найти их обычной клавиатурой
Что современный CSS убрал из вашего JS
Почему JavaScript-наблюдатели за внешним видом опаздывают на кадр, какие механизмы CSS решают эти задачи внутри конвейера рендеринга и где скрипты остаются обязательными
Длинный контекст: когда он экономит, а когда просто дорожает
Как на самом деле считается стоимость длинного контекста, за что вы платите при каждом запросе и когда кэш префикса даёт реальную экономию
Дообучение или поиск по документам: как выбрать
Почему дообучение и поиск по документам лечат разные отказы, и как понять, какой именно мешает вашей модели
Промпт как код: почему он гниёт быстрее
Разбираем, почему промпт портится быстрее кода, какие привычные приёмы разработки его не спасают и при каком условии мы ошибаемся
Бюджет времени в многошаговом агенте
Почему лимит шагов и таймаут страхуют агентный цикл от разных отказов и как выбирать бюджеты, которые ограничивают именно то, что вы думаете
Оценка качества агента до релиза
Почему один успешный прогон агента ничего не доказывает и как выстроить оценку, которая до релиза покажет форму распределения и характерные отказы
Дежурство по агенту: порядок действий
Как дежурному по агенту отличить жёсткий отказ от мягкого, не тратить время на рестарт и откат и найти причину по трассе одного эпизода
Агенты в продакшене: что отказывает на второй неделе
Сбои многошаговых агентов почти никогда не начинаются с модели. Они выводятся из арифметики шагов — и поэтому предсказуемы до запуска.
Поиск решает меньше, чем принято считать
Почему агент отвечает мимо при хорошем поиске, как за вечер найти настоящее слабое звено и что крутить вместо ретривера
Что агент не делает: список, который пишут заранее
Почему перечисление действий и запреты в инструкции не задают границу ответственности агента и как провести её снаружи списком из трёх колонок
Что такое ИИ-агент и почему о нём все спорят
Чем ИИ-агент отличается от ассистента, почему дело не в уме модели, и где на самом деле проходит настоящий спор вокруг таких систем
Контракты данных: как перестать чинить отчёты
Чем настоящий контракт данных отличается от страницы в вики, из каких четырёх частей состоит и с какого отчёта начинать внедрение
Lakehouse без хайпа: что реально поменялось
Разбираем, чем плоха связка озера и склада, почему внешние таблицы не спасают, как лейкхаус даёт транзакции поверх открытых файлов и во что это обходится
Схема поехала: пять способов узнать об этом первым
Почему дрейф схемы первым замечает потребитель, почему процессные договорённости и красные джобы его пропускают и как устроены пять автоматических проверок на пути данных
Что компании знают о вас и зачем им это
Как без микрофона лента угадывает ваши желания: что сервисы записывают о каждом шаге и как из этих строчек складывается портрет человека
Стоимость хранения: три сценария на 100 ТБ
Почему нельзя просто умножить цену за терабайт на сто и как собрать модель из пяти слоёв, чтобы честно сравнить свои диски, выделенный сервер и облако
Где проходит граница клиент — сервер
Почему границу между клиентом и сервером нужно проводить не по типам компонентов, а по моменту, когда становятся известны входные данные
Размер бандла больше не главная метрика
Почему война с общим весом сборки не ускоряет приложение и при каких условиях размер бандла всё-таки важен
Серверные компоненты: год в продакшене
Вы узнаете, как серверные компоненты пересылают дерево по проводам, почему проп через границу становится частью сетевого контракта и какие поломки модели предсказуемы заранее
Почему сайты стали такими тяжёлыми
Почему сайты превратились из документов в программы, отчего пустой экран стал нормой и кто на самом деле платит за сборку страницы
WebAssembly: где он уже окупается
Откуда у WebAssembly берётся скорость, какой ценой она достаётся и почему переписать самую тяжёлую функцию — не решение, а тупик
Деплой без кластера: что осталось живым
Что кластер даёт на самом деле, почему однонодовый вариант — тупик и как выкатывать сервисы через релиз-каталоги, атомарный симлинк и systemd
Golden path вместо документации
Почему документация гниёт, почему её нельзя спасти процессами и ревью, и как golden path делает стандартные операции исполняемыми
Своё железо под инференс: расчёт на три сценария
Пошаговая модель расчёта, которая покажет, когда свой сервер для инференса дешевле облака, если подставить ваш профиль нагрузки и тариф на электричество
Kubernetes на команду из двенадцати человек
Как на своих числах решить, нужен ли команде Kubernetes: сравниваем часы нынешней эксплуатации с налогом на обслуживание кластера
Стоимость владения кодом: что считать и что игнорировать
Как посчитать в часах, сколько труда съедает уже написанный код, — по горячим модулям и следам, которые система и команда оставляют сами
Платформенная команда: когда её заводить
Как посчитать на ваших числах, когда платформенная команда окупается, почему стандарты и одиночный инфра-инженер не спасают, и что проверить перед стартом
Как мерить производительность, чтобы себе не соврать
Почему типовой прогон на стенде расходится с продакшеном и как собрать протокол замера: от решения через модель нагрузки до кривой вместо точки
Скучные решения: монолит, который не стыдно
Что микросервисы покупают на самом деле, какой налог берёт граница по сети и почему структуру кода в итоге определяет структура команд
Почему Go стал платформенным дефолтом
Почему горутины, планировщик и статическая линковка делают Go дефолтом для микросервисных платформ — и где те же свойства начинают вредить
Найм под редкий язык: сколько это стоит на самом деле
Почему найм на редкий язык дорожает временем, часами интервьюеров и простоем, и как посчитать это по своей воронке
Куда сместился Python за два года
Как за два года изменилась роль Python в архитектуре бэкенда и как измерить, какая доля времени вашего запроса уходит на сам язык
Rust в сервисах: где окупается, а где нет
Спор давно идёт не о скорости. Решающими оказываются два фактора, и ни один из них не технический.
TypeScript в рантайме: что типы не проверяют
Разбираемся, почему типы не защищают внешние данные, где проходит граница процесса и как проверять всё, что её пересекает
Как объяснить совету директоров затраты на ИИ
Почему обещанная окупаемость превращает защиту бюджета в допрос и как сменить форму заявки на измеримую цену одной задачи
Откуда берётся счёт за искусственный интеллект
Почему у нейросети нет готовых ответов, за что вы платите на самом деле и как ваш разговор меняет итоговый счёт
Что мерить у модели кроме точности
Почему одна цифра не отражает качество языковой модели и как измерять калибровку и отдельные режимы отказа, чтобы понять, стало ли лучше
Сколько стоит инференс: считаем до счёта, а не после
Модель расчёта, которую можно заполнить своими числами за час. Главный множитель — не размер модели, а доля повторов.
Локальный инференс: когда он дешевле облака
Как построить модель расчёта, которая по вашей нагрузке, планке качества и тарифам покажет, когда локальный запуск LLM дешевле облачного API, а когда дороже
Повторы, которые удваивают счёт
Разбираемся, почему счёт за API языковых моделей растёт при неизменном продукте, как повторные попытки превращаются в умножение затрат и что чинить на самом деле
Алерты, на которые перестали смотреть
Почему дежурные рационально перестают читать канал алертов и почему подстройка порогов меняет частоту алертов, а не их применимость
OpenTelemetry: что стало стандартом, а что ещё нет
Разберёмся, какие слои OpenTelemetry действительно стали стандартами, а какие остаются удобным клеем, и почему граница проходит именно между ними
Как вообще узнают, что сайт сломался
Почему владелец узнаёт о поломке сайта последним, почему ручные проверки не помогают и как работает робот, который следит за сайтом вместо человека
Трассировка шагов вместо логов
Как заменить ленту логов на дерево шагов, чтобы видеть не только где упало, но и почему агент решил именно так
Что писать в трассировку, а что нет
Как проектировать трассировку под дежурного: какие поля писать в спанах, а какие выносить в архив, чтобы трейс сразу показывал, где сломался запрос
Секреты в CI: пять типовых утечек
Разберём, почему хранение секретов в хранилище и маскирование логов не спасают от утечки, и покажем пять мест, где конвейер CI теряет ключи
Политика обновления зависимостей, которую соблюдают
Разбираемся, почему матрицы дедлайнов и дни обновлений не работают и как построить политику, в которой обновлять зависимости дешевле, чем откладывать
Безопасность как метрика команды
Почему счётчик уязвимостей портит работу команды и какую метрику безопасности выбрать, чтобы измерять её собственное поведение, а не чужой труд
Что о вашей компании видно снаружи
Как бесплатно проверить, что о вашей компании видно постороннему: DNS, публичные журналы сертификатов и другие открытые источники, которые выдают забытые активы
Почему приложение просит столько разрешений
Почему внимательное чтение списка разрешений не спасает: он показывает, что приложение возьмёт, но не говорит, зачем ему это нужно
Цепочка поставок: перечень, который кто-то читает
Почему перечень состава после генерации не читает никто и какие шаги превращают файл в индекс, отвечающий на запросы по всем сборкам
ИИ в редакторе: что реально ускорилось
Почему ассистент ускоряет набор кода, но не сроки задачи: как посчитать свой выигрыш по закону Амдала и когда вычитка подсказок его съедает
Git-приёмы, которые перестают быть страшными
Как на самом деле git хранит историю, почему опасные команды почти ничего не удаляют, когда работа теряется безвозвратно и как вернуть её через reflog
Self-hosted вместо подписок: честный расчёт
Почему деление цены подписки на цену сервера ничего не доказывает и как честно посчитать полную стоимость подписки и собственной инфраструктуры
Чем программисты пользуются каждый день
Разберём пять ролей, которые инструменты играют в рабочем дне разработчика, и способ искать нужные программы, который не устаревает
Терминал, который экономит часы, а не минуты
Почему быстрые эмуляторы и алиасы не экономят время, где теряются настоящие часы и как проверить это на своём рабочем дне