Обновить
79.4

Проектирование и рефакторинг *

Реорганизация кода

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

Waterfall 2.0: программные артефакты и ИИ для современных команд разработчиков

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

В формирующейся парадигме «Водопад 2.0» разработка программного обеспечения становится более структурированной и фазово-управляемой. Каждая фаза стабильна и четко определена — почти как производственная линия или сборочная линия — но общий процесс остается итеративным. Большие языковые модели (LLM) теперь выступают в качестве автоматизированных «членов команды» в этом процессе, помогая экспертам в предметной области на каждом этапе. В результате традиционные артефакты — записи архитектурных решений (ADR), руководства по коду/стилю, документы для новых сотрудников, планы тестирования, конфигурации CI/CD, спецификации API, контрольные списки безопасности и т. д. — должны эволюционировать. В этом рабочем процессе, дополненном ИИ, эти документы становятся как входными данными, так и выходными данными ИИ, помогая направлять генерацию и сохранение знаний. Лучшая практика — хранить их как контролируемые версии, читаемые человеком файлы (например, Markdown в основном репозитории), позволяя ИИ помогать создавать и поддерживать их контент.

Читать далее

Waterfall 2.0: рабочие процессы, основанные на LLM, в разработке программного обеспечения

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

Появление мощных LLM превращает разработку программного обеспечения в более структурированный конвейерный или водопадный процесс. Вместо того, чтобы многие разработчики итерировали короткими спринтами, конвейер с поддержкой LLM может разбить работу на стабильные фазы (требования, проектирование, реализация, тестирование), которые идут последовательно. Как отмечает один эксперт, «кодирование перешло от творческого поиска к модели производственной линии», и ИИ помогает сделать каждую фазу более предсказуемой. В этой парадигме «Waterfall 2.0» эксперты в предметной области (например, менеджеры по продуктам, дизайнеры) напрямую подключаются к потоку разработки с помощью подсказок ИИ, и отдельные шаги фиксируются, но все еще адаптируются с течением времени. Результатом является в основном линейный сквозной процесс — анализ, генерация историй, кодирование, QA — который по-прежнему включает циклы обратной связи по мере необходимости.

Например, конвейер Waterfall 2.0 может начинаться с глубоких требований и исследований, а затем передаваться LLM, который генерирует пользовательские истории и спецификации тестов. Затем система будет проходить циклы ATDD (приёмочные тесты)/BDD(поведенческие тесты)/TDD (используя синтетические данные обучения), использовать ИИ для написания основной части кода и, наконец, запускать автоматизированные тесты и шаги по исправлению. На практике ИИ может сканировать заметки со встреч для составления пользовательских историй и даже создавать фрагменты кода из простых подсказок. Хотя на бумаге это выглядит линейно, общая гибкость сохраняется: как замечает Аджит Джаокар, у нас будут «теперь фазы, которые будут более стабильными», даже если команды будут переходить между ними.

Читать далее

Waterfall 2.0: Одиночная разработка с поддержкой LLM: эффективность, инструменты и риски

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

Рост числа продвинутых LLM (таких как ChatGPT, Claude, Gemini) меняет разработку программного обеспечения. Сегодня один разработчик, вооруженный ИИ, может придумать, закодировать и запустить полнофункциональные приложения или MVP за долю традиционного времени.

Читать далее

Лайфхаки проектирования и адаптации (opensource)решений под себя

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

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

Представьте, что у вас есть некая система, которая работает определённым образом. У неё есть свой API, свои архитектурные принципы, рекомендуемые подходы к разработке и т.п. С другой стороны, у вас у самого есть видение своего будущего проекта, его архитектуры и того, как бы вы хотели управлять функционалом, предоставляемым «некой системой». Видение есть, а вот уверенности, что так можно – нету. Вот, делюсь своим подходом, как я поступаю в таких ситуациях.

Осторожно, лонгрид!

