Эргономичный код
819 subscribers
81 photos
3 videos
20 files
401 links
Канал о разработке поддерживаемых бакэндов - про классическую школу TDD, прагматичное функциональное программирование и архитектуру и немного DDD.

Группа: https://t.me/+QJRqaHI8YD

https://azhidkov.pro
Download Telegram
Привет!

Накопал любопытный пост, в которой автор переносит виды сцепленности из структурного дизайна, на современную разработку.

Не совсем согласен, но ознакомиться рекомендую.

#posts@ergonomic_code #coupling@ergonomic_code #structured_design@ergonomic_code
Привет!

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

Однако, попадание в программу JPoint, некоторое упрощение задачи (отказ от полной детерменированности) и ещё одна бессонная ночь и у меня кое-что получилось.

Тематический тизер алгоритма декомпозиции:

fun clusterize(diagram: Diagram) {
var proceed = true
while (diagram.hasFreeElements() && proceed) {
proceed = false
for (r in diagram.freeResources) {
val tightlyCoupledOperations = r.operations
.filter { o -> o.resources.size == 1 ||
(o.writtenResources.size == 1 && o.writtenResources[0] == r) ||
(o.isReadOnly && God.isPrimaryResource(o, r)) }
diagram.makeCluster(r, tightlyCoupledOperations)
proceed = tightlyCoupledOperations.isNotEmpty()
}

for (e in diagram.freeElements) {
val adjaсentClusters = e.elements.map { it.cluster }.toSet()
if (adjecentClusters.size == 1) {
diagram.extendCluster( adjacentClusters.first(), e)
proceed = true
}
}

for (r in diagram.freeResources) {
val possiblePairs = r.operations.flatMap { it.resources }
val bestMatch = God.findBestMatch(r, possiblePairs)
if (bestMatch != null) {
diagram.aggregate(r, bestMatch)
proceed = true
}
}
}
if (diagram.hasFreeElements) {
diagram.finalyzeClusterization()
}
diagram.nameClusters()
diagram.hideSubmodules()
diagram.groupModules()
}

Кажется, общий ход алгоритма получилось описать достаточно чётко:) А если учесть то, что сейчас могут нейронные сети, то, кажется, они вполне могут справиться с реализацией функций isPrimaryResource и findBestMatch не как боженька, конечно, но не хуже джуна уж точно.

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

А с учётом того, что нейронные сети уже умеют писать код и моих склонностей к мании величия и нарциссизму, у меня в мечтах диаграмма эффектов уже стала самым распространённым языком программирования 5-ого поколения:) М? Мощно задвинул?:)

Осталась только самая мелочь - забутстрапить систему и нарисовать диаграмму эффектов, по которой GitHub copilot сможет сгенерировать код генерации кода по диаграмме эффектов:)
👍3🤯2🤩2
Привет!

Студент прислал еженедельный отчёт:)

Я считаю это успех
👏5
Привет!

По посту с декомпозицией пока особых новостей нет и не будет до JPoint-а, поэтому пока накатал микропост с описанием опыта внедерния тулов статического анализа кода (Detekt, Kover, ArchUnit) в Проект Э.

#posts@ergonomic_code #tools@ergonomic_code #case@ergonomic_code
Привет!

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

У них там тоже граф, но однородный - и операции и ресурсы представленны одинаково, плюс ещё есть понятие артефакта (выводимые данные). А вот связи между ними характеризуются 16-ю аспектами.

И вот если им этот граф загрузить - они могу его с помощью тула автоматически нарезать.
Только с этим тулом есть две проблемы:
1) он начал гнить
2) сформировать граф, и проставить характеристики связей надо руками:)

#papers@ergonomic_code #design@ergonomic_code
👍2
Привет!

Сегодня рубрика и смех и грех.

Диалог со студентом (примерный):
С - а как вы раньше запросы писали?
Я - о_О
С - ну там иерархическая модель, сетевая, всё такое
Я - О_О

Кажется мне пора начать подкрашивать седину 😂

На всякий случай историческая справка - иерархическая и сетевая модели имели наибольшее распространение в 60-70-ых годах прошлого века.
😁6
Привет!

Мне выдали именной промокод на скидку 20% на персональные билеты на JPoint: AZhidkov2023JRGpc:)

