Рисуем квадратики, чтобы разобраться в задаче ✍️
Часто говорят, что для решения задачи программисту достаточно взять правильную библиотеку или скопировать код. Но для меня главный ключ к пониманию любой системы - это проследить, как в ней движутся данные. От начала и до конца.
Я сажусь и разбираю флоу в заметках или рисую квадратики на листочке. Беру один запрос или одно действие и смотрю, какой путь оно проходит. Где оно начинается, в каком виде, кто его первым принимает. Как оно меняется, передаётся от одной функции к другой, от одного сервиса к другому.
Например, в браузере нажали кнопку. Куда пошёл этот клик? Кто его обработал? React-компонент, который потом обновляет локальное состояние или стейт-менеджер? Кто решил, что делать дальше? Где данные могут «застрять» или откатиться назад, а где путь только вперёд? Когда мы ходим во внешнее API - в какой момент наше приложение отдаёт управление, а в какой момент наш сервер говорит «да» или «нет», и что происходит между этими точками?
Возьмём конкретный пример из браузерного event loop. Пользователь кликнул кнопку. Событие попадает в очередь задач. Event loop выбирает задачу, выполняет её, затем проверяет очередь микрозадач - там могут быть промисы, которые резолвились во время выполнения. После микрозадач наступает момент для рендеринга: пересчёт стилей, layout, отрисовка. И только потом браузер готов к следующему клику. Если не понимаешь этот порядок, можно долго гадать, почему обновление состояния не сразу видно на экране.
Или вот Nuxt-SSR. Пользователь переходит на страницу. Запрос приходит на NodeJS-сервер. Nuxt определяет маршрут, выполняет функции для отправки асинхронных запросов на сервере, делает запросы к Django-API. Vue-компоненты рендерятся в HTML-строки прямо на сервере. Готовая страница отправляется браузеру. А потом начинается гидратация. JavaScript оживляет статичный HTML. Если не видишь этот путь, непонятно, почему данные не загружаются или почему первая отрисовка такая медленная.
В микросервисной архитектуре ещё интереснее. Пользователь создаёт бронирование корта на теннисной платформе. Запрос приходит в шлюз. Шлюз публикует событие в Kafka. BookingService и AvailabilityService подписываются на это событие и начинают обработку параллельно. AvailabilityService проверяет свободные слоты и публикует результат проверки. BookingService получает результат, подтверждает бронирование и публикует событие. NotificationService и AnalyticsService подписываются на результат и делают своё дело. Если не понимаешь этот поток событий, можно часами искать, где застряло бронирование или почему уведомление не пришло.
Когда я так делаю, система перестаёт быть набором файлов и функций. Она становится живым маршрутом, историей с началом и концом. И сразу видно, где всё продумано красиво и умно, а где накручено костылей.
Такой подход помогает не просто чинить баги, а понимать, почему они возникают. И главное - начинаешь чувствовать систему, а не просто знать, какой файл открыть. Это как знать не только адрес дома, но и все дороги к нему.
А вы когда-нибудь так делали? Не писали код, а сначала долго смотрели/рисовали, как данные «бегают» по программе? #разработка #проектирование
· 19.01
Спасибо за пост! Я регулярно использую натацию (BPMN) в проф. деятельносии, это позволяет в краткой форме описывать бизнес-процессы заказчика в форматах «as is» и «to be».
Потом, при демонстрации заказчику, с нашей стороны гораздо проще донести суть и то, как мы можем повлиять на процесс.
Ну и ключевой момент. Схема - неотъемлемая часть документации, для специалистов, которые непосредственно принимают участие в процессе внедрения.
Еще отмечу, что на схеме можно сразу видеть узкие места в процессах и на основании этого принимать решения.
У тебя крутой подход. Я полагаю, что у начинающего программиста как рад не хватает этого самого опыта-понимания, как работает вся ситема в целом. Исходя из этого, если лн правит что-то в одной части проекта, обычно в другой части что-либо обязательно отвалится)). Сам я не программист, но довольно часто сталкивался с подобными ситуациями на коммерческих проектах.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· 20.01
Спасибо за коммент, ты всё правильно написал в конце, так и есть, система будет сыпаться с разных концов, но зато таски всегда будут на доске 😀 Крутяк, что используешь схемы для описания процессов, продолжаем двигаться и расти 💪🏻
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён