ivandasch
28.7.2007, 17:13
В процессе общения с некоторыми людьми, многие из которых понимают что такое программирование гораздо лучше меня, возникла потребность обсудить этот вопрос. Мне кажется, что обучать детей С и С++
, из которых многие вообще понятие не имеют что такое алгоритм, кажется просто варварством и садизмом. Но начинать, как в MIT, с книжки SICP и давать scheme, кажется тоже излишним, ибо не всем нужно так глубоко лезть в computer science. Но, на мой взгляд, давать Python на первых курсах было бы идеально. Отличный язык, огромное количество пакетов для научной работы, существование реализаций, интегрирующихся с .NET и Java. Кому нужно, те легко сами освоят и С, и С++. Но то, что у нас творится на первых курсах, прививает стойкое отвращение к самому процессу программирования, по крайней мере у меня полно примеров( да и у меня вернулся интерес только к курсу четвертому)
Действительно, преподавание программирования у нас довольно странное. У меня создалось впечатление, что какой-то общей программы нет и в каждой группе учат что-то свое (тут я в основном имею в в виду второй поток, но насколько я знаю, на первом потоке примерно также). Например, у меня на первом курсе было программирование на дельфи, а потом Mathematica (да, и еще LaTeX немного), а в у моего знакомого из другой группы С++ и matlab.
Сложность с программированием в том, что начальный уровень у всех сильно отличается, ни в каком другом курсе такой проблемы нет (кроме английского, но его преподают еще хуже), и что с этим делать не очень понятно.
ivandasch
28.7.2007, 17:33
2 Werth: Что делать с разным уровнем как раз все понятно. На физфак поступают умные люди, поэтому достаточно давать концепции, а не реализации. Для этого нужен ПРОСТОЙ язык. С и С++ для этого явно не подходит. На первых курсах, увы, не учат программированию, а учат реализации некоторых концепций на конкретных языках, которые сами по себе очень сложны и не предназначались для обучения. Это языки для профессионалов.
Цитата(ivandasch @ 28.7.2007, 18:33)
Для этого нужен ПРОСТОЙ язык. С и С++ для этого явно не подходит.
Ну если не вдаваться в детали (ООП какое-нибудь, например, или шаблоны), то С/С++ не сильно отличается от дельфи. Но вообще я согласен, лучше начинать с чего-нибудь другого, того же питона.
ivandasch
28.7.2007, 17:50
2 Werth: Шаблоны это вообще то, ради чего и стоит использовать С++. А без ООП это просто С, который сейчас является "переносимым ассемблером" и для обучения программированию абсолютно не годный. Одна работа с вводом/выводом чего стоит. Масса проблем, на преодоления которых тратится уйма времени, при этом важные детали совсем не освещаются.
P.S. Изучение MATLAB - это вообще нонсенс. Учитывая то, что практически веcь нужный функционал есть в бесплатном виде для python, навязывать эту систему в наше время кажется абсурдным. Не стоит забывать и о борьбе с нелегальным софтом, которое делает изучение Matlab просто бездумной тратой денег, которые факультету явно не хватает.
Цитата(ivandasch @ 28.7.2007, 18:50)
Шаблоны это вообще то, ради чего и стоит использовать С++.
Шаблоны - вещь, конечно, отличная, я просто имел в виду, что их не надо рассказывать на семинарах, по крайней мере на начальном этапе.
Цитата(ivandasch @ 28.7.2007, 18:50)
Одна работа с вводом/выводом чего стоит.
Ну для этого можно использовать iostream
Цитата(ivandasch @ 28.7.2007, 18:50)
Изучение MATLAB - это вообще нонсенс. Учитывая то, что практически веcь нужный функционал есть в бесплатном виде для python, навязывать эту систему в наше время кажется абсурдным. Не стоит забывать и о борьбе с нелегальным софтом, которое делает изучение Matlab просто бездумной тратой денег, которые факультету явно не хватает.
В матлабе почти все, что нужно уже есть сразу, а для питона нужно еще и устанавливать искать дополнительные пакеты. Но с точки зрения легальности матлаб, конечно, не вариант.
ivandasch
28.7.2007, 18:14
2 Werth: Я имел ввиду ввод-вывод в С. iostream - это STL