От данных к интерфейсу: как спарсить вакансии с HH и SuperJob на C#

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

В современном мире анализ рынка труда становится критически важным как для соискателей, ищущих актуальные возможности, так и для компаний, изучающих конкурентную среду. Для решения этой задачи были выбраны два ключевых ресурса — HH.ru и SuperJob.

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

Парсим данные

Waterfall 2.0: Возвращение эпохи одиночек, усиленных LLM

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

Большие языковые модели (LLM) радикально меняют процесс разработки ПО. Они дают одному разработчику возможность взять на себя весь цикл: анализ требований, архитектуру, реализацию, тестирование, документацию. Это возрождает принципы водопадной модели — линейную, сквозную разработку — но без её классических недостатков: отсутствия гибкости, коммуникационных задержек и потерь контекста между ролями.

Читать далее

Диаграмма Прецедентов (англ. Use Case Diagram)

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

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

Цикл статей о проектировании, призван показать один из возможных путей, достижения успеха, через проектирование программного обеспечения с использованием UML (англ. Unified Modeling Language — унифицированный язык моделирования).

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

Читать далее

Технический долг нельзя распланировать

Время на прочтение4 мин
Охват и читатели3K
image


Будучи ведущим инженером, я неоднократно наблюдал следующую картину в разных компаниях.
  1. Руководители жалуются на недостаточно высокую скорость разработки. "Я просто хочу показывать день рождения пользователя на странице настроек. Почему на это уходит целый год?"
  2. Инженеры говорят, что техдолг мешает им двигаться вперед.
  3. Руководство поручает менеджерам «разобраться с техдолгом», чтобы повысить скорость разработки.
  4. Менеджеры начинают искать крупные проекты с технологическим долгом, чтобы добавить их в роадмап
Читать дальше →

Умный подход к оптимизации Django

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

Шёл 2018 год, и я как раз присоединился к команде, которая поднимала новую среду выполнения для Python (тогда её прозвали Pyro, а теперь она называется Skybison). Была поставлена цель: опираясь на 30-летний опыт инженерных исследований в инженерии VM и народную мудрость заново спроектировать всё с нуля, чтобы получилась система с высокой производительностью. Важное уточнение: мы могли применять только одну кодировку строк: UTF-8 [1] (с прицелом на будущее).
Читать дальше →

Code smells — что об этом думают ученые

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

Статей по теме, в том числе с примерами «потенциально плохого» кода, написано довольно много — в том числе и на Хабре. Мы в beeline cloud решили посмотреть, что на этот счет говорят научные работы и подтверждают ли они актуальность проблемы.

Читать далее

Интерфейсное проектирование в абстрактных системах

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

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

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

Читать далее

The Clean Structure — Универсальная структура PHP-проекта на примере Laravel

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

К написанию этой статьи меня подтолкнуло изучение архитектурных подходов для Vue.js-проектов, а вдохновила - детально описанная методология Feature-Sliced Design.

К сожалению, PHP-сообществу не хватает подобных развернутых рекомендаций, да и вообще, каких-то общепризнанных стандартных подходов в структуре проекта.

Моя статья - это попытка обобщить изученную мною за много лет информацию и сформировать универсальную структуру проекта, основанную на принципах Clean Architecture и модульного монолита.

Читать далее

Кто выполняет функции системного аналитика в США?

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

Системный аналитик как термин в США почти не используется. Если вы просто наберёте "System Analyst", то в 9 из 10 случаев увидите совсем не то. Либо вакансии из финансового сектора, либо вообще нечто около-административное.

Так кто же тогда делает ту работу, которую в России выполняет системный аналитик?

Читать далее

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

Реинжиниринг процесса управления вводом систем в эксплуатацию в Группе MOEX

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

Спросил свою 3070ti «Как думаешь, что важнее – процесс или результат?», а он мне отвечает, чтобы я сам выбирал. И зачем эти нейросети, если они даже не могут выбрать, что для меня важнее и лучше…

