?

Log in

No account? Create an account

Previous Entry | Next Entry

А теперь сварите борщ!

После первой недели лекций An Introduction to Interactive Programming in Python мне кажется, что у ребят... ммм, как бы это выразиться... немножко баланс смещен, вот.
Представьте, что вы никогда в жизни не варили борщ. И даже не видели, как он варится. И, возможно, даже не ели. А потом вы поступили в кулинарное училище и вам надо его сварить.
На уроке вам долго и муторно рассказывают про картошку - историю картошки, сорта картошки, про то, что она растет в земле, что она бывает вареная и жареная, а также толченая... В общем, куча какой-то информации о картошке, которая мало линкуется с рецептом. Затем та же история повторяется... Ну не знаю, скажем, с водой. Или с кастрюлей - вам подробно расскажут про технологию добычи руды, выплавку металла, отливку собственно кастрюли... И вся эта бодяга еще на полчаса. Потом буквально пара фраз про то, что овощи в борщ надо резать и-и-и-и... И финальная фраза - "А теперь сварите борщ и предъявите его нашей кулинарной комиссии!"
Вы в растерянности. Вы не знаете, что сначала из ингридиентов забросить, а что потом. Вы понятия не имеете про то, что надо солить. Ну хорошо, вам кто-то сказал, что надо солить - а сколько? И сколько наливать воды? А ингредиенты бросать в кипящую воду или в холодную?
Ну конечно, вы можете погуглить и найти всю необходимую информацию. Но вы в недоумении - на кой черт нужно такое кулинарное училище, где не дают необходимой инфы, зато дают какую-то другую.
Я серьезно! Ребята на полчаса развезли print, вы представляете? Знаете, что там можно так долго рассказывать? Я - нет. Объяснялась какая-то совсем элементарщина. Конечно, сначала родимый "Hello, world!" (куда ж без него), несколько минут бьемся в экстазе и умиляемся: "Ой, печатает!". Потом 15, вы понимаете - 15 минут (!!!) меняем "Hello, world" на "We want… a shrubbery!" и еще умиляемся. Потом минут на 30 заводим лекцию о переменных, при этом играемся, присваивая то одну фразу, то другую в качестве значения переменных, пишем "print h" и снова умиляемся - надо же, вместо h Питон напечатал "Hello, world!", какое чудо! Какая прелесть!...
И все это вместе - на час! 59 минут и сколько-то там секунд. Потом за 15 минут проскакиваем функции, при этом большую часть времени рисуем картиночки, как поступает инфа на вход, а там внутри "что-то делается" (слова лектора! Правда, потом он все-таки соизволил одной фразой минут через 5 объяснить, что же именно там делается. Вот потом и появляются перлы на баше про то, что Питон - волшебный язык, ты ему что-то сказал, он это как-то понял и что-то такое сделал. Все правильно, угу), разбираемся, где у нас тело функции, а где не тело и снова умиляемся.
За 5 минут пролетаем модули, причем из них за 3 - модуль random, примеров по нему вообще не делаем, зачем? Рекомендуем посмотреть мануал, в мануале инфы еще меньше, чем в официальном Питоновском и если бы я не знала, о чем речь - я бы хрен поняла, как это вообще.
И-и-и-и... Сварите борщ! Первый же мини-проект на сотню строчек кода, с активным использованием этого самого модуля random, написанием функций, с использованием if/elif/else. с конвертацией...
Великолепно! Нет, мне-то на самом деле пофиг, я все это уже знаю. Но я не понимаю, на кого рассчитан этот курс. Если, как заявлено в описании, для людей, которые вообще не программировали, то почему бы им так же подробно не расписать про функции и random? А если для тех, кто хоть как-то с Питоном общался - то зачем на полчаса зависать над "Hello, world!"?
Стою на асфальте, в лыжи обутая и тихо офигеваю. Ребята на первой лекции показывали красивенькие игрушки с графикой, Арканоиды всякие и убеждали, что в конце курса мы сможем писать такие же ну просто как два байта переслать. Да конечно, такими методами, как вы учите, мы их хоть завтра писать начнем. А делов-то? Вы ж нам объяснили про print и переменные, а что еще надо для счастья? Вот прям щас сядем всем курсом и каааак забабахаем какой-нибудь Far Cry (или что там еще по красоте все рекорды сейчас бьет?), каааак продадим и пусть конкуренты сдохнут от зависти. А мы чего, мы умные, мы знаем главный секрет. *шепотом* Нас очень хорошо и тщательно научили использовать print и переменные! Поэтому в написании игрушек нам теперь равных нет.