. И как раз ввод/вывод в С++ активно юзает шаблоны, просто часто никто не вдается в реализацию всего этого дела. Но у нас же сначала учать С и мучают детей всякими scanf, sscanf, fsсanf и прочими ужасами. Более того, наш препод вообщена семинарах по С++ не упоминала про STL и активно юзала библиотеку С..... Что называется, no comments
P.S. При этом в дисплейном классе до сих пор используется устаревший компилятор, который не поддерживает стандарт. Этож просто абзац!
P.P.S. Я знаю курс языка С++, где STL и шаблоны начинают использовать сразу, а реализация собственных шаблонов происходит где-то ближе к середине курса

библиотека С вообще не рассматривается.
Цитата(ivandasch @ 28.7.2007, 19:14)
Я имел ввиду ввод-вывод в С. iostream - это STL
Я в курсе

, но что нам мешает программировать на С (всякие алгоритмы, численные методы), используя возможности С++ для вывода.
ivandasch
28.7.2007, 18:27
2 Werth: То, что это уже не С

. Это недо-С++. Да и неразумно не использовать средства ООП, которые только улучшают код.
Цитата(ivandasch @ 28.7.2007, 19:27)
Да и неразумно не использовать средства ООП, которые только улучшают код.
Я считаю, что ОПП в курсе программирования вообще не нужно объяснять, для большинства научных задач это лишнее. А кому понадобится, тот сможет сам разобраться, имхо.
ivandasch
28.7.2007, 18:46
2 Werth: Вот это очень зря, ООП часто незаменимо в некоторых именно научных задачах. На самом деле в концепции ООП ничего сложного нет, и на примере простых языков эту парадигму понять очень легко.
Цитата(ivandasch @ 28.7.2007, 19:46)
На самом деле в концепции ООП ничего сложного нет, и на примере простых языков эту парадигму понять очень легко.
Но все-таки сначала хорошо бы объяснить более просты вещи, циклы или массивы, например. А то некоторые и этого не знают.
ivandasch
28.7.2007, 19:05
2 Werth: Это следствие сложности языка. Например зачем осваивать "массив", когда он уже реализован и является встроенным типом? Так же как список,хеш, тьюпл. Понять как реализовать массив не могут потому, что не разобрались с указателями. С циклами не разобрались потому, что голова перегружена другими деталями. Кстати, изучая С, люди так и не узнают что такое функциональное программирования. Я лично только сейчас начал исправлять огрехи нашего физфаковского образования.
P.S. Зато мы изучали win32api ("Зато мы делаем ракеты, и переплыли Енисей.....")
Развели демагогию... Вы ж профессионалы оба - достаньте и померяйтесь. Я ваще кроме как недо-С++ походу ничего не знаю

И ничего, за свои детища не шипко краснею.
Хоть и моя кафедра, но преподавают, проганье действительно отвратно. Причины тому вполне очевидны для инсайдера, но как вы понимаете, сказать я ничего не скажу (мне еще диплом получить надо)
Давайте ближе к телу, господа. У меня напиример есть неплохой материал, который я хотел Соболеву предложить как пособие для спецкурса. Если есть какой-нть brief summary по вашей альтернативе, активней, я полон энтуазизма пообщаться и с Соболевым, а возможно и с самим Пытьевым по этому поводу. С фразой "давайте преподавать Python" или "все это недо-С++" или "Ваня ваши методы на шляпу намазывает и ест по утрам", я естественно ни к кому общаться не пойду.
Жду фидбэка, желательно с ударом в ПМ, чтоб я оперативней реагировал...
Цитата(ivandasch @ 28.7.2007, 20:05)
Например зачем осваивать "массив", когда он уже реализован и является встроенным типом?
Я имел в виду само понятие. Для некоторых это не совсем очевидно.
Цитата(ivandasch @ 28.7.2007, 20:05)
Кстати, изучая С, люди так и не узнают что такое функциональное программирования.
А надо? Я правда сам его почти не знаю, только собираюсь заботать, но после чтения всяких обзорных статей у меня создалось впечатление, что для физических задач это не сильно нужная вещь.
Цитата(ivandasch @ 28.7.2007, 20:05)
А мы нет
ivandasch
28.7.2007, 19:13
Лех, посмотри в сторону
http://www.intuit.ru/department/pl/python/12/2.html. Отличное введение. При желании, я могу привлечь одного функциональщика для спецкурса по clisp или scheme. Возможность есть, было бы желание....
Werth, lisp для численных расчетов, естественно, не годен. Но для таких вещей как CAS он очень полезен, ну и вообще для вправления мозгов. Все-таки в MIT не дураки работают, но почему-то они на первом курсе преподают программирование на базе диалекта lisp
Я со следующей недели наверно буду активно на факультете появляться начинать. Ты бываешь там? Пообщаимсо. Я кстати, уже вторую неделю не курю и уже не хочется. Так что, скоро стану жирным ублюдком

