Как стать автором
Поиск
Написать публикацию
Обновить
1140.87

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

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

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

«Ты подсматривал!!!» или как повесть «Нажмите ВВОД» опередила своё время

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров3.8K

Начало 1980-х — момент, когда домашние компьютеры перебрались из гаражей в гостиные. Apple II и Commodore 64 мигали своими курсорами, модемы на 300 бод шипели в телефонных трубках, TCP/IP уже связывал университетские сети с военной ARPANET, а журнал Byte спорил, хватит ли 64 КБ «на всю жизнь». Именно тогда Джон Варли публикует повесть «Нажмите ENTER» (1984).

Повесть начинается с того, что ветеран Вьетнамской войны Вик Апфель отправляется проведать своего эксцентричного соседа Чарльза Клуга — маскирующегося под отшельника хакера-программиста, собирающего архаичную технику и незаконно присоединяющего к телефонной сети. Но все, что он находит, это тело своего соседа с пулей в голове.

Нажмите ВВОД

События vs сообщения. Понимаете ли вы разницу и почему это важно?

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров6.6K

«Будем отправлять события в Rabbit!» Фраза, которая выдает мышление, рождающее код, полный боли. К сожалению, я ее часто слышу. Поэтому, уже много лет размышлял о написании этой статьи и безумно рад, что у меня, наконец, дошли до нее руки.

В статье я расскажу, как смешение понятий события, сообщения и транспорта рождает возгласы типа «Я ненавижу использовать Symfony Messenger, потому что был у меня проект на нем, и он не взлетел!»

Будут косвенно затронуты компоненты Symfony Messenger и Event Dispatcher. Несмотря на это, данный материал может оказаться полезным и для разработчиков, использующих другие фреймворки и даже другие языки.

Читать далее

В айти не войти или о бедном стажёре замолвите слово…

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров42K

Когда-то всё было проще. В достопамятные двухтысячные годы джунов и в самом деле нанимали. Не спрашивали о «релевантном опыте», не требовали ссылки на боевые проекты и не строили сложных лабиринтов из HR-интервью, технических сессий, тестовых заданий и многоступенчатых собеседований. Но прошло 15–20 лет — и всё изменилось до неузнаваемости. Новички (стажёры и джуны) теперь бесправны и даже подозрительны.

Читать далее

Создаем плагин с генеративным ИИ для Unreal Engine на C++ (офлайн и онлайн версии)

Уровень сложностиПростой
Время на прочтение19 мин
Количество просмотров2.4K

Вы когда‑нибудь задумывались о том, как здорово было бы, чтобы в вашей игре происходили настоящие человеческие диалоги? Представьте себе систему диалогов NPC, которая кажется невероятно реалистичной, или нарратора, который моментально реагирует на действия игроков. А может быть, вам нужен инструмент, способный генерировать уникальный контент «на лету» прямо в игре? Вне зависимости от того, создаете ли вы одиночную или многопользовательскую игру, внедрение генеративного искусственного интеллекта может сделать ваше творение намного интереснее и динамичнее. В этом руководстве я поделюсь с вами пошаговой инструкцией того, как это можно воплотить в вашем проекте.

Читать далее

Разрабатываем полноценную игру целиком при помощи ИИ (LLMDD, часть 1)

Уровень сложностиПростой
Время на прочтение52 мин
Количество просмотров8.3K

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

Читать далее

ИИ, no-code, блокчейн и софты: тренды во фронтенд- и бэкенд-разработке 2025

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров3.6K

Привет! Меня зовут Илья Благородов, я разработчик с 30-летним стажем и эксперт в онлайн-магистратуре от Яндекса и ИТМО «Фронтенд- и бэкенд-разработка». В этой статье я расскажу, какие тренды появились в разработке за последние годы, какие навыки нужны специалистам, чтобы соответствовать трендам, и что ждёт сферу в будущем.

Читать далее

Мой опыт обучения на курсе «Python-разработчик» от Яндекс.Практикум

Время на прочтение7 мин
Количество просмотров18K

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

Подробнее

Как мы с Camunda 8 переезжали

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

Привет, Хабр! Я Вячеслав Тихонов, разработчик в команде, которая занимается бэкендовским движком для кредитных продуктов. Мы делаем так, чтобы правильно начислялись проценты по кредитам, переходили деньги по счетам, работали досрочные погашения и так далее.

Как только мы запустили запустили использование Camunda 8 в проде, произошла смена лицензии на ее серверную часть. Пришлось нам мигрировать на Temporal. Рассказываю, какие изначальные архитектурные решения помогли нам это сделать быстро и без проблем.

Читать далее

Spring Data JPA и Hibernate: ориентируемся на производительность. Часть 2

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров4.6K

Команда Spring АйО перевела и адаптировала доклад Мацея Валковяка “Performance oriented Spring Data JPA & Hibernate”, в котором на наглядных примерах рассказывается, как существенно нарастить производительность приложения, оптимизировав его взаимодействие с БД. 

Доклад будет опубликован тремя частями. В первой части было рассказано об оптимизации управления подключениями к базе данных. Во второй части мы посмотрим на то, как оптимизировать код и настройки Spring Data и Hibernate, чтобы минимизировать количество отправляемых в базу данных SQL запросов. 

Читать далее

Почему Go такой странный, и ещё 8 холиварных тем про Golang

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

