Обновить
512K+

Программирование *

Искусство создания компьютерных программ

1 101,26
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Какую онлайн-магистратуру выбрать: рейтинг лучших программ

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели7.5K

Привет! Собрали для вас топ онлайн-магистратур по разным направлениям: IT, финансы, право, менеджмент, дизайн, маркетинг, лингвистика, психология и другие. В статье мы расскажем, чем онлайн-магистратура отличается от обычной, какой диплом получают выпускники, как совмещать учёбу с работой и как поступить.

Напоминаем, что приёмная кампания 2026 закончится меньше, чем через месяц. Поэтому, если вы планировали поступать в этом году, поторопитесь.

Читать далее

Go SDK для YDB: уменьшаем количество запросов к СУБД для интерактивных транзакций

Время на прочтение6 мин
Охват и читатели12K

Привет, Хабр! Меня зовут Степан Пестерников, мы с командой делаем Алису и активно используем СУБД Яндекса. Недавно коллеги из YDB провели большой рефакторинг в YDB Go SDK, где по умолчанию теперь используется новый Query Service.

Я воспользовался этим рефакторингом, чтобы уменьшить количество сетевых запросов от SDK к YDB. Клиентские SDK устанавливают к распределённой СУБД Яндекса gRPC-подключения, поверх которых отправляются низкоуровневые команды. Какие-то из этих команд можно объединять: например, команду начала транзакции и выполнения первого запроса.

В статье я покажу фрагменты кода и расскажу, как мы делали улучшения, которые вошли в релизы v3.126.0 и v3.126.5 Go SDK. Фрагменты кода получились небольшие, и на их примере удобно показать, как этими оптимизациями пользоваться.

Читать далее

Пишу русскоязычный ЯП. Помогите выбрать самый читаемый вариант синтаксиса

Уровень сложностиСредний
Время на прочтение1 мин
Охват и читатели11K

Если честно, я давно планировал написать свой язык. Просто надоело на каждом проекте писать одинаковый бойлерплейт, ловить неожиданные ошибки в рантайме, натыкаться на компоненты аля LoanPreloanInterractNDFL6.2ReportViewComponent - и гадать - что имел ввиду художник...

В итоге получился язык "Марка" — штука статически-типозированная, но в которой типы живут во время выполнения, ошибки обрабатываются сами, а из REPL можно сразу дергать запросы и смотреть, что приходит на клиенте и сервере. Как давно мечтал.

Но раскидав исходники по знакомым, получил неутешительный фидбэк: читать трудно! Встал дурацкий вопрос: как это должно выглядеть в коде, чтобы было удобно? Я набросал 4 варианта синтаксиса — от LISP-стиля до почти Python - нотации. У каждого есть плюсы и минусы, и я уже неделю не могу выбрать.

Какой из вариантов читать было бы удобнее лично вам? Проголосуйте!

P.S. Если заинтересовал проект - уже сейчас доступна playground площадка для экспериментов http://marka-lang.ru/playground.php

Читать далее

Кэш — это холодильник: TTL, инвалидация и cache stampede

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели6.4K

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

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

Читать далее

Code, Force, Repeat. Олдскульный GUI для олдскульных скриптов. Часть 1. Экспозиция

Уровень сложностиПростой
Время на прочтение17 мин
Охват и читатели6.4K

В этот раз я пришёл с двухчастным текстом про F#, тайппровайдеры, скрипты, спортивное программирование, MVU, консольные интерфейсы в стиле FarManager, низкоуровневый интероп с виндой, некоторое количество хаков ХМ и, внезапно, живопись. Причём только консольные интерфейсы с некоторой натяжкой можно назвать центральным элементом повествования, поэтому я понятия не имею, как должен выглядеть потенциальный читатель этой статьи. Будем исходить из предположения, что он либо достаточно опытен, либо у него достаточно времени и усердия, чтобы расковырять всё, что я не счёл должным разобрать детально (я могу, но только за 16 глав).

Сегодня мы изучим небольшой .fsx-скрипт, который я ежедневно запускаю, чтобы получить очередную порцию задачек из архива codeforces.com. Необычно то, что скрипт функционирует как полноценное GUI-приложение, пусть и очень страшное старое. Кажется, что до меня так никто не делал, так что с осторожностью назову это авторской инновацией.

Читать далее

Вы ещё пишете код слева направо? Тогда мы идём к вам

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели9.3K

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

Задача тянет на головоломку, но в мире двумерного синтаксиса у неё есть красивое решение — просто отзеркалить операцию строчкой ниже. Такой трюк напрямую моделирует обратимость вычислений из квантовой физики.

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

Читать далее

ИИ в масштабе: как управлять внедрением, метриками и трансформацией команды из 500+ разработчиков

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели6.3K

