Здравствуйте, 0x7be, Вы писали:
0>Тут недавно в одном эпик треде было сделано утверждение, что люди, дескать думают объектами. После этого там было очень много умозрительных аргументов за и против этой точки зрения (я, кстати, против). Под впечатление от этой дискуссии я призадумался: а правда, какие парадигмы можно применять как модель мышления человека. Результат я привожу ниже.
Применение ООП к построению ментальных моделей физического мира имеет более двух тысяч лет истории успешного использования, которое берет начало в трудах Аристотеля. В мире Аристотеля существуют только единичные и конкретно определенные вещи с заданным набором свойств и отнесенные к одной и только одной категории.
Мир Витгенштейна (Л.Витгенштейн, "Философские исследования", Кембридж, 1945) не является миром вещей, как у Аристотеля. Если для Аристотеля сущность языка — существительное, то по Витгенштейну — сущность языка предложение. Язык, согласно Витгенштейну, представляет собой не набор имен или свойств, а состоит из предложений, в которых выражается взаимодействие предметов. В мире Витгенштейна первичны факты — взаимодействия между предметами, а вещи определяются совокупностью их возможных взаимодействий. Такой взгляд на мир очень хорошо соответствует современной теории категорий, в которой морфизмы – задают взаимодействия объектов, а функторы – определяют эволюцию модели во времени.
В отличие от статичного мира Аристотеля мир Витгенштейна динамичен. В ходе эволюции мира факты могут добавляться и представление о вещах будет меняться. Благодаря такой трактовке мира вещь выступает не как нечто данное, застывшее, вполне определенное, а как некоторая сущность с нечеткими, изменчивыми границами. Программные системы динамически эволюционируют подобно миру Витгенштейна. В ходе сопровождения разработчики добавляют объектам новые возможные взаимодействия, которые расширяют наборы их свойств и связей.
Витгенштейн ввел понятие «языковая игра» — единое целое: язык и действия, с которыми он переплетен. «Сколько же существует типов предложения? Скажем, утверждение, вопрос, повеление? Имеется бесчисленное множество таких типов и бесконечно разнообразны виды употребления всего того, что мы называем "знаками", "словами", "предложениями". И эта множественность не представляет собой чего-то устойчивого, раз и навсегда данного…». Разве мы не играем в подобную языковую игру, когда описываем модель предметной области при помощи пользовательских историй?
Мне представляется, что в будущем среды программирования будут в основном похожи на CAD системы с встроенным DSL. Программные системы должны создавать специалисты прикладной области, например, инженер будет собирать программную модель для исследования летных качеств нового самолета из готовой элементной базы: фюзеляжа, крыльев, двигателей, соединительных креплений и моделей их взаимодействия с набегающим потоком. Аналогично, будут собираться из готовых компонентов и бизнес-приложения: бухгалтерия, логистика, склад, производство и др.
Означает ли это, что для каждой предметной области мы должны создавать свой уникальный DSL? И да, и нет. Да, в том смысле, что практически во всех установившихся областях профессиональной деятельности людей, например, математик, медицина, биология, существует свой специфический язык, поэтому в каждой предметной области нам придется создавать свой DSL для описания конкретных моделей решения специфических задач. Нет, потому что профессиональные языки строятся на основе единого синтаксиса естественного языка и должен существовать универсальный синтаксис для описания ментальных моделей, основанный на общих законах человеческого мышления.
Попытки создания универсального синтаксиса DSL предпринимались не раз. Перечислю лишь наиболее заметные из них: Charles Simonyi, “Intentional Programming”, From Wikipedia, the free encyclopedia, (http://en.wikipedia.org/wiki/Intentional_programming); Krzysztof Czarnecki, Ulrich Eisenecker , “Generativ Programming: Methods, Tools, and Applications”, Addison Wessley, Inc., 2000; Sergey Dmitriev, “Language Oriented Programming: The Next Programming Paradigm”, 2004, (http://www.jetbrains.com/mps/docs/Language_Oriented_Programming.pdf). Мне неизвестны примеры, серьезного практического применения предложенных подходов. Может быть, это происходит потому, что в этих подходах пытаются моделировать статический мир объектов Аристотеля? Вполне возможно, что основой для универсального синтаксиса DSL может стать динамический мир взаимодействий Витгенштейна и категорный подход, отражающие фундаментальные особенности нашего мышления.
На что это может быть похоже? Возможно, будущий DSL будет похож на Mixin-технологию или Anemic Domain Model (кстати, эту модель Мартин Фаулер назвал антипаттерном, Martin Fowler AnemicDomainModel, 2003, (http://martinfowler.com/bliki/AnemicDomainModel.html)), или на «словесное программирование» Д. Кнута ([Donald E. Knuth, Literate Programming, 1984 (http://www.literateprogramming.com/knuthweb.pdf)), где повествовательное описание взаимодействий будут интерпретироваться в виде алгоритмов и структур данных.
Вполне возможно, что основой для универсального синтаксиса DSL может стать динамический мир взаимодействий Витгенштейна и категорный подход, отражающие фундаментальные особенности человеческого мышления.
Тут недавно в одном эпик треде было сделано утверждение, что люди, дескать думают объектами. После этого там было очень много умозрительных аргументов за и против этой точки зрения (я, кстати, против). Под впечатление от этой дискуссии я призадумался: а правда, какие парадигмы можно применять как модель мышления человека. Результат я привожу ниже. Сразу хочу сказать, что это не проработанная концепция, а некий поток сырых идей. В свою защиту хочу сказать, что уровень научного обоснования моих измышлений такой же, как и у того утверждения, которое вызвало флейм
1. Когда человек совершает знакомое действие (например, чай заваривает), то он автоматически совершает некую привычную ему последовательность действий, сиречь процедуру. Люди очень хорошо понимают, что такое состояние и как оно меняется. При этом процедуры обладают определенной степенью гибкости, действие "включить чайник" мы можем выполнить для более одного типа чайников, не меняя из-за этого общей структуры процедуры. Т.е. можно говорить о процедурном подходе с полиморфизмом. Однако есть один важный нюанс: процедуры со всем их полиморфизмом являются принадлежностью не тех объектов, которыми манипулирует человек, а его собственной принадлежностью.
2. Когда человек пытается сделать что-то нетривиальное (для чего у него нет привычной автоматической программы), он демонстрирует т.н. "поисковое поведение". Обычно в ходе этого он на основании предыдущего опыта мысленно моделирует разные варианты решения, пытаясь найти подходящий. Когда находит, то пытается его воплотить, упирается в непредвиденную проблему, опять начинает думать, что-то переделывает и так далее. Можно сказать, что пока человек просто думает, он "вычисляет" без побочных эффектов, а когда делает — меняет состояние. Мысленный поиск решения очень напоминает поиск в дереве решений a la Prolog, причем в его "чистом" логическом подмножестве. Практические эксперименты напоминают прологовский поиск с отсечениями (!/0), возникающими там, где человек совершает необратимые изменения в окружающей среде (вызывает предикаты с побочными эффектами).
3. Человек наделяет свойствами не только явно выделимые физические предметы (стол, стул, чайник), но и организацию предметов, возникающую ситуативно. Например, опытный водитель видит на дороге не просто много машин, он видит такие вещи как "угроза", "возможность для удачного маневра" и т.п. Причем эти классификации в высшей степени динамичны — ещё секунду назад тут была удачная возможность, а сейчас уже вылез какой-то му... чудак и внезапно водитель видит угрозу. Это напоминает разного рода алгоритмы классификации на базе кластеризации, пространственного паттерн-матчинга, функций-предикатов, абстрактных грамматик и т.п.
4. В зависимости от контекста человек выделяет разные свойства объектов как ключевые для себя. Сковородка может быть посудой, оружием или просто куском металла. Примечательно, что эти варианты интерпретации объекта не являются его собственными свойствами, а принадлежат воспринимающему предметы человеку (так же как и полиморфные процедуры!). Наиболее это близко моделирует утиная типизация с коцептами, причем концептами, определенными на стороне потребителя типов, а не на стороне их самих.
Я думаю, что список можно продолжить. По сути, человек воплощает в себе множество различных вычислительных моделей.
При этом я думаю, что их можно приобретать путем обучения.
Здравствуйте, DarkGray, Вы писали:
DG>люди думают понятийными образами — это что-то среднее между объектами и ADT
Я сомневаюсь, что мы сейчас имеем достаточно хорошую модель, которая бы могла точно и полно описать этот процесс.
> 1. Когда человек совершает знакомое действие (например, чай заваривает), то он автоматически совершает некую привычную ему последовательность действий, сиречь процедуру. Люди очень хорошо понимают, что такое состояние и как оно меняется.
Если формулировать "состояние" как состояние какого-то объекта, то данное утверждение неверно, поскольку в понимании состояние это отдельный образ, связанный с объектом ассоциативными связями, которые к тому же могут быть разной силы. То есть связь объект-состояние не является генеральной связью, неотъемлемой частью, объект и состояние не составляют из себя какую-то группу, зачастую понимаются независимо. Мы можем думать о состоянии, не думая в этот момент об объекте (не имея его в качестве контекста и вообще в отрыве от контекста). Объект не обязан иметь одно из определенных состояний.
Понятие "состояние объекта" складывается динамически. Это чайник. Чайник включен. Включен чайник. Включил ли ты чайник — да (не важно какой).
Чайник включен = я его уже включил ранее | лампочка горит | чайник шумит | чайник на базе + воду налил. И в этот момент чайника как объекта в мыслях уже может не существовать "да не помню какой конкретный чайник я включал, я в гостях, главное — включил".
Но мы можем динамически восстановить понятие или образ чайника, если захотим. Опять же не генерально через одно место, а произвольным способом, через любую попавшуюся ассоциативную связь. "Это тот чайник, который я купил" или "А это вот тот зеленый чайник, он тут был всегда" или "первый попавшийся мне на кухне чайник, стоял на столе". И в этот момент, когда я подумал о чайнике, его состояния уже нет.
Исторически очень сильна связь понятия физического объекта с его расположением. Но систематизируя понимание, не стоит физическое расположение представлять как состояние. В данном случае просто ассоциативные связи очень сильны. Трудно представить себе конкретный чайник в вакууме, точнее чайник "нигде", для нас конкретный чайник всегда "где-то", но чуть усилия и уже можем. Вот я думаю об этом чайнике так, как будто он "нигде".
> При этом процедуры обладают определенной степенью гибкости, действие "включить чайник" мы можем выполнить для более одного типа чайников, не меняя из-за этого общей структуры процедуры. Т.е. можно говорить о процедурном подходе с полиморфизмом. Однако есть один важный нюанс: процедуры со всем их полиморфизмом являются принадлежностью не тех объектов, которыми манипулирует человек, а его собственной принадлежностью.
Тут согласен. Какой-то аналог наследования с полиморфизмом в понятиях есть. Для группы объектов всегда можно выделить ряд общих понятий. Структура только не иерархическая, а сетевая.
> 2. Когда человек пытается сделать что-то нетривиальное (для чего у него нет привычной автоматической программы), он демонстрирует т.н. "поисковое поведение". Обычно в ходе этого он на основании предыдущего опыта мысленно моделирует разные варианты решения, пытаясь найти подходящий. Когда находит, то пытается его воплотить, упирается в непредвиденную проблему, опять начинает думать, что-то переделывает и так далее. Можно сказать, что пока человек просто думает, он "вычисляет" без побочных эффектов, а когда делает — меняет состояние. Мысленный поиск решения очень напоминает поиск в дереве решений a la Prolog, причем в его "чистом" логическом подмножестве. Практические эксперименты напоминают прологовский поиск с отсечениями (!/0), возникающими там, где человек совершает необратимые изменения в окружающей среде (вызывает предикаты с побочными эффектами).
Тут частично согласен. Думает человек в функциональном стиле, не сохраняя состояние, перебирая варианты и тестируя их. Сохранение состояния это отдельное действие — принять решение, сделать выбор.
> 3. Человек наделяет свойствами не только явно выделимые физические предметы (стол, стул, чайник), но и организацию предметов, возникающую ситуативно. Например, опытный водитель видит на дороге не просто много машин, он видит такие вещи как "угроза", "возможность для удачного маневра" и т.п. Причем эти классификации в высшей степени динамичны — ещё секунду назад тут была удачная возможность, а сейчас уже вылез какой-то му... чудак и внезапно водитель видит угрозу. Это напоминает разного рода алгоритмы классификации на базе кластеризации, пространственного паттерн-матчинга, функций-предикатов, абстрактных грамматик и т.п.
"Угроза", это не состояние объекта. Это запомненный ранее или динамически сформированный сет — угроза — кирпич-падает-он-попадет-на-человека!.
> 4. В зависимости от контекста человек выделяет разные свойства объектов как ключевые для себя. Сковородка может быть посудой, оружием или просто куском металла. Примечательно, что эти варианты интерпретации объекта не являются его собственными свойствами, а принадлежат воспринимающему предметы человеку (так же как и полиморфные процедуры!). Наиболее это близко моделирует утиная типизация с коцептами, причем концептами, определенными на стороне потребителя типов, а не на стороне их самих. > > Я думаю, что список можно продолжить. По сути, человек воплощает в себе множество различных вычислительных моделей. > При этом я думаю, что их можно приобретать путем обучения.
Здравствуйте, craft-brother, Вы писали:
CB>Мир Витгенштейна (Л.Витгенштейн, "Философские исследования", Кембридж, 1945) не является миром вещей, как у Аристотеля. Если для Аристотеля сущность языка — существительное, то по Витгенштейну — сущность языка предложение. Язык, согласно Витгенштейну, представляет собой не набор имен или свойств, а состоит из предложений, в которых выражается взаимодействие предметов. В мире Витгенштейна первичны факты — взаимодействия между предметами, а вещи определяются совокупностью их возможных взаимодействий. Такой взгляд на мир очень хорошо соответствует современной теории категорий, в которой морфизмы – задают взаимодействия объектов, а функторы – определяют эволюцию модели во времени.
Спасибо. Не со всем согласен, но как ответ на вопрос вполне годится..
Здравствуйте, craft-brother, Вы писали:
CB>Вполне возможно, что основой для универсального синтаксиса DSL может стать динамический мир взаимодействий Витгенштейна и категорный подход, отражающие фундаментальные особенности человеческого мышления. CB>
DSL подобно ДНК должен описывать:
1)сценарии сборки модели из готовых компонентов;
2)инициализацию начального состояния;
3)законы эволюции модели во времени.
Главным строительным блоком языка должно стать взаимодействие, в котором проявляются свойства объектов, изменяются их состояния и рождаются новые экземпляры. Каждый объект в ходе эволюции может быть дополнен новым набором потенциальных взаимодействий и это дополнение не должно затрагивать ранее созданный код.
V>А где проходит разница с м/у объектами и АлгТД? По разрезу наличия/отсутствия поведения?
Объект имеет ярко-выраженную экземплярность.
Например, черный чайник, находящийся на кухне по адресу Москва, ул. Ленина, 37 — 143 является ярко-выраженным экземпляром: почти все операции над таким чайником меняют сам экземпляр. Например, операция "налей воды" в данном случае меняет непосредственно экземпляр чайника.
в противовес этому — как только мы, например, говорим — давайте поставим мысленный эксперимент над "черным чайником, находящимся на кухне по адресу Москва, ул. Ленина, 37 — 143" — экземплярность пропадает, и появляется АлгТД. И операции, уже создают новые образы не затрагивая имеющиеся экземпляры: операция "давайте нальем воды в черный чайник" — создает образ "черного чайника с водой" при этом мы можем легко вернуться обратно к образу "черного чайника до того, как в него налили воду" и т.д.
Соответственно,
— когда мы при мышлении воссоздаем образ реальности, то нам проще работать с объектами (когда экземпляры четко фиксированы): сейчас возьму чайник, налью в него воду, и поставлю греться;
— а при мышлении в рамках задач анализа, мысленных экспериментов, формирование прогнозов и оценок удобнее работать с АлгТД — четкая экземплярность отсутствует, экземпляры создаются при необходимости и также быстро выкидываются.
Здравствуйте, alpha21264, Вы писали:
A>При твоих интересах тебе понравится книга "Как мы видим то, что видим". A>Она не про то, как человек думает, но "в этом направлении".
Спасибо за наводку, книга кажется интересной.
A>Интересно было бы посмотреть на тебя в реале. A>Ты не из Москвы?
А чего на меня смотреть? Внешность моя весьма заурядна
Если хочешь поговорить о чем-то конкретном, то можно и через интернет.
Здравствуйте, 0x7be, Вы писали:
0>А чего на меня смотреть? Внешность моя весьма заурядна 0>Если хочешь поговорить о чем-то конкретном, то можно и через интернет.
Внешность меня мало интересует.
Меня интересуют общефилософские вопросы на тему как человек думает.
Начнем с книжек на эту тему, которые показались тебе интересными.
Назови две-три.
Здравствуйте, alpha21264, Вы писали:
A>Меня интересуют общефилософские вопросы на тему как человек думает.
Эх, если б я это знал
A>Начнем с книжек на эту тему, которые показались тебе интересными. A>Назови две-три.
Джефф Хокинс "Об интеллекте".
Джон Гриндер, Ричард Бендлер "Структура магии".
Ноберт Дилтс "Моделирование c помощью НЛП", "Изменение убеждений с помощью НЛП".
Какую-то книгу об эриксоновском гипнозе (очень давно).
Ну и просто много разрозненных статей о психологии, физиологии мозга, искусственном интеллекте, теории эволюции, этологии и т.п.
По сумме текста, я думаю, это получится больше, чем книги
Здравствуйте, grosborn, Вы писали:
G>Но мы можем динамически восстановить понятие или образ чайника, если захотим. Опять же не генерально через одно место, а произвольным способом, через любую попавшуюся ассоциативную связь. "Это тот чайник, который я купил" или "А это вот тот зеленый чайник, он тут был всегда" или "первый попавшийся мне на кухне чайник, стоял на столе". И в этот момент, когда я подумал о чайнике, его состояния уже нет. G>Исторически очень сильна связь понятия физического объекта с его расположением. Но систематизируя понимание, не стоит физическое расположение представлять как состояние. В данном случае просто ассоциативные связи очень сильны. Трудно представить себе конкретный чайник в вакууме, точнее чайник "нигде", для нас конкретный чайник всегда "где-то", но чуть усилия и уже можем. Вот я думаю об этом чайнике так, как будто он "нигде".
Все верно. Состояние чайника "включен" или "выключен" — это тоже наш собственный мысленный конструкт, интерпретация восприятия.
Что касается "естественного понимания состояния", то оно связано со способностью прогнозировать результат своих действий на основе опыта.
G>Тут согласен. Какой-то аналог наследования с полиморфизмом в понятиях есть. Для группы объектов всегда можно выделить ряд общих понятий. Структура только не иерархическая, а сетевая.
Я не думаю, что тут дело в наследовании. Не могу обосновать научно, но, как мне кажется, основной способ соотношения разных предметов — подобие. Если предмет похож на на известный, то с ним, вероятно, можно сделать то же самое с тем же результатом.
G>"Угроза", это не состояние объекта. Это запомненный ранее или динамически сформированный сет — угроза — кирпич-падает-он-попадет-на-человека!.
Я и не говорил, что это состояние объекта, это полноправный объект.
Здравствуйте, DarkGray, Вы писали:
DG>в противовес этому — как только мы, например, говорим — давайте поставим мысленный эксперимент над "черным чайником, находящимся на кухне по адресу Москва, ул. Ленина, 37 — 143" — экземплярность пропадает, и появляется АлгТД.
Странно, мне казалось, что ООП ничуть не противоречит абстрактности. Да, за абстрактным чайником всегда стоит конкретный, но аналогичные мысленные эксперименты можно и нужно в рамках ООП ставить над произвольным чайником.
DG>И операции, уже создают новые образы не затрагивая имеющиеся экземпляры: операция "давайте нальем воды в черный чайник" — создает образ "черного чайника с водой"
Боюсь, что достоверно отличить целевой объект в новом образе чайника с водой от старого образа, в который затем налили воду — невозможно никак.
По мне образ — это "мультимедийное" описание чего-либо. Изменилось состояние объекта — изменилось его описание. Но это не всё — человек может сопоставлять образы, получая в результате анализа причинно-следственую связь. То бишь образ чайника с водой я без проблем ассоциирую с предыдущим образом чайника без воды через причинно-следственную связь — налитие воды. Даже если я не видел, как наливали воду, я восстановлю эту связь через свой жизненный опыт, который зачастую весьма абстрактен (см. первый абзац). В общем, описание — это всегда статика, это некий факт или правило. Но их взаимное применение порождает динамику. Экземпляры объектов на самом деле — точно такая же условность, которую мы "протягиваем" через эту динамику.
DG>при этом мы можем легко вернуться обратно к образу "черного чайника до того, как в него налили воду" и т.д.
Это и есть то самое моделирование. Мы можем умозрительно двигать модель во времени в любую сторону. Что есть вообще логические рассуждения? ИМХО, это генерирование (перебор) вариантов и моделирование событий по этим вариантам, иногда откат, генерирование новых вариантов, моделирование уже их и т.д.
DG>Соответственно, DG>- когда мы при мышлении воссоздаем образ реальности, то нам проще работать с объектами (когда экземпляры четко фиксированы): сейчас возьму чайник, налью в него воду, и поставлю греться; DG>- а при мышлении в рамках задач анализа, мысленных экспериментов, формирование прогнозов и оценок удобнее работать с АлгТД — четкая экземплярность отсутствует, экземпляры создаются при необходимости и также быстро выкидываются.
Понятно. Но я уже высказывал очередную крамольную мысль, что семантика "значения" никак не противоречит экземплярности, особенно в таком сценарии, когда новое значение создается, а старое выкидывается. Это полностью изоморфно изменению состояния экземпляра в ООП. По-сути в ООП лишь добавляется некая переменная, из которой старое значение выкидывается, а новое в неё же сохраняется. К тому же, тайпклассы из Хаскеля наделяют АлгТД его такими же точно методами, как ОО-объекты. В сухом остатке получаем лишь разную механику реализации полиморфизма... И то не факт, что даже механика разная — в Хаскеле боксированные АлгТД ссылаются на описание типа, точно так же, как ссылаются на него боксированные значения в дотнете. ))) Т.е., стоит нам начать сохранять АлгТД в одной и той же переменной — и мы получим полноценное ООП, наделенное механизмом абстракции.
В общем, разница, ес-но в иммутабельности и разлиных подходах организации работы над экземпляром. Если в ООП экземпляр фиксируется явно, то в ФП — только через логику вычислений, эмулирующую вычисление стадий одного и того же экземпляра (сугубо условного, в координатах ФП-вычислений).
Здравствуйте, 0x7be, Вы писали:
0>Тут недавно в одном эпик треде было сделано утверждение, что люди, дескать думают объектами.
Объекты — результат мышления, а не само мышление. В естественном языке мы можем взять любой объект У с любыми свойствами и использовать его везде вместо объекта Х с совершенно другими свойствами, а в программировании так нельзя.
Здравствуйте, minorlogic, Вы писали:
M>Хочу отметить что "как люди думают" никак не я вляется автоматом "как удобно програмировать"
Абсолютно согласен.
V>Объекты — результат мышления, а не само мышление.
Согласен.
V>В естественном языке мы можем взять любой объект У с любыми свойствами и использовать его везде вместо объекта Х с совершенно другими свойствами, а в программировании так нельзя.
Не уверен, что понял это предложение.
Здравствуйте, 0x7be, Вы писали:
0>Тут недавно в одном эпик треде было сделано утверждение, что люди, дескать думают объектами. После этого там было очень много умозрительных аргументов за и против этой точки зрения (я, кстати, против). Под впечатление от этой дискуссии я призадумался: а правда, какие парадигмы можно применять как модель мышления человека.
Насколько я вижу, люди сильно отличаются друг от друга и это суть многих совеременных гуманитарных наук.
Вот человек падает с крыши, кто-то видит в этом силу тяжести, кто-то ужасный мир, а кто-то волю Божью. И это всё нормально. Почему эта различность людей, для всех не очевидна?! Видимо, это всего лишь специфика моего мыслевосприятия
В разработке ПО, как и в любой работе, нужно быть "в резонансе" с твоими задачами, средствами, обстановкой, которые тоже могут существенно различаться...