Документ взят из кэша поисковой машины. Адрес оригинального документа : http://wasp.phys.msu.ru/forum/lofiversion/index.php?t11644-0.html
Дата изменения: Unknown
Дата индексирования: Mon Apr 11 18:02:48 2016
Кодировка: Windows-1251
Студенческий форум Физфака МГУ > Как обучать программированию на физфаке?
Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как обучать программированию на физфаке?
Студенческий форум Физфака МГУ > Физфак и учеба > Другое
Страницы: 1, 2, 3, 4
ivandasch
В процессе общения с некоторыми людьми, многие из которых понимают что такое программирование гораздо лучше меня, возникла потребность обсудить этот вопрос. Мне кажется, что обучать детей С и С++
, из которых многие вообще понятие не имеют что такое алгоритм, кажется просто варварством и садизмом. Но начинать, как в MIT, с книжки SICP и давать scheme, кажется тоже излишним, ибо не всем нужно так глубоко лезть в computer science. Но, на мой взгляд, давать Python на первых курсах было бы идеально. Отличный язык, огромное количество пакетов для научной работы, существование реализаций, интегрирующихся с .NET и Java. Кому нужно, те легко сами освоят и С, и С++. Но то, что у нас творится на первых курсах, прививает стойкое отвращение к самому процессу программирования, по крайней мере у меня полно примеров( да и у меня вернулся интерес только к курсу четвертому)
Werth
Действительно, преподавание программирования у нас довольно странное. У меня создалось впечатление, что какой-то общей программы нет и в каждой группе учат что-то свое (тут я в основном имею в в виду второй поток, но насколько я знаю, на первом потоке примерно также). Например, у меня на первом курсе было программирование на дельфи, а потом Mathematica (да, и еще LaTeX немного), а в у моего знакомого из другой группы С++ и matlab.
Сложность с программированием в том, что начальный уровень у всех сильно отличается, ни в каком другом курсе такой проблемы нет (кроме английского, но его преподают еще хуже), и что с этим делать не очень понятно.
ivandasch
2 Werth: Что делать с разным уровнем как раз все понятно. На физфак поступают умные люди, поэтому достаточно давать концепции, а не реализации. Для этого нужен ПРОСТОЙ язык. С и С++ для этого явно не подходит. На первых курсах, увы, не учат программированию, а учат реализации некоторых концепций на конкретных языках, которые сами по себе очень сложны и не предназначались для обучения. Это языки для профессионалов.
Werth
Цитата(ivandasch @ 28.7.2007, 18:33)
Для этого нужен ПРОСТОЙ язык. С и С++ для этого явно не подходит.
*

Ну если не вдаваться в детали (ООП какое-нибудь, например, или шаблоны), то С/С++ не сильно отличается от дельфи. Но вообще я согласен, лучше начинать с чего-нибудь другого, того же питона.
ivandasch
2 Werth: Шаблоны это вообще то, ради чего и стоит использовать С++. А без ООП это просто С, который сейчас является "переносимым ассемблером" и для обучения программированию абсолютно не годный. Одна работа с вводом/выводом чего стоит. Масса проблем, на преодоления которых тратится уйма времени, при этом важные детали совсем не освещаются.
P.S. Изучение MATLAB - это вообще нонсенс. Учитывая то, что практически веcь нужный функционал есть в бесплатном виде для python, навязывать эту систему в наше время кажется абсурдным. Не стоит забывать и о борьбе с нелегальным софтом, которое делает изучение Matlab просто бездумной тратой денег, которые факультету явно не хватает.
Werth
Цитата(ivandasch @ 28.7.2007, 18:50)
Шаблоны это вообще то, ради чего и стоит использовать С++.
*

Шаблоны - вещь, конечно, отличная, я просто имел в виду, что их не надо рассказывать на семинарах, по крайней мере на начальном этапе.
Цитата(ivandasch @ 28.7.2007, 18:50)
Одна работа с вводом/выводом чего стоит.
*

Ну для этого можно использовать iostream
Цитата(ivandasch @ 28.7.2007, 18:50)
Изучение MATLAB - это вообще нонсенс. Учитывая то, что практически веcь нужный функционал есть в бесплатном виде для python, навязывать эту систему в наше время кажется абсурдным. Не стоит забывать и о борьбе с нелегальным софтом, которое делает изучение Matlab просто бездумной тратой денег, которые факультету явно не хватает.
*