Ну я надеюсь...
про python мысль интересная. недавно меня познакомили с пакетами numpy и scipy -- в принципе, по возможностям почти как матлаб без тулбоксов и без оболочки.
у этой концепции есть недостатки -- 1) мало кто с этим знаком, 2) отсутсвие вменяемой интерактивной среды -- я имею в виду не существующие среды для питона, а именно математические a-la matlab. (я как-то уже привык получать необходимую мне информацию в середине отладки одним наведением мыши на объект). 3) готовые библиотеки алгоритмов (a-la toolbox'ы матлаба) :-) причем первое -- существенней.
кстати -- про способности наших студентов вы преуменьшаете. студент у нас способный, только очень ленивый. сложности ровно из-за этого. за последние 4 года моего стажа -- НИ ОДИН студент в моей группе не обращался ко мне с вопросом о доп. времени в компьютерном классе, несмотря на то, что компы есть не у всех, и не все (а особенно те, у кого нету дома компов) успевают написать все в классе.
и еще одно пожелание: просьба подкреплять свои предположения конкретным опытом, а не просто восторгом от опыта знакомства с конкретной средой/языком или пакетом, или своим IMHO.
скажем, кому-то не хватало познаний в теории графов и диаграмм вороного для решения конкретной задачи, или кому-то пришлось, матерясь, осваивать самостоятельно QT/unix для чего-то конкретного, или кто-то с горя пошел на доп. образование чтобы еще раз изучить С++, потому-что науч.рук потребовал что-то сделать.
Tal: никто тебя не выгонит с кафедры, не переживай..
Цитата(ivandasch @ 28.7.2007, 20:13)
lisp для численных расчетов, естественно, не годен. Но для таких вещей как CAS он очень полезен, ну и вообще для вправления мозгов.
Да, согласен. Хотя вряд ли у кого-нибудь может возникнуть необходимость писать самому CAS.
Цитата(SHiFT @ 28.7.2007, 20:29)
отсутсвие вменяемой интерактивной среды -- я имею в виду не существующие среды для питона, а именно математические a-la matlab. (я как-то уже привык получать необходимую мне информацию в середине отладки одним наведением мыши на объект)
Вот это мне больше всего нравится в матлабе. Вплоть до того, что я некоторые алгоритмы сначала пишу и отлаживаю в матлабе, а потом переношу на С++ или Fortran
ivandasch
28.7.2007, 19:33
2 SHiFT: Да сред полно, включая бесплатные. Например Eric
http://www.die-offenbachs.de/eric/eric4-screenshots.html Сорри, по Лоровской привычке до конца не дочитал..... Но ученые не жалуются, им то как раз Python очень нравится. И он значительно быстрее Matlab.
Я это говорю, потому что сейчас разрабатываю конкретный софт, используя С++ и Qt4(ну и еще одну кривую библиотеку). И понимаю, что знаний мне не хватает. Понял я это после разговора с коллегой, который большой фанат функционального программирования. Он говорит, что это совершило в его сознании настоящий переворот. Начал и я копать в эту тему, и понял, что сам практически ничего не знаю из теории алгоритмов. И меня это удручает. Естественно С++ я изучал сам, причем скорее этому меня побудило знакомство с Linux и Qt. Можно сказать то, что физфак не дал мне ничего в области computer science, до всего доходил сам.
Кстати о Средах. Поставил себе вчера Федору 7... Очень нравится. Не могу объяснить чем, но аж до визга. И быстро и ненапряжно и пакеты, которые в SL5 пользовался - есть сразу, не надо докачивать тачку барахла потом. У меня вот вопрос такой по существу. А не снести ли нам нафик Винды и не поставить ли Никсы - они щас ничем не хуже Виндей для пользователей. Все стандартные плюсы. И я не верю, что нет ни одной IDE под питон приличной. Взять хотя бы KDevelope - там кажется есть опции и разметки и отладки и прочего для питона. А если нет совсем, то ваще УРА - есть курсавая для всех студентов 2 курса - каждый пишет свою часть крупного проекта, фактически массовая корпоративная разработка под GPL лицензией. Как мысль? Я близок к тому, чтобы поверить в реальность коммунизма во всем мире, не обламывайте...
ivandasch
28.7.2007, 19:56
2 TaL: Ты еще не пробовал Slick Edit? Попробуй - восторга будет море, жалко он коммерческий. Индексация кода, автокомплит, отменный рефакторинг с огромной скоростью. А для питона есть стандарт de-facto, называется Eric(см. выше). Но, насколько я понял, требуется что-то матлабообразное, хотя все свойства хорошей IDE там есть. Еще забыл Eclipse, хоть и тормоз, но все, что нужно, там есть и навалом

.
P.S. Кстати, для питона есть отменные биндинги для Qt. Это так, к слову
Чтоб я деньги платил за никс? Есть кстати еще c-forge среда, тоже коммерческая, но ведь полно отменных бесплатных аналогов...
А про матлаб я ваще не хочу говорить - не знаю, знать не хочу. Интерпретатор, тормоз и преподавал его на тов. Сингапур, так что кроме паники эмоций не вызывает.
ivandasch
28.7.2007, 20:00
2 TaL: Во-первых, есть кряк
. Во-вторых c автокомплишеном под GPL беда, тут либо Eclipse, либо проприетарщина. ctags к сожаленью пока уступает, сильно уступает.....
DELIRIUM
29.7.2007, 11:19
Fortran ?
Язык полезный, есть библиотеки вычислительные, синтаксис не сложный, строгая типизация. По-моему для физфака самое то.
С питоном знаком мало, но мне кажется, что начинать обучение программированию с интерепретируемого языка немного не правильно.
ivandasch
29.7.2007, 12:16
2 DELIRIUM: В MIT начинаю обучение вообще c scheme(диалект lisp). На этапе обучения программированию не имеет значение интерпретируемый язык или нет. Главное донести концепции, и чем проще их объяснить тем лучше. Тем более, что питон все больше и больше проникает в науку. Fortran'у обучать? Смеешься чтоль, у нас же не курс вычислительной математики и численных методов!
P.S. Кстати, питон компилируется в байт-код, причем не только нативный, но и JVM и .NET(есть такие реализации).
по поводу юниксов:
в следующем семестре в компьютерном классе обещали открыть два терминальных сервера -- один старый, виндовый, и один линуксовый (OpenSuSE 10.2), обещали что логины будут работать и там и там. -- так что при наличии инициативы -- можно будет ознакомиться. правда, общая программа курса на 1м потоке, скорее всего, не поменяется.
Tal: тебе просто "повезло" с преподавателем. :-) а еще ты прогулял спецкурс Иванова про матлаб -- а зря, узнал бы много нового и интересного. :-)
ivandasch
29.7.2007, 19:20
2 SHiFT: Это хорошо. Хотя для того же Питона и запуска Eric наличие linux не требуется. Главное надо продумать что именно давать, имхо это самое сложное. В принципе надо давать алгоритмы, для этого требуется переработать несколько курсов и оставить самые важные темы.
ivan: каких именно алгоритмов/паттернов/приемов программирония тебе не хватало именно для решения твоей физ/мат. задачи? (просто перечисли)
ivandasch
29.7.2007, 22:45
Конкретно - алгоритмы сортировки, поиска. Различные структуры данных - деревья, хеши. Нам даже списков не давали! Может мы были тупые, но, думаю, дело в сложности С++. Пришлось ботать самому. Почему бы это не объяснить младшим курсам? А курсовую сделать гораздо быстрее и проще на простом языке. Сколько интересных идей можно реализовать. А получаем банальную решалку уравнения типа Ван-Дер-Поля.
хм... странно. значит тебе не повезло :-). как правило -- половина задач про это. особенно у соболева :-)
правда, мы это на зачете не спрашиваем.
а про все эти же алгоритмы, но с выводом скорости сходимости и с доказательствами у нас отдельный спецкурс есть у Иванова А.П. (раньше на 5м курсе было, щас собираются передвинуть на по-раньше, вроде)
ivandasch
30.7.2007, 0:47
2 SHiFT: Мда, не повезло. И еще много кому, в том числе и TaL'у, и многих кого я знаю. Всего лишь маленький эпизод.... Может помощи стоит попросить? Не кажется?
P.S. Жалею, что не ходил на различные курсы, дураком был.... Не оказалось рядом человека, который бы наставил на путь истинный.
хе-хе :-)
если Tal'у повезет пролезть в аспирантуру (если он захочет, конечно) или забить на аспирантуру и устроиться на ставку -- у него будет шанс все взять в свои руки, и исправить!

