Я уже писал, что занимаюсь обучением студентов программированию (вот только что закончился мой 12-й семестр в роли «препода»).
Все это творится на физфаке НГУ, на кафедре АФТИ. Все первокурсники, желающие стать не просто физиками, а физиками-информатиками (нечто среднее между чистыми физиками и программистами), попадают к нам. В большинстве своем студенты уже что-то умеют, некоторые даже участвовали в олимпиадах. Это очень большое подспорье, потому что дает возможность заниматься интересными вещами, а не месяцами учить синтаксис языков программирования.
Сам курс называется «Основы программного конструирования» и имеет ту же аббревиатуру, что и «Основы православной культуры», введенные недавно в школах — ОПК. Довольно забавное совпадение :)
Приятной спецификой нашей кафедры является то, что преподавателям никто не указывает, что им делать. Поэтому чтобы изменить программу или реализовать какие-то новые идеи, нужно просто захотеть этого. Так что курс меняется от года к году и приобрел довольно фигуристые очертания. К следующему году, видимо, опять будем что-то менять (кроме меня на курсе работают А. Аксенов и В. Рудаковский).
Сейчас все происходит примерно так. Первый семестр посвящен изучению основных «священных коров» — двоичного представления данных, основных структур данных (списки, деревья, хеш-таблицы), алгоритмов сортировки, модульного подхода к разработке. В конце семестра студенты делают проект, сдают теоретический экзамен и получают итоговую оценку, включающую в себя все.
На первом курсе мы используем Python. Это новация последнего учебного года. Раньше использовали Паскаль, а когда-то совсем давно — Modula-2.
Второй курс начинается с изучения MIX-машины Д.Кнута и примерно месяц студенты пишут на MIX. Потом мы переходим на C. В конце семестра вкратце изучается многопоточное программирование и примитивы синхронизации; семестровый проект должен обязательно включать в себя взаимодействие между потоками. Кроме того, нужно сдать задание по MIX.
В общем, получается довольно интенсивно, но интересно.
Надо сказать, что из всех нововведений в курс (когда я сам проходил его 10 лет назад, в 1-м семестре изучался просто Паскаль, во 2-м — просто C) самым удачным оказалось добавление MIX. При всей кажущейся архаичности MIX-машины, она дает неплохое представление, как все крутится на уровне процессора. При изучении у студентов возникает начальное отторжение, но потом большинству даже нравится.
А вот Python оставил двоякое впечатление. С одной стороны, алгоритмы на нем выразительнее (за счет мощных базовых типов данных), а с другой стороны, когда дело доходит до C и MIX, удар «об стенку» больнее — ведь все вкусности махом пропадают.
Возможно, мы выкинем Python и перераспределим нагрузку между C и MIX. Это еще и высвободит массу лекционного времени, что позволит уделить больше времени всяким интересным темам типа конструирования компиляторов :)
Я сам к скриптовым языкам пришел с позиции «я все это могу написать на C/C++, но нет смысла тратить время». Соответственно, когда я пишу на Python или Ruby, то довольно хорошо представляю, что происходит при исполнении программы.
Есть другая позиция, получающая все более широкое распространение: «использовать работающий инструмент, не задумываясь, как он работает».
Наш подход ближе к первой позиции, но вторую позицию полностью отбросить не получается. Может быть, нужно просто набраться храбрости. :)
Подписаться на:
Комментарии к сообщению (Atom)
2 комментария:
Oleg, privet!
nachitavshis' tov. Joel'a (www.joelonsoftware.com), ya vot hochu pointeresovat'sya - vy ne sobiraetes' vvodit' [Lisp] ili [Scheme] v kachestve dopolneniya k [C] i [Mix]? U menya svoi shkurnye soobrazheniya -- lyudi, ponimayuschie [Lisp], legko pishut na yazyke [Mathematica], a nam takie nuzhny ;) Sam ya iz nashego opyta na AFTI s funkcional'nym programmmirovaniem, uvy, nichego ne vynes. (Ya znayu o praktikume Grozina po Mathematic'e, no on idet pozdnovato - lyudi uzhe bol'shie, i v nem malo prakticheskogo programmirovaniya bol'shih zadach).
a
p
Про Лисп (скорее Scheme) я думал, но тут есть несколько проблем.
1. Ни у кого из нас нет практического опыта в использовании Лиспа для решения реальных задач.
2. Интеграция Scheme в существующее пространство будет непростой. Сейчас получается (примерно), что C - это низкоуровневый Питон, а MIX - низкоуровневый C. А Scheme где-то сбоку стоит.
Отправить комментарий