В матлабе почти все, что нужно уже есть сразу, а для питона нужно еще и устанавливать искать дополнительные пакеты. Но с точки зрения легальности матлаб, конечно, не вариант.
ivandasch
2 Werth: Я имел ввиду ввод-вывод в С. iostream - это STL smile.gif. И как раз ввод/вывод в С++ активно юзает шаблоны, просто часто никто не вдается в реализацию всего этого дела. Но у нас же сначала учать С и мучают детей всякими scanf, sscanf, fsсanf и прочими ужасами. Более того, наш препод вообщена семинарах по С++ не упоминала про STL и активно юзала библиотеку С..... Что называется, no comments
P.S. При этом в дисплейном классе до сих пор используется устаревший компилятор, который не поддерживает стандарт. Этож просто абзац!
P.P.S. Я знаю курс языка С++, где STL и шаблоны начинают использовать сразу, а реализация собственных шаблонов происходит где-то ближе к середине курса smile.gif библиотека С вообще не рассматривается.
Werth
Цитата(ivandasch @ 28.7.2007, 19:14)
Я имел ввиду ввод-вывод в С. iostream - это STL
*

Я в курсе wink.gif , но что нам мешает программировать на С (всякие алгоритмы, численные методы), используя возможности С++ для вывода.
ivandasch
2 Werth: То, что это уже не С smile.gif. Это недо-С++. Да и неразумно не использовать средства ООП, которые только улучшают код.
Werth
Цитата(ivandasch @ 28.7.2007, 19:27)
Да и неразумно не использовать средства ООП, которые только улучшают код.
*

Я считаю, что ОПП в курсе программирования вообще не нужно объяснять, для большинства научных задач это лишнее. А кому понадобится, тот сможет сам разобраться, имхо.
ivandasch
2 Werth: Вот это очень зря, ООП часто незаменимо в некоторых именно научных задачах. На самом деле в концепции ООП ничего сложного нет, и на примере простых языков эту парадигму понять очень легко.
Werth
Цитата(ivandasch @ 28.7.2007, 19:46)
На самом деле в концепции ООП ничего сложного нет, и на примере простых языков эту парадигму понять очень легко.
*

Но все-таки сначала хорошо бы объяснить более просты вещи, циклы или массивы, например. А то некоторые и этого не знают.
ivandasch
2 Werth: Это следствие сложности языка. Например зачем осваивать "массив", когда он уже реализован и является встроенным типом? Так же как список,хеш, тьюпл. Понять как реализовать массив не могут потому, что не разобрались с указателями. С циклами не разобрались потому, что голова перегружена другими деталями. Кстати, изучая С, люди так и не узнают что такое функциональное программирования. Я лично только сейчас начал исправлять огрехи нашего физфаковского образования.
P.S. Зато мы изучали win32api ("Зато мы делаем ракеты, и переплыли Енисей.....")
TaL
Развели демагогию... Вы ж профессионалы оба - достаньте и померяйтесь. Я ваще кроме как недо-С++ походу ничего не знаю smile.gif И ничего, за свои детища не шипко краснею.
Хоть и моя кафедра, но преподавают, проганье действительно отвратно. Причины тому вполне очевидны для инсайдера, но как вы понимаете, сказать я ничего не скажу (мне еще диплом получить надо) smile.gif
Давайте ближе к телу, господа. У меня напиример есть неплохой материал, который я хотел Соболеву предложить как пособие для спецкурса. Если есть какой-нть brief summary по вашей альтернативе, активней, я полон энтуазизма пообщаться и с Соболевым, а возможно и с самим Пытьевым по этому поводу. С фразой "давайте преподавать Python" или "все это недо-С++" или "Ваня ваши методы на шляпу намазывает и ест по утрам", я естественно ни к кому общаться не пойду.
Жду фидбэка, желательно с ударом в ПМ, чтоб я оперативней реагировал...
Werth
Цитата(ivandasch @ 28.7.2007, 20:05)
Например зачем осваивать "массив", когда он уже реализован и является встроенным типом?
*

Я имел в виду само понятие. Для некоторых это не совсем очевидно.

Цитата(ivandasch @ 28.7.2007, 20:05)
Кстати, изучая С, люди так и не узнают что такое функциональное программирования.
*

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

Цитата(ivandasch @ 28.7.2007, 20:05)
Зато мы изучали win32api
*

