![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Никита Калинин интересуется, $subj
Ответ: ничего. Объяснение отрефакторено из жаббера:
Пост Никиты про CS видел. Думал даже, что именно посоветовать. Но не знаю. Ну вообще.
Про лямбда-исчисление советовать не стал, так как говорить людям, что "можно писать программу и в чистой лямбде" -- то же самое, что говорить инженерам, что "программу можно записать как программу для машины тьюринга". Ровно так же бессмысленно, бесполезно, отталкивает от теории там, где она реально нужна (в стиле "нафига теорию, я так наколбашу"; и вообще, это неправильно, точно так же, как было неправильно заставлять меня в школе писать сочинения). Чистое лямбда-исчисление для простых пользователей слишком низкоуровнево. Да и транслировать в лямбду -- тоже сомнительное занятие, учитывая фон-неймановскую архитектуру.
Про монады советовать не стал, так как это уж очень ограниченная штука (как и комонады). Сами монады дают только 2.5 фишки:
1. контекст вычислений (рядом таскается контекст всегда -- и плюс, и минус; но, например, exceptions в монадном стиле -- тормозные),
2. bind/join как для привязки нужных идентификаторов к нужным значениям в bind, так и "недетерминированное/параллельное" в join,
3. помощь от _системы типов_ для того, чтобы значения не выбирались наружу (то есть, фактически, это не свойство монад, это свойство абстрактных типов данных с небольшой поддержкой от языка+компилятора).
Это как в пределах языка дать встроенный паскаль для сайд-эффектов -- та же самая хрень получится. Я считаю, что нормальным людям такое не надо изучать. А именно, учоным-математикам ввод-вывод не нужен (REPL'а хватит), а инженеры представляют, во что это всё будет транслироваться, и должны будут это держать в голове всегда при написании софта.
А если кто-то сам лично будет это изучать -- что ж, будет хорошо. Только это не "универсально-полезные" штуки. Изучить -- очень интересно, часто даже полезно. Но детям такие ужосы рассказывать -- не уверен.
Неоднозначно это.
Ответ: ничего. Объяснение отрефакторено из жаббера:
Пост Никиты про CS видел. Думал даже, что именно посоветовать. Но не знаю. Ну вообще.
Про лямбда-исчисление советовать не стал, так как говорить людям, что "можно писать программу и в чистой лямбде" -- то же самое, что говорить инженерам, что "программу можно записать как программу для машины тьюринга". Ровно так же бессмысленно, бесполезно, отталкивает от теории там, где она реально нужна (в стиле "нафига теорию, я так наколбашу"; и вообще, это неправильно, точно так же, как было неправильно заставлять меня в школе писать сочинения). Чистое лямбда-исчисление для простых пользователей слишком низкоуровнево. Да и транслировать в лямбду -- тоже сомнительное занятие, учитывая фон-неймановскую архитектуру.
Про монады советовать не стал, так как это уж очень ограниченная штука (как и комонады). Сами монады дают только 2.5 фишки:
1. контекст вычислений (рядом таскается контекст всегда -- и плюс, и минус; но, например, exceptions в монадном стиле -- тормозные),
2. bind/join как для привязки нужных идентификаторов к нужным значениям в bind, так и "недетерминированное/параллельное" в join,
3. помощь от _системы типов_ для того, чтобы значения не выбирались наружу (то есть, фактически, это не свойство монад, это свойство абстрактных типов данных с небольшой поддержкой от языка+компилятора).
Это как в пределах языка дать встроенный паскаль для сайд-эффектов -- та же самая хрень получится. Я считаю, что нормальным людям такое не надо изучать. А именно, учоным-математикам ввод-вывод не нужен (REPL'а хватит), а инженеры представляют, во что это всё будет транслироваться, и должны будут это держать в голове всегда при написании софта.
А если кто-то сам лично будет это изучать -- что ж, будет хорошо. Только это не "универсально-полезные" штуки. Изучить -- очень интересно, часто даже полезно. Но детям такие ужосы рассказывать -- не уверен.
Неоднозначно это.