Comments

( 26 comments — Leave a comment )
morfizm
Apr. 23rd, 2013 11:14 pm (UTC)
Мне кажется, твоя проблема в том, что ты заметно впереди этого курса, поэтому то, что он даёт, тебе пока не надо (ну, по крайней мере, первая лекция), а то, что ты хочешь, ты не там ищешь. Справочную информацию действительно нужно добывать самой: чтением встроенных в питон док-стрингов (help(obj)), чтением reference, чтением исходников (!) модулей - кстати, например, модуль random находится в C:\Python27\Lib\random.py, можешь в Far'е нажимать F7 и искать, где на диске лежат другие модули :), а также, конечно, экспериментами. Ты ожидала, что всё это будет на лекции, а этого не будет, и, замечу, не должно быть.
l_sylvanas
Apr. 24th, 2013 02:49 am (UTC)
Интересно. Мне пока кажется, что так быть не должно, но вполне возможно, что я впоследствии передумаю. Т.е. ну не зря же все курсы у нас в университете тоже так построены :). Я всё время этому удивляюсь, думаю - ну, не дураки же там сидят? Зачем же они так делают? Интересно услышать, что тебе кажется, что это и есть правильно.

Пример: я сейчас беру класс по Machine Learning. Программистские задание мы пишем на R, при этом предполагается, что многие видят его первый раз (это как раз мой случай, но я хочу сказать, что это не исключение: предыдущий опыт с R не предполагается). Первое задание: написать функцию, которая делает LASSO regression (находит такой вектор коэффициентов, при котором минимизируется разница между "правдой" и "предсказанием" наряду с суммой модулей всех коэффициентов, кроме самого первого). А, и еще кучу графиков построить, заодно. Это первое задание. Я чуть не сдохла. Впрочем, должна признать, что многому научилась. Но все равно не уверена, что это должно быть настолько прямо painful. No pain no gain, конечно, но есть все же какие-то пределы...

Ну, конечно, мне плохую службу сослужило плохое знание линейной алгебры (кто же знал, что она так пригодится :))) ) и общий недостаток опыта в математике и в программировании. Но замучились все, не только я :).

Edited at 2013-04-24 02:57 am (UTC)
morfizm
Apr. 24th, 2013 04:33 am (UTC)
Оль, у меня есть опыт преподавания программирования (уже меньший, чем, собственно, опыт программирования, но ненамного). К сожалению, он это подтверждает.

Если ты разжёвываешь *всё*, у студентов атрофируются зубы.

Если ты преподаёшь последовательно, как математику, типа, вот X и всё про X, вот Y и всё про Y, а из X и Y следует Z, и вот как он следует, и вот всё про Z, то какая-то часть народа (к сожалению, типа, 80%) в какой-то момент перестаёт следить, и тогда вообще всё, чистый лист. Кроме того, люди малоспособны удержать в голове большое количество абстракций, которые не понятно, как применять. Когда видно применение это усваивается в 10 раз лучше. Когда видно применение в результате самостоятельной работы, в 100.

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

А ещё - всё вышеперечисленное это примерно 5% успеха. Оставшиеся 90% делятся так: 10% это "комфортная песочница", способность пробовать разные вещи, не боясь сломать, и зная, как вернуться как было, 10% это энтузиазм - заинтересовать, впечатлить и т.п., и 75% это самостоятельная работа.