Привет, Хабр! Это Вадим из команды AvitoTech. Весной мы собрали в московском офисе более сотни разработчиков, чтобы обсудить самые актуальные для Go-комьюнити темы: начиная со сложностей при переходе на язык Go и заканчивая извечным вопросом о пользе хард- и софт-скиллов. Выбрали девять самых «горячих» тем, поговорили с модераторами соответствующих дискуссий дринкапа, выделили главное и принесли вам в этой статье. Призываем ваши мнения в комментарии!

Читать далее

DotPlus — офлайн-генератор QR и штрихкодов на Rust с GUI и CLI

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

Как я написал генератор QR и штрихкодов на Rust с GUI и CLI — полностью офлайн, без браузеров и API. Работает с CSV, экспортирует в PNG, подходит для логистики и массовой печати.

Читать далее

Плохие JOIN’ы: приемы, которые (нечаянно) кладут прод

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров27K

Привет, Хабр!

В этой статье разбираем один из самых коварных способов убить базу — плохие JOIN'ы. Казалось бы, простое дело: связать пару таблиц — и вперёд. Но если в ON засунуть LOWER(email), забыть про индексы или перепутать LEFT JOIN с INNER — сервер мигом начнет дышать на ладан.

Читать далее

Генерируем commit message на базе шаблона при помощи локальной (и не только) LLM в консоле и без IDE

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров3.6K

Как-то пару месяцев назад пришел ко мне в гости в коворкинг поработать удаленно мой давний приятель. Он пишет на Java и использует в своей работе IntelliJ IDEA. Помню, он долго восхищался новой на тот момент фичей встроенного AI Assistant - умением генерировать commit message.

На тот момент я как-то не сильно проникся идеей автогенерации сообщения, потому что я, как человек, который ответственен за процесс code-review в своей команде, с трепетом отношусь к описанию коммита. Прошло немного времени, у меня по работе прилетела задача рефакторинга довольно объемного куска кодовой базы. Причем, эта задача была разбита на подзадачи, связанные с микросервисами. Поэтому, мне надо было писать довольно объемные коммит-сообщения по завершении каждой итерации. И тут я вспомнил про своего приятеля, когда он за минуту редактировал сгенерированное сообщение от AI ассистента и экономил немало времени.

Читать далее

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

Как работает @Lazy в Spring — и когда он полезен

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

Привет, Хабр!

Если вы хоть раз писали хоть что‑то сложнее REST‑контроллера в Spring, вы наверняка ловили больную ситуацию: два бина зависят друг от друга, инициализация идёт по кругу, и вот он — BeanCurrentlyInCreationException. И если в этот момент вы вспомнили про @Lazy — вы молодцы.

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

Читать далее

Как спроектировать потокобезопасный класс в Java

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

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

Читать далее

@TestInstance(PER_CLASS) в JUnit 5: как и зачем переопределять жизненный цикл

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров789

Привет, Хабр!

Сегодня рассмотрим JUnit 5 и разберёмся, чем дышит аннотация @TestInstance(PER_CLASS), — зачем переопределять жизненный цикл тестового инстанса и когда это может помочь.

Читать далее

Карты, Java, 2 null'а. XMage edition

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров1.2K

Компьютерная игра на Java — вещь довольно редкая, но всегда интересная. Поэтому мы не упустили возможность проверить статическим анализатором проект XMage и поделиться результатами. Посмотрим, что нашёл PVS-Studio в исходном коде проекта.

Читать далее

Настройка Jest и React Testing Library: пошаговое руководство для React и Next.js проектов

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

В данной статье мы подробно рассмотрим процесс настройки среды unit-тестирования веб-приложений на базе React и Next.js с использованием Jest и React Testing Library. Мы расскажем об установке необходимых зависимостей, создании конфигурационных файлов, настройке Babel и TypeScript, подключении SCSS и SVG, а также организации структуры проекта. Особое внимание уделено специфике настройки Jest в среде Next.js. Материал будет полезен для frontend-разработчиков и команд разработки, которые работают с React или Next.js проектами и хотят внедрить качественное unit-тестирование. 

Читать далее

Headless и API-First: как ускорить e-commerce и не утонуть в монолите

Время на прочтение6 мин
Количество просмотров1.9K

Привет, хабровчане! Я Алиса, тимлид в e-commerce агентстве KISLOROD.

Сегодня расскажу, как мы вырвались из цепких лап монолита с помощью Headless и API-First архитектуры, ускорили разработку и дали бизнесу крылья. Это не просто про технологии, а про то, как не сойти с ума от бесконечных правок и при этом ускорить запуск фич. Мы все еще на PHP, под капотом Bitrix, но перестали латать шаблоны и начали строить настоящую платформу. Погнали разбираться: что это, зачем и как не облажаться.

Читать далее

Глупые фокусы: преобразование 32-битного значения в 64-битное, когда неважен мусор в старших битах

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

Предположим — у вас имеется функция, которая передаёт 32-битное значение другой функции, принимающей 64-битные значения. Вам совершенно неважно то, что попадёт в 32 старших бита, так как это значение функция, принимающая его, напрямую не обрабатывает. Его просто передают функции обратного вызова, которая обрезает его, преобразуя в 32-битное значение. При этом, по некоей причине, вас беспокоит влияние на производительность той единственной инструкции, которую компилятор обычно генерирует для расширения 32-битных значений до 64-битных.

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

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

Я решил использовать встроенный ассемблер gcc/clang и написать код, который сообщает системе: «Я могу создать 64-битное значение из 32-битного, не выполнив ни одной инструкции».

Читать далее

Вклад авторов