Anatoly Levenchuk (ailev) wrote,
Anatoly Levenchuk
ailev

Образовательные ступеньки к деланию роботов, три дня спустя

Вьюнош закончил уже давно все ОГЭ и отсылки в ЗФТШ, и приступил к своему "хочу делать роботов". Я писал про образовательные ступеньки к деланию роботов пару дней назад -- https://ailev.livejournal.com/1432847.html.

Что изменилось за эти три дня?

Вьюнош вчера и сегодня прослушал в СТАНКИНе три часа "Основ конструирования мобильных роботов" и "Датчиков для робототехнических устройств", в МИСиСе "Смартфон как пульт дистанционного управления роботом" -- это пошла подготовка к лагерю олимпиады Роботон-МиР, http://roboton-mir.ru/news/preparatory-classes-2018-summer.

Дальше я ему буду давать "Системное мышление", и меня не волнует, что это для него пока сложно и неподъёмно. Когда-то нужно начинать. При этом я понимаю, что и он, и жена будут этот курс саботировать. Он же не из школьной программы, и на обложке курса не нарисовано никакого робота!

Дальше я очень хочу попробовать двинуть его в http://course.fast.ai/ (минимальные требования -- годичный опыт кодирования и школьная математика), и там ещё есть часть вторая http://www.fast.ai/2018/05/07/part2-launch/, так что это удовольствие можно тянуть надолго. И это будет, понятное дело, не Julia, а Python и PyTorch. От судьбы не уйдёшь.

