Разработка программного обеспечения — это не только процесс создания кода, но и его сопровождение. Чем сложнее код, тем дороже его поддержка, выше вероятность ошибок и дольше адаптация новых разработчиков. Один из ключевых факторов, влияющих на сложность кода, — это именования и контекст, который они несут. Помимо этого, выбранная парадигма программирования также влияет на читаемость и понятность кода. В этой статье я хотел показать, как правильно выбирать имена, как контекст упрощает понимание и какие различия в управлении сложностью между функциональным и объектно-ориентированным стилями программирования.
Рубрика «сложность»
Контекст и парадигмы программирования
2025-03-06 в 6:15, admin, рубрики: .net, .net8, python, контекст, ооп, ООП программирование, сложностьОстерегайтесь эффекта Makefile
2025-01-12 в 6:39, admin, рубрики: makefile, инструменты, конфигурирование, обучение, сложностьСуществует специфический «эффект Makefile», напоминающий такие феномены как карго-культы, нормализация отклонений, «нечитабельный язык» и т.д. В этой статье я берусь утверждать, что Makefile — явление того же порядка, с той оговоркой, что он немного отличается от вышеперечисленных феноменов. Makefile не является по сути своей неэффективным или плохим и сказывается на результатах проектирования лишь в некоторых ситуациях.
Не могу подобрать идеальногоЧитать полностью »
Советы по программированию, которые бы я дал себе 15 лет назад
2024-08-28 в 13:00, admin, рубрики: ruvds_переводы, оптимизация трудозатрат, работа в команде, сложность, устранение багов
У меня наконец-то появилось ощущение, что я хороший программист, поэтому было бы неплохо записать советы вида «как бы я смог добиться этого быстрее?». Не буду утверждать, что все эти советы отлично подойдут всем, но для меня они были бы хорошими.
▍ Если ты (или твоя команда) постоянно стреляешь себе в ногу, то почини ружьё
Не могу перечесть случаи, когда при работе в команде у нас была какая-то часть системы, которая легко могла поломаться, но никто не думал о том, как усложнить появление таких ошибок.
Когда я занимался разработкой для iOS, то использовал CoreData и подписывался на изменения нескольких view. Обратный вызов подписки поступал в тот же поток, из которого было запущено изменение. Иногда это был основной поток, а иногда — фоновый. В разработке для iOS важно то, что вносить изменения в UI можно только в основном потоке, иначе приложение вылетит. Поэтому подписка могла работать нормально, но потом ломалась, когда кто-то запускал изменение из фонового потока или вы позже добавляли обновление UI.
Все без раздумий воспринимали это как что-то само собой разумеющееся, и об этом часто говорили в ревью для новичков в команде. Время от времени кто-нибудь ошибался, и мы добавляли DispatchQueue.main.async
, когда видели отчёт о сбое.
Я решил это исправить. У меня ушло десять минут на внесение изменений в слое подписки, теперь подписчики вызывались в основном потоке, что позволило избавиться от целого класса сбоев и сняло с нас часть умственной нагрузки.
Читать полностью »
А давайте убьем все фреймворки?
2023-08-27 в 7:38, admin, рубрики: chatgpt, node-modules размером со вселенную, генеративные модели, разработка, сложность, сложность разработки, сложность систем
ИТ-ландшафт как сложная система систем
2023-07-02 в 10:28, admin, рубрики: Анализ и проектирование систем, ит-инфраструктура, ит-ландшафт, Системная инженерия, сложностьСтоять — сидеть — лежать
2022-04-06 в 13:55, admin, рубрики: изучение языков, Научно-популярное, русский язык, словарный запас, словарь, сложность, спорНаверняка на просторах Интернета вам, читатель, встречались ролики от недоумевающих иностранцев, пытающихся понять, когда именно стоит употреблять глаголы из заголовка. Например, такие:
Если вам недосуг смотреть видео, под спойлером — суть проблемы.
Восхитительная история
Атомная война в эпоху Великого Комбинатора
2020-03-27 в 20:39, admin, рубрики: Анализ и проектирование систем, атомы, инженерные системы, комбинаторы, Программирование, Проектирование и рефакторинг, сложностьДостоевский дал миру Великого Инквизитора с его «зачем же ты пришел нам мешать?».
Ильф и Петров — Великого Комбинатора.
Та эпоха уже закончилась, эта — еще не началась.
Читать полностью »
Имитация Сложности — Антиномия Простого и Сложного
2020-03-23 в 19:47, admin, рубрики: Анализ и проектирование систем, архитектура приложений, практика программирования, Программирование, проектирование, Проектирование и рефакторинг, проектирование систем, Промышленное программирование, размышления, сложность, философия программированияПрограммисты много говорят про сложность решений. Мы можем часами размышлять о правильных шаблонах, красивых абстракциях и цепочках зависимостей. Однако, давайте поговорим открыто, всегда ли сложность обусловлена решаемой проблемой? Не оказываемся ли мы в плену наших стереотипов и убеждений?
Spring — эффективный роутинг
2020-03-21 в 14:18, admin, рубрики: complexity, java, kotlin, router function, routerfunction, routing, spring, spring book, spring framework, web, высокая производительность, марштрутизация, производительность, сложностьВиктор Васнецов, Рыцарь на распутье; fatcatart.com
Привет! Здесь краткий пересказ интересной баги c GitHub. Для воспроизведения см. проект spring-flux-callstack.
Не так давно я заметил, что при ошибках приложения, стектрейс иногда довольно длинный. И в нем повторялось по многу раз один и тот же набор строк (сам стектрейс под катом):
at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onComplete(FluxSwitchIfEmpty.java:75)
at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onComplete(FluxSwitchIfEmpty.java:78)
at reactor.core.publisher.Operators.complete(Operators.java:135)
at reactor.core.publisher.MonoEmpty.subscribe(MonoEmpty.java:45)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.Mono.subscribe(Mono.java:4110)
Как вы уже поняли, это методы из Project Reactor, который обеспечивает асинхронную работу для Router Function в WebFlux.
Налицо неэффективность, ведь каждый такой блок кода порождает несколько объектов в куче, а таких блоков много. И создаюся они на каждый вызов.
Заставь меня думать
2019-09-04 в 10:58, admin, рубрики: usability, интерфейсы, мозг, Научно-популярное, сложность, Учебный процесс в ITДизайн сложности
До недавнего времени предметы быта формировались согласно их технологии. Дизайн телефона был по сути корпусом вокруг механизма. Задача дизайнеров состояла в том, чтобы сделать технологии красивыми.
Инженеры должны были определить интерфейсы этих объектов. Их главной заботой была функция машины, а не простота ее использования. Мы — «пользователи» — должны были понять, как эти устройства работают.
С каждым технологическим новшеством наши предметы быта становились все богаче и сложнее. Дизайнеры и инженеры просто обременяли пользователей этим увеличением сложности. Мне все еще снятся кошмары о том, как я пытался получить билет на поезд в старых торговых автоматах BART в Сан-Франциско.
Читать полностью »