Мне со следующего учебного года, по всей видимости, предстоит обучать студентов программированию. Пока что это спецкурс, скорее факультативный, чем основной (хотя и непосредственно относящийся к специальности), на первом курсе. Называется - спортивное программирование. Звучит конечно круто, но приходится принимать во внимание два обстоятельства: 1) курс - всего 2 часа в неделю (2 академических часа в нашем вузе равняются 1-му астрономическому), 2) большинство (ок. 70%) поступающих к нам на физмат либо плохо знают Паскаль, либо вообще ничего из области программирования не знают. Из-за второго факта на дисциплине "Теория программирования" на первом курсе изучают Паскаль (до прошлого года - Turbo Pascal, сейчас, кажется, перешли на Free Pascal).
В связи со всем этим возникает, конечно, вопрос - как тут можно обучать спортивному программированию? Некоторые вещи я для себя уже уяснил, и продолжаю уяснять, думаю по мере накопления публиковать. Итак, чего я пока нарешал:
- Кому не надо - пусть гуляют. Мне вообще обучать кого-либо невыгодно, тем более я не собираюсь возиться с теми, у кого нет желания учиться.
- Знание какого-нибудь ЯП в спортивном (да любом) программировании нужно, но не является главным. С учетом того, что Паскалю их обучать будут параллельно, программировать видимо будем все на том же Паскале.
- За 27 астрономических часов, размазанных на весь учебный год, подготовить с нуля программиста-олимпийца невозможно никак. Так что от этой цели придется отказаться. Буду делать возможное - постараюсь мало-мальски подготовить желающих стать программистами к самообучению в нужном направлении.
- В данной ситуации "спортивное программирование" приходится интерпретировать как знание алгоритмов. Так что будем изучать алгоритмы, сколько успеем. Все остальное, что успею - "дополнительные сведения".
- Вопреки всем обстоятельствам, я хочу дать шанс талантливым ребятам, по случайности оказавшимся у нас. Поэтому по возможности буду включать в курс какие-то сведения, помогающие сориентироваться в мире современного программирования.
- Какие это могут быть сведения? На изучение, например, современных технологий программирования, у меня нет времени (и подготовка учащихся недостаточна). Перебором вариантов аналогично показывается, что не проходят идеи об изучении каких-либо конкретных разделов/технологий современного программирования (сверх "знания алгоритмов"). Из "дополнительных сведений" конкретные знания приходится исключить.
- Таким образом, из "дополнительных" сведений остаются только 1) сведения обзорного характера - хотя бы просто перечисление самых динамично развивающихся сейчас технологий и какая-нибудь попытка классификации языков программирования; 2) какие-то основополагающие, фундаментальные вещи, афористические формулировки - квинтэссенция полувекового опыта программирования; 3) знания, относящиеся не к практике и даже не к теории, а скорее к "философии программирования".
Для практикующих программистов: да, я сам программист, я знаю, что "нормальный программист" не занимается изучением "философии программирования", и чаще всего вообще не замечает ее существования. Это - знания, приходящие с опытом, и программисту кажется, что он это всегда знал, а для первокурсника это вовсе не очевидно. Сюда относится, например, "инстинкт модуляризации" - стремление разнести функциональность по модулям, классам, функциям, аспектам кажется опытному программисту естественным, а для изучающего Паскаль оно непонятно.
Пока что больше вопросов, чем ответов...
А вам не кажется, что учить студентов Паскалю несколько несовременно? Те, кому вообще предмет нафик не нужен - о них сейчас не говорим, им все равно. А те, кто может быть потом будет программировать? Им бы что-то более практичное, что можно сразу на практике поприменять. В западных вузах, например, первым языком часто выбирают Яву или Питон.
ОтветитьУдалитьПаскаль жил, жив и будет жить! :)
ОтветитьУдалить@snitko:
ОтветитьУдалитьБудь моя воля - я б учил их Питону или Схеме. Только времени на изучение какого-либо языка у меня нет совсем (весь курс - 27 часов, т.е. можно например использовать книжку типа "Турбо паскаль за 24 часа" и еще останется 3 часа на обсуждение, на алгоритмы времени не останется). Так что приходится обучение языку оставлять на откуп другой дисциплине.
Хм, а другого обязательно курса по программированию параллельно с этим не будет?
ОтветитьУдалитьХм, а другого курса по программирования, только обязательного, у тех же студентов не будет?
ОтветитьУдалитьПараллельно с этим у них идет обязательный курс "Теория программирования". На нем в среднем за 2 семестра кое-как успевают изучить Паскаль.
ОтветитьУдалитьПросто в таком случае — какой смысл иметь второй курс с основами программирования? Лучше уж тогда действительно давать серьёзные задачи для тех, кому это интересно. А кому неинтересно — гнать в шею. Это же продвинутый необязательный курс, так?
ОтветитьУдалитьА вообще — такие курсы ИМХО как-то странно в вузе давать, для них самое время — 8-11 класс. В вузе надо либо на науку уже упор делать, либо давать что-то более приближённое к реальной жизни (Python, PHP, .NET или чем там студенты курсу ко второму подрабатывать начнут).
(Вы ведь понимаете, что публикуя такуя заметку в интеренете, вы не избежите того, что прибегут всякие шибко умные идиоты и будут толкать своё авторитетное мнение? ^_^)
Вот я и собираюсь с ними изучать "шаблонные" алгоритмы - начиная с quicksort-a, авось до алгоритмов на графах доберемся. Изучать, естественно, на задачах.
ОтветитьУдалитьПро школу - далеко не всем надо знать что такое quicksort, так что это может быть только факультативом (и есть в правильных школах, но их выпускники у нас в городе после выпускного бала больше месяца не задерживаются).
Изучать с ними какой бы то ни было язык или технологию у меня нет времени.
http://lisp.ru/page.php?id=34
ОтветитьУдалитьа почему не взять готовый митовский курс (первые несколько глав).
кейзы красивые есть в книжке по коммон-лиспу (http://www.gigamonkeys.com/book/
перевод http://pcl.catap.ru/doku.php?id=pcl).