А мы нет 09.gif
ivandasch
Лех, посмотри в сторону http://www.intuit.ru/department/pl/python/12/2.html. Отличное введение. При желании, я могу привлечь одного функциональщика для спецкурса по clisp или scheme. Возможность есть, было бы желание....

Werth, lisp для численных расчетов, естественно, не годен. Но для таких вещей как CAS он очень полезен, ну и вообще для вправления мозгов. Все-таки в MIT не дураки работают, но почему-то они на первом курсе преподают программирование на базе диалекта lisp smile.gif
TaL
Я со следующей недели наверно буду активно на факультете появляться начинать. Ты бываешь там? Пообщаимсо. Я кстати, уже вторую неделю не курю и уже не хочется. Так что, скоро стану жирным ублюдком smile.gif Ну я надеюсь...
SHiFT
про python мысль интересная. недавно меня познакомили с пакетами numpy и scipy -- в принципе, по возможностям почти как матлаб без тулбоксов и без оболочки.
у этой концепции есть недостатки -- 1) мало кто с этим знаком, 2) отсутсвие вменяемой интерактивной среды -- я имею в виду не существующие среды для питона, а именно математические a-la matlab. (я как-то уже привык получать необходимую мне информацию в середине отладки одним наведением мыши на объект). 3) готовые библиотеки алгоритмов (a-la toolbox'ы матлаба) :-) причем первое -- существенней.

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

и еще одно пожелание: просьба подкреплять свои предположения конкретным опытом, а не просто восторгом от опыта знакомства с конкретной средой/языком или пакетом, или своим IMHO.
скажем, кому-то не хватало познаний в теории графов и диаграмм вороного для решения конкретной задачи, или кому-то пришлось, матерясь, осваивать самостоятельно QT/unix для чего-то конкретного, или кто-то с горя пошел на доп. образование чтобы еще раз изучить С++, потому-что науч.рук потребовал что-то сделать.

Tal: никто тебя не выгонит с кафедры, не переживай.. 15.gif
Werth
Цитата(ivandasch @ 28.7.2007, 20:13)
lisp для численных расчетов, естественно, не годен. Но для таких вещей как CAS он очень полезен, ну и вообще для вправления мозгов.
*

Да, согласен. Хотя вряд ли у кого-нибудь может возникнуть необходимость писать самому CAS.

Цитата(SHiFT @ 28.7.2007, 20:29)
отсутсвие вменяемой интерактивной среды -- я имею в виду не существующие среды для питона, а именно математические a-la matlab. (я как-то уже привык получать необходимую мне информацию в середине отладки одним наведением мыши на объект)
*

Вот это мне больше всего нравится в матлабе. Вплоть до того, что я некоторые алгоритмы сначала пишу и отлаживаю в матлабе, а потом переношу на С++ или Fortran
ivandasch
2 SHiFT: Да сред полно, включая бесплатные. Например Eric http://www.die-offenbachs.de/eric/eric4-screenshots.html Сорри, по Лоровской привычке до конца не дочитал..... Но ученые не жалуются, им то как раз Python очень нравится. И он значительно быстрее Matlab.

Я это говорю, потому что сейчас разрабатываю конкретный софт, используя С++ и Qt4(ну и еще одну кривую библиотеку). И понимаю, что знаний мне не хватает. Понял я это после разговора с коллегой, который большой фанат функционального программирования. Он говорит, что это совершило в его сознании настоящий переворот. Начал и я копать в эту тему, и понял, что сам практически ничего не знаю из теории алгоритмов. И меня это удручает. Естественно С++ я изучал сам, причем скорее этому меня побудило знакомство с Linux и Qt. Можно сказать то, что физфак не дал мне ничего в области computer science, до всего доходил сам.
TaL
Кстати о Средах. Поставил себе вчера Федору 7... Очень нравится. Не могу объяснить чем, но аж до визга. И быстро и ненапряжно и пакеты, которые в SL5 пользовался - есть сразу, не надо докачивать тачку барахла потом. У меня вот вопрос такой по существу. А не снести ли нам нафик Винды и не поставить ли Никсы - они щас ничем не хуже Виндей для пользователей. Все стандартные плюсы. И я не верю, что нет ни одной IDE под питон приличной. Взять хотя бы KDevelope - там кажется есть опции и разметки и отладки и прочего для питона. А если нет совсем, то ваще УРА - есть курсавая для всех студентов 2 курса - каждый пишет свою часть крупного проекта, фактически массовая корпоративная разработка под GPL лицензией. Как мысль? Я близок к тому, чтобы поверить в реальность коммунизма во всем мире, не обламывайте...
ivandasch
2 TaL: Ты еще не пробовал Slick Edit? Попробуй - восторга будет море, жалко он коммерческий. Индексация кода, автокомплит, отменный рефакторинг с огромной скоростью. А для питона есть стандарт de-facto, называется Eric(см. выше). Но, насколько я понял, требуется что-то матлабообразное, хотя все свойства хорошей IDE там есть. Еще забыл Eclipse, хоть и тормоз, но все, что нужно, там есть и навалом smile.gif.
P.S. Кстати, для питона есть отменные биндинги для Qt. Это так, к слову smile.gif
TaL
Чтоб я деньги платил за никс? Есть кстати еще c-forge среда, тоже коммерческая, но ведь полно отменных бесплатных аналогов...

А про матлаб я ваще не хочу говорить - не знаю, знать не хочу. Интерпретатор, тормоз и преподавал его на тов. Сингапур, так что кроме паники эмоций не вызывает.
ivandasch
2 TaL: Во-первых, есть кряк smile.gif. Во-вторых c автокомплишеном под GPL беда, тут либо Eclipse, либо проприетарщина. ctags к сожаленью пока уступает, сильно уступает.....
DELIRIUM
Fortran ?

Язык полезный, есть библиотеки вычислительные, синтаксис не сложный, строгая типизация. По-моему для физфака самое то.

С питоном знаком мало, но мне кажется, что начинать обучение программированию с интерепретируемого языка немного не правильно.
ivandasch
2 DELIRIUM: В MIT начинаю обучение вообще c scheme(диалект lisp). На этапе обучения программированию не имеет значение интерпретируемый язык или нет. Главное донести концепции, и чем проще их объяснить тем лучше. Тем более, что питон все больше и больше проникает в науку. Fortran'у обучать? Смеешься чтоль, у нас же не курс вычислительной математики и численных методов!
P.S. Кстати, питон компилируется в байт-код, причем не только нативный, но и JVM и .NET(есть такие реализации).
SHiFT
по поводу юниксов:

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

Tal: тебе просто "повезло" с преподавателем. :-) а еще ты прогулял спецкурс Иванова про матлаб -- а зря, узнал бы много нового и интересного. :-)
ivandasch
2 SHiFT: Это хорошо. Хотя для того же Питона и запуска Eric наличие linux не требуется. Главное надо продумать что именно давать, имхо это самое сложное. В принципе надо давать алгоритмы, для этого требуется переработать несколько курсов и оставить самые важные темы.
SHiFT
ivan: каких именно алгоритмов/паттернов/приемов программирония тебе не хватало именно для решения твоей физ/мат. задачи? (просто перечисли)
ivandasch
Конкретно - алгоритмы сортировки, поиска. Различные структуры данных - деревья, хеши. Нам даже списков не давали! Может мы были тупые, но, думаю, дело в сложности С++. Пришлось ботать самому. Почему бы это не объяснить младшим курсам? А курсовую сделать гораздо быстрее и проще на простом языке. Сколько интересных идей можно реализовать. А получаем банальную решалку уравнения типа Ван-Дер-Поля.
SHiFT
хм... странно. значит тебе не повезло :-). как правило -- половина задач про это. особенно у соболева :-)
правда, мы это на зачете не спрашиваем.
а про все эти же алгоритмы, но с выводом скорости сходимости и с доказательствами у нас отдельный спецкурс есть у Иванова А.П. (раньше на 5м курсе было, щас собираются передвинуть на по-раньше, вроде)
ivandasch
2 SHiFT: Мда, не повезло. И еще много кому, в том числе и TaL'у, и многих кого я знаю. Всего лишь маленький эпизод.... Может помощи стоит попросить? Не кажется?
P.S. Жалею, что не ходил на различные курсы, дураком был.... Не оказалось рядом человека, который бы наставил на путь истинный.
SHiFT
хе-хе :-)

