А, о, я ж собирался написать про ЯП для обучения программированию (после этого: 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