Изменение восприятия сложности
Комментарии (14)
7 мая 2017 в 12:57
0↑
↓
Говоря о сложности, надо бы отдельно рассматривать два момента:
— Сложность уникальную — когда мы делаем что-то сильно новое и большая часть наших решений уникальна.
— Сложность стандартизованную — когда мы используем сложные инструменты и технологии, но эти технологии отлажены уже многократным использованием в других проектах.Вот со стандартизованной сложностью все не так страшно. Да, используемая библиотека может быть мега-сложной внутри, но если она уже была оттестирована и отлажена на сотнях проектов, то проблем от нее обычно мало.
А с уникальной сложностью по-возможности надо бороться, либо переводя ее в стандартизованную (используя готовые блоки), либо максимально упрощая архитектуру проекта, чтобы он был четкий и понятный.7 мая 2017 в 13:06
+1↑
↓
С одно стороны всё так. С другой, стандартизованная сложность может восриниматься уникальной для человека, который только входит в предметную область. А таких большинство (и, на мой вгляд, всегда будет большинство).7 мая 2017 в 13:15
0↑
↓
Это не совсем так, правильно организованный инструмент скрывает эту сложность давая тому кто его использует простой и понятный интерфейс.
Да, кто-то должен заниматься поддержкой и на самом глубоком уровне, но:
— таких людей нужно значительно меньше, по сравнению с теми кто просто использует инструмент
— такие люди имеют более узкую специализацию, каждый в своей сфереПримеры такой стандартизованной сложности:
— JQuery для новичка будет очень сложен, если лезть в его внутренности, но в этом новичку нет необходимости, он может им пользоваться через простые методы.
— Точно также и автомобиль, например, внутри устроен очень сложно, но для того чтобы просто ездить, знать его внутренности досконально нет необходимости, достаточно освоить достаточно простые органы управления и знать ограниченя (углы поворота, тормозной путь и т.п.).
7 мая 2017 в 13:10
+1↑
↓
Как не странно, подумал совершенно наоборот. Если решение разовое — оно может быть сложным, потому что делается быстро, и вся сложность вполне умещается в голову. Как кино — снимается один раз, и вполне можно ради одного кадра нагородить огород.
А вот если решение на года/на много раз — тот тут я сложности боюсь. Из головы это вылетит, и потом будет сложно дорабатывать/поддерживать/эксплуатировать. Тут лучше иметь простое решение. Каждый раз городить огород дорого.7 мая 2017 в 13:17
0↑
↓
Смотря что понимать под «разовым». Если сделал и забыл, как фильм, то да, очень верная мысль.
А если оно уникальное и разовое, но его надо поддерживать после годами, то все не так радужно уже получается. Особенно это актуально для всякого уникального научного оборудования.
7 мая 2017 в 13:29 (комментарий был изменён)
0↑
↓
Согласен с вашим вторым абзацем. Главный инструмент борьбы со сложностью в инженерии (а особенно в IT) — абстракции. Описанная и документированная абстракция — интерфейс. Либо просто спецификация (то есть документ, а не фрагмент кода). Реализованная в коде — модуль (это может быть класс, или целове приложение, или железка). Если вся система корректно работает через эти интерфейсы, замена одного модуля на другой с тем же интерфейсом не повлияет на работопособность системы, в этом прелесть и красота хорошо спроектировнной системы. И это (правильно выделенные абстракции) — единственное, что позволяет человеческому мозгу, способному одновременно удержать в голове всего лишь около 7 понятий, создавать такие сложные инженерные произведения.
Из этой же оперы — готовые решения (код, алгоритмы, формулы, методики — это может быть любая инженерная сущность), которые можно применять, не понимая, как они работают внутри.
7 мая 2017 в 13:15 (комментарий был изменён)
0↑
↓
Какое-то странное у вас понимание борьбы со сложностью. Получается что технологии, созданные для борьбы со сложностью, вдруг начали делать решение сложнее —, а технологии, которые сложность «принимают», делают все проще… Какая-то борьба в минус получается.
Правильная борьба со сложностью — это когда решение становится проще для реализации и для понимания, а не сложнее.
7 мая 2017 в 13:21
+1↑
↓
И новый и старый подход призваны справляться со сложностью. В этом у них нет отличия. Просто они справляются с ней по-разному.«Старый» путь тотального огораживания и формализации до определённого момента выгоднее, но по мере роста количества сущностей и связей между ними, издержки на него начинают превышать выгоду.
Тут уже себя проявлет «новый» подход, экономя ресурсы за счёт гибкости.
7 мая 2017 в 13:39 (комментарий был изменён)
0↑
↓
Напротив, формализация и огораживание начинают работать после некоторого момента — когда спецификация и документация перестает помещаться в голове у разработчика. В этот момент они либо где-то записываются — либо безвозвратно теряются, и с этого момента код начинают называть ругательным словом legacy.
7 мая 2017 в 13:25
+1↑
↓
Правильная борьба со сложностью — это когда решение становится проще для реализации и для понимания, а не сложнее.
Все зависит от точки отсчета.
Смотрите, допустим есть математическая задача.
Для ее решения можно написать уникальное решение, допустим в 100 строк кода.
А можно взять математический пакет в котором 100 000 строк кода, но лично нам для решения задачи надо написать 1 строку.
Вот если оценивать общую сложность системы — решение с математическим пакетом на порядки сложней, а в практической реализации оно на порядке проще, так как решение в нем уже фактически есть, его надо просто вызывать.7 мая 2017 в 13:27
0↑
↓
Надо добавить, что чтобы написать эту одну строку, может потребовать изучить работу всего пакета.
7 мая 2017 в 13:32
+1↑
↓
Нельзя говорить, что XML — «жесткий» формат, а JSON — «гибкий». На самом деле все совсем наоборот. Возьмем для примера вот такие фрагменты:
И там, и там — сериализованный массив из трех элементов. Теперь попробуем добавить немного метаданных:
В случае XML удалось добавить метаданные, сохранив исходную структуру. Если скормить такое документ старому коду — тот может вовсе не заметить лишних метаданных! В случае JSON пришлось радикально менять схему данных, потому что мета-информация туды уже не влазила.
Именно XML является гибким форматом, который из-за своей гибкости бывает довольно сложен. А JSON — это простой жесткий формат, в котором, во-первых, нет ничего лишнего —, а во-вторых, он хорошо укладывается именно в задачи сериализации простых структур данных, за что он и получил распространение.
Переход от XML к JSON — это именно продолжение борьбы со сложностью, а не ее принятие.
7 мая 2017 в 13:57
+1↑
↓
языки с динамической типизацией
Но почему-то по мере взросления Python обзавелся type hiting,
появился TypeScript и т.п.7 мая 2017 в 14:10
0↑
↓
Конретно по Python могу сказать, что это не первая попытка добавить в него статическую типизацию и пока ни она ни предыдущие успехом не увенчались.На мой взгляд, заигрыванание со статической типизацией без чёткого плана (а его нет) — самая большая проблема Python.