если Tal'у повезет пролезть в аспирантуру (если он захочет, конечно) или забить на аспирантуру и устроиться на ставку -- у него будет шанс все взять в свои руки, и исправить! preved.gif ну, или покрайней мере озвучить свои соображения на ближайшем заседании кафедры.
а пока -- все остальное можно обсудить тут. а то одни жалуются, что им программирования много, другие -- что, наоборот, мало -- непорядок!
DELIRIUM
Цитата(SHiFT @ 30.7.2007, 0:56)
а про все эти же алгоритмы, но с выводом скорости сходимости и с доказательствами у нас отдельный спецкурс есть у Иванова А.П. (раньше на 5м курсе было, щас собираются передвинуть на по-раньше, вроде)
*


Да. Курс базируется на книжке Вирта "Алгоритмы и структуры данных". Книжку читал, но интересно послушать это в изложении Иванова (мой семинарист бывший). Уже договорился с ним, что осенью буду слушать курс вместе с 5тикурами КМФ. (вроде в этом году будет еще у 5го курса)
BrainFuck
Судя по тому что в Дисплейных классах уже установлена .NET студия (м.б. лицензионная) на роль простого в освоении, объектно ориентированного, без усложняющих элементов: множественного наследования, обобщенного программирования, старой сишной стандартной библиотеки и т.д. подходит C#.
Как аргумент -- поледний финалист acm использовал именного его,а не всеми нами любимый С++ smile.gif
Из плюсов:
Возможность выбраться из темени консоли, новизна языка,а значит и возможная его перспективность, наличие превосходной IDE (+VisualAssistX 139.gif )
Stik
Насчет сложности С, как первого языка: не знаю, не знаю, а мы его проходили в 10 классе, а потом в 11 С++... И ничего, все справились... И, как я понимаю, меня там научили большему, чем научат здесь... По крайней мере пока почти ничего нового за год я не узнал...
dvboy
2 Stik: +1.
Не, это логично, что если начинать в школе изучать Си, то тут с ним проблем не будет. Я например С++ аж с 8 класса изучаю. Понятно, что тут на 1м курсе мне было откровенно скучно)