Если в результате этого курса Катя напишет много кода, это будет офигенный результат. Если ещё будет при этом помногу экспериментировать с одними и теми же вещами, но по-разному - ещё лучше. Если будут peer reviews и форум, то вообще с ума сойти.
l_sylvanas
Apr. 24th, 2013 04:45 am (UTC)
Я и не прошу разжевывать *всё*. Я прошу не давать мне сразу сложную и трудную задачу, а дать сначала несколько простых попрактиковаться.
morfizm
Apr. 24th, 2013 04:47 am (UTC)
Я посмотрел synopsis, задания и отрывки из лекций. Там до фига простых задач, и ни одной трудной (относительно рассмотренного материала). Выглядит вполне нормально, я бы, наверное, сделал нечто похожее. Но внимательно лекции не смотрел.
l_sylvanas
Apr. 24th, 2013 04:54 am (UTC)
Ну а вот моя задача по machine learning кажется тебе подходящей первой задачей в курсе? Я, возможно, плохо описала ее, конечно. В лекциях нам вывели формулу регрессии и в двух словах познакомили с понятием градиентного спуска. Т.е. предполагалось, что это всё мы видим первый раз (что в моём случае так и есть).

Что касается Катиного курса, то я его не смотрела, конечно, но просто вот ощущения эти мне очень знакомы. Возможно, всё дело просто в разном уровне подготовки, с которым студенты приходят. У нас в классе многие были вполне способны справиться с задачей, хотя помучились в итоге все, но, надо полагать, многие мучились "хорошо": т.е. просто копаешь, копаешь, но хотя бы получается копать. Я же большую часть времени была просто намертво stuck. И вот это уже совершенно непродуктивно. Но, повторю, большинство студентов приходят с куда большим опытом и в математике, и в программировании.
morfizm
Apr. 24th, 2013 08:11 am (UTC)
Твоя задача по machine learning кажется вполне подходящей для первого курса. Она трудоёмкая, но выполнимая. У тебя есть LASSO regression, про который тебе не надо знать заранее, ты лишь знаешь, что на входе, что на выходе, и можешь нагуглить алгоритм. Тебе осталось его записать так, чтобы было на R, ну и подебаггать, пройтись напильником, составить примеры. Это и есть, типа, "разобраться в new environment" - научиться как соединять одно с другим, чтобы работало. Могли бы дать это на тривиальном примере, но дали на примере средней сложности, чтобы было интереснее. Why not.

В описании Machine Learning курса не написаны prerequisites по математике, хоть и пишут, что "some programming background will be helpful" (https://www.coursera.org/course/ml), но, мне кажется, некоторый бэкграунд is implied. По крайней мере в пределах школьного уровня старших классов нужно неплохо ориентироваться в таких вещах как графики функций, оптимизация функций, комбинаторика, статистика, теория вероятностей.

Если у тебя этого нет, то для тебя это stretch, т.к. надо вбухивать дополнительное время, чтобы catch up with fundamentals. Но, опять же, в этом нет сложности которая именно сложность (ниже какого-то уровня вообще недоступно), есть лишь кропотливость, требование вкладывать больше времени. Скажем, не 10 часов в неделю, а 20, или даже больше.

Я погуглил на "prerequisites for Machine Learning", нашёл вот это:
http://stackoverflow.com/questions/3539657/what-are-the-prerequisites-for-studying-machine-learning
Со ссылкой сюда:
http://web.archive.org/web/20110620134659/http://measuringmeasures.com/blog/2010/3/12/learning-about-machine-learning-2nd-ed.html

Мне кажется, это огромный overkill, столько prerequisites не надо, но желательно хоть что-то, иначе будет трудоёмко.

FYI. Я пробовал брать Machine Learning и бросил в течение первых пары недель, т.к. понял, что не могу выделять достаточно времени. Так что ты мегакрута, если вытащила этот курс, завидую :)


Edited at 2013-04-24 08:12 am (UTC)
l_sylvanas
Apr. 24th, 2013 02:31 pm (UTC)
Дим, ну, какая теория вероятностей в школе, ты что? У вас правда, что ли, была? У нас ничего, кроме алгебры, не было. Пререквизиты у нас, конечно, есть (я в UW беру, а не онлайн).

