September 30th, 2012

2019

Сониевский соплестрой "as designed"

Мои приключения с полгода назад купленным крутейшим ноутбуком планеты: http://forum.ixbt.com/topic.cgi?id=17:43127-84#2831. Спасибо Mixma, который сегодня приехал и спас меня -- вытащил доплывшее до лопастей от нагрева "липучки" крепление вентилятора:



У меня такая гипотеза, что инженеры команды Z23 не имели возможности видеть результаты своего проектирования в деле, и не имели опыта для предвидения результатов проектирования. То есть в САПРе и опытном образце ручной сборки всё было более чем хорошо, но вот после полугодичной активной эксплуатации гарантированно вылезает множество проблем, которые как-то были адресованы в прошлых моделях (например, Z1), а в этой модели оказались неадресованными.

Пример соплестроя "as designed" в SONY VAIO Z23 лишний раз показывает, что инженерия битов и инженерия атомов -- это очень разные инженерии. В софте через полгода работы ничего не происходит, а в греющейся и подвергающейся нагрузке механике -- много чего происходит. Софт можно прогнать через тест один раз, а механику нужно тестировать долго, да ещё и греть-охлаждать при этом. Эта разница битов и атомов должна быть обязательно учтена, но стремительный уход инженерии в САПРы создаёт видимость похожести программной и системной инженерии. А они существенно разные, жизненный цикл и его практики для софта и железяк разные! Я обычно привожу пример ракеты на Марс, которую весьма трудно "прототипировать" и запускать в тестовом режиме. Но вот пример запроектированного плохого поведения под нагрузкой в SONY VAIO Z23 -- это хороший пример для показа разницы.
2019

ПитонМир

Комплект Учебных МИРов (именно так расшифровывается КуМир) вполне можно сделать на Питоне, если использовать IPython (http://ipython.org/) с его Notebook-как-в-Mathematica. Задачи курса Кириенко (на Ершоле -- http://server.179.ru/wiki/?page=DenisKirienko/Kumir) нужно однократно переписать в питоновский синтаксис, встроив в тетради, а обстановки оттуда тоже опять же однократно перекодировать в тетради один-в-один, поместив рядом с задачами. Как я понимаю, это примерно на день-два программистской работы (как я понимаю, именно это и предлагал otstavnov -- но переписка на голый Питон, которую предполагал Максим даёт совсем другое качество, нежели переписка для тетрадок-в-браузере из IPython).

В IPython затем можно вставить и исполнителя "настоящий робот Lego" (например, http://code.google.com/p/nxt-python/), чтобы повторить курс робототехники (об образовательных ступеньках в информатике для малолеток -- http://ailev.livejournal.com/1022791.html, о робототехнике в этих ступеньках -- http://ailev.livejournal.com/1023159.html).

После кавалерийского наскока и реализации исполнителя-с-обстановкой, нужно наладить ещё парочку-троечку фич:
-- автоматизированную проверку решения задачи (чтобы одновременно код ученика был протестирован на множестве обстановок). Это уже есть в КуМире 1.9.
-- редактор обстановок (чтобы ученик мог представить обстановки, обучаясь TDD -- то есть обучаясь предусматривать разные хитрые комбинации входных условий). Это уже есть в КуМире 1.9 -- но по факту не используется (кроме как учителями при создании курсов).
-- антураж от edutainment (снимающиеся замочки с условий задач, анимация праздничного перехода от урока к уроку наподобие перехода к очередному уровню игры, музыкальное сопровождение, параметризованное тем, что происходит с решением задачи)
-- систему анализа кода, которая как даёт советы по повышению качества кода, так и генерирует дополнительные вспомогательные упражнения для непонимаемых дитяткой концептов, а также дополнительные закрепляющие упражнения, если уровень усвоения оказывается небольшим.

Тут нужно отметить, что обстановки в КуМире -- это тесты. И работа ученика -- это Test Driven Development. Поэтому есть два варианта:
-- начальный, когда тесты разрабатываются учителем (для одной обстановки обычно делается от четырёх до четырнадцати тестов), а ученик разрабатывает только код программы. Проверка решения задачи для каждой обстановки из их набора делается компьютером.
-- продвинутый, когда тесты нужно разработать ученику самостоятельно, и только потом разработать код (хотя мне не очень понятно, как эту разработку тестов можно автоматизировать).

ПиктоМир и КуМир при этом являются только ступеньками к ПитонМиру. ПитонМир же полностью уже будет поддерживать exploration computing, в котором накопленный опыт (например, решаемые в курсе программирования задачи и их данные) может фиксироваться за счёт Notebooks, и с этим опытом даже возможна коллаборация (например, передача решения задач от ученика учителю, и даже коллективная работа примерно по таким же принципам, как в GoogleDoc, и даже организация "облачного ПитонМира" через сервисы типа https://notebookcloud.appspot.com/docs).

Это всё некоторые изводы exploratory computing, или interactive computing на Питоне, я чуть подробней эту тему поднимал в http://dot15926.livejournal.com/34506.html. Тут я просто развернул это в сторону поддержки учебных курсов, ибо учебные упражнения -- это exploratory computing, ученики исследуют предметную область, но со слегка смещёнными в нашем случае акцентами. В курсе Кириенко для начинающих не столько исследуется, как ведут себя опосредующие изучаемую предметную область исполнители, сколько исследуется сам язык программирования. Но вот для курса робототехники уже исследуется не столько язык программирования, сколько при его помощи предметная область робототехники в части автоматического регулирования -- все эти датчики-эффекторы и связывающие их алгоритмы автоматического регулирования.

Чтобы затем двинуть по этой линии embedded systems и численной математики с глубоким заходом в физику, можно потом переходить уже с чистого IPython с простыми исполнителями в изобилующие поддержкой решения математических задач https://github.com/cwsoft/cwsoft-WSPPDE (система для программирования математических задач на Питоне) или даже http://sagemath.org/ (которая соревнуется как с Matlab, так и с Mathematica -- но вместо особых языков этих систем используется просто Питон). После курсов ПитонМира эти навороченные системы уже не должны выглядеть запредельно сложными и непонятными для дитяток.

Напоследок замечу, что в Сети сейчас активно обсуждается текст Bret Victor про компьютерное обучение (http://worrydream.com/LearnableProgramming/), но мне представляется много более важным проект LightTable от Chris Granger (я писал о нём в апреле -- http://ailev.livejournal.com/996889.html) и тот факт, что они там собрали более $300000 (http://www.kickstarter.com/projects/ibdknox/light-table), что означает включение Питона в состав поддерживаемых там языков. Именно Chris Granger делал примеры сред программирования для Bret Victor, и этот Light Table является продолжением и развитием тамошних идей (и развитие этих идей продолжается, см. свежий постинг о современном программировании как многоуровневом абстрагировании в блоге Chris Granger: http://www.chris-granger.com/). Через полгода-год можно будет разбираться, правильно ли делать ПитонМир на базе IPython, или же на базе Light Table. Но пока проект ПитонМира как реализацию курсов с исполнителями "нарисованный Робот" и "робот Lego" с тетрадным интерфейсом (что заодно институализирует идею формализованного "учебного курса" с упражнениями).
2019

Об стиль программирования

В КуМире 1.7 ошибочно работал оператор "выбор" (case), и я приучил дитятку пользоваться для его моделирования конструкцией else if ("иначе если").

Теперь не могу отучить его писать в стиле "если клетка закрашена то вправо иначе если не клетка закрашена то влево все все". Защищенное программирование, ага.

Рельсы в мозгах -- страшное дело, демонтаж их много трудней, чем монтаж...