Вот по поводу C# согласен. Я его только начал изучать, но первое впечатление - очень положительное. То, что он логичнее С++ и более что ли юзер френдли по крайней мере - это точно.
Марсианин
А чем C# лучше Java?
ivandasch
Абсолютно согласен. Java реально кроссплотформенный framework, а .NET в полном объеме представлен только под одну всем известную платформу. Во-вторых, вы предлагаете опять начать изучать технологию, а надо изучать принципы программирования. Изучать надо не язык или фреймворк, а конкретные алгоритмы.
dvboy
ну алгоритмы можно и на паскале писать.... Зачем тогда изголяться и что-то придумывать?
Stik
Кто бы мне объяснил, зачем мы программы на бумаге пишем... 194.gif
BrainFuck
Цитата(ivandasch @ 30.8.2007, 19:46) *
Абсолютно согласен. Java реально кроссплотформенный framework, а .NET в полном объеме представлен только под одну всем известную платформу. Во-вторых, вы предлагаете опять начать изучать технологию, а надо изучать принципы программирования. Изучать надо не язык или фреймворк, а конкретные алгоритмы.

это понятно,что в конце концов все сведется к emacs или vim и функциональному програмиррованию, а для начала важен именно хороший целостный фреймворк, отсутствие заморочек с различием коммерческих и опенсорс версий , красота синтаксиса(кучи лисповых скобок 193.gif ), а уж точно не кроссплатформенность.
Видел уже не одну книжку по теории алгоритмов,примеры в которой не на почти стандартном для такого рода изданий Паскале, и не на C/C++, а нп C# smile.gif
Trank
Цитата
Конкретно - алгоритмы сортировки, поиска. Различные структуры данных - деревья, хеши. Нам даже списков не давали! Может мы были тупые, но, думаю, дело в сложности С++.

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

чтобы некоторые не скучали, в этом году есть идея провести что-то типа олимпиады по программированию на 1-2м курсе. как вы к этому относитесь?
Trank
хех. если там не потребуют деревьев, то почему бы и нет)
ivandasch
2 Trank: А чего там еще требовать? "Кнопачки на формачки бросать в Дебильдере?" (ї LoR)
SHiFT
ну... че-нть такое: http://algolist.manual.ru/olimp/
(как минимум)
Марсианин
Разумно...
Trank
Цитата
2 Trank: А чего там еще требовать? "Кнопачки на формачки бросать в Дебильдере?" (ї LoR)

мозгов.
ну знаете, у первокуров спрашивать деревья, притом что "не всем повезло со школой", это сурово.

ссылка - все-таки простовато.
ivandasch
2 Trank: Большая часть олимпиадных задач не решается без знания элементарных структур данных и алгоритмов. Ведь есть полно сайтов, по материалам из которых можно готовиться.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2016 IPS, Inc.