Re[11]: Мы выиграли Старт!
От: Mamut Швеция http://dmitriid.com
Дата: 20.03.15 12:38
Оценка:
M>>Четай до полного понимания Execution in the kingdom of nouns. «Коробки-ящики» даже близко не описываются ООП/императивщиной.

I>Именно этим и описываются. Ящики-коробки это поведение в чистом виде. ООП и императивщина оно именно про поведение. Функциональщина — про результат.


Они именно что не описываются. Реальный мир вообще не описывается программированием, от слова никак. Не надо натягивать сову на глобус.

I>>>Если ты с этим согласен, то не ясно, откуду взялось твое мнение про математику.


M>>Еще раз:


M>>- у функциональщиков нет проблем с императивным программированием

M>>- у императивщиков есть проблемы с функциональным программированием

M>>Очевидно, что проблема не в ФП.


I>Ты просто повторил исходную посылку, только добавил "очевидно". Это слово не является доказательством, ты в курсе ?



Я не повторил исходную посылку. Я повторяю твои слова. Из которых ты делаешь какие-то совсем идиотские выводы.


M>>Ты придумал за меня какой-то тезис, и активно пытаешься с ним бороться, ага.


I>Я тебе показываю, что доказательную часть своих утверждений ты где то потерял и не желаешь это видеть.


Ты не показываешь, ты занимаешься демагогией.


dmitriid.comGitHubLinkedIn
Re[12]: Мы выиграли Старт!
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 20.03.15 13:14
Оценка:
Здравствуйте, Mamut, Вы писали:

I>>Именно этим и описываются. Ящики-коробки это поведение в чистом виде. ООП и императивщина оно именно про поведение. Функциональщина — про результат.


M>Они именно что не описываются. Реальный мир вообще не описывается программированием, от слова никак. Не надо натягивать сову на глобус.


Буквально, конечно, не описывается. Механика, поведение, мутабельность — все это в ООП и императивщине искаропки.
Ты так и не ответил на вопрос, почему функции будут более понятны контингенту, нежели ящики и коробки.

M>>>- у функциональщиков нет проблем с императивным программированием

M>>>- у императивщиков есть проблемы с функциональным программированием

M>>>Очевидно, что проблема не в ФП.


I>>Ты просто повторил исходную посылку, только добавил "очевидно". Это слово не является доказательством, ты в курсе ?


M>Я не повторил исходную посылку. Я повторяю твои слова. Из которых ты делаешь какие-то совсем идиотские выводы.


Правильно. Ты повторил мои слова, добавил слово "очевидно" и сделал вывод "проблема не в ФП".
Ты забыл ответить, откуда, по твоему, берутся абстрации и как их скопировать из головы в голову.
У меня ответ простой — нужно начинать с моторики и наращивать раз за разом.
У тебя, что характерно, аргументы в духе: "не верно", "всё не так", "очевидно", "не вижу ничего" и тд.

После N лет долбления императивное "в цикле проверяем xxx на предмет yyy" превращается в функциональное "все x где x есть xxx удовлетворяет yyy"
Только так и никак иначе. Часть студентов с хорошим абстрактным мышлением уже готовы взять такое. А вот те, что не готовы, в принципе не смогут втащить сходу, им как ни крути придется пройти полный путь.

I>>Я тебе показываю, что доказательную часть своих утверждений ты где то потерял и не желаешь это видеть.


M>Ты не показываешь, ты занимаешься демагогией.


Вижу, из тебя аргументы так и лезут. Продолжай.
Re[13]: Мы выиграли Старт!
От: Mamut Швеция http://dmitriid.com
Дата: 20.03.15 13:42
Оценка:
M>>Они именно что не описываются. Реальный мир вообще не описывается программированием, от слова никак. Не надо натягивать сову на глобус.

I>Буквально, конечно, не описывается. Механика, поведение, мутабельность — все это в ООП и императивщине искаропки.

I>Ты так и не ответил на вопрос, почему функции будут более понятны контингенту, нежели ящики и коробки.

Потому что к тому моменту, когда наичнается изучение программирование, функции и их поведение уже известны из математики. Теперь возьмем твои слова:

На практике, всегда и везде начинают с ... поведение, состояние и тд


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


M>>Я не повторил исходную посылку. Я повторяю твои слова. Из которых ты делаешь какие-то совсем идиотские выводы.

I>Правильно. Ты повторил мои слова, добавил слово "очевидно" и сделал вывод "проблема не в ФП".
I>Ты забыл ответить, откуда, по твоему, берутся абстрации и как их скопировать из головы в голову.

«Абстракции» берутся из уроков математики. Когда там к программированию подступают? В 8-м классе? В 8-м классе уже вовсю изучают системы уравнений и всякие вещи типа «область определения функций». Это прекрасно ложится на функциональное программирование.

I>После N лет долбления императивное "в цикле проверяем xxx на предмет yyy" превращается в функциональное "все x где x есть xxx удовлетворяет yyy"


После N лет долблений императивного, получим что? Давай я опять процитирую тебя.

ни разу не видел, что бы товарищ с хорошей функциональщиной имел проблемы с императивным программированием. А вот наоборот — полно примеров.


То есть вместо того, чтобы сразу давать функциональщину, чтобы потом не было проблем и с императивным, ты почему-то настаиваешь на том, чтобы вдалбливать императивщину, несмотря на то, что после нее проблемы


dmitriid.comGitHubLinkedIn
Re[14]: Мы выиграли Старт!
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 20.03.15 15:09
Оценка:
Здравствуйте, Mamut, Вы писали:

I>>Буквально, конечно, не описывается. Механика, поведение, мутабельность — все это в ООП и императивщине искаропки.

I>>Ты так и не ответил на вопрос, почему функции будут более понятны контингенту, нежели ящики и коробки.

M>Потому что к тому моменту, когда наичнается изучение программирование, функции и их поведение уже известны из математики.


1 Изучают программирование зачастую классе в 3м
2 Даже в универе степерь прокачки абстракций сильно разная


>Теперь возьмем твои слова:


M>

M>На практике, всегда и везде начинают с ... поведение, состояние и тд


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


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

I>>Ты забыл ответить, откуда, по твоему, берутся абстрации и как их скопировать из головы в голову.


M>«Абстракции» берутся из уроков математики.


Если ты плохо двигал палочки и ящики, когда тебе было 4 года, то про математику тебе нужно забыть, максимум что можно от тебя ждать это арифметики и то с ошибками.

>Когда там к программированию подступают? В 8-м классе? В 8-м классе уже вовсю изучают системы уравнений и всякие вещи типа «область определения функций». Это прекрасно ложится на функциональное программирование.


"Прекрасно ложится" — тому нет и никогда не было внятных подтверждений кроме "вот мне так кажется"

Абстракции прокачиваются начиная с моторики. Разные абстракции требуют разного опыта. Состояние, поведение, время — ничего этого в математике нет. Математика может это описывать, но ты это поймёшь только когда получишь опыт вместе с моторикой соответствуей. То есть, качать нужно с нуля, моторики.

I>>После N лет долбления императивное "в цикле проверяем xxx на предмет yyy" превращается в функциональное "все x где x есть xxx удовлетворяет yyy"


M>После N лет долблений императивного, получим что? Давай я опять процитирую тебя.


Получим функциональщину и только у тех, у кто прошел императивщину. Кому недостаточно N лет будут гарантировано испытывать проблемы с функциональщиной.
Те, кто прошел императивщину, не будут испытывать с ней проблем, по определению, потому что они это освоили.

M>

M>ни разу не видел, что бы товарищ с хорошей функциональщиной имел проблемы с императивным программированием. А вот наоборот — полно примеров.


M>То есть вместо того, чтобы сразу давать функциональщину, чтобы потом не было проблем и с императивным, ты почему-то настаиваешь на том, чтобы вдалбливать императивщину, несмотря на то, что после нее проблемы


Ты путаешь причину и следствие. Моё утверждение можно трактовать двояко (ты видишь только один вариант)

1 от императивнщины нужно еще добраться до функциональщиины и многие так и не добираются
2 функциональщина приносит с собой внятные знания императивщины

То есть, в кратце, функциональщина есть абстракции прокачаные в императивщине. Невозможно дать абстракции 'сверху'.
То есть, я говорю об 1, а тебе мерещится 2. П.2 требует некоего чуда — копирования абстракций из головы в голову.
Отредактировано 21.03.2015 15:37 Pauel . Предыдущая версия .
Re[11]: Мы выиграли Старт!
От: maxkar  
Дата: 23.03.15 22:06
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>>>Если человек 20 лет пользовался ящиками/коробками/сумками, и 3-4 года функциями, то вроде как очевидно, какая модель будет более простой для него.

M>>Четай до полного понимания Execution in the kingdom of nouns. «Коробки-ящики» даже близко не описываются ООП/императивщиной.
I>Именно этим и описываются. Ящики-коробки это поведение в чистом виде. ООП и императивщина оно именно про поведение. Функциональщина — про результат.

Отвечаю на все три (начиная с очевидно). Нет, не очевидно. Стоит отличать два потока данных о мире. Первый — наше восприятие мира, модель его поведения пока мы в него не вмешиваемся (feedback). Вторая — модель мира, когда человек пытается его изменить (т.е. выполнить некоторое действие, feedforward). Интересно, что на направлении "действие" ситуация смотрится становится немного (на самом деле — много) другой. И ведь при этом основная задача программиста — "отдавать команды", т.е. производить feedforward. От удобства feedforward и его связи с feedback зависит удобство языка программирования и скорость понимания. В дальнейшем на feedback я не особо фокусируюсь, там может быть что угодно и на общий результат дискуссии оно не влияет.

Для дальнейшего чтения очень рекомендуется прочитать вторую главу из "The Design of Everyday Things" (revised edition). Там очень много полезных картинок и я буду использовать терминологию оттуда. Например, я буду часто ссылаться на картинку об уровнях обработки информации человеком (в интернете нашел только здесь, 38-й слайд. Очень рекомендую книгу где-нибудь взять и почитать).

Вводную информацию вроде бы дал. Теперь можно начать моделировать мир. Можно взять какой-нибудь простой классический пример вроде "закрыть дверь". Очень показательный пример на самом деле. В реальной жизни задача "закрыть дверь" имеет два очевидных решения.

Первый вариант: "Вася.закрой(дверь)". Я прошу Васю закрыть дверь за меня. Не смотря на "императивное" указание это на самом деле описание результата "дверь закрыта". Т.е. я хочу чтобы "Вася сделал так, чтобы дверь была закрыта". Я не буду сильно возражать если дверь закроет Петя. Я не прошу выполнять действие (не Вася.закрывай(дверь)). Меня устроит и если Вася делегирует эту обязанность кому-нибудь другому. Меня интересует "результат" (функциональщина в определении выше). У меня нет цели изменить "внутреннее состояние Васи". Я предполагаю, что Вася после закрытия двери не изменится. В общем, с моей точки зрения Вася — это классический иммутабельный объект с поведением. А изменяемый объект (дверь) с моей точки зрения самостоятельного поведения не имеет. "Набор замыканий" из ФП как раз примерно эквивалентен данному объекту.

Второй вариант: "закрою(дверь)". Желание "закрыть" возникает на рефлексивном (reflective) уровне (см. картинку). Детальный план (встать, дойти, протянуть руку, толкнуть дверь) выполняется на поведенческом (behavioral) уровне. Что здесь интересно? А интересно то, что behavioral уровень — это "подсознательный" уровень. Не полностью, он может взаимодействовать с сознанием при необходимости, но в целом достаточно автономен, может разрабатывать детальные действия и контроллировать висцеральный (visceral, мышечные действия) уровень. Подчеркиваю, стимул "закрыть" (описание результата) вырабатывается на сознательном уровне. А вот "план действий" (последовательность операций) вырабатывается по большей части на подсознательном уровне! Это очень важно. Потому что во многих повседневных ситуациях сознание задействуется для решения задачи "что", определения результата. И именно на это сознанине тренировано (плюс иногда оно решает некоторые вычислительные задачи, когда подсознание само не может справиться, но это другая история).

В той же design of everyday things есть хорошее упражнение по прочувствованию разницы между reflective и behavioral.
1. Согните указательный палец.
2. Разогните указательный палец.
3. Сожмите руку в кулак.
4. Разожмите кулак.
5. Возьмите кружку в руку.
6. Налейте воду в кружку.
7. Поставьте кружку на (другой) стол.

А теперь опишите, как именно вы выполняли каждый шаг. О чем думали. Какие "команды" отдавали? На уровне сознания все это обычно редуцируется до "захотел согнуть палец" и "палец сам согнулся". Нижележащий уровень (behavioral) нам не доступен. Мы представляем результат и подсознание выполняет автоматически все операции. Включая обработку обратной связи (тяжесть кружки, колебания воды и т.п.). Эти автоматические операции могут быть достаточно сложными. Например, я на работу/с работы хожу почти автоматически (я не отвлекаюсь на контроль дороги). Подсознание вызывает несколько прерываний (для обработки перехода дорог), все остальное делает само. В принципе, оно на автомате умеет и дороги переходить (нажимает кнопку светофора, ожидает разрешающего сигнала, предпочитает моторный сигнал (вибрацию кнопки вызова) всем остальным индикациям (световой/звуковой)) но обычно я делаю это в ручном режиме, так как это чуть быстрее.

Теперь перейдем к обучению программирования. Выше я пытался показать, что для сознательного мыслительного процесса "целеуказание" является основным процессом в повседневной жизни. Иногда люди создают план, который является набором "достигнутых состояний" а не "каких-то процессов и действий" (действиями на самом деле кодируются промежуточные результаты). Работа программиста — "заставлять машину выполнять действия". Это feedforward и на этом пути мозг как всегда пытается "указывать цель". А вы его заставляете императивщину расписывать! Он ведь не приспособлен к такому. "Как я обычно это делаю? Да не знаю я как, просто делаю и все!". Вы заставляете детализировать весь процесс.

А после детализации наступает второй огромный облом. На поведенческом (behavioral) уровне происходит обработка "обратной связи" от действий и этот поток информации абсолютно необходим для достижения поставленной цели (мозг сравнивает планируемый результат с фактическим). Но у программиста результат детализации выполняет не программист! Его выполняет компьютер. И никакого незамедлительного ответа организму нет. Не понятно, правильно ли все сделано или нет. Нужно запустить программу и сознательно (reflective!) сравнить предполагаемый и полученный результат. Для человеческой "императивной" системы это выглядит как очень сильный облом. Она вроде бы и разработала план, но не получила никакой обратной связи. Появляется подозрение "что-то здесь не так".

В общем не удивительно, что у людей возникает проблема с императивщиной. Потому что мозг (сознательная его часть) не приспособлен изначально к такой модели и задействование "нужных уровней" сознания приводит к неприятным ощущениям (остуствие обратной связи). А вот "функциональщина — про результат" (это не я сказал). Это то, на что сознание натренировано за те 20 лет жизни. Люди ее легко осваивают, получают удовольствие (вместо разочарования) от процесса и одновременно учатся строить необходимые уровни абстракции. А потом уже легко переходят и на императивную модель (в тех местах, где она нужна). Особенно хорошо должно быть начинать с агрессивной "грязной" функциональщины (lisp-, ml- семейства языков). Наличие некоторых побочных эффектов (не на actor!) вполне вписывается в повседневную активность мозга. А вот императивная модель как раз является "абстрактной математикой". С точки зрения той же тренировки мозга "императивное программирование" ровно настолько же неестественно, насколько не естественны абсолютно чистые математические модели. Нет у императивщины "реального аналога", он есто только у "грязной функциональщины".

Ну и касательно уровня абстракций. А кто сказал, что идти нужно снизу вверх? Почему программирование начинается с языков а не с квантовой механики? Программирование же просто несколькими уровнями выше в этой цепочке. И почему в той же школе (и еще раньше, в детстве) начинают с самых верхних (а не нижних!) уровней? Ну там "огонь — бо-бо" а не термодинамика+химия+биология (а там и электрические сигналы, и химия, и нейросети). Может быть, стоит начинать с удобного (и достаточно практичного) уровня? Ну пусть он будет местами неточным. Но зато результат будет раньше и не будет издевательства над мозгом невинных студентов.