Читать далее

Проектирование: Начало

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

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

Цикл статей о проектировании, призван показать один из возможных путей, достижения успеха, через проектирование программного обеспечения с использованием UML (англ. Unified Modeling Language) — унифицированный язык моделирования.

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

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

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

Читать далее

Есть ли смысл применять SOLID в React?

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

Ещё несколько лет назад принципы SOLID были неотъемлемой частью собеседований для разработчиков любого уровня. Вопросы вроде «Расскажите, что означает каждая буква в SOLID» звучали так же часто, как «Что такое замыкание в JavaScript?». Это считалось своеобразной классикой, обязательной для понимания любого уважающего себя программиста.

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

Тем не менее, я убеждён, что принципы SOLID по-прежнему актуальны и полезны, даже в контексте функционального подхода. JavaScript и React не запрещают применять лучшие практики из ООП — наоборот, они предоставляют гибкость для использования различных парадигм.

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

Читать далее

Распределённые транзакции в микросервисах: от SAGA до Two‑Phase Commit

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

Переход от монолита к микросервисной архитектуре приносит гибкость и масштабируемость, но и создает новые сложности. Одна из ключевых проблем –согласованность данных и транзакции. В монолите обычно можно обернуть несколько операций одной ACID-транзакцией: либо все операции выполняются успешно, либо при ошибке происходит полный откат. В мире микросервисов такой прямолинейный подход не работает. Каждый сервис автономен, у каждого своя база данных, и общаются они через сеть. Как результат, гарантировать атомарность и целостность процессов, охватывающих несколько сервисов, непросто. Возникает риск частичных обновлений: одна часть системы изменилась, а другая – нет, что приводит к неконсистентным (несогласованным) состояниям данных.

Чтобы решить эту проблему, разработаны специальные паттерны и протоколы управления распределёнными транзакциями. В этой статье детально рассмотрим ограничения классических ACID-транзакций в распределённой архитектуре, а также два подхода к распределённым транзакциям – сага (SAGA) и двухфазный коммит (2PC). Разберём мотивацию, принципы работы, преимущества и недостатки каждого, сравним их по критериям. Кроме того, обсудим альтернативные подходы, такие как TCC (Try-Confirm-Cancel), паттерн Outbox, а также кратко упомянем eventual consistency, транзакционные сообщения, инструменты вроде Atomikos и др. В завершение – практические рекомендации, как выбрать подходящий способ обеспечения согласованности в ваших микросервисах.

Читать далее

Классификация парадигм программирования

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

Здравствуйте, меня зовут Дмитрий Карловский и я.. придерживаюсь следующей парадигмы мышления: всякое определение должно иметь чёткую границу между тем, что ему соответствует, и тем, что не соответствует.

К сожалению, часто можно встретить споры о пересекающихся определениях, словно они взаимоисключают друг друга. Не менее часто можно встретить ложную дилемму между двумя терминами не покрывающими всё множество сущностей.

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

Аспекты классификации

Не файлы, а люди: Почему Knowledge Management начинается с кофе-брейков

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

Представьте: в компании работает Алексей — senior-разработчик, который за пять лет стал незаменимым. Он знает каждый уголок legacy-кода, помнит, почему десять лет назад выбрали именно эту базу данных, и умеет чинить критические баги за минуты. Но Алексей увольняется. Руководство в панике: как передать его опыт? Проводят митинги, заставляют его записать всё в Confluence, а через месяц новый разработчик смотрит на эти документы и не понимает ни строчки. Знания Алексея ушли вместе с ним, а компания теряет клиентов из-за растущих багов.

Читать далее

Scalar на замену Swashbuckle в .NET 9 и как это готовить с Design API First

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

Рассказываю чем заменить Swashbuckle, который убрали из .Net 9, для создания страницы похожей на Swagger UI.

Читать далее

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