В данной статье вы узнаете о том, из чего складывается архитектура на уровне самого кода и почему разговор о ней начинается задолго до диаграмм и схем. Мы разберём три парадигмы программирования - структурную, объектно-ориентированную и функциональную - и главный парадокс, объединяющий их: каждая не расширяет возможности разработчика, а сознательно их ограничивает. Отдельно и подробно рассмотрена первая из них: как было доказано, что неограниченные переходы в коде вредят его структуре, почему исчезновение оператора безусловного перехода из современных языков вовсе не означает, что проблема решена, и в каких формах она продолжает существовать в сегодняшнем коде. Вы также поймёте, почему разработка программного обеспечения ближе к науке, чем к математике, что на самом деле доказывают тесты, и почему сложность написания теста - это диагноз архитектуре, а не тестам.
Сегодня коротко поговорим про Spring Event Bus и разберем одну задачку.
Недавно столкнулся с ситуацией - есть некий общий функционал, который вызывается из совершенно разных роутов. Сами роуты обернуты в транзакцию.
Вайбкодинг (vibe coding) — это подход, при котором разработчик не пишет код построчно, а задаёт ИИ направление и общие параметры задачи на естественном языке, а модель генерирует решение . Это творческий, быстрый и демократичный способ создания ПО, где программист становится «дирижёром» .
В моем блоге уже было множество заметок на тему преобразования и передачи данных с использованием Apache NiFi, однако все наши предыдущие проекты разрабатывались на разных подверсиях NiFi 1.0.
В этой статье вы узнаете, чем ChatGPT, Claude и Gemini принципиально отличаются друг от друга при работе с кодом. Мы разберём сильные и слабые стороны каждой модели и сравним их по ключевым техническим параметрам. И что самое важное - вы получите не готовый ответ на вопрос «какой инструмент лучше», а понимание того, в каких сценариях разработки уместнее использовать ту или иную модель.
Главная проблема работа с деньгами в программировании заключается в том, что привычные нам десятичные дроби компьютер хранит в двоичной системе. Из-за этого 0.1 + 0.2 в double превращается в 0.30000000000000004.
Вайб-кодинг подкупает лёгкостью: описываешь словами, что нужно, и через минуту на экране рабочий прототип. Никаких тикетов, ревью и совещаний, поток идей сразу в код. Но у потока есть ограничений. Пока проект маленький, всё живёт; как только он вырастает, агент уверенно выдаёт код, который выглядит правильным, но таким не является, архитектура плывёт, баги всплывают в проде.
Вы когда-нибудь просили нейросеть нарисовать «современный интерфейс для интернет-магазина» и получали нечто, напоминающее сайт 2010 года с кислотными цветами и непонятными кнопками? Или просили сгенерировать компонент на React, а AI выдавал код, который невозможно поддерживать, полный устаревших практик и багов?
Это не «глупая нейросеть».
Сегодня мы поговорим о простом, но действенном математическом способе преобразования данных о времени из линейного промежутка в окружность, имитирующую циферблат часов. Необходимость таких трансформаций появляется в тех случаях, когда алгоритму машинного обучения или разрабатываемому нами сервису важно понимать, что время в сутках идет по кругу и что разница в отметках (например, времени входа) 23:59 и 00:01 незначительная.
При смене хостинга, передаче проекта заказчику или выходе в open source часто возникает необходимость перенести код в новый репозиторий. В этой статье мы рассмотрим, как сделать это чисто: обнулить историю коммитов и перенести на новый сервер только актуальное состояние проекта. Мы не будем использовать сторонние утилиты или сложные скрипты - задача элегантно решается стандартными средствами Git.
Традиционный CMS умирает медленно, но неотвратимо. WordPress вместе со своей монолитной архитектурой, которая одновременно хранит контент, рендерит HTML и управляет темами, становится всё менее привлекательным выбором для команд, которые думают о scale и гетерогенных клиентах — web, mobile, IoT, голосовые интерфейсы. Headless CMS решает эту проблему разрывом слоёв: бэкенд управляет контентом и отдаёт его через API, а фронтенд полностью свободен в выборе стека.
Доброго дня! Сегодня поговорим об одной из экспериментальных фич Kotlin, а именно о деструктурировании.
Проблема
Деструктурирование в Kotlin - удобная вещь. Всё работает через сгенерированные методы componentN(), и синтаксис получается приятным:
data class User(val name: String, val age: Int)
val user = User("Max", 23)
val (name, age) = user
println("$name is $age years old")
Но за этим удобством скрывается ловушка.
Представьте, что вы нажимаете на кнопку в приложении, и... ничего не происходит. Тишина. Кнопка даже не меняет цвет. Возникло ли ощущение, что вы сделали что-то не так? Или что приложение «зависло»?
А теперь вспомните, как приятно, когда кнопка слегка «вдавливается» под пальцем, когда переключатель плавно скользит из положения «выкл» в «вкл», когда сердечко лайка пульсирует после нажатия.
Сегодня в этой небольшой заметке мы покажем пример файла .gitlab-ci.yml, который описывает пайплайн, осуществляющий какие-либо действия с нашим репозиторием в момент, когда в другом проекте выходит новая версия.
В данной статье вы познакомитесь с основами AI Engineering и узнаете, с чего начать переход в эту область, если у вас уже есть опыт в классической разработке. Разберём базовые концепции — токены, эмбеддинги, температуру — и покажем, как они соотносятся с привычными инженерными понятиями. На простых примерах рассмотрим типизацию вывода языковых моделей, принципы работы агентов, паттерн RAG и основы управления состоянием. Главная идея: накопленные знания в области бэкенда, проектирования систем и паттернов проектирования не теряют своей ценности — они становятся фундаментом для работы с AI-инструментами. Статья не претендует на исчерпывающее руководство, но даёт отправную точку для тех, кто хочет сделать первые шаги в AI Engineering, опираясь на то, что уже умеет.
Представьте: вы открываете приложение, чтобы удалить давно надоевшую подписку. Вы находите нужную кнопку... а на ней написано: «Деактивировать рекуррентный платёжный мандат». Что вы сделаете? Скорее всего, закроете приложение и подумаете: «Я слишком стар для этого».
Kotlin позиционируется как язык, который призван сделать жизнь Java разработчика счастливее. Код становится лаконичнее, Null-safety спасает от NPE, а стандартная библиотека - удовольствие. Но когда мы подключаем к этому котлу JPA-провайдер (например Hibernate), начинаются интересные сюрпризы.
В данной статье рассмотрим специфику использования porcelain и plumbing команд в git, обратим внимание на их достоинства и недостатки, разберемся в типах объектов git и отметим несколько полезных малоизвестных команд
Astro — это фреймворк для сайтов и веб-приложений, который по умолчанию рендерит большую часть страницы в статический HTML на сервере, а JavaScript подключает только там, где он действительно нужен. Такой подход называется islands architecture: основная часть страницы остается «легкой», а интерактивность добавляется небольшими изолированными фрагментами.
В данной статье вы узнаете о том, что такое архитектура программного обеспечения и зачем она нужна на практике. Мы разберём, почему качество структуры системы напрямую влияет на скорость и стоимость разработки, к каким последствиям приводит пренебрежение архитектурой ради быстрого запуска продукта, и чем грозит накопленный технический долг. Вы также познакомитесь с двумя ключевыми ценностями любого программного продукта — поведением и структурой — и поймёте, почему гибкость системы в долгосрочной перспективе важнее идеального функционала в моменте. Отдельное внимание уделено тому, как разработчику выстраивать аргументированный диалог с руководством и обосновывать важность архитектурных решений на языке бизнеса.
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями
использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании
файлов cookie, нажмите здесь.