Простое объяснение простоты
КДПВ с местами, которые нам придется посетить, чтобы ответить на ГЛАВНЫЙ вопрос.
Предисловие
Я часто слышал совет: будьте проще.Что значит простой? Когда мы говорим, что объект X прост, каковы наши ожидания от X? Когда мы говорим, что что-то легче другого, как мы это оцениваем? Что проще: «Небольшое предложение из пяти слов» или слово «Дезоксирибонуклеиновая кислота»? «6*5» или «481»? Или вот так: У вас есть экран настроек.
Пять из них относятся к графике, остальные пять — к уведомлениям.
Вам нужно создать отдельные пункты «графика» и «уведомления» в главном меню? Или оставить все 10 пунктов на одном экране? Что будет проще для пользователя? Можно сказать, что это субъективно.
Что это определяется неким «чувством простоты», что для одного человека что-то может быть простым, а для другого сложным.
Хорошо, тогда скажите мне, почему учитель тратит время, пытаясь объяснить что-то проще? Зачем редактировать текст, чтобы попытаться сделать его проще? Почему программисты тратят время на просмотр кода, пытаясь выяснить, какое решение легче понять и расширить? Если простота каким-то образом коррелирует с нашей оценкой, то лучшая стратегия — это убеждение.
Давайте заставим читателей поверить, что текст прост. Или коллеги считали, что наше решение несложное.
Изменит ли это качественно их взаимодействие с результатом нашей работы? Нет. Ваш текст не будет легче читать, потому что он считается простым.
Ваш код не станет легче работать, даже если все вокруг будут думать, что его сложность такая же, как у табуретки.
Если вам на собеседовании сказали, что у компании чистый код и хорошая документация, и вы этому поверили, то на удобстве работы с кодом это не повлияет. Более того, даже если весь отдел считает, что код написан хорошо и документы есть, на результат это тоже не повлияет. Их мнение о своем кодексе может быть ошибочным.
Если кодом были спагетти, то это будут спагетти.
Если «документация» — это комментарии в формате «тут я добавил 2 цифры», код документации не имеет. И никакие желания, уверенность и т. д. здесь не помогут. Это не работает по той же причине ( RU , ru ) , согласно которому вы не можете подарить 5 своим друзьям по 1 кексу, если у вас есть только 2 коробки по 2 кекса в каждой.
Даже если вы целый год будете медитировать на тему того, что 2+2=5, это не изменит печальной ситуации с кексами.
Снова.
Существует объект, и некоторые его характеристики могут заставить вас задуматься.
( RU ) что это просто.
И если завтра ваш рейтинг изменится и остановится на отметке «сложно», объекту это будет безразлично.
Мы можем прийти к выводу, что простота или сложность не зависят от наших ожиданий.
Скорее, наоборот, объект определяет, какие характеристики мы ему даем.
Я хотел понять, какой объект я ожидаю увидеть в реальности, если меня убедят ( RU ) что он простой.
И наоборот, какие характеристики реального объекта заставляют меня думать, что он прост. За что? Ну, может это облегчит мне жизнь?) Если вы читаете впервые Статистика Время чтения: ~30 минут. Количество символов: ~25 тыс.
Как читать статью Общий у меня нет полномочий ( RU ) в твоих глазах.
Я намеренно не размещаю информацию о себе.
Мне бы хотелось, чтобы вы прочитали эту статью так, как если бы ее написал студент-первокурсник.
В некотором смысле это правда.
Если вы нашли неясный или спорный момент, напишите об этом.
Это поможет улучшить эту статью.
И ни при каких обстоятельствах не верьте мне.
Я не хочу, чтобы мои слова убедили вас в моей правоте.
Я хочу, чтобы их значение убедило вас в своей истинности.
О конвенциях
- Оглавление.
С него будет начинаться каждая глава.
В нем кратко перечислены темы, затронутые в главе, и даны навигационные ссылки на соответствующие подразделы.
- Ссылки на внешние ресурсы.
Они представлены как *слово или фраза* (ссылки из код языка ) или обычный ссылки .
Я постарался сделать так, чтобы у вас был выбор, читать русский или английский источник.
К сожалению, мне не всегда удавалось найти и то, и другое.
Особенно это будет заметно во второй главе.
Рунет беден актуальной информацией по нейробиологии.
- Спойлер «Коротко».
Он расположен сразу после названия подраздела главы.
Его цель — облегчить работу со статьей, если вы ее уже прочитали.
Вы можете использовать его для быстрого ознакомления со статьей.
Но будь осторожен! Во-первых, вы можете не понять, что там написано, не читая сам подраздел.
Это краткий тезис, а не путь ( RU , RU ) перед ним.
Во-вторых, что еще опаснее, вам может показаться, что вы все понимаете.
Что такое ложное понимание и почему оно возникает, будет объяснено в следующих главах.
- Спойлер «ВРЕМЯ МАТЕМАТИКИ».
Используется, чтобы не запугивать вас математическими расчетами.
Он дублирует информацию, которая ранее была представлена в тексте, но в более формальной форме.
- Теоретически просто – данная глава посвящена постановке вопроса и основным определениям, связанным с ним.
Вы здесь.
- Machine Ex Homo — это глава, в которой мы рассматриваем наше сознание, от самого высокого поведенческого уровня до нейронных связей в нашем мозгу.
Глава написана и редактируется.
- Just Reading предназначен для людей, читающих любые модели, будь то диаграммы, код, графики, текст. Это будет первая практическая глава в нашей серии, где мы применим наши знания и посмотрим, как следует структурировать информацию, чтобы ее было легче понять.
Глава в разработке.
Но я хочу начать с них.
О том, почему я вообще работаю над этим вопросом, будет отдельная статья.
Скажем так о мотивации автора и о том, как он видит этот сериал.
Эта статья будет написана после первых трех глав.
Почему появилась эта статья? Я много раз встречал такие фразы: «Пиши текст проще» или «Сделай решение проще».
Иногда в качестве аргумента в споре я слышал слово «просто»: «Я сделал так, потому что так проще!» Очень часто оппоненты пытались доказать, что «им так проще» и приводили для этого какие-то странные аргументы.
Но когда я спросил людей, что, по их мнению, означает «просто», я услышал: «Это субъективно».
Или: «Это здравый смысл».
Или «Ну, у каждого человека это индивидуально».
Меня смутило то, что вполне умные люди долго спорят о том, что не могут точно определить и считают субъективным.
Ведь если это вопрос вкуса, например музыкальных предпочтений, то зачем на это тратить время? Повторюсь, это были умные люди, и они не тратили время на холивары о музыкальных предпочтениях друг друга.
Я много думал об этом, и через год ко мне пришла простая мысль: а что, если простота — это характеристика объекта, который еще можно измерить? Это могло бы разрешить все споры и сэкономить огромное количество времени.
И заверните.
Почему ваше простое объяснение занимает 3 главы? Нельзя ли было короче? Потому что реальность сложна.
А сложность этой статьи напрямую зависит от сложности той части реальности, которую она описывает. Эта серия – результат тысяч часов работы по поиску и объединению информации.
А еще сотни тысяч часов, потраченные людьми, чьи труды я для этого использовал.
На прочтение всей серии у вас уйдет пара часов.
Десяток, если честно, по всем ссылкам пройдешь.
Я в сотни раз сократил количество времени и усилий, которые вы потратите, чтобы получить ответ на наш вопрос.
И сэкономил вам время, необходимое, чтобы задать правильный вопрос.
Я не уверен, что это лучшее объяснение.
Моя работа еще не закончена.
Возможно, в процессе я пойму, как его улучшить.
На данный момент это самое простое объяснение, которое у меня есть.
Глава 1. Теоретически просто
В этой главе мы рассмотрим следующие темы:- Как правильно задавать вопросы и почему это важно? ( Последовательность вопросов )
- Как связаны предметы, действия и их исполнители? ( Легко использовать , Объективный субъективизм )
- Как определить сложность действия? ( Легко использовать , Наверное, просто )
- Что такое системы и их модели и почему это удобный способ описания объектов? ( Систематизация моделирования )
Статья о простоте выглядела бы странно без упоминания этого принципа.
1.1 Последовательность вопросов
Кратко Вопросы, не ограничивающие возможные ответы, бесполезны.Характеристика «простой» может иметь два значения: 1) элементарный 2) Просто для некоторых действий Нас интересует второй.
Наш следующий вопрос: как оценить сложность действия и как связать ее с объектом? Наше исследование начинается с вопроса.
Задавать правильный вопрос очень важно.
Небольшое отступление: — Хорошо, Дип Сот, какое ГЛАВНОЕ УСЛОВИЕ ПРОСТОТЫ? - Надо подумать.
… … N миллионов лет спустя.
—
//На основе одного замечательная книга
У нас есть ответ, но он нам ничего не дает. Вся информация о нем содержится в вопросе, а вопрос был не очень конкретный.
Мы не можем это доказать
- это действительно главное условие и мы не можем доказать обратное.
Вопрос должен ограничивать диапазон возможных ответов.
«Что простогоЭ» - не очень конкретный вопрос.
Давайте проясним это.
В начале статьи мы уже рассмотрели часть этого пути: Когда мы говорим, что объект X прост, чего мы от него ожидаем? По моим наблюдениям, есть два основных случая:
- X — это объект, который нельзя разбить на составные части.
Здесь слово «простой» можно заменить словом «элементарный».
Это кирпич.И в каком-то смысле он прост.
- X легко выполнить с его помощью нужное нам действие.
Например, диван бывает простым, если мы хотим на нем лежать, и сложным, если нам нужно поднять его на девятый этаж.
Но что, если нас интересует сложность в контексте действия? Давайте подумаем об этом.
Совершаем действия с объектом.
В этом предложении есть три основные сущности:
- Действия — это описание происходящего.
- Исполнители действий скрываются под словом мы.
- Объекты — это то, над чем выполняется действие.
- Как оценить простоту действия в зависимости от предмета, с которым оно совершается?
- Какая связь между действием и его исполнителем?
1.2 Простота использования
Кратко Мы действуем по аналогии с алгоритмической сложностью.Сложность нашего действия — это сумма сложностей заложенных в него действий.
Последовательность действий называется алгоритмом.
Действие имеет результат – это изменение состояния системы, в которой было выполнено действие.
Действия и объекты могут быть связаны друг с другом с помощью концепции интерфейса.
Интерфейс — это объект, хранящий информацию о том, какие действия возможны с реализующим его объектом.
В отличие от алгоритмической сложности, мы не можем просто найти элементарные операции, и нам придется учитывать исполнителя наших действий.
Следующий наш вопрос: каково влияние исполнителя на действия? Давайте посмотрим на действия.
Простота действия — это нечто, обратно пропорциональное его сложности.
Чем сложнее действие, тем оно менее простое – это очевидно.
Мы подходим к следующему вопросу:
Как определить сложность действия?
Что мы можем сделать с помощью действия? Мы можем разбить его на последовательность других! Действие «прочитать статью» можно разделить на: «прочитать первый абзац», «прочитать второй» и т. д. Их, в свою очередь, можно разбить на «прочитать первое предложение», «прочитать второе»..
Подобным путем мы дойдем до действий, разница в сложности которых будет для нас не важна и не будет зависеть от предмета, с которым оно выполняется (например, чтение письма).
Назовем такие действия элементарными.
Тогда сложность действия для конкретного объекта можно измерить в элементарных действиях, на которые оно делится.
Действия эквивалентны, когда они разделены на идентичные последовательности действий.
Что еще характеризует действие?
Алгоритм
Описание последовательности действий, представляющей собой другое действие, я буду называть ее алгоритмом.Алгоритм можно описать в общих чертах, например: Чтение: читайте предложения до тех пор, пока не закончится текст. В такой форме чтение применимо ко многим текстам.
Однако, как вы понимаете, количество действий «прочитать предложения» будет зависеть от количества предложений в тексте.
Результат
Действия совершаются не просто так, они к чему-то приводят. Так пусть же наши действия принесут результаты! Результатом является изменение состояния системы, в которой произошло действие.Вы нажали выключатель, и результатом этого действия является его переход во включенное состояние и зажигание света на кухне.
Вы читаете слово, и в результате меняется состояние вашего мозга.
Разные действия могут привести к одному и тому же результату.
Связь с объектами
Вернемся к объектам.Как мы уже говорили, с ними можно совершать разные действия.
Нам нужен способ понять, для каких действий «предназначена» та или иная сущность.
Я начну с примера.
- Как мне нести этот чемодан? - У него есть ручка сбоку! Ручка представляет собой полоску кожи снаружи чемодана, прибитую заклепками.
Но в данном случае нас это не волнует. Что нас волнует, так это то, чтобы на чемодане был предмет, за который можно держаться.
Мы будем называть все такие объекты дескрипторами.
Они могут находиться возле чашки, двери, чемодана или ведра.
В итоге у нас получилось два описания дескрипторов из примера:
- Как полоски кожи, приклепанные к чемодану.
- Как концепция предмета, которым вы можете заняться.
( RU ) .
Второе — описание интерфейса.
Интерфейс — это объект, хранящий информацию о том, как можно взаимодействовать с объектом, который его реализует. Для чего они нужны? Все просто: чаще всего нас не интересует, как реализован объект. Когда мы хотим включить свет, мы ищем переключатель, и для нас не имеет значения, как он работает, нам важно лишь то, что мы можем переключать его состояние «включено/выключено».
Когда мы видим кнопку, мы уже знаем, что на нее можно нажать.
Когда нам говорят, что где-то есть ручка, мы уже знаем, что можем за нее ухватиться.
И это очень удобно.
Полученные результаты
Действие — это последовательность других действий, определяющих его алгоритм.Результатом действия является какое-то изменение в системе.
Сложность действия равна числу элементарных действий его алгоритма для конкретного объекта.
Отношения между объектами и действиями определяются интерфейсом объекта.
Он хранит информацию о том, какие действия можно выполнять над объектом.
Наш следующий вопрос:
Какая связь между действием и его исполнителем?
1.3 Объективный субъективизм
Кратко Чтобы правильно оценить сложность объекта в ситуации с разными исполнителями действий, мы можем задать свои действия для каждого конкретного исполнителя или группы исполнителей.Наш следующий вопрос: как теперь вычислить сложность? Вы можете резонно отметить: «Но если выполнить одни и те же действия, результаты могут быть разными! Если профессор физики сможет бегло прочитать статью по теории струн и все понять, то я ничего не добьюсь, используя тот же подход. И чтобы получить аналогичный результат, мне придется искать определения через слово, читать другие статьи и проводить еще много действий».
Это хорошая точка.
У меня есть на это ответ. Как и любая проблема, наша имеет начальные условия.
Изменяя их, вы меняете саму задачу.
А это приводит к тому, что для его выполнения требуются разные действия.
Вы читаете статью.
Допустим, прочитав пару страниц, вы отложили это.
Теперь, чтобы статью прочитали, нужно совершить меньше действий.
Но изменило ли это сложность самой статьи? Нет. Действия, которые вы предпримете с ней, изменились.
Было: «прочитай статью», стало: «пролистать статью до того места, где я закончил, и прочитать до конца».
Как же нам тогда приступить к действиям? Мы зафиксируем желаемый результат. Как мы помним, достичь его можно разными способами.
Далее можно разделить исполнителей на примерно равные группы.
Таких групп ограниченное количество, если только у нас нет бесконечного числа исполнителей.
Теперь для каждой группы опишем действия, которые приведут ее к желаемому результату.
Мы получили некоторый набор действий для каждой из групп исполнителей.
Но что теперь делать со сложностью?
1.4 Наверное просто
Кратко В ситуации с несколькими исполнителями мы можем вычислить математическое ожидание сложности объекта.Для этого необходимо оценить вероятности действий, совершаемых разными исполнителями.
Следующий вопрос: как описать объекты, с которыми мы работаем? У нас есть набор действий.
Каждый из них принадлежит к определенной группе исполнителей.
Мы умеем рассчитывать сложность каждого из этих действий для каждого конкретного объекта.
Что, если мы попробуем установить вероятность попадания художника в одну из групп? Проблема превращается в классическую теоретическую задачу.
У нас есть значения сложности действий.
У нас есть вероятности того, что каждое действие будет выполнено случайным человеком.
Мы можем найти «среднее» значение нашей сложности.
Это так называемое математическое ожидание ( ru ) .
Для этого нам нужно каждую сложность действия с объектом умножить на вероятность его завершения.
Откуда взять эти вероятности и как разделить исполнителей на группы, если еще не известно, кто именно будет совершать действия с объектом? Хороший вопрос! Его рассмотрение выходит за рамки нашей статьи, но приведу один интересный, на мой взгляд, пример.
Вы автор.
И ваша задача — написать статью для сайта, имеющего тематические разделы.
Когда вы разместите статью, она появится в общей ленте и ленте «вашего» раздела.
У разделов есть подписчики; они составляют определенный процент аудитории сайта.
Общий канал показывается всем.
Будем считать, что те, кто подписан на раздел, понимают его тему, а те, кто не подписан, - нет. Пусть наша статья будет по физике.
Мы проанализировали аудиторию и знаем, что на раздел «физика» подписано 3% аудитории сайта.
Мы узнали, что вероятность того, что подписчик этого раздела получит доступ к статье из него, составляет 80%.
Также мы узнали, что вероятность посещения статьи из общей ленты составляет 5%.
Кто наш потенциальный читатель и стоит ли «оптимизировать» статью для человека, не подписанного на раздел «физика»? Другими словами, какова вероятность того, что нашу статью прочтет человек, разбирающийся в физике? Итак, внимание, эта вероятность.
Примерно 33%.
Чуть более двух третей наших потенциальных читателей не разбираются в физике, и нам следует это учитывать.
Как это произошло? Вкратце: высокая вероятность посещения статьи человеком, разбирающимся в физике, компенсируется их небольшим количеством.
Небольшая вероятность посещения статьи из общей ленты начинает играть немалую роль в нашей оценке.
Хотите узнать об этом больше? Вот ссылка на хорошую статью о теореме Байеса ( ru , ru ) .
Если вы хотите проверить: ВРЕМЯ МАТЕМАТИКИ: На раздел физики подписано 3% аудитории, из них 80% посетят нашу статью.
Следовательно, вероятность посещения статьи физиком равна 0,03*0,8 = 0,024 = 2,4%.
Вероятность того, что человек посетит статью = вероятность посещения из общей ленты плюс вероятность посещения статьи из раздела.
В общей ленте также присутствуют наши «оставшиеся» физики, не зашедшие на статью в раздел.
Тогда получим, что вероятность посещения физиком статьи из общей ленты = 0,05*0,03*0,2 = 0,0003, или 0,03%.
Всего из общей ленты было 5% посетителей, а значит 4,97% из них были нефизиками.
Теперь находим соотношение физиков к общему количеству посетителей.
Для этого разделим всех физиков (2,4%+0,03%) на общее количество посетителей.
(2.4+0.03)/(2.4+4.97+0.03) = 0.328. Ответ: ~33% Мы говорили о действиях и о тех, кто их совершает. Пора перейти к последнему вопросу.
Мы часто использовали слово объект, но оно не дает нам никакой информации о нем.
Нам нужно какое-то описание, достаточно абстрактное, чтобы мы могли применять его ко многим сущностям, и достаточно информативное, чтобы с ним можно было работать.
Как описать объекты, с которыми мы работаем?
1.5 Систематизация моделирования
Кратко Введем понятие системы и модели системы.Система – это совокупность компонентов, которые могут представлять собой заранее определенные элементы и построенные с их помощью подсистемы.
Модель — это представление системы, основанное на другом наборе элементов (терминов модели).
Я решил попробовать в общих чертах описать тексты, таблицы, схемы.
и т. д. Но как это сделать? Давайте сделаем шаг назад и посмотрим, как они «создаются», возможно, это нам поможет. Пишем текст. У нас есть идея, мы формулируем ее словами и записываем.
Причем идея может быть не только в форме других слов.
Мы можем описать картинку, музыку, математические объекты.
Я пишу код. У меня есть требования, которые я «перевожу» в код. Они могут быть выражены устно или в виде изображения, например эскиза интерфейса.
Рисуем схему.
У нас есть несколько объектов, отношения между которыми мы описываем с помощью этой диаграммы.
Эти процессы имеют нечто общее.
У нас есть какая-то система.
Мы переводим это в другую систему, в которой не обязательно используются те же «термины».
Мне кажется, для описания этого процесса подходит слово «Моделирование».
Итак, модель – это система, описывающая другую систему с помощью заданных обозначений (терминов).
Это определение вызывает резонный вопрос:
Что такое система?
Система представляет собой совокупность некоторых компонентов.Оно задается набором их возможных состояний и их текущим состоянием.
Я часто буду называть компоненты системы объектами.
Это могут быть элементы (нечто определенное заранее) и другие системы, состоящие из этих элементов.
Есть еще такая вещь, как связи — они появляются, когда мы хотим ограничить или определить возможные состояния одного объекта в зависимости от других.
Пример: Существует система 2-х монет. Один из них находится в состоянии «орёл», другой — в состоянии «решка».
«Орел» и «решка» — элементы нашей системы.
Монета — это подсистема, состоящая из элементов «орла» и «решки» и способная находиться в одном из этих состояний.
Для первой монеты:
Предположим, что мы не можем подбрасывать монеты и таким образом вносить изменения в систему.
В этом случае нашу систему можно описать так:
Если мы можем подбрасывать монеты, то наша система описывается так:
Между некоторыми системами существуют зависимости.
Предположим, состояние второй монеты не может быть равно состоянию первой.
Тогда множество возможных состояний монеты 2 с учетом нашего ограничения — это все предыдущие возможные состояния, кроме того, в котором находится монета 1.
В этом случае можно сказать, что состояние монеты 2 определяет состояние монеты 1.
Теперь посмотрим, что произойдет, если мы изменим набор возможных состояний монет, добавив к нему «ребро».
Мы можем составить все пары для состояний монет 1 и 2.
В данном случае речь идет об ограничении возможных состояний монеты 2.
ОБНОВЛЯТЬ:
Я создал реализацию примера монеты на Java. Здесь репозиторий .Кроме того, показано, как рассчитать трудности, если принять подбрасывание монеты за элементарное действие.
ВРЕМЯ МАТЕМАТИКИ:
- система.
- состояние системы.
- множество возможных состояний.
- Текущее состояние.
Статический случай:
Если
- элемент, то он остается как есть, потому что по определению не ломается.
Динамический случай:
.
О связях.
Функция состояния некоторой системы от других систем может быть однозначной, и тогда мы говорим, что состояние определяется Теги: #математика #Алгоритмы #программирование #Анализ и проектирование систем #проектирование и рефакторинг #нейронаука #философия #сложность #комплексность #простота #бритва Оккама #алгоритмическая сложность
-
Четвертое – Информационные Бюллетени
19 Oct, 24 -
Звуки Венеры
19 Oct, 24 -
Рабочий День С Htc Desire Hd
19 Oct, 24 -
Расширение Хабрахабра Для Google Chrome
19 Oct, 24 -
Голосование За Посты В Песочнице
19 Oct, 24 -
Вежливость – Это Унижение
19 Oct, 24