А, о, я ж собирался написать про ЯП для обучения программированию (после этого: https://mokum.ru/zverok/35433). Ща.
1) в рамках обще-образовательной школы/базовых курсов компьютерной граммотности: естественно, обучение не «программированию» в практическом смысла, а алгоритмике — есть команды; есть значения в переменных, есть ветвления, есть повторения; есть ввод и вывод; язык, который используется в этом случае, в идеале должен а) не иметь почти ничего кроме перечисленного, б) позволять делать это легко, с минимумом «синтаксического оверхеда»™ (ггг кто помнит этот дискурс); в) позволять делать какие-то «забавные»/«понятные вещи» (обучение на примерах «введите два числа»/«выведите их сумму» оставляет ощущение что программирование это такая вещь в себе, к «реальной жизни» отношения не имеющая); г) происходить в среде, современной учащемуся. Здесь не место сложной типизации, функциональщине и вообще много чему. Последовательность императивный (только набор команд) → императивный (функции/процедуры) → модульное → ООП мне кажется довольно подходящим. Все изводы Processing-а в общем-то ок (поскольку позволяют «рисовать картинки»), Python/Ruby ок as far as есть подобранная учителем среда, где удобно писать и выполнять код И делать какие-то сразу забавные штуки. Hackety Hack был охуенным, но его так и не доделали. Вообще в этой области сейчас всё не оч.хорошо, всякие «детские» среды довольно маргинальны и снабжены изнутри каким-нибудь диким бейсиком. ‎- новомодная имитация мышления
1.а) надо сказать, что мне такое обучение кажется важным и полезным всем — из соображений «понимать, как делаются задачи на компутере»; грубо говоря, дополнить голову несколькими концепциями (которые пригодятся даже для использования в каком-нибудь ворде: сложные таски типа обновление старого большого документа с помощью поиска-и-замены требуют именно что составления в голове «алгоритма» — сначала то, потом то, если то то это, повторить) ‎- новомодная имитация мышления
2) если мы говорим не об «общем образовании», а об «обучении будущего программиста программированию», то я бы сказал так: а) начать (если ещё не начато) с того же — if, for, function, вотэва; б) обязательно (in no particular order, дальше попробую уточнить) — C (как разумно близкий к железу, управление памятью, битики и байтики, неспособен — вон из профессии); какой-нибудь основательный извод функциональных языков (чего мне лично ужасно не хватало в моём обучении, как я потом понял) — «настоящие» суровые типы, immutability, все вот эти математический подходы про «программа это просто вычисляющая себя формула»; Ruby (ахахахаха) или Smalltalk + Lisp (менее реально изучить на современных полезных примерах, хотя Clojure ооок) — настоящее ООП (всё есть объект, message passing, объекты-классы-метаклассы-синглетоны) + настоящее мета-программирование (код это данные, макросы, вся хуйня). Это всё. Ну плюс — история ЯП и общая их связь, теория компиляторов. ‎- новомодная имитация мышления
Чувак, подготовленный таким образом, дальше уже может изучать на практике хоть современный JS (который уже почти не прототипный), хоть Java, хоть Python, хоть Go, раскладывая его в голове на «n% арифметики указателей базовых конструкций + m% типов и преобразований + k% классов и объектов, сели поехали». ‎- новомодная имитация мышления
да, как-то так. "компиляторы", кстати, важны - там естественным образом возникают конечные автоматы и всякие там машины тьюринга. ‎- urquan
↑ ну да. кажется из моего программистского вуза (всячески плохого) это чуть ли не единственное что было преподано хорошо и несмотря на всю «теоретичность» — пригождается для понимания мира вполне регулярно. ‎- новомодная имитация мышления
В целом согласен; хорошо брать по языку на концепцию. От "суровой функциональщины" легко отпочкуется практичный SQL ("не как, а что"). И отдельно ещё, где-то в середине, надо начинать рассказывать про структуры данных, когда уже простые вещи типа скаляров и списков начинают немного жать. Подходы к "функциональщине", кстати, можно закладывать на самом раннем этапе, в виде идеи процедур, потом функций — это есть даже в lightbot. (Кстати, чем меня печалит Scratch — это очень низкий уровень абстракции, быстро упираешься в него; возможно, это намеренно.) ‎- 9000
↑ да, со всем в этом комменте согласен (включая печаль от скретча) ‎- новомодная имитация мышления
эх, сегодня разговаривал насчет преподавания программизма взрослым, как-то не удалось убедить, что нужно меньше ремесла и больше всякого прикольного ‎- urquan