Не знаю, короче, так мне и не кажется пока что правильным подходом, но, возможно, я передумаю.
l_sylvanas
Apr. 24th, 2013 02:36 pm (UTC)
Про пререквизиты: без хорошего понимания векторов и матриц невозможно понять даже самые основы. А это такая вещь, к которой нужно привыкать какое-то время, просто "почитать по ходу дела и разобраться" - не вариант. То же самое с условной вероятностью. Так что пререквизиты, на мой взгляд, конечно же есть объективно.
morfizm
Apr. 24th, 2013 04:51 am (UTC)
Тут ещё есть один эффект, который люди могут не предполагать.

Если у тебя не возникают регулярно такие моменты, когда ты вообще не знаешь, как к этому подойти, это значит, что ты взял слишком простой курс и неэффективно тратишь своё время.

Часть задач (включая обязательные) должна *казаться* трудной - это хороший положительный сигнал о курсе. Но при этом по любой задаче ты должен смочь сделать измеряемый прогресс (продвинуться на один шаг) хотя бы за пару дней, а желательно за пару часов. Если это не выполняется, то это, возможно, слишком сложный курс.


Edited at 2013-04-24 04:51 am (UTC)
l_sylvanas
Apr. 24th, 2013 04:55 am (UTC)
Дааааааа...
За пару часов мне, как правило, не удается никакого прогресса достичь. За пару дней - да. Но столько времени не всегда дают. Ну, мы с тобой об этом говорили уже как-то :).
morfizm
Apr. 24th, 2013 08:01 am (UTC)
"За пару часов мне, как правило, не удается никакого прогресса достичь"

Может, ты его плохо измеряешь?
Вот, скажем, если в качестве одного из research-шагов я собираюсь попробовать 5 вещей, и попробовал из них 3, то у меня прогресс. По подзадаче "попробовать 5 вещей" я продвинулся от 0 до 60% :)

Я имел в виду такой прогресс тоже, не обязательно прогресс именно как кусочек решения.
morfizm
Apr. 24th, 2013 04:37 am (UTC)
Как следствие из предыдущего коммента - идеальный формат преподавания программирования для начинающих, это когда ты (учитель) много тратишь времени, чтобы заинтересовать, активно переплетаешь разные куски, разжёвываешь очень продробно несколько простых вещей, а некоторые вещи оставляешь для жевания на дом, даёшь безопасную песочницу (и не просто даёшь, а всячески encourage'ишь ею пользоваться) и даёшь много заданий - возможностей для практики.

Для профессионалов, на самом деле, преподавание программирования должно быть ещё более use case-driven/scenario-driven, типа, вот проблема, её решать так, вот вторая, её вот так. А *в конце* можно дать архитектурную диаграмму и рассказать, как это всё работает. Но не в начале, а в конце. Потому что тогда это ляжет на полезные use cases. Пока нет полезных use cases, человек очень плохо воспринимает, оно проходит через фильтр, типа, "это что-то, наверное, ненужное".
morfizm
Apr. 23rd, 2013 11:16 pm (UTC)
По аналогии с борщом: у тебя есть подробнейшая книга с рецептами, есть плита и разные инструменты, которыми ты уже умеешь пользоваться, а, вот, борщ ты никогда не вариала. Тебе подробно рассказывают, как варить капустный отвар - просто для примера, чтобы ты умела варить хоть что-нибудь, потом рассказывают разные интересные ништяки про другие ингредиенты, просто чтобы возбудить интерес, а потом пускают в свободное плавание. Всё, что нужно, у тебя уже есть.
l_sylvanas
Apr. 24th, 2013 02:58 am (UTC)
Ну и не сваришь ты так борщ никогда (моё мнение). Что-нибудь сваришь, но не борщ :).
l_sylvanas
Apr. 24th, 2013 03:00 am (UTC)
Wait. Рецепт борща-то есть или нет? :) Я имею в виду: если нет, то не сваришь. Мне казалось, Катя что-то такое имела в виду. Т.е. подробный рецепт - это именно когда, в каком порядке, как именно что класть, да более того - как обрабатывать продукты, каковы типичные ошибки, и так далее, и тому подобное. Мне кажется, Катя имеет в виду, что тебе сказали: "Борщ - это такой суп из свёклы, картофеля, капусты и моркови, обычно варится на говяжьем бульоне. А теперь - сварите его! Вот так он должен выглядеть в конце."
morfizm
Apr. 24th, 2013 04:40 am (UTC)
Рецепт борща, конечно, есть.
Google.com, в нём есть документация по Питону и другие интересные вещи :)