За год экспериментов мы выяснили, что традиционное обучение почти не повышает adoption, а количество пользователей ещё ничего не говорит о бизнес-эффекте. Агенты могут написать от 80 до 99% кода, а могут за 12 часов разрушить архитектуру проекта. Мини-команда из двух разработчиков и бизнес-эксперта с помощью ИИ может сделать интеграционный сервис так же быстро, как команда из пяти человек, но Lead Time при этом может остаться прежним.

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

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

Читать далее

Мой наивный робот: как я оцифровал дилерские рефлексы на VB6

Время на прочтение5 мин
Охват и читатели5.5K

В 2020 году я написал робота, который закрывал за меня клиентские валютные сделки на Мосбирже. Схема оценки рынка у него была, прямо скажем, наивная: восемь метрик, пять состояний и лестница if-ов. Эта схема два года зарабатывала банку его копейки — и умерла не от наивности.

Читать далее

Синдром ИИ-самозванца у программистов

Время на прочтение9 мин
Охват и читатели101K

Вайбкодинг — главный мем и одновременно главный тренд в разработке последних лет. Благодаря нейросетям порог входа в профессию размывается все сильнее: любой джуниор может собирать работающие приложения параллельно с просмотром любимого сериала. Но рано или поздно «вайб» заканчивается, а на смену ему приходит великий и ужасный прод.

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

Читать далее

Заметки о том, как я писал SFU на Rust (2 часть)

Уровень сложностиСредний
Время на прочтение19 мин
Охват и читатели7.8K

Продолжаем изучать, как устроен SFU изнутри: добавляем simulcast, ice restart и мониторинг сети. Дневник разработки на Rust.

Читать далее

wake up: демо в 16 байтах

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели12K

В детстве я учился программированию на старом IBM PC с монохромным зелёным монитором, поэтому давно хотел создать программу для этой системы. За последние пятнадцать лет я написал более чем сотню небольших интро. В последнее время я был не так активен, но потрясающее интро «Rainbow Surf» автора Plex размером всего 16 байт мотивировало меня снова вернуться к старым наброскам и взяться за работу.

Создание этой программы сопровождалось привычными экспериментами. Я развлекался с клеточными автоматами в графике и звуке, а также исследовал трюки sizecoding. В частности: а) полиморфные ассемблерные команды (наподобие add [bx+si],al, имеющую машинный код 0x0000) б) переход в середины команд для экономии байт и многократного использования опкодов. Из сотен мелких экспериментов мне приглянулся один, интересный одним только своим названием.

Когда я дополнял всё это и избавился от лишнего, мне трудно было понять, что же происходит. Я чесал в затылке, глядя на простую формулу, оставшуюся после удаления код‑гольфингом кучи байт. Я и сам не ожидал, что объяснение этих считанных байт окажется настолько глубоким.

В моём интро «M8trix» 2014 года по экрану уже бегали псевдослучайные буквы (в 8 байтах, а потом и в 7), но мне всегда было интересно, как добавить к ним красивый звук. Но хронологически в разработке «wakeup» я сначала занимался звуком. Хорошим подзаголовком к статье мог бы быть «16 байт, превращающие звук треугольника Серпинского в дождь символов из „Матрицы“».

Примечание: на каждом такте времени новая строка треугольника Серпинского а) воспроизводится через динамик б) отрисовывается на экране с шагом 56. Можно ощутить движение, но не увидеть его, потому что оно имеет «ширину» 8192 пикселей, но одна строка символов состоит всего из 80 байт. Если бы экран был гораздо больше, то можно было бы увидеть треугольник. Или если не пропускать пиксели и рисовать и все одновременно, он тоже был бы виден.

Читать далее

Чему мы научились, написав на Rust среду выполнения для TypeScript

Время на прочтение17 мин
Охват и читатели9.2K

Encore зародился как фреймворк на Go, и на Go там были написаны среда выполнения, интерфейс командной строки (CLI), парсер и компилятор. Когда мы решили поддерживать TypeScript, логичнее всего было бы написать на TypeScript и среду выполнения тоже, либо достроить к среде выполнения Go какой‑нибудь мостик. Но в итоге пришли к тому, что написали новую среду выполнения с нуля на Rust.

Читать далее

Async на Rust завис: как понять, где именно, когда паники нет и стек молчит

Уровень сложностиСложный
Время на прочтение13 мин
Охват и читатели7.6K

Сервис жив, CPU в норме, паники нет — а часть запросов зависает на минуты. В async‑Rust привычный стек часто мало помогает: задача могла застрять на блокирующем вызове, мьютексе или просто перестать получать пробуждения.

Разбираем, как отличать эти сценарии в Tokio и куда смотреть, когда отладчик молчит.

Читать далее

Ближайшие события

Куда на самом деле попадает секрет при сборке Docker-образа: разбираем 8 способов

Время на прочтение8 мин
Охват и читатели7K

