Рубрика «сложность»

Советы по программированию, которые бы я дал себе 15 лет назад - 1

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

▍ Если ты (или твоя команда) постоянно стреляешь себе в ногу, то почини ружьё

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

Когда я занимался разработкой для iOS, то использовал CoreData и подписывался на изменения нескольких view. Обратный вызов подписки поступал в тот же поток, из которого было запущено изменение. Иногда это был основной поток, а иногда — фоновый. В разработке для iOS важно то, что вносить изменения в UI можно только в основном потоке, иначе приложение вылетит. Поэтому подписка могла работать нормально, но потом ломалась, когда кто-то запускал изменение из фонового потока или вы позже добавляли обновление UI.

Все без раздумий воспринимали это как что-то само собой разумеющееся, и об этом часто говорили в ревью для новичков в команде. Время от времени кто-нибудь ошибался, и мы добавляли DispatchQueue.main.async, когда видели отчёт о сбое.

Я решил это исправить. У меня ушло десять минут на внесение изменений в слое подписки, теперь подписчики вызывались в основном потоке, что позволило избавиться от целого класса сбоев и сняло с нас часть умственной нагрузки.
Читать полностью »

Что видит мой лаптоп, когда я пытаюсь установить на него Postman.

Что видит мой лаптоп, когда я пытаюсь установить на него Postman.

Читать полностью »

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

Если вам недосуг смотреть видео, под спойлером — суть проблемы. 

Восхитительная история

Достоевский дал миру Великого Инквизитора с его «зачем же ты пришел нам мешать?».
Ильф и Петров — Великого Комбинатора.
Та эпоха уже закончилась, эта — еще не началась.
Читать полностью »

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

Имитация Сложности — Антиномия Простого и Сложного - 1

Читать полностью »

Spring — эффективный роутинг - 1

Виктор Васнецов, Рыцарь на распутье; 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.

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

Читать полностью »

Дизайн сложности

image

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

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

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

Один крест (+) означал, что посыльный мог ехать к месту назначения шагом, два креста (++) означало рысь, три креста (+++) — незамедлительный галоп. Поэтому в армии галоп носил неофициальное название аллюр три креста, а позже это выражение вошло в русский язык, имея смыслом максимально быстрое выполнение поручения начальства. [Википедия]

Tar pit (англ., дословно смоляная яма) — 1) неразрешимая проблема, 2) битумное озеро (место, где подземный битум выходит на поверхность, создавая участок природного асфальта). [Англо-русский словарь] Животные, попавшие в битум, не могут выбраться обратно, поэтому такие озера являются отличным местом для раскопок доисторических скелетов [Википедия].

«Воображение представляет динозавров, мамонтов и саблезубых тигров, пытающихся высвободиться из смолы. Как бы ни был силен или ловок зверь, в конечном итоге ему уготована гибель. Такой смоляной ямой в последнее десятилетие было программирование больших систем...» [1, с.16] С этого яркого образа начинается классическая книга Фредерика Брукса, впервые увидевшая свет в далеком 1975 году. Другая классическая книга, опубликованная в столь же древнем 1987-м, начинается ничуть не лучше: «А в это время где-то гибнет проект» [2, с.23]. Идут годы, человечество вступает в новое тысячелетие, но и в 2014 году очередной бестселлер начинается все с той же вечной истории: «3 марта 2010 года Федеральное бюро расследований решило приостановить свой крупномасштабный и многообещающий план модернизации управления информацией… В бюро пытались обновить свою компьютерную систему уже более десяти лет, и, похоже, их постигла катастрофа» [3, с.14].
Читать полностью »

Игра для двоих может сказать, есть ли во Вселенной бесконечное количество сложности

Простые квантовые игры раскрывают окончательную сложность Вселенной - 1
Сколько независимых свойств есть у Вселенной? Простая игра может дать ответ на этот вопрос

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

Физикам это неизвестно, но при отсутствии определённости они делают предположения. А эти предположения различаются в зависимости от области физики. В одной области физики предполагают конечное число конфигураций. В другой – бесконечное. Пока что невозможно сказать, кто из них прав.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js