Но ещё я сформулировал в чатике Julia несколько добавочных тезисов про образование по информатике на Julia (https://t.me/JuliaLanguage/3734):

1. Программы == алгоритмы+данные. Текущие "школьные курсы" -- это ни разу не курсы информатики или программирования, они все курсы алгоритмики. Работа с данными ограничивается "типами" стек, дек, массив. Это полностью противоречит современному тренду, когда по сложной системе типов (часто вообще "базе данных" с дико кучерявой конецептуальной моделью данных) гуляют относительно простые алгоритмы, и сложность выбирается сложностью разных состояний проходов разных отдельных алгоритмов, оставляющих свои следы в разных местах сложных структур данных. То есть типы нужно учить не 10 часов на 100 часов алгоритмики, а 1000 часов на 1000 часов алгоритмики: над проектированием системы типов программисты проведут времени как минимум столько же, сколько над проектированием разных циклов и ветвлений алгоритма над этими типами. Поэтому линию обсуждения Julia и Python по этой линии не дотянули. На чём легче и чётче обучать работе с типами? На чём легче составлять и решать и проверять задачи по работе с типами? На чём легче демонстрировать разные концепты работы с типами? Ну, и обсуждать нужно Julia в версии 1.0, а Python лучше бы разу с 3.7, включая Data Class. [на это уже получен ответ в https://t.me/JuliaLanguage/3742, суть ответа: "ну, и как тут что-то выбирать? нужно всё!"]

2. Я полсотни реплик назад писал списочек "за" и "против" использования Julia как учебного языка. И там было в том числе и то, что Julia как первый в жизни язык не очень пригоден: но не обсуждался вопрос о том, учим мы кого и для чего. Учим людей императивному программированию на целых, плавающих и массивах, то есть Formula translator языку? То бишь алгоритмике? Или учим программированию на первом языке, а не алгоритмике? Или сначала должна быть алгоритмика, а потом полноценное программирование с типами? Вопрос остался необсуждённым.

3. А вот сделать какой-то DSL — для этого Python или Julia уже нужны, и можно обсуждать, на чём легче преподавать "создание предметно-специфических языков" и основанных на этих языках пакетов: на Питоне или на Julia.

4. Выходом же всего этого обучения будет раздел на GitHub, который показываться будет в разных местах, куда хотят попасть школьники. Вот как его проще получить: на Питоне? На Julia? Ибо на Паскале и на Си это как-то не просматривается, там вручную солидный кусок работы экосистемы придётся делать, и никаких DSL и прочих прелестей современного пакетирования не будет. А если этому не учат в том самом зазоре между школой (9 класс лицея) и вузом (который начнёт с усиленного курса алгоритмики на том же Паскале и вынесет мозг в сторону от требуемого на самых разных работах, но полезного для побед в олимпиадах)? Чему в этом зазоре учить, чтобы вместо вуза просто попасть в правильную лабораторию/стартап/проект и там работать и учиться параллельно по вечерам, уже сознательно и самостоятельно планируя своё обучение? Вот чему обязательно (а не добровольно, как тут предлагают для "Интеллектуала", читать-писать учат ведь в обязательном порядке, а не добровольном) нужно учить?

5. И, наконец, рассматриваем вычислительную математику: линал, матан, оптимизацию. На чём её учить? Разворачивать зоопарк экосистемы Питона? Или на Julia практически без зоопарка и могучих заклинаний внешних пакетов? На чём проще учить именно математике, отвлекаясь от особенностей разных пакетов программ по подержке требующихся для обучения вычислительной математике алгоритмов? Раньше учили бы на фортране, игнорируя даже паскаль со всеми его "типами". А теперь? Питон с библиотеками? Или Julia? Тем более что Jupyther у них для этого один и тот же.

Я подумал-подумал и в связи с этими всеми находками в чат Julia записал некоторую программу по разработке минимальной связки курсов (https://t.me/JuliaLanguage/3739):
— какой-то начальный курс алгоритмики + курс работы с типами языка, просто "для понюхать". Если сделать алгоритмику и добавить материал с типами, то аналогов такому курсу не будет, не нужно будет доказывать, почему этот курс хороший.
— sicp на Julia по примерно той же схеме, по которой его сделали для Python. Это заодно даст аналог "годичного опыта кодирования". Альтернатива тут только аналог sc50. Из плюсов: не нужно доказывать, что курс хороший.
— и дальше аналог курсов fast.ai на Julia, с использованием Knet с упором на его философию (и доработкой недостающих модулей и докруткой, чтобы было не труднее, чем в самом fast.ai). Это примерно такое же интеллектуальное развлечение, как и SICP или sc50 на Julia, по факту огромная работа. Из плюсов: не нужно доказывать, что курс хороший.
— остаются вопросы про линейную алгебру, оптимизацию, матан, байеса. Если выполнить предыдущие пункты, то не придётся доказывать, почему нужно брать именно эти курсы. Более того, какие-то курсы на эту тему уже есть, например, линейная алгебра: http://web.mit.edu/18.06/www/

А ещё меня спросили: зачем я писал текст про EduOps (вот этот: https://ailev.livejournal.com/1431056.html)? Для меня это были не только программные документы для Школы системного менеджмента (http://system-school.ru/), чтобы все преподаватели примерно одинаково понимали стратегию. Суть этих статей -- явное моделирование происходящего, задание терминологии, хороших метафор и образцов, увязывание в непротиворечивую дисциплину множества паттернов текущего поведения в сфере EduOps. Так, работу Andrew Ng по старту своего курса машинного обучения в Курсере, работу Fast.AI и многих текущих исследовательских групп с де-факто поведением EduOps нельзя было обсуждать в общих для них словах, как такую модель поведения -- а теперь я задал какой-то viewpoint, метод описания, и это легко. Теперь, после моих текстов про EduOps, сразу всем заметно, что "да, вот они ровно так и делают" (в отличие от того, что делают, например, в Пензе, где нет своих крутых исследований и базирующихся на них курсов).

Основная идея тут в том, что DevOps таки кроме своих исследований добегает до студентов и смотрит, что из них там на дальнем конце цепочки получается -- берёт ответственность за то, чтобы результаты его исследований не просто легли на полку библиотеки. В принципе, в текущей модели науки профессура ответственна больше за грантодобычу. Я недавно помогал оценивать одного профессора для Оксфорда: в их критериях оценки Оксфорд больше интересовало, как у него трек рекордс в добыче грантов. А тут в EduOps будет другое: как он доводит свои исследования до студентов так, чтобы они их потом могли где употребить в дело. Этого нету сейчас как общего места, это EduOps очень пока неформальная и не такая частая практика.

DevOps тоже всегда были, но потом у них появилось имя и дисциплина, и всё стало в разы массовей -- потому как осознанно и можно стало улучшать практику. Так и я тут: сказал EduOps, и можно осознанно копировать практику, улучшать практику, указывать новые образцы, говорить о расхождениях и вариантах, и т.д.

С образованием по роботам и образованием в вычислительной математике ровно то же самое: озабочены родители, озабочены любители языка, но нет озабоченных исследователей, которые и сделали бы все вот эти курсы. Нет EduOps, вот и не живёт тут педагогика.
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 1 comment