Меня постоянно раздражает необходимость учить новичков особым языковым правилам (таким как распад массива в указатель), которые не имеют абсолютно никакого отношения к самому программированию. Вот я и подумал:
Что такое язык программирования с наименьшим количеством специальных языковых правил, где все первоклассно и может быть составлено без раздражающих технических ограничений? Разве такой язык не был бы идеальным языком обучения?
Примечание модератора
Мы ищем длинные ответы, которые дают некоторое объяснение и контекст. Не просто перечислите язык: пожалуйста, объясните, почему вы думаете, что язык отвечает на вопрос. Ответы, которые ничего не объясняют, будут удалены. См. Хорошее Субъективное, Плохое Субъективное для получения дополнительной информации.
programming-languages
fredoverflow
источник
источник
I=SKK
. Максимум в ортогональных языках - это языки с одной инструкцией, такие как Jot и RSSB.Ответы:
Когда дело доходит до «очень немногих правил», я бы сказал, что Лисп или Smalltalk победят. Простой синтаксис может быть написан на одной вкладке пива.
Но по моему опыту, простота Lisp и Smalltalk не означает, что они просты для понимания и легки в обучении. Хотя это и не «чистый» способ, по моему опыту, стиль императивных языков «список дел» легче всего понять новичкам.
Поэтому я бы предложил Python, Ruby или что-то похожее : вы найдете (почти) все основные понятия в них (хорошо, без указателей), но вам не нужно понимать это с самого начала, чтобы заставить что-то работать.
источник
Я бы сказал, что LISP или Scheme или язык из этой семьи будут наиболее ортогональными. С
let
,lambda
,define
,if
,cons
,list
, и(
)
вы можете научить почти все , что вы хотите , чтобы в интро курсе. Также нет необходимости в предварительной обработке директив или чего-int main()
то подобного, что студенты просто включают, но не видят причины.На моих вступительных курсах CS мы сделали много действительно интересных вещей со Scheme: внедрили машину Тьюринга, внедрили компьютер TC-201, написали грамматику без контекста, использовали рекурсию, напишем слияние и вставку, реализовали сумматоры и множество другие вещи.
Я занимался Java в AP comp sci до колледжа, но Scheme был великолепен, потому что я мог избавиться от беспорядка и сосредоточиться на реальных концепциях своей программы. Это был отличный урок, и я очень рекомендую вам попробовать его для обучения.
источник
Паскаль был специально разработан для обучения программированию. Его легко выучить (это был один из первых языков программирования, которые я выучил).
источник
Логотип: он все еще жив и здоров !
Это может показаться игрушкой, а не языком программирования, но для многих это не будет плохим первым шагом. Синтаксис очень прост, но черепаха обеспечивает более конкретную форму обратной связи, чем большинство языков / сред. Попытка создать определенную форму - это отличный способ научиться думать заранее, чтобы решить проблему.
Если у вас есть отвращение к черепахам, я действительно думаю, что Схема - это путь.
источник
Я бы предложил как SML, так и Haskell. Ортогональность была главной точкой дизайна для обоих. В частности, ядро SML (то есть часть языка, не связанная с модульностью) в значительной степени является типизированным лямбда-исчислением. В результате большинство языковых функций определяются типами, а типы, в свою очередь, определяют формы ввода и исключения значений. Это в значительной степени идеально.
В обоих языках есть несколько теоретико-нетипичных бородавок (eqtypes в SML, seq в Haskell), но они все еще бьют по всему остальному с точки зрения странных взаимодействий несвязанных языковых особенностей.
источник
Каким бы ни был выбор, я бы настоятельно рекомендовал преподавать «настоящий» язык . Преподавание игрушечных языков работает для некоторых людей, но для других это очень, очень расстраивает из-за разрыва с реальным миром. Некоторые люди нуждаются в реальной релевантности в качестве мотивации для обучения, и не нам судить об этой стратегии обучения (на самом деле, это распространенное заблуждение).
Это дисквалифицирует языки, такие как логотип, но также и языки, специфичные для предметной области, такие как обработка . Хотя последнее чрезвычайно полезно для определенных вещей (например, для создания инфо-графики), использование слишком ограничено для большинства применений (и, следовательно, для большинства пользователей). Это также исключает Gofer , бесполезное подмножество Haskell. Это также исключает Паскаль , потому что , хотя последний уже был использован в реальных проектах, он просто не имеет значения больше и просто не хватает существенных признаков (например , встроенный в строках).
Из практических языков я бы согласился с уже упомянутыми: современные диалекты Lisp или Scheme, Haskell, Python или Ruby. Лично я бы, вероятно, использовал Python, но у всех этих вариантов есть свои преимущества и недостатки.
источник
Tcl имеет 12 правил, которые регулируют весь язык.
Особых случаев или зарезервированных слов или символов очень мало.
источник
Чтобы расширить мой комментарий, в Jot все является первым классом (потому что это лямбда-исчисление) и может быть составлено. Есть только одна инструкция. Это абсолютно ужасный язык обучения.
В целом, в тарпингах Тьюринга очень мало специальных правил, и они требуют, чтобы вы хорошо понимали основы вычислений, прежде чем что-либо делать. Идеальный язык обучения позволяет студентам экспериментировать, не вырывая все свои волосы, поэтому абстракции более высокого уровня - это действительно хорошая вещь.
источник
Наиболее важные функции в изучаемом вами языке:
принцип наименьшего удивления (ПАСКАЛЬ)
удобочитаемость (ада)
На мой взгляд, второе превосходит первое, поскольку чтение кода даже важнее, чем его написание.
Опять же, я пишу C #, Java, Objective-C и Javascript для жизни, каждый из которых имеет ужасные причуды: D
Тем не менее, если бы мне пришлось выбрать один язык для начала, я бы пошел на C #. Его относительно легко читать, в нем мало серьезных сюрпризов (они чаще всего скрыты в инструментах / инфраструктурах MS ...), а также огромное количество кода для чтения и документации, которые необходимы для хорошего обучения.
источник