Приходите, развиртуализируемся:)
👍8
Привет!

Мне тут пришла рассылка от CodeFest (конференция в Новосибирске). Говорят места на квартирники остались, зазывают провести квартирник, бесплатные билетики (всем) обещают. Но нужна экспертная группа:) Айда похоливарим?

Мои предложения по темам:
1) Из очевидного - как декомпозировать системы?
2) Ту жэпэа ор нот ту жэпэа?
3) Сеттеры - инкапсуляция или фикция? Или что имел ввиду Алан Кей, когда придумывал ООП?
4) Интеграционные/юнит тесты это скам (нужное подчеркнуть)

Но если мне будет что сказать - готов и к вашей теме подключиться:) Да и к вашей заявке:)
Ну и заодно вести с полей Проекта Э.

На скрине разработчик говорит о последнем кусочке и немножко драматизирует на мой взгляд, но в целом с проектом (именно реинжиниринга) ситуация примерно такая - местами было непросто, но, судя по всему, в этот (10ый) спринт закончим.

Обязательно напишу пост с ретро проекта, и может даже удастся это до JPoint-а осилить

#project_e@ergonomic_code
2👍1
Привет!

У меня есть уникальное предложение для жителей и гостей города Новосибирск!

Совместно с Сибериан.Про организовали оффлайн митап с тестовым (уже третьим) прогоном моего доклада на JPoint. Если не едете в Москву, то можете посмотреть кусочек JPoint-а практически не сходя с места:)

После прогона, будет небольшая тусовка, где можно обсудить актуальные темы:)

Количество участников ограничено (размером офиса), поэтому регистрация обязательна:)
Приходите, будет интересно:)
👍4
Привет!

В Проекте Э сегодня прибили последние два микросервиса на дев окружении и в пн планируем докатить последние куски до прода.

Немного статистики:
1) 23,944 строк кода
2) 730 классов
3) 234 теста (преимущественно интеграционных)
4) 100% покрытие эндпоинтов тестами
5) 93.2% покрытия строк кода тестами
6) 1:30 минут полное время сборки, включая все тесты, тесты архитектуры, detekt, сборку и верификацию покрытия кода
7) 10 спринтов
8) 154 календарных дня активной разработки
9) ~1446.55 часов джунов
10) 590.75 часов лида (меня)
11) 55 багов:) всего - включая те, что нашли сами и QA

#project_e@ergonomic_code
Эргономичный код
Привет! У меня есть уникальное предложение для жителей и гостей города Новосибирск! Совместно с Сибериан.Про организовали оффлайн митап с тестовым (уже третьим) прогоном моего доклада на JPoint. Если не едете в Москву, то можете посмотреть кусочек JPoint…
Привет!

Прошу прощения - я на радостях побежал впереди паравоза и опубликовал не рабочую ссылку.

Если кто-то уже зарегестрировался - повторите регистрацию по новой ссылке, пожалуйста. Или, как вариант, просто под этим постом оставьте любой комментарий
Привет!

Хотите репортаж с JPoint?
Anonymous Poll
89%
Да
11%
Нет
Так, ну большинство вроде за, поэтому начну:)
Кто против - мьютьтесь, но не отписывайтесь, это всего на пару дней:)
Начну с себяшки:)
Не много про организацию глазами спикера:)

Если в кратце - я в восторге:)

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

За месяц до конфы для спикеров был бесплатный тренинг по публичным выступлениям.

Логистика для меня - просто фантастика. Оплатили перелёт, гостиницу и даже такси до аэропорта. И вчерашний ужин за компанию с финальным ужином Heisenbug- а:)
👍5
Где вести репортаж?
Anonymous Poll
76%
В канале
24%
В чате
Оказывается, доклады в программу могут попасть накануне вечером:) все с того же Гейзенбага. Решил пойти на него - не модно, зато надёжно.

И с докладчиком вчера за ужином сидели:)
Ещё любопытный факт из жизни спикера (-невротика?).

Я сделал 3 оффлайн прогона перед аудиторией, один онлайн прогон перед ПК, 7 (семь) прогонов в одного и пересмотрел шесть записей прогонов.

Ну и базовый пост писал с декабря и последние куски дописывал вчера. Завтра, кстати его опубликую
😱2