ну, или покрайней мере озвучить свои соображения на ближайшем заседании кафедры.
а пока -- все остальное можно обсудить тут. а то одни жалуются, что им программирования много, другие -- что, наоборот, мало -- непорядок!
Цитата(SHiFT @ 30.7.2007, 0:56)
а про все эти же алгоритмы, но с выводом скорости сходимости и с доказательствами у нас отдельный спецкурс есть у Иванова А.П. (раньше на 5м курсе было, щас собираются передвинуть на по-раньше, вроде)
Да. Курс базируется на книжке Вирта "Алгоритмы и структуры данных". Книжку читал, но интересно послушать это в изложении Иванова (мой семинарист бывший). Уже договорился с ним, что осенью буду слушать курс вместе с 5тикурами КМФ. (вроде в этом году будет еще у 5го курса)
BrainFuck
30.8.2007, 10:47
Судя по тому что в Дисплейных классах уже установлена .NET студия (м.б. лицензионная) на роль простого в освоении, объектно ориентированного, без усложняющих элементов: множественного наследования, обобщенного программирования, старой сишной стандартной библиотеки и т.д. подходит C#.
Как аргумент -- поледний финалист acm использовал именного его,а не всеми нами любимый С++
Из плюсов:
Возможность выбраться из темени консоли, новизна языка,а значит и возможная его перспективность, наличие превосходной IDE (+VisualAssistX

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

Абсолютно согласен. Java реально кроссплотформенный framework, а .NET в полном объеме представлен только под одну всем известную платформу. Во-вторых, вы предлагаете опять начать изучать технологию, а надо изучать принципы программирования. Изучать надо не язык или фреймворк, а конкретные алгоритмы.
это понятно,что в конце концов все сведется к emacs или vim и функциональному програмиррованию, а для начала важен именно хороший целостный фреймворк, отсутствие заморочек с различием коммерческих и опенсорс версий , красота синтаксиса(кучи лисповых скобок

), а уж точно не кроссплатформенность.
Видел уже не одну книжку по теории алгоритмов,примеры в которой не на почти стандартном для такого рода изданий Паскале, и не на C/C++, а нп C#
Цитата
Конкретно - алгоритмы сортировки, поиска. Различные структуры данных - деревья, хеши. Нам даже списков не давали! Может мы были тупые, но, думаю, дело в сложности С++.
я в школе, будучи отличником по проге, осилил все это только в дельфях) и деревья, и алгоритмы... си нам никак не преподали почти.
имхо пофигу на язык. хорошо взяв основы, можно любой освоить самому. так почему бы не взять паскаль?
кое-кому со школами действительно везет. а вот кому-то нет, и с предметом программирования впервые сталкиваются только на 1м курсе. По моим наблюденями, такая же фигня творится с любым предметом 1го курса (физика, матан, ангем, английский) -- некоторые уже перед поступлением знают все это, некторые даже интегралы толком не проходили, поэтому жалобам "нам скушно" могу только посочувствовать.
идея вводить сортировочное тестирование по программированию была, но руководство факультета ее не приняло.
чтобы некоторые не скучали, в этом году есть идея провести что-то типа олимпиады по программированию на 1-2м курсе. как вы к этому относитесь?
хех. если там не потребуют деревьев, то почему бы и нет)
ivandasch
2.9.2007, 23:24
2 Trank: А чего там еще требовать? "Кнопачки на формачки бросать в Дебильдере?" (ї LoR)
ну... че-нть такое:
http://algolist.manual.ru/olimp/(как минимум)
Марсианин
3.9.2007, 19:17
Разумно...
Цитата
2 Trank: А чего там еще требовать? "Кнопачки на формачки бросать в Дебильдере?" (ї LoR)
мозгов.
ну знаете, у первокуров спрашивать деревья, притом что "не всем повезло со школой", это сурово.
ссылка - все-таки простовато.
ivandasch
4.9.2007, 21:37
2 Trank: Большая часть олимпиадных задач не решается без знания элементарных структур данных и алгоритмов. Ведь есть полно сайтов, по материалам из которых можно готовиться.