"Борщ - это такой суп из свёклы, картофеля, капусты и моркови, обычно варится на говяжьем бульоне. А теперь - сварите его! Вот так он должен выглядеть в конце."

Если ты скажешь такую фразу, ты не оставляешь студенту никакой самостоятельной работы, т.к. всё уже за тебя сделано.

Куда лучше сказать "Капустный отвар - это такой суп из воды и капусты. Вот я его варю, вот я даю вам попробовать. Вкусно? А теперь сварите борщ."
Студенту надо пойти, *взять рецепт*, прочесть его и сварить - уже какая-никакая самостоятельная работа!


Edited at 2013-04-24 04:40 am (UTC)
l_sylvanas
Apr. 24th, 2013 04:43 am (UTC)
>Если ты скажешь такую фразу, ты не оставляешь студенту никакой самостоятельной работы, т.к. всё уже за тебя сделано.

Ну... Нет :). По такому рецепту просто вообще нельзя сварить борщ. Как я уже сказала - можно сварить что попало, но не борщ. Но, возможно, мы очень увлеклись аналогией с борщом :).
morfizm
Apr. 24th, 2013 04:45 am (UTC)
А ещё - мы увлеклись аналогией на рецепт борща с настоящим рецептом борща :)
l_sylvanas
Apr. 24th, 2013 04:55 am (UTC)
Я знаю настоящий рецепт борща! :)
morfizm
Apr. 24th, 2013 08:25 am (UTC)
Именно это тебя сбивает и мешает абстрагироваться!! :)
umnickmd
Apr. 24th, 2013 01:58 am (UTC)
Это все очень верно подмечено, но это все проблемы переходного периода. Когда вроде уже чувствуешь, но еще не понимаешь, или наоборот. Пройдет.
l_sylvanas
Apr. 24th, 2013 02:41 am (UTC)
Я даже в UW постоянно с этим сталкиваюсь, кстати. Объясняют некие азы, ну или в случае с более сложными предметами - дают пару формул математических. А потом говорят: "А теперь возьмите какой-нибудь вот такой язык и на нем имплементируйте вот такой вот алгоритм, который построен на том, о чем мы сейчас говорили".

Мало того, что я язык вижу первый раз в жизни, но я, разумеется, совершенно не способна взять и сразу сделать что-то сложное, основанное на только что "пройденном" (=лекцию прослушала) материале. Мне хочется сначала попрактиковаться, довести до автоматизма какие-то простые вещи. Всё это приходится делать без всякого руководства, случайным образом, что нагуглилось. Очень травматично. Ну я не знаю, может, это призвано как-то отсеивать тех, кто не способен самостоятельно справляться со сложными задачами, т.е. может, они так пытаются поддерживать более высокий уровень студентов... Не знаю. Трудно и не вглядит разумным. И прямо вот да, постоянно такое, чуть ли не во всех классах у нас.
avantal
Apr. 24th, 2013 04:13 am (UTC)
А зачем для питона курсы? Там отличный внятный туториал есть в документации, который все, что надо для начала, дает.
l_sylvanas
Apr. 24th, 2013 04:43 am (UTC)
Надо полагать, для начинающих в программировании вообще. Т.е. питон как первый опыт программирования.
avantal
Apr. 24th, 2013 05:09 am (UTC)
Тогда описанное по идее нормально. Нужно же как-то людям, не имеющим базовых инженерных знаний, объяснить, что такое переменная, как работает функция, как данные передавать.
( 26 comments — Leave a comment )

Profile

fearless_cat
Бывшие канадские ангелы мы

Latest Month

November 2017
S M T W T F S
   1234
567891011
12131415161718
19202122232425
2627282930  
Powered by LiveJournal.com
Designed by Tiffany Chow