Секрет попал в Dockerfile, разработчик спохватился и добавил RUN rm. Файла в контейнере больше нет — значит, всё в порядке? Нет: строку по-прежнему можно достать из образа, даже не запуская контейнер. Я собрала восемь образов, в каждом передала секрет своим способом и разобрала результат на слои и метаданные. Ниже — где именно оседает секрет в каждом случае и какие два способа действительно не оставляют следов.

Все эксперименты выполнены на Ubuntu 24.04.1 LTS, Docker Engine 29.1.3, BuildKit v0.26.2.

Читать далее

Как я индексировал экосистему MCP: 9 источников, 80 000 серверов и куча нюансов

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели5.7K

Полтора года назад MCP-серверов были десятки, сейчас десятки тысяч. Найти нужный стало отдельной задачей: официальный реестр хранит голые метаданные, awesome-списки устаревают за неделю, а у большинства каталогов нет главного, установки и проверки безопасности.

Я строю Unyly, агрегатор MCP-серверов. Сейчас в каталоге больше 80 тысяч записей из девяти источников. Расскажу, как это устроено технически: пайплайн агрегации, дедупликация, резолв установочных команд, security-сканы, health-чеки remote-серверов и шлюз, который отдаёт весь каталог агенту через одно подключение.

Читать далее

Агентская разработка и Documentation Driven Development: когда ИИ пишет не код, а контракты

Время на прочтение9 мин
Охват и читатели7.1K

Привет, Хабр! Я Матвей Лихота, старший Go-разработчик. В предыдущем материале я показывал, как получить Go-код из OpenAPI. Теперь хочу сделать еще один шаг назад — к моменту, когда контракта еще нет.

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

Конечно, все дело в промпте. Согласитесь, странно просить модель понять задачу, выбрать архитектуру, определить границы и все реализовать за один шаг? Что, если LLM сначала проектирует систему и выпустит OpenAPI, Proto, JSON Schema, CloudEvents и AsyncAPI? А код мы добавим чуть позже: за повторяемую часть будут отвечать обычные генераторы, а за проектно-зависимую — разработчики и агент в контексте репозитория.

Такой подход, где главным артефактом становится контракт, а код — его производной, можно назвать Documentation Driven Agent Development или Specification Driven Agent Development. Как он работает — покажу на примере разработки простой автоматической телефонной станции (АТС), а еще проведу границу между генераторами и агентами.

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

Создаём свой BI-дашборд с ИИ-редактором в Битрикс24

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели6K

Создаём отдельный BI-дашборд на данных Битрикс24, в котором можно менять визуализацию и поддерживаемые настройки отчёта запросами к ИИ.

В статье — ссылка на готовый редактор, описание принципов его работы и промпты для самостоятельного повторения.

Читать далее

Что там с trait upcasting: год спустя

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели6.7K

Приветствую. В Rust есть целый класс костылей, который лежит буквально в каждом крейте с API на dyn старше пары лет. Методы вида as_super, as_debug, into_dyn_display.

Крутанёшь поиск по большим репозиториям на GitHub, найдёшь такое тысячами. Каждый делает одну и ту же тупую вещь: возвращает тот же самый &self, только под нужным трейт-объектом. Встроенно очевидная операция, которую больше десяти лет не могли завезти в язык.

С Rust 1.86 (3 апреля 2025) все эти костыли стали не нужны. Trait upcasting наконец стабилизирован: &dyn Sub спокойно кастится в &dyn Super, если trait Sub: Super. Причём стабилизировали не с первого раза. В конце 2023-го фичу мерджили, потом откатывали из-за двух багов в соундности, потом чинили, потом снова находили баги. Только к весне 2025 получилось выкатить окончательно.

Прошёл год стабильной жизни с фичей, экосистема переварила, паттерны поменялись. Разберём: как расширили vtable под эту штуку (спойлер: ещё в 2021-м, за четыре года до самой стабилизации), сколько багов в соундности нашли на nightly и в чём была суть, почему dyn MyAny: Any теперь одна из самых частых идиом, и почему Vec<Box<dyn Sub>> в Vec<Box<dyn Super>> всё равно не летит.

Читать далее

Дайджест Базы знаний: где 1С заканчивается «из коробки» и начинается инженерия

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели5.2K

За рутиной из запросов, документов и форм легко забыть, что платформа тянет заметно больше привычного потолка, если не бояться лезть в стандартные механизмы, работать с бинарными данными напрямую и собирать собственные инструменты под задачу. 

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

Читать далее

Как я создал свою мини‑Вселенную

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели17K

Привет, читатель!

Однажды, после просмотра ролика про эволюцию Вселенной, я загорелся идеей создать свою, со своими правилами. В итоге я написал собственный физический движок на С++, и в этой статье я расскажу про него, историю создания, и разные нюансы.

Читать далее