четверг, февраля 21, 2008

Про обучение программированию

Такой вот рассуждательный пост.

Мне со следующего учебного года, по всей видимости, предстоит обучать студентов программированию. Пока что это спецкурс, скорее факультативный, чем основной (хотя и непосредственно относящийся к специальности), на первом курсе. Называется - спортивное программирование. Звучит конечно круто, но приходится принимать во внимание два обстоятельства: 1) курс - всего 2 часа в неделю (2 академических часа в нашем вузе равняются 1-му астрономическому), 2) большинство (ок. 70%) поступающих к нам на физмат либо плохо знают Паскаль, либо вообще ничего из области программирования не знают. Из-за второго факта на дисциплине "Теория программирования" на первом курсе изучают Паскаль (до прошлого года - Turbo Pascal, сейчас, кажется, перешли на Free Pascal).

В связи со всем этим возникает, конечно, вопрос - как тут можно обучать спортивному программированию? Некоторые вещи я для себя уже уяснил, и продолжаю уяснять, думаю по мере накопления публиковать. Итак, чего я пока нарешал:

  1. Кому не надо - пусть гуляют. Мне вообще обучать кого-либо невыгодно, тем более я не собираюсь возиться с теми, у кого нет желания учиться.
  2. Знание какого-нибудь ЯП в спортивном (да любом) программировании нужно, но не является главным. С учетом того, что Паскалю их обучать будут параллельно, программировать видимо будем все на том же Паскале.
  3. За 27 астрономических часов, размазанных на весь учебный год, подготовить с нуля программиста-олимпийца невозможно никак. Так что от этой цели придется отказаться. Буду делать возможное - постараюсь мало-мальски подготовить желающих стать программистами к самообучению в нужном направлении.
  4. В данной ситуации "спортивное программирование" приходится интерпретировать как знание алгоритмов. Так что будем изучать алгоритмы, сколько успеем. Все остальное, что успею - "дополнительные сведения".
  5. Вопреки всем обстоятельствам, я хочу дать шанс талантливым ребятам, по случайности оказавшимся у нас. Поэтому по возможности буду включать в курс какие-то сведения, помогающие сориентироваться в мире современного программирования.
  6. Какие это могут быть сведения? На изучение, например, современных технологий программирования, у меня нет времени (и подготовка учащихся недостаточна). Перебором вариантов аналогично показывается, что не проходят идеи об изучении каких-либо конкретных разделов/технологий современного программирования (сверх "знания алгоритмов"). Из "дополнительных сведений" конкретные знания приходится исключить.
  7. Таким образом, из "дополнительных" сведений остаются только 1) сведения обзорного характера - хотя бы просто перечисление самых динамично развивающихся сейчас технологий и какая-нибудь попытка классификации языков программирования; 2) какие-то основополагающие, фундаментальные вещи, афористические формулировки - квинтэссенция полувекового опыта программирования; 3) знания, относящиеся не к практике и даже не к теории, а скорее к "философии программирования".

Для практикующих программистов: да, я сам программист, я знаю, что "нормальный программист" не занимается изучением "философии программирования", и чаще всего вообще не замечает ее существования. Это - знания, приходящие с опытом, и программисту кажется, что он это всегда знал, а для первокурсника это вовсе не очевидно. Сюда относится, например, "инстинкт модуляризации" - стремление разнести функциональность по модулям, классам, функциям, аспектам кажется опытному программисту естественным, а для изучающего Паскаль оно непонятно.

Пока что больше вопросов, чем ответов...

9 комментариев:

  1. Анонимный2/21/2008 11:20 PM

    А вам не кажется, что учить студентов Паскалю несколько несовременно? Те, кому вообще предмет нафик не нужен - о них сейчас не говорим, им все равно. А те, кто может быть потом будет программировать? Им бы что-то более практичное, что можно сразу на практике поприменять. В западных вузах, например, первым языком часто выбирают Яву или Питон.

    ОтветитьУдалить
  2. Анонимный2/22/2008 1:43 AM

    Паскаль жил, жив и будет жить! :)

    ОтветитьУдалить
  3. @snitko:
    Будь моя воля - я б учил их Питону или Схеме. Только времени на изучение какого-либо языка у меня нет совсем (весь курс - 27 часов, т.е. можно например использовать книжку типа "Турбо паскаль за 24 часа" и еще останется 3 часа на обсуждение, на алгоритмы времени не останется). Так что приходится обучение языку оставлять на откуп другой дисциплине.

    ОтветитьУдалить
  4. Хм, а другого обязательно курса по программированию параллельно с этим не будет?

    ОтветитьУдалить
  5. Хм, а другого курса по программирования, только обязательного, у тех же студентов не будет?

    ОтветитьУдалить
  6. Параллельно с этим у них идет обязательный курс "Теория программирования". На нем в среднем за 2 семестра кое-как успевают изучить Паскаль.

    ОтветитьУдалить
  7. Анонимный2/24/2008 11:50 AM

    Просто в таком случае — какой смысл иметь второй курс с основами программирования? Лучше уж тогда действительно давать серьёзные задачи для тех, кому это интересно. А кому неинтересно — гнать в шею. Это же продвинутый необязательный курс, так?

    А вообще — такие курсы ИМХО как-то странно в вузе давать, для них самое время — 8-11 класс. В вузе надо либо на науку уже упор делать, либо давать что-то более приближённое к реальной жизни (Python, PHP, .NET или чем там студенты курсу ко второму подрабатывать начнут).

    (Вы ведь понимаете, что публикуя такуя заметку в интеренете, вы не избежите того, что прибегут всякие шибко умные идиоты и будут толкать своё авторитетное мнение? ^_^)

    ОтветитьУдалить
  8. Вот я и собираюсь с ними изучать "шаблонные" алгоритмы - начиная с quicksort-a, авось до алгоритмов на графах доберемся. Изучать, естественно, на задачах.

    Про школу - далеко не всем надо знать что такое quicksort, так что это может быть только факультативом (и есть в правильных школах, но их выпускники у нас в городе после выпускного бала больше месяца не задерживаются).

    Изучать с ними какой бы то ни было язык или технологию у меня нет времени.

    ОтветитьУдалить
  9. http://lisp.ru/page.php?id=34

    а почему не взять готовый митовский курс (первые несколько глав).

    кейзы красивые есть в книжке по коммон-лиспу (http://www.gigamonkeys.com/book/
    перевод http://pcl.catap.ru/doku.php?id=pcl).

    ОтветитьУдалить