Почему не Java, C #, ...
В отсутствие требований по взаимодействию с существующими базами кода, какое преимущество имеет Java или C #, скажем, над Smalltalk? Я программист на C # днем (и бывший Java-программист), и в этом есть кое-что хорошее и плохое, но одна вещь, которая действительно бросается в глаза, это то, насколько это невероятно сложно. Посмотрите, сколько здесь вопросов о тонкостях синтаксиса и семантики C #. Вы бы потратили весь свой семестр или год обучения мелочи. Modula-2 намного проще и вполне подходит для многих задач.
Вам также необходимо изучить ассемблер, и переход от Modula-2 к сборке намного проще, чем C # к сборке. Я не хотел бы пытаться преподавать ассемблер для группы студентов, которые знали только профессиональные инструменты Microsoft.
Связанный: Это все еще задание учить LISP?
(Есть около 50 различных способов интерпретировать это ...)
Я не вижу, что в этом «задом наперед», если только вы не видите, что он преподает {до, после} языка более низкого уровня, и не думаете, что его следует учить {после, до}}.
Можете ли вы предложить другой язык, который делает то, что делает? (Smalltalk? Forth? Icon? Factor?) Например, если вы хотите увидеть дизайн реальной ОО-системы (и, возможно, более мощной, чем Java или C #), вы можете выбрать AMOP и увидеть все это в короткой книге, включая полный исходный код. (Common Lisp - не самый простой диалект Lisp, но он намного проще, чем C # или Java, и AMOP в любом случае использует его относительно небольшое подмножество.) Как бы вы научили метапрограммированию или даже множественной диспетчеризации с Java?
Или: первоначальная цель Lisp состояла в том, чтобы заменить машины Тьюринга в качестве конструкции для построения алгоритмов. (Это просто очень полезно для написания реальных программ!) Вы предлагаете использовать машины Тьюринга для обучения алгоритмам? Или C # для моделирования вычислений? Машина Тьюринга - это семизначный кортеж - я не могу представить, сколько компонентов будет иметь вычислительная модель C #! Лисп прекрасно устраняет этот пробел, и я видел только один или два других языка в этом пространстве - Форт приходит на ум, но по какой-то причине он не стал популярным в академических кругах.
... Haskell?
Я думаю, это отличная идея. Я узнал это в школе. Опять же, я думаю, что любой член этой языковой семьи будет в порядке. Если вы изучите ML в школе, я не думаю, что вам будет хуже. Концепции одинаковы.
Это похоже на изучение машиностроения в Берлине по сравнению с Чикаго: язык может быть другим, но концепции одинаковы. Но если вы ничего не знаете, даже не язык, имеет смысл начать с самого простого языка. Если вы хотите быть инженером в Берлине, но не говорите по-немецки, имеет смысл изучать инженерию, а также изучать немецкий язык, но общепринятым является мнение, что начинать с инженерных классов только для немецкого языка менее эффективно.