P.S. Не нашел, куда вставить. Пусть будет здесь. Уровни "действия" у функциональщины более сбалансированы. "Цель" формулируется сознанием, действие (набор команды) выполняется подсознательно (там нет "последовательности действий, в норме это скорее механическая трансляция разных map/fold/filter/etc...)), проверка высокоуровневого ожидания (результат выполнния)- сознанием, проверка правильности моторики (набор map а не fold) — подсознанием. Все на своем месте. У императивщины детализация (которой в таком виде нет у функциональщины) идет на границе сознания/подсознания а весь результат обрабатывается сознанием.
Re[12]: Мы выиграли Старт!
От: LaptevVV Россия  
Дата: 24.03.15 05:18
Оценка: +1
1. Спасибо за подробный развернутый ответ. Оставлю тут то, что зацепило сильнее остального.
M>Ну и касательно уровня абстракций. А кто сказал, что идти нужно снизу вверх? Почему программирование начинается с языков а не с квантовой механики? Программирование же просто несколькими уровнями выше в этой цепочке. И почему в той же школе (и еще раньше, в детстве) начинают с самых верхних (а не нижних!) уровней? Ну там "огонь — бо-бо" а не термодинамика+химия+биология (а там и электрические сигналы, и химия, и нейросети). Может быть, стоит начинать с удобного (и достаточно практичного) уровня? Ну пусть он будет местами неточным. Но зато результат будет раньше и не будет издевательства над мозгом невинных студентов.

M>P.S. Не нашел, куда вставить. Пусть будет здесь. Уровни "действия" у функциональщины более сбалансированы. "Цель" формулируется сознанием, действие (набор команды) выполняется подсознательно (там нет "последовательности действий, в норме это скорее механическая трансляция разных map/fold/filter/etc...)), проверка высокоуровневого ожидания (результат выполнния)- сознанием, проверка правильности моторики (набор map а не fold) — подсознанием. Все на своем месте. У императивщины детализация (которой в таком виде нет у функциональщины) идет на границе сознания/подсознания а весь результат обрабатывается сознанием.

2. У меня только одно возражение по поводу всего изложенного — личный опыт.
Когда я в 18 почти лет увидел первый раз компьютер — я абсолютно ничего не знал про все написанное вами.
Но писать в кодах для Минска-22 не составило никакого труда. Абсолютно никакого. Это же — чистая императивщина!
И никакого ломания мозгов и всей психологиии.
И у моих одногруппников — тоже.
О функциональщине я узнал много позже — когда уже стал читать серьезные книжки по программированию — курсе на 4-м.
А когда попробовал — мозги пришлось серьезно перестраивать.

Почему так?
Это же явно противоречит всему, что вами тут написано.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[12]: Мы выиграли Старт!
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 24.03.15 10:05
Оценка:
Здравствуйте, maxkar, Вы писали:

M>Здравствуйте, Ikemefula, Вы писали:


I>>>>Если человек 20 лет пользовался ящиками/коробками/сумками, и 3-4 года функциями, то вроде как очевидно, какая модель будет более простой для него.

M>>>Четай до полного понимания Execution in the kingdom of nouns. «Коробки-ящики» даже близко не описываются ООП/императивщиной.
I>>Именно этим и описываются. Ящики-коробки это поведение в чистом виде. ООП и императивщина оно именно про поведение. Функциональщина — про результат.

M>Отвечаю на все три (начиная с очевидно). Нет, не очевидно. Стоит отличать два потока данных о мире. Первый — наше восприятие мира, модель его поведения пока мы в него не вмешиваемся (feedback). Вторая — модель мира, когда человек пытается его изменить (т.е. выполнить некоторое действие, feedforward). Интересно, что на направлении "действие" ситуация смотрится становится немного (на самом деле — много) другой. И ведь при этом основная задача программиста — "отдавать команды", т.е. производить feedforward. От удобства feedforward и его связи с feedback зависит удобство языка программирования и скорость понимания. В дальнейшем на feedback я не особо фокусируюсь, там может быть что угодно и на общий результат дискуссии оно не влияет.


Не может там быть все что угодно. Фидбек это основа не только императивщины, а вообще всей инженерии.

M>Вводную информацию вроде бы дал. Теперь можно начать моделировать мир.


Спасибо, не надо. Мир никто не моделирует. Моделируют решение конкретной задачи.

>Можно взять какой-нибудь простой классический пример вроде "закрыть дверь". Очень показательный пример на самом деле. В реальной жизни задача "закрыть дверь" имеет два очевидных решения.


Задача имеет столько решений, сколько есть точек зрения на неё.

M>Первый вариант: "Вася.закрой(дверь)". Я прошу Васю закрыть дверь за меня. Не смотря на "императивное" указание это на самом деле описание результата "дверь закрыта".


На самом деле это способ достижения результата. Сам результат здесь описывается неявно.

>Т.е. я хочу чтобы "Вася сделал так, чтобы дверь была закрыта". Я не буду сильно возражать если дверь закроет Петя. Я не прошу выполнять действие (не Вася.закрывай(дверь)).


Согласно правилам русского языка ты именно просишь выполнить действие и возлагаешь эту обязанность на конкретного человека, более того — момент времени определен вполне однозначно.

>Меня устроит и если Вася делегирует эту обязанность кому-нибудь другому. Меня интересует "результат" (функциональщина в определении выше). У меня нет цели изменить "внутреннее состояние Васи". Я предполагаю, что Вася после закрытия двери не изменится. В общем, с моей точки зрения Вася — это классический иммутабельный объект с поведением. А изменяемый объект (дверь) с моей точки зрения самостоятельного поведения не имеет. "Набор замыканий" из ФП как раз примерно эквивалентен данному объекту.


Это тебе удобно так рассматривать дверь. Сама по себе дверь имеет массу, кучу других свойств и тд, то есть состояние.

M>Второй вариант: "закрою(дверь)".


Это не интересно. Есть более интересные вещи — "дверь.закройся()" , "дверь.состояние = закрыта"


M>Теперь перейдем к обучению программирования. Выше я пытался показать, что для сознательного мыслительного процесса "целеуказание" является основным процессом в повседневной жизни. Иногда люди создают план, который является набором "достигнутых состояний" а не "каких-то процессов и действий" (действиями на самом деле кодируются промежуточные результаты). Работа программиста — "заставлять машину выполнять действия". Это feedforward и на этом пути мозг как всегда пытается "указывать цель". А вы его заставляете императивщину расписывать! Он ведь не приспособлен к такому. "Как я обычно это делаю? Да не знаю я как, просто делаю и все!". Вы заставляете детализировать весь процесс.


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

Не заставлять, а именно — формализовать.

Отсюда ясно, что к такой деятельности приспособлены даже дети — они начинают составлять инструкции, задания еще в детском саду.

Собтсвенно и императивное программирование это развитие всё той же идеи.

M>В общем не удивительно, что у людей возникает проблема с императивщиной. Потому что мозг (сознательная его часть) не приспособлен изначально к такой модели и задействование "нужных уровней" сознания приводит к неприятным ощущениям (остуствие обратной связи).


Я большей частью скипнул, потому что вся эта писанина требует не меньше чем нобелевки.

Просто подумай, каким образом ребенок в состоянии составить простую пошаговую инструкцию. Вся императивщина растёт именно отсюда. Более того, опыт наработаный на таких примеах, и доведенный до автоматизма, даёт функциональщину.
Re[6]: Мы выиграли Старт!
От: Isscander  
Дата: 24.03.15 15:35
Оценка:
Здравствуйте, Mamut, Вы писали:


LVV>>Естественно, мы начали с императивщины.

LVV>>Ибо цель была и пока остается: обучать чистых новичков, которые в школе программирование не проходили.

M>Это как раз не естественно. Новички в школе изучали, как минимум, математику. И функциональщина (особенно с паттерн-матчингом) на эту математику ложится просто сразу.


M>В отличие от императивщины.


Ну, у функционального программирования достаточно своих проблем. Например, классическое ФП предполагает stateless approach, в то время как немалое количество проблем вокруг нас — stateful. Но самая большая его проблема, ИМХО, в в том, что императивный подход интуитивно понятен человеку. Человек мыслит скорее императивно чем функционально (ну или, скорее, императивно с налетом функциональщины). Поэтому функциональное программирование гораздо тяжелее укладывается в голову, чем императивное.
Кстати, с многопоточностью та же история — ну не можем мы несколько мыслей думать параллельно. И это одна из причин почему у людей бывают серьезные проблемы с пониманием многопоточности.

Кстати, зачастую математическая формулировка решения/подхода/алгоритма проигрывает в понятности алгоритмической. К примеру, particle filter описывается жуткими формулами и выкладками, в то время как его алгоритмическое описание просто и понятно.
Отредактировано 24.03.2015 17:17 Isscander . Предыдущая версия . Еще …
Отредактировано 24.03.2015 17:08 Isscander . Предыдущая версия .
Re[12]: Мы выиграли Старт!
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 24.03.15 19:41
Оценка:
Здравствуйте, maxkar, Вы писали:

M>Ну и касательно уровня абстракций. А кто сказал, что идти нужно снизу вверх?


Понимаешь, есть в этом чтото интересное, идти сверху. Скажем, взять и забить на палочки, кружочки, а сразу дать детям Фихтенгольца, можно даже в детском саду.

Кто сказал, что идти нужно снизу вверх ? Вот и попробуй это на своих детях. Кстати, у тебя есть единомышленник, Маммут. Вы можете объединиться, сорганизовать вдвоём детей, прочитать им курс лекций Фихтенгольза, а уж после этого функциональщина наверняка станет плёвым делом.

>Почему программирование начинается с языков а не с квантовой механики?


Программирование никогда и не начиналось не с языков. Во все времена это была формализация простейших решений для разных задач, например, как собрать портфель в школу или купить в магазине бутылку газировки.
Re[12]: Мы выиграли Старт!
От: Isscander  
Дата: 24.03.15 20:27
Оценка:
Здравствуйте, maxkar, Вы писали:

M>Здравствуйте, Ikemefula, Вы писали:


M>Детальный план (встать, дойти, протянуть руку, толкнуть дверь) выполняется на поведенческом (behavioral) уровне. Что здесь интересно? А интересно то, что behavioral уровень — это "подсознательный" уровень. Не полностью, он может взаимодействовать с сознанием при необходимости, но в целом достаточно автономен, может разрабатывать детальные действия и контроллировать висцеральный (visceral, мышечные действия) уровень. Подчеркиваю, стимул "закрыть" (описание результата) вырабатывается на сознательном уровне. А вот "план действий" (последовательность операций) вырабатывается по большей части на подсознательном уровне! Это очень важно. Потому что во многих повседневных ситуациях сознание задействуется для решения задачи "что", определения результата. И именно на это сознанине тренировано (плюс иногда оно решает некоторые вычислительные задачи, когда подсознание само не может справиться, но это другая история).


То что Вы описываете называются "моторные навыки". Они действительно выполняются подсознательно. Но многие из них мы разучивали императивно. Например, "трогание с места" на машине:
— проверить нейтралку;
— завестись;
— выжать сцепление;
— поддать газку;
— плавно отпустить сцепление.

Именно так, думаю, Вам его описывал инструктор. После нескольких месяцев (лет?) езды Вы действительно выполняете эти действия подсознательно, но от этого сам "алгоритм" трогания не поменялся; он как был собственно императивным, так и остался. В компьютере правильной аналогией был бы вызов подпрограммы "тронуться".
То же самое — это, например, игра на гитаре. Поначалу Вам изложили четкий алгоритм — как взять, например, аккорд Fm. Потом навыки "въедаются" в подкорку, и вы берете аккорд механически, не задумываясь.

Человек действительно мыслит и императивно, и функционально. Но чтобы описать КАК собственно выполнять некоторое несложное действие, нам легче применить императивный подход.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.