Pull to refresh

Comments 24

Пользуясь случаем хочу спросить у michurin, что является большим из зол: side effect или введение избыточного количества переменных?
Никлаус Вирт считал использование знака «=» в качестве оператора присваивания «плохой идеей» – и не только из-за трудности понимания, но и из-за нарушения логики – с его точки зрения введение такого обозначения приводит к появлению нового логического концепта – «принуждения к равенству»

Ну в ряде языков программирования он записывает не как просто:
a=b+c
а как:
LET a=b+c
или
SET a=b+c
где «LET» дословно означает «пусть», а «SET» — дословно «установить». Возможно, есть языки, где пишется «ASSIGN» — «присвоить».
Попробуйте непрограммисту объяснить разницу между =, == и ===.
Для не программистов привычнее будет так:
a:=b+c


Везде раньше учили на паскале
Подписываюсь под каждым пунктом. Добавлю что для меня одним из сложных концепций для понимания (javascript) было асинхронное исполнение, setTimeout, коллбэки и т.д. Нельзя было просто так взять и представить что, допустим, значение из асинхронной функции не сразу возвращается :) точнее даже не так, а то, что при выполнения кода асинхронная функция запускается и дальнейший код, нисколько не прерываясь, продолжает выполнение. И потом только, спустя время, коллбэк запускается. А, еще было сложно с замыканиями)
В моем понимании — функции — это мясорубка, в которую кидаешь мясо, а она выдает фарш.
А коллбеки — это когда из мясорубки валится что-то еще и в зависимости от того, что валится, нужно подключить свою мясорубку.
UFO just landed and posted this here
Сложные, однако, у Вас аналогии :)
Это легко объясняется на примере, скажем, заказа из интернет магазина. «Ты сделал заказ в магазине, и пошел чай пить, телевизор смотреть и т.д. А когда почтальон принесет посылку, ты распишешься в ее получении и распакуешь. В случае же синхронной обработки, ты бы остался без телевизора и чая, а сидел бы перед дверью и ждал бы прихода почтальона»
UFO just landed and posted this here
UFO just landed and posted this here
И некоторые из них точно не удастся легко и быстро объяснить «простым смертным», если они не математики.

Вы считаете, что рекурсию, вложенные циклы, параллелизм и разницу между = и == нельзя объяснить за 5 минут?
Для объяснения рекурсии — достаточно красивой картинки, а ещё можно вспомнить стих «у попа была собака...».
(простейший цикл без вложенности — «на колу мочало — начинай сначала!»)
В англоязычном мире есть цикличные песни, вроде «10 зеленых бутылок стояло на стене». Самая наглядная иллюстрация цикла.
Ну и мое любимое простое объяснение транзакций:
У тебя 3 хвоста за сессию. Ты договорился с двумя преподами, проплатил им, а третий не соглашается. И тогда первые 2 возвращают тебе деньги.
Если преподы в разных городах, а денег на проплату следующего экзамена не хватает — это уже CAP-теорема.
И тогда первые 2 возвращают тебе деньги.

С чего это вдруг? Две оценки уже проставленные в зачетку, что тоже уберут?
Это тогда не единая транзакция, а ряд последовательный действий с фиксацией каждого.
Ничего сложного во всем этом не вижу. Есть куда более сложные концепции.
Например всякие монады, но пожалуй сложность для меня лично связана с отсутствием желания разбираться с Haskell, а примеров для других языков крайне мало.
Далее, неблокирующие структуры данных (на Хабре была серия статей) — в связи с достаточно высокой сложностью и одновременно низкоуровневостью кода
Метапрограммирование на шаблонах С++ — но это скорее с особенностями реализации именно в С++.

А что может быть сложного в рекурсии, вложенных циклах и тем более операции присваивания — ума не приложу)

Монады это в сущности всего лишь некое обобщение над функциями. Если вы понимаете скажем композицию f(g(x)), то для вас тут ничего сложного быть не должно.


а примеров для других языков крайне мало.

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

В сети полно примеров монад на любых языках

Правда, не все авторы таких примеров сами понимают монады :-)

Да, есть такое дело. Или не могут внятно объяснить. Особенно почему-то страдает объяснение полезности.


Тем не менее, я подозреваю, что большинство javascript-разработчиков (не исключая и начинающих) монады не просто видели, а сталкивались с ними часто :)

Sign up to leave a comment.