Выбор языка программирования для обучения

Материал взят из форума, посвящённого этой теме



Вопрос таков: какой язык лучше использовать в вузах для обучения студентов программированию??? Сейчас зачастую это морально устаревший Borland Pascal. Претенденты такие:
  1. Delphi
  2. Visual C++ (может быть сначала консольные приложения, потом классы, затем библиотека классов)
  3. C#
  4. Visual Basic
  5. Java (нет обычных глобальных функций/методов — для обучения не есть гуд)
(перечислены в порядке моего имхо предпочтения)
2003-08-15 10:44:52 edhel Legolas(0/5)
дополнение: причем студенты некоторые могут в последствии идти на специализациюю связанную с программированием, а некоторые нет
2003-08-15 11:23:52 arto(2/278)
lisp
scheme
python
2003-08-15 11:37:07 edhel Legolas(0/5)
шо есть scheme?
2003-08-15 11:43:01 Сергей Круглов(15/1475)
типа лиспа тоже язык
2003-08-15 11:48:26 Евгений Бондарев aka Eugene Bond(16/1092)
паскаль или С — наглядное пособие по прозрачной алгоритмике для начинающих.
лисп — хорош в показательно-поучительных целях и для натаскиванию в алгоритмике. Заставляет мозги работать.
пролог — в тех же целях. Заставляет понять, что алгоритмика — понятие растяжимое.

этими товарищами пугать студентов не более семестра. Причем пролог — позже всех, когда (и если) будут всякие экспертные системы и системы ИИ изучаться.

Далее: Делфи или Вижуал Си плюх-плюх — в зависимости от того, паскаль или си был выбран базовым.
Если обучаются прикладники, то Делфи. Если более системный упор — Си.
Опять таки, если системщигов готовить, то можно и Жабу дать им через пару лет освоения Сей.

Это не более, чем мое ИМХО
2003-08-15 11:53:10 Андрей Новиков(10/793)
Учить надо начинать с Паскаля. Он морально устарел, но он канонический. Все остальные языки надо учить уже понимая, что такое программирование.
2003-08-15 14:09:10 Денис Имаев(0/233)
Андрей Новиков:
Вот именно — Паскаль и был разработан математиками для этого. Начинать нужно с изучения основ алгоритмического программирования (и IMHO повозиться с ограничивающими функциями, и доказательством корректности), а для этого паскаль идеально подходит.
2003-08-15 14:59:34 Даниил Иванов(0/39)
Собственно, почему тогда не изучать основы алгоритмического программирования на Си? Он не более сложен в обучении, чем Паскаль (моменты типа того, что в Си не контролируется выход за границы массива, в расчет не берем) и, как минимум, не менее функционален.
2003-08-15 15:38:09 Владимир Палант(15/2224)
Си гораздо менее строг и менее логичен. IMHO для начинающих не идеальный вариант.
2003-08-15 15:58:52 Андрей Новиков(10/793)
Учебный язык должен долбать ошибками компиляции, а не позволять делать все, что душе угодно.
2003-08-15 17:58:57 Andrey Nedbalski(0/4)
Паскаль не дает полного понимания ООП, что очень важно на данный момент. Да и на собственном опыте убедился, насколько трудно переучиваться с паскаля на С++. Года 2, опыт программирования на паскале, мешал правильно строить программы на C++
2003-08-15 18:13:33 Владимир Палант(15/2224)
В смысле понимания ООП лучше Java, опять же потому что позволяет меньше, да и всевозможных реликтов в ней меньше. А учиться программированию на примере Visual C++ я и злейшему врагу не пожелал бы...
2003-08-15 18:20:27 Евгений Бондарев aka Eugene Bond(16/1092)
Andrey Nedbalski:
Скорее всего в этом есть доля вины преподавателей, которые сами видели только структурное программирование как приемлимую концепцию написания программ.
У нас тоже были такие "антиквары", которые не использовали преимущества TurboVision, а писали все интерфейсы "по своему, без этих объектов".
2003-08-15 19:05:23 Сергей Круглов(15/1475)
Если выбирать среди C-подобных языков (со скобками {}, а не BEGIN-END и т. д.) лучше тогда Java.

На первых порах можно сказать, что писать
public class Program{
  public static void main(String argv[]){

  }
}
просто надо — "это такое заклинание, а что оно значит, мы потом расскажем".

Для облегчения ввода-вывода можно написать свой пакет, потом уже познакомить с его устройством.
2003-08-15 20:53:08 Алексей Полушин aka Barlone(0/86)
Начинать обучать программированию надо с ассемблера. Для того, чтобы понимать, а что же получается на выходе компилятора. И когда вы посмотрите на код, который генерирует С++, то подумаете — а может, на самом деле лучше "без этих объектов".
http://www.joelonsoftware.com/global/Russian/Articles/BacktoBasics.html
2003-08-17 16:57:38 edhel Legolas(0/5)
  1. С/C++
В С/C++ трабла со строками, если не использовать классы. Зачастую новички делают что-то вроде этого: char *s; scanf("%s",s). Также часто траблы такие: if(x=1) и f. (один знак равно для сравнения и вызов функции без скобок). Так что С/C++ думаю не катит.

  1. Java
Для новичков будет, пожалуй, слишком много волшебных слов... В частности вызов методов то так: x.length(), то так: length(x) — фактически сразу натыкаемся на ООП. А начинать надо все-таки с алгоритмов и процедурного программирования.

  1. С# и VB
Тоже сразу же натыкаемся на ООП (методы, поля...)

  1. Лисп, Пролог, Ассемблер...
no comments...

  1. Паскаль
Для новичков похоже лучше все-таки Паскаль для начала... А с ООП у меня лично траблов не было в Паскале — там все необходимое есть.

Но тогда новый вопрос... Турбо Паскаль имхо все-таки уже не катит — нафиг надо людям объяснять, что под досом сегмент 64К и много памяти сразу хватать нельзя, эти переходы в графический режим..... чё папэ. Значит надо какую-то виндузную версию... Может консольные приложения в Дельфи?.. Еще есть Component Pascal, но для него только английская дока, так что с ним разбираться запаришься...
2003-08-17 22:40:53 Евгений Бондарев aka Eugene Bond(16/1092)
edhel Legolas
Был еще и WinPas — паскаль под виндовс. Позволял аналогом TurboVision создавать виндовс-интерфейсы, а так же писать практически консольные приложения в нетекстовом интерфейсе.
2003-08-17 22:52:43 arto(2/278)
какя-то привязка к windows....
2003-08-18 01:13:03 Давид Мзареулян(2/313)
А ведь как ни крути, а лучшим процедурным языком для обучения как был так и остался Паскаль...
2003-08-18 09:30:03 Андрей Новиков(10/793)
Object Pascal 7 содержал полноценный IDE под Windows и что-то, аналогичное MFC, уже не помню — в прошлой жизни было :)
2003-08-20 11:18:23 edhel Legolas(0/5)
2Андрей Новиков> это был OWL
2003-08-20 17:32:00 Дмитрий Котеров(15/623)
Да, вероятно, BP7 еще долгое время останется в этом отношении вне конкуренции. Одна из главнейших причин — там Help замечательный, нигде такого нет. Ну а с 64К придется до поры до времени мириться.
2003-08-20 18:05:04 Владимир Палант(15/2224)
Так уж часто вам мешал этот 64k? У меня только одна программа была, да и то — начинающие таких не пишут.
2003-08-20 18:43:40 Давид Мзареулян(2/313)
C другой стороны, Cи очень дисциплинирует при работе с указателями. В Паскале указатели слишком "извне", и я часто сталкивался с ситуацией, когда человек долго писал на Паскале (досовском), и ни разу не использовал указатели. И имеет большие трудности в понимании, что это такое и зачем. В Си такая ситуация невозможна — там указатели появляются буквально начиная с "Hello, World!". Так что по этому критерию Си, наверное, лучше.
2003-08-21 00:27:48 Сергей Сирик(20/599)
Паскаль онли. Для понимания, что же такое данные, и что такое — действие над ними. Потом уже можно объяснять, как над ними можно извратиться в плане инкапсуляций, полиморфизмов и т.д. В Object Pascal (который Дельфи) все основные моменты ООП отражены вполне нормально. И уже на третьем семестре можно и Яву попробовать.

ИМХО язык таки важен, но более важно то, чтобы учить именно ПРОГРАММИРОВАНИЮ, а не языку :)
2003-08-21 14:31:42 edhel Legolas(0/5)
Недостатки BP7 по ИМХО: 64К, в ХР проблема с отображением русских символов, на быстрых компах трабла с модулем CRT, извращенные динамические массивы (getmem/freemem), скудная устаревшая библиотека классов (TV :P).

Думаю может все-таки действительно с Object Pascal aka Delphi начинать?..
2003-08-21 14:44:51 Евгений Бондарев aka Eugene Bond(16/1092)
edhel Legolas:
Как раз "извращенные динамические массивы (getmem/freemem)" замечательно учат аккуратности программирования и пониманию логики организации связанных списков!
2003-08-21 15:21:09 Сергей Сирик(20/599)
Да нет, там (в Дельфях) для написания простой учебной программки сортировки надо в дебри залезать ...
2003-08-21 16:17:10 edhel Legolas(0/5)
2Евгений Бондарев> (1) студенты-"не программисты" в большинстве случаев все равно не понимают как работает этот getmem/freemem, в С++/java динамические массивы "красивее", (2) каким образом извращенные динамические массивы используются для организации списков? для этого используют new/dispose.

2Сергей Сирик> ????? в консольном приложении программы будут выглядеть практически одинаково — разве нет? (без использования классов)
2003-08-21 16:22:29 Евгений Бондарев aka Eugene Bond(16/1092)
edhel Legolas:
Хм...
(2) — согласен. запамятствовал
2003-08-21 16:51:58 Виктор Сорока(0/11)
Никто не вспомнил (или я пропустил) о параллельном программировании
тут однозначно Ява (Аду никто не любит :( )

присоединяюсь ко всем рекомендующим Паскаль, как язык для начинающих
2003-08-21 16:55:36 Евгений Бондарев aka Eugene Bond(16/1092)
Виктор Сорока:
Для параллельного программирования нужна хорошая теоретическая база
2003-08-24 16:10:53 Дмитрий Котеров(15/623)
Давид Мзареулян:
C другой стороны, Cи очень дисциплинирует при работе с указателями.
Это утверждение из серии «все, что не убивает тебя, делает тебя сильнее». Это не дисциплина, это самая настоящая муштра. В то же время, как раз идее указателей лучше учиться на Паскале, потому что там указатели — в действительности не указатели, а ссылки. Указатель можно увеличить и уменьшить на единичку, с ним можно выполнять различную арифметику. С указателями же Паскаля всего этого делать нельзя. Ссылка проще, чем указатель, поэтому обучение лучше начинать с нее. То, что, работая со ссылками, практически невозможноошибиться, — это только плюс. Ссылка — это как номерок на пальто в гардеробе. Вместо того, чтобы перевешивать целиком пальто при сортировке, можно просто перевесит номерки.

То, что нет массивов переменного размера (динамические-то как раз есть), — это, конечно, беда. Но так ли уж часто они нужны в учебных задачах? Ведь в реальной жизни мы меняем размер массива (или устанавливаем произвольный при создании) только для одной цели: для экономии памяти и, возможно, скорости. Суть алгоритма от этого часто не меняется. Так что, если надо менять размер массива, не лучше ли будет воспользоваться связанными списками?..

Скажу еще про Delphi. Тут вот сказали, что ООП в нем нормальный. Я с этим совершенно не согласен. По-моему, ООП в нем настолько извращенный, насколько это вообще возможен. Как называть язык, в котором деструкторы есть, но они не вызываются автоматически? Где конструктор выделяет память под объект, а деструктор ее освобождает (из-за этого начинаются страшнейшие извращения с разными флагами «память освобождена/не освобождена»; дизассемблируйте как-нибудь простенькую программу с двумя классами — Base и Derived — на Дельфи и посмотрите, что там творится; но можно и не дизассемблировать, а просто пропустить случайно слово inherited и потом искать эту ошибку 3 дня)? Поразительно то, что ведь Страуструп все это давно проработал к тому моменту, как вышел Дельфи и даже Object Pascal в BP7, и почему разработчики не пошли по хорошо протоптанной дороге, а выдумали что-то свое — непонятно.

Таким образом, обучать программированию с Delphi (точнее будет сказать — с Object Pascal) я бы и врагу не посоветовал. Когда надо рассказывать про ООП, действительно, лучше всего подойдет Java, потому что она урезана до безобразия. Ну а уж потом, для того, чтобы показать на практике, как же она урезана и как же там все плохо, можно браться за C# и C++. C++ же самый сложный и непостижимый для обучения, но, в то же время, он прекрасно показывает, что, если крутить с энергией сверхновой, из белья можно выжать не только воду, но и изотопы цезия.
2003-08-25 02:03:16 Василий Богатов aka Xpom
я немножко припозднился (дискуссия потолстела оффтопиком и скатилась к обсуждению языков программирования) но все же...
вообще топикообразующий вопрос, имхо, поставлен несколько узковато "какой язык программирования выбрать для преподавания в ВУЗе"... каком ВУЗе какой направленности (гум/тех)? для чего им программирование? для какой выпускной специализации? в каком объеме? в какой форме (практикум/лекция, основной курс/факультатив)? — все это не ясно... т.е. нет исходных данных... вопрос без потери смысла можно несколько переозвучить — "какой язык программирования выбрать в абстрактном ВУЗе неважно какой направленности для преподавания в разных объемах и мы еще не решили в какой форме?" ... хорош вопрос? а остался в принципе таким же простым... ответ же на такой вопрос тоже может быть прост — "придумайте себе абстрактный язык программирования и преподавайте его"... однако подход к ответу на вопрос может быть и иным — "выберете язык Ассемблера — значит и будете преподавать язык Ассемблера", "выберете Паскаль — значит и курс можно будет смело назвать — "Программирование на языке Паскаль", "выберете Си — будет "Программирование на языке Си"... думаю ясно, к чему я клоню... преподавание программирования не есть преподавание языка программирования... для преподавание программирования формально язык-то не важен... причем тут вообще конкретные языки тогда?.. знание правил написания кода (а если с самого начала вести преподавание какого-то конкретного языка, то то, чему вы научите и будет тогда для обучаемого — правилами написания кода, т.е. просто знание синтаксиса) разве есть цель обучания программированию? разве в общем смысле программирование — не есть ли составление алгоритма (для качественного достижения результата)? может для начала студентам блок-схемки показать (а мы обсуждаем автоматические деструкторы), может им абстрактные понятия дать типа "переменная", "функция", "ссылка", "цикл", "оператор", "условный переход", а потом "ооп", "класс", "объект" и тп (а мы про динамические массивы рассуждаем), может студентам на русском языке стандартные конструкции типа "если.. то..", "пока.. выполнять.." разобрать (а давайте про контекстно-зависимые грамматики поговорим)?
я так понял, ключевое слово — начинать, а вы, друзья программеры (многие тут) говорите про то, как надо хорошо писать, да как бы к чему-то плохому не приучить, да чем один ооп хуже другого... посоветовали...


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

а уж когда дело дойдет до практики — то можно ее составить из задач, для решения которых нужно будет писать реальные программы... а вот какой environment человек выберет — Дельфи, M$VC++, gcc, PHP, Lisp, DOS bat file или Photoshop Script — пофиг, на мой взгляд... главное чтоб программа выдавала верный результат, в коде не было бы идиотских логических ошибок да человек бы сам объяснить каждую строчку листинга... вот и все...
(btw, нас, например, так и учили)

так что мое мнение
В: "какой язык лучше использовать в вузах для обучения студентов программированию???"
О: "русский"


С уважением.
2003-08-25 02:34:24 Дмитрий Котеров(15/623)
 "выберете язык Ассемблера — значит и будете преподавать язык Ассемблера", "выберете Паскаль — значит и курс можно будет смело назвать — "Программирование на языке Паскаль", "выберете Си — будет "Программирование на языке Си"...
Как убежденный последователь методики коан, я тут с Вами решительно не согласен. Представив себе аналогию мозга и нейронной сети, начинает казаться, что обучать все же лучше на контрольных примерах. Так оно обучается лучше, так интереснее, наконец, так более практично. Соответственно, обучать программированию следовало бы именно на некотором языке программирования, причем не на абстрактном, а на самом что ни на есть материальном. Чтобы обучающийся мог сам проводить эксперименты и сравнивать полученные результаты с тем, что он ожидал.

Что касается этого «бумажного программирования» и «математического подхода к программированию», то даже Лем писал, что математика — ведь, страшно неуклюжая для описания алгоритмов и вообще — программирования. Бумажка — это большей частью все же математика. По крайней мере, если пишете ручкой, а не карандашом с ластиком.
2003-08-25 03:44:40 Василий Богатов aka Xpom
Дмитрий Котеров:
на контрольных примерах? чем вам мета язык "если.. то.." не пример? или "язык" блок-схем? для обучения построению алгоритмов из кирпичиков, стандартных конструкций... хотя я вам и не противоречу — я же не говорю, что к железке подпускать не нужно... я про то, что все необходимо делать последовательно...

насчет того, что учебные псевдо-языки программирования необходимы — совершенно согласен, но все равно, лишь на определенном этапе (помню в пору обучения в Лицее Информ. Техн. у нас была так называемая ММ — Малая Машина — маленький учебный ассемблер из 16 операций, кстати, программно реализованный)... а на реальные языки — позже, главное, опять же последовательно... (имхо, достаточно ASM->C)

а насчет «бумажного программирования» и «математического подхода к программированию», то философ Лем (ВО — медик), если имеется в виду его "Сумма технологии", касался, если мне не изменяет память, не программирования в частности, а кибернетики (как науки об управлении по определению), и даже не математической кибернетики (как части математики), а социологической кибернетики... тк Лем оценивал применимость математики в социологическом аспекте... так что, по-моему, такую связь математики и программирования вы приводите здесь ошибочно...

насчет бумажек... это становится интересно... приходите в МГУ (например) — там вам покажут, для чего нужны тетрадки (бумажки в сущности), ручки (в 19 веке, конечно, карандаши были), а так же лекции и семинары — это вообще, а в частности, там можно узнать, что такое прикладная математика и для чего нужна математика в программировании... но последнее — отдельная методологическая тема, легко выделяемая в отдельный же тред (если не возражаете)...


С [взаимным] уважением.

ПС: совсем не про сабж, но, как убежденный последователь методики коан, вы неверняка сначала продумываете алгоритм, а потом как бы пытаетесь привнести его в этот мир, тыкая в клавиатуру... так вот вам, как не мне, знать, что лучше качественно подумать, чем много раз стирать ластиком (где учат — см выше)...
2003-08-25 03:52:33 Владимир Палант(15/2224)
Я согласен с тем, что обучение программированию не должно привязываться к языкам, в первую очередь учиться надо именно программированию. Но из этого далеко не следует, что учиться надо на бумаге. Я видел результаты такого подхода на своём первом курсе в университете. Те из студентов, кто уже умел программировать, без проблем обращались с псевдо-языком, который изобрёл наш профессор. А вот не умеющих программировать он ставил в тупик, они всё время делали одни и те же ошибки и не понимали, почему надо делать так, а нельзя эдак. Когда же на втором семестре пошла Java, то те же самые новички резвенько начали программировать. Ведь сразу стало ясно — вот такую конструкцию компилятор не пропустит и вот это он тоже не понимает. И самое главное — стал виден результат, стало понятно, что этот код действительно что-то делает.
2003-08-25 10:27:08 edhel Legolas(0/5)
2Василий Богатов&all> Ну думаю все уже догадались, что имелись ввиду все-таки студенты НЕгуманитарии — факультет эдак физический, математический. И дело в том (про это я уже писал — см. 2-й постинг!), что дальнейшие специализации у студентов разные, которые можно классифицировать так: 1) специализации, на которых студенты вообще не используют программирование (максимум Ворд), 2) используют что-нибудь типа MathCad/Maple/... или в ручную кодят какие-то вычисления (сейчас у нас это делают часто на BP7, а здесь бы побольше памяти не помешало), 3) специализация, связанная с ВТ и программированием.

ИМХО без машины учиться программированию тяжело. Первый мой шаг к программированию — это было прочтение какой-то книжки про TP 6.0. Я ничего не понял... Какие-то for-ы, begin-ы.... circle-ы... что, где, когда? Ничего не понять... Это был класс 7 или 8. Тогда еще и понятия функции не знал. (Помню меня на олимпиаде по программированию маленький чел удивил тем, что еще не зная понятия функции умудрился сделать практически столько же заданий сколько и я (я тогда уже знал про функции) и ему еще и 1-е место дали, а мне 2-ое, т.к. я был все-таки постарше). А потом по-тихоньку стал операторы на компе пробовать: типа writeln(1+2), потом a:=1; writeln(a+2); и т.д. и т.п.... И все становилось на свои места.
2003-08-25 11:47:35 Евгений Каратаев
edhel Legolas:
Не точно сформулирован вопрос. Кого Вы хотите получить из студентов? Если просто проставить им галочки в диплом о прохождении обучения — то выберите то, что сами знаете лучше и что всегда сможете объяснить, для чего у Вас есть учебные материалы. Этот вариант нужен скорее Вам, чем студентам. Если же Вы хотите подготовить боевых программеров — то никаких поблажек на особенности языков, они тут совершенно ни при чем. Примерный список я бы видел таким:
  1. Системы счисления, приемы кодирования и логика, причем классическая как таковая.
  2. Ассемблер — как фундамент для изучения машины Неймана как таковой и ее возможностей.
  3. С — как фундамент с точным указанием, что где происходит с памятью.
  4. С++ — как демонстрация перехода к более высокоуровневому программрованию. Одновременно с языком — теория объектов.
  5. Параллельный курс по двум языкам, имеющим могучие встроенные типы данных — Delphi + Java. Без C/C++ нормального понимания этих языков вряд ли получите.
  6. В обязательном порядке отклонения на декларативные языки — SQL, пролог, остальное по выбору.
  7. Два-три скриптовых языка. Тут лучше подобрать интерпретаторы и интерпретирующего типа и компилирующего типа. Что-то из области perl, JavaScript, VBScript.
  8. Интегрированные гуевые средства и их возможности: Delphi, VB, BCB, PowerBuilder, JBuilder, .Net. Причем все в одном курсе rad-средств как таковых.

Причем по каждому языку учебные реализации основных фундаментальных алгоритмов, структур данных плюс алгоритмы и структуры, специфические для языковых средств. Берем товарища Ахо с товарищем Ульманом.

Это мое личное, сугубо субъективное мнение, основанное на знакомстве со многими программистами, получавшими различное образование. Подвел статистику — получилось, что отклонения от списка приводят к появлению белых пятен в понимании программистами того, что и как они делают. Надеюсь, что не сильно разочаровал.
2003-08-25 12:20:17 edhel Legolas(0/5)
Для боевых программеров — так план может и прокатит... А давайте вспомним первые языки, с которых начинал каждый из нас. Я учил языки в такой последовательности: GW Basic/QBasic, TP 6.0, ASM, C/C++, Java/JavaScript/SQL (параллельно), Prolog, Perl/PHP.
2003-08-25 12:27:59 Василий Богатов aka Xpom
2Владимир Палант:
у меня был несколько иной опыт первого курса: первый семестр — "Алгоритмы и алгоритмические языки" (машина Тьюринга, алгоритмы Маркова и тп), был и Паскаль (на практикумах), во 2м семестре офигительно преподавали Ассемблер (естественно, не все его сотни команд, или сколько их там). именно "на бумажке", потому как компов с этим самым Ассемблером мы так и не увидели. так вот в течение всего семестра парням (далеко не двоешникам), которые уже вовсю фигачили на Си, задачки делали девчонки из Мурманска, которые компа до сих пор-то не видели, но у которых с математикой и с головой было все в порядке (еще один "+" в пользу математики)... но и Паскаль, как впоследствии и Ассемблер, были исключительно на бумажке, а тыкаться носом в ошибки компилятора и "подбором" писать программу — не самое педагогически и методологически верное решение (если уж мы про обучение)... и результат — не главное, главное — ход мысли, т.е. алгоритм... и именно после того самого первого первого курса я хожу 2 дня думаю над задачей, а потом за 15 мин это дело набираю и в 95% случаев все работает... плохо писать прогу сразу на компе... в качестве примера, у многих пишущих (не программы) достаточно сильно изменяется мышление после долгой работы на компе, т.е. если человек писал лет 10 статьи на бумаге и печатной машинке, где пишешь порой всего по паре раз — черновик + чистовик, а потом пересел на компьютер, где можно в процессе написания все нафиг переколбасить... с мыслями в голове так же — для бумаги мысль твоя уже должна быть выношена и готова, а для компа это далеко не обязательно... так что мой вывод — "бумага дисциплинирует" (что, имхо, важнее культуры написания кода и тп)

потом еще SQL был, но вместе с Си (2й курс)... так что да, цепочка получается такая — Паскаль->Ассемблер->Си+SQL — годами выверенная метода фундаментального подхода к программированию в не самом плохом заведении :)

2edhel Legolas:
да, это ВМК МГУ и все это, конечно, для углубленного изучения... но насчет направленности ВУЗа я ж тоже неспроста спрашивал, т.к. для разных специализаций разная глубина нужна, да и ВУЗ не фундаментально-университетского типа может быть с факультетами дико разными (хоть РГГУ взять), Искуственный интеллект, например, и у на Филфаке МГУ преподают... это надо конкретно разбираться (если есть желание)... и курсы, соответственно, тоже по-разному должны быть построены, но сперва все равно алгоритмам учить надобно, а уж потом языкам... языки вторичны... алгоритмические методы, задачки соответствующие — это как бы теоретическая часть, языки, причем для начала лучше на бумажке, — практическая... теория сперва, потом учимся применять на практике... и менять местами, а тем более первое заменять вторым (начинать сразу с языков) — в корне неверно при обучении, если, конечно, иметь желание добиться осознанного понимания откуда растут ноги... и при всем при этом железо (как показывает практика преподавания) и не нужнО совсем (см выше)

насчет книжек по программированию, в которых ничего не понятно, — эт, извините, книжки такие, которые НЕ для обучения программированию... возьмите простенькую книжку по неорганике без усвоения курса общей химии и вы тоже ничего не поймете... и неудивительно, что "тогда взял книжку по простенькому Паскалю и ничего не понял"... да и та книжка по Паскалю вполне могла быть каким-нть справочником, соответственно для обучения не предназначенной в принципе... и кстати, для школы и для ВУЗа обучение должно начинаться с разного, учитывая тот багаж знаний, который в среднем наличествует к моменту начала обучения...

фуф...

С [взаимным] уважением.
2003-08-25 12:32:44 edhel Legolas(0/5)
[недопостил:] Но для солянки из студентов такое явно не прокатит... В идеале конечно можно студентов заранее разбить на разные группы в зависимости от специализации... но специализация-то начинается позже, а программирование с первых курсов... Но это уже орг.вопрос... Тогда скажем так: 1) каков план для студеней-прикладников (те, которым програмить не надо будет или они будут програмить в МатКаде etc или они будут програмить численные-моделирующие задачи), 2) каков план для боевых программеров. Таким образом для программеров был предложен вариант: ASM, C, C++(ООП) + альты по другим языкам, SQL/Пролог, скрипты (с ориентацией на веб). Есть тут люди, которые начинали изучать программирование с ASMA? Сомнительно как-то....
2003-08-25 12:41:00 Василий Богатов aka Xpom
2Евгений Каратаев:
согласен с edhel Legolas — срок тянет на 5 лет .) как на ВМК на программистском потоке .)) Евгений, спрашивая Legolas'а о том, что из студентов тот хочет получить, вы сами отвечаете на свой вопрос — весьма профессиональных программистов... а у них по построению вроде бы другая специальность должна быть .))

но все же я за Pascal->ASM(факультативно)->C->SQL
а уж для товарища, знающего C и SQL, имхо любой язык программирования становится просто очередным языком...

С [взаимным] уважением.
2003-08-25 12:49:13 Василий Богатов aka Xpom
2edhel Legolas:
для п. 1 (совсем прикладники) достаточно, видимо, будет п.0 Евгения Каратаева + фундаментальные алгоритмы + Паскаль с обильными задачками и примерами, а дальше — собственно Маткад и тп
для п. 2 (боевые) — все 8 пунктов Евгения Каратаева + фундаментальные алгоритмы... и начало в виде АСМа — ничем не плохо... вот преподавать его хорошо мало кто умеет... у нас вот был Пильщиков в Универе, его книжка "Ассемблер" — ну просто закачаешься, ни одного лишнего слова, одно удовольствие читать, причем именно для обучения!
2003-08-25 13:35:38 Василий Богатов aka Xpom
Пильщиков, "Ассемблер": http://books.dore.ru/bs/f1bid288.html
2003-08-25 13:53:51 edhel Legolas(0/5)
У нас (матфак не специализированного универа) сейчас технология такая:
1 курс: лекции "Программирование" (теория с примерами на паскале) + семинары (паскаль) + практика (задачки за машинами), параллельно читаются математиками курсы типа Дискретная математикая, Логика, где рассказывают, в частности, и про машину Тьюринга и проч....
2 курс: начинается ООП: лекция+семинар+практика (на том же Паскале), пролог, асм (не Intel с прогой для интерпретации %P)
3,4 курс: спецы по C/C++, Java, SQL, ASP
5: Internet

И вот было бы неплохо (в некоторых отношениях) кинуть BP7 и найти ему лучший аналог под виндой для 1-2 курса обучения: чтобы не морочить людям голову допотопным МС-ДОСом, чтобы прикладникам-счетоводам было проще в дальнейшем считать/моделировать и т.д. и т.п. и др. и проч... Ну не всю же жизнь теперь BP7 эксплуатировать??
2003-08-25 23:36:28 Дмитрий Котеров(15/623)
Василий Богатов:
если имеется в виду его "Сумма технологии",
Ее я не читал еще — бумаги маловато, надо будет еще пару пачек купить, да лень все. Я говорю про какой-то другой роман (один из тех, что на lib.ru вверху страницы — я читаю сверху вниз).

Насчет же курсов разнообразных иванниковых, пильщиковых, кузнецовых, а также Жоголева (царствие ему небесное) и тэдэ и тэдэ одно могу сказать — не нравятся они мне, ох не нравятся. Как раз за свою «бумажность» и «потуги на математизированность». Ну скажите, например, на кой черт в 21-м веке мучиться со стандартным Паскалем (со всей его сопуствующей кривостью, касающейся файлов), вместо того, чтобы учиться на примере обыкновенного BP7?

Ведь самое продуктивное обучение — это когда обучающийся сам до всего доходит, а учитель лишь показывает ему направление, а чаще — направление, где искать указатель направления («изобретение велосипеда»). Это заставляет думать, по крайней мере, и доставляет радость познания, созидания и всякого другого «-ания». Так что, вместо того, чтобы с нуля начинать изучение программирования с абстрактных теорий, Кнута (и пряника), блок-схем и бумажки, лучше будет за это же самое время поковырять 2-3 разных языка. Так мы получим а) представление о том, что все языки суть одинаковы, б) практический навык и в) возможность экспериментировать с простенькими программами, сразу наблюдая результат экспериментов.
2003-08-26 01:07:27 Василий Богатов aka Xpom
2Дмитрий Котеров:
  1. насчет иванниковых, пильщиковых — базовые понятия, без которые трудно себе представить развитие боевого программиста, они дают да, не идеально, но дают они каждый свой предмет достаточно емко и системно
  2. не нравятся они вам? на ВМК-шном форуме я бы попросил аргументации, но здесь это будет личная переписка...
  3. стандартный Паскаль не нравится? .) ммм... да, он не в моде .) но, по большому счету, МГУ в своих основных курсах будет вынужден работать только со стандартными вещами — стандартным АСМом, стандартным Паскалем, стандартным С, стандартным SQL... судьба у МГУ такая .))
  4. насчет продуктивного обучения — совершенно согласен! но ведь и получается, что изучив как-то Паскаль стандартный и сев впоследствии за BP7 он (учащийся), предварительно почитав ман или книжку, увидит как в BP7 все прекрасно с файлами и подумает "это хорошо!" и возрадуется — и это правильный путь :)... ведь и ООП в конце концов придумали для удобства и в первоначальный стандарт он не входил... а всё это стандартное приводится в основных курсах ведь всего лишь для наглядности и никто не заставляет на этом стандартном писать свои коммерческие ли, научные ли приложения... ведь так?
  5. насчет заменяемости "бумажек" на 2-3 нестандартного... ну эт неправда, весь второй курс — сплошь практика, первый — ладно (почему лучше работать головой на бумажке, а потом уж на компе — на это я уже писал свое имхо), но второй — практикум на С да на компах — весьма немало (а суммарно практикум на ЭВМ, кстати, больше, чем 2 года матанализа) .) а всякие нестандартности — эт на других курсах типа Комп. графики, на кафедральных курсах и курсовых, да на факультативах копайте — благо тут возможностей ну настолько уйма, что мало не покажется .) а блок-схемки и бумажки нужны для фундаментального математического (кибернетического) образования... не мне это вам говорить, конечно, — есть люди, которые и получше скажут... но без них и в графе "выпускная квалификация" стояло бы не "математик, системный программист", а то же, но без первых двух слов... а когда стоит и то, и другое, и третье, а особенно когда знаешь, что все это вымучено и за каждым словом стоит мой личный труд и действительно квалификация — вот тогда ощущаешь, что достоин являться выпускником того, чего являешься... пусть и на данный момент все это выражается в боевом программизме...

dixi :)
С [взаимным] уважением. Content-Disposition: form-data; name="preview"

Посмотреть, что получится
2003-08-26 01:38:12 Василий Богатов aka Xpom
2edhel Legolas:
на мой взгляд можно особо и не мучать себя .)
хотел тут накидать вам посеместровый планчик наподобие вашего + МГУшного, но на середине понял, что все это уже изложено в 8 пунктах Евгением Каратаевым... просто прибавляйте к номеру каждого пункта единицу и вы получите практически посеместровое расписание! :)) пробелы можно занять спецкурсами из Теории БД, Unix, Сетей, Защиты информации и тому подобным... в свете этого предлагаю ознакомиться, например, с опытом все того же ВМК МГУ (http://cs.msu.ru/)... другие, может быть, подкинут координаты других ВУЗов (подключайтесь, граждане! :) ), но я, как вы понимаете, могу поделиться лишь тем, в чем сам уверен...
а в свете этого, может, BP7 рано из плана выкидывать? вот у Евгения нашлось место и для других, более продвинутых сред, причем место, в принципе, подходящее (п.7)

конечно, возможны коррективы, но куда ж без них :)

С [взаимным] уважением.
2003-08-26 01:40:59 Василий Богатов aka Xpom
[дополнение]: а если у народа есть доступ непосредственно к учебным планам (прошлых лет или нынешним) — всецело призываю поделиться с Legolas'ом! :)

С [взаимным] уважением.
2003-08-26 12:57:34 Дмитрий Котеров(15/623)
Василий Богатов:
Можно сколько угодно говорить о воде, описывать ее химические и физические свойства. Но, лишь напившись, утоляешь жажду.
2003-08-26 15:51:34 Василий Богатов aka Xpom
Дмитрий Котеров:
вы против принципа "Пусть расцветает сто цветов"?

С [взаимным] уважением.
2003-08-29 09:36:49 edhel Legolas(0/5)
http://www.bluej.org/ — рульная вещь — среда для обучения основам ООП на основе Явы.
2003-08-29 11:31:52 Вася(0/37)
Как студент скажу — начинать надо с С, но не с Паскаля и других малоиспользуемых в работе языков.
Почему? Да потому, что время, убитое на тот же Паскаль не стоит тех мучений и знаний, которые даются студенту. Сейчас я перешёл на 2 курс института, и полагаю, что пол с лишним семестра потраченых на изучение основ программирования на Паскале были попросту ПОТЕРЯНЫ.
Все эти алгоритмы можно было изучать и на С с гораздо большим успехом. То же самое. Только когда изучаешь Паскаль, ты переступаешь через себя — мне уже 21, хочется изучать то, что хочется и нужно и то, что пригодится в жизни, а заставляют работать на богозабытом языке, который нигде не используется уже десяток лет. А это время. Это деньги.

Товарищи деканы, учителя и преподаватели!
Ну не мучайте вы студентов тем, что им не нужно. Отступите вы от этих канонов патриорхального существования. И студенты к вам потянутся.
2003-08-29 13:28:35 Андрей Новиков(10/793)
В институтах никогда не учили тому, что нужно в Вашем понимании. Этому учат в ПТУ и на курсах повышения квалификации. В институтах ставят голову.
2003-08-29 13:36:57 Евгений Каратаев
Onnix X:
Аплодисменты. Все ждал — написать самому, чтобы студентов не уродовали паскалем и прочими так называемыми учебными выдумками или кто-то другой напишет.
Вот давайте без истерик прикинем, чем пользуется народ и как эти средства возникли.
Вот мой первый список — TeX, Perl, C, C++, Asm, PHP, может кто помнит, еще М. Средства показавшие себя надежными, практичными и востребованными. Возникли из практических потребностей программистов. Написаны программистами для программистов. И кто из них когда-либо был назван учебным, методичным и легко понимаемым?
Второй список — Java, SQL, Pascal, Ada, COBOL, XXXScript. Методичные. Чрезвычайно удобны для доцента, чтобы выйти к доске и поумничать. Причем объем вещания скажем по SQL как раз примерно на семестр. Математика там, проекции и прочее. Чрезвычайно проблемные и неудобные в реальной эксплуатации. Созданы и одобрены умниками. Посмотрите сами, какими вопросами завалены программерские форумы. Я нахожу, что статистика форумов отражает не востребованность и используемость средства, а его проблемность.
Господа, если в Ваших руках обучение людей, не уродуйте их. И растите программеров-пофигистов, чтобы им было до лампочки на каком языке писать. Спасибо за внимание.
2003-08-29 14:48:40 Вася(0/37)
Евгений Каратаев: Аплодисменты!

В институтах ставят голову.
Андрей, я не сомневаюсь, что Вы человек умный от природы. Есть такие. У нас в группе тоже. И мне что-либо вам доказывать бесполезно, т.к. я не такой — знания мне даются тяжело... И стремлюсь я к знаниям тем, которые реально востребованы. Чем меньше я получу НЕ востребованных знаний, тем больше я получу востребованных на рынке знаний.

И вот Вы говорите, что ставят голову. А я так не думаю: Из 30 моих одногрупников по настоящему соображают человек пять, при том, что они кодят чуть ли не с 12-14 лет. Остальные не получают знания. Остальные — мучаются. Взять к примеру тот же Паскаль — зачем было пол года набивать нас этим ненужным знанием, если мы в дальнейшем не будем работать с Паскалем? Алгоритмы? Принципы работы программ?
На С ИМХО это показать куда легче и соответственно легче понять. Не зря С считается одним из самых лучших языков, если не лучший. По синтаксису хотя бы. Плюсы очевидны: я разобрался бы в алгоритмах +С знал в два раза лучше.

А вообще, профессия программист уже становится неопределённым термином. Необходимо разделять науку программирования на программирование нацеленное на работу в веб, на обычное программирование и т.д., не знаю какое там ещё есть. А то например я знаю, что на протяжении 5 лет я пройду около .... не помню сколько, но много языков. И зачем столько? За двумя зайцами не угонишься. Был у нас ВБ. Ну и закончился. И больше не будет. И что теперь? Я стал спецом в ВБ? Нет, не стал. Хотя бы потому, что для удовлетворительного знания какого-либо языка необходимо не меньше года каждодневной работы.
А я не могу это себе позволить.
2003-08-29 17:11:23 Андрей Новиков(10/793)
Вася, спасибо за отсутствие сомнений, но я себя позиционирую, как кустаря-одиночку, а не профессионала. Вы прочитали статью http://www.joelonsoftware.com/global/Russian/Articles/BacktoBasics.html, приведенную в начале этого обсуждения? Вот в частности для этого и нужно учить то, что в будущем никогда не пригодится.
2003-08-29 17:34:49 Евгений Каратаев
Хотелось бы услышать мнение тех, кто преподает, или связан с дообучением, кроме флейма на темы

коммерчески востребован / невостребован
канонический / неканонический
стандартный / нестандартный

услышать также оттенение "учебности" языка. Кто и что именно вкладывает в понятие "учебный"?
  1. То, что транслятор запинает ногами студента сообщениями об ошибках и будет учить водить автомобиль поставленный на рельсы?
  2. То, что преподавателю проще преподавать этот язык, потому что он не даст написать одно и то же разными способами и задачку проще проверять и можно десять лет самому ничему не учиться?
  3. То, что профессор назвал язык лучшим для обучения и кафедра его одобрила чтобы уважить профессора и у доцента не повернется язык сказать что ты, товарищ, му%%к и после тебя ребят переучивать надо и полгода за ручку водить ибо написать могут только выражаясь теми конструкциями которые были в учебном языке?
  4. То, что автор языка при его определении запал на N+1-ю идею и эта идея намертво приклеилась к языку и дает возможность поважничать что типа не хухры-мухры?
  5. То, что объем понятий языка удобно укладывается в учебный план на семестр?
  6. То, что "не я первый не я последний, а методички уже есть"?
  7. То, что при преподавании можно постоянно упоминать "крутые" фирмы-производители и сулить народу блага немереные чтобы в рот смотрели?
  8. То, что студенты в натуре круто фишку просекают?

Что именно?
2003-08-29 19:24:41 edhel Legolas(0/5)
Знаю, что после Паскаля добрая часть студентов (или злая?))) не может понять почему нельзя писать "char c*; cin>>c;". Интересно, а если сразу учить С — поймут? Кто-нибудь учил С/С++ как первый свой язык?
2003-08-29 19:36:55 edhel Legolas(0/5)
2Евгений Каратаев
  1. имхо это все-таки хорошо и имхо хорошо, что новые С-компиляторы хоть варнинги не хилые выдают
  2. на это конечно пофиг, но имхо для языка это и не являются необходимостью: С++, ++С, С+=1, С=С+1, С=++С — оно тебе надо?
3,4. Вирт что ли мудак? %]
  1. какие-такие дикие понятия у С++ по сравнению с Паскалем? множественное наследование и арифметика указателей?
  2. литература понятно дело нужна, но достаточно и книг; если по языку только английская литература, то это будет тоже геморой для всех...
  3. -
  4. а нужно чтоб не просекали?
2003-08-29 23:06:12 Вася(0/37)
edhel Legolas: мой первый язык был JS :)
2003-08-30 18:10:52 Сергей Сирик(20/599)
Onnix X:
Евгений Каратаев:
Знали б вы, как я сейчас жалею, что на четвертом курсе "крутой веб-программист" напрочь игнорировал курс по тестированию, который читается по накатанным рельсам уж не знаю сколько лет ... понимаешь это только к сожалению с высоты должности менеджера проектов ... когда пытаешься дообучать подчиненного тестера, и не можешь найти именно что тех общих и правильных слов, которые говорились в институте и пролетали мимо ушей.
2003-08-31 17:43:00 Давид Мзареулян(2/313)
Вообще, с большим любопытством бы посмотрел на человека, у которого первым языком был "С++". Кроме шуток. Я его (человека этого) уже заранее уважаю.

Читаю я это обсуждение, и всё-таки склоняюсь к ответу "С" (без плюсов).
2003-09-01 10:24:37 edhel Legolas(0/5)
Ну допустим С без плюсов — это первый год обучения, но потом же все равно надо ООП и все равно С++?
2003-09-01 11:30:10 Евгений Каратаев
edhel Legolas:
На выходные все не выходила из головы тема учебного языка. На самом деле ничего не подходит. В первом приближении близок к задаче паскаль (не пинайте ногами, но только в первом). Что бы делал я — взял бы и вынул из паскаля всю муть типа проверки границ массива, встроенные строки и прочее что скрывает реальные механизмы работы с памятью. Не будем путать людей. При работе с ножом каждый должен по крайней мере один раз порезаться, а при работе с памятью по крайней мере один раз выйти за пределы массива. Синтаксис объявления переменных сделал бы как в сях. Во втором приближении получается что-то вроде си. Но не совсем. От паскаля оставил бы понятие юнита и не использовал бы сишных хедеров. Полностью убрал бы в учебных целях препроцессор. Это профессиональное, а не учебное средство, это отдельный язык. Декларации переменных оставил бы как в двух плюсах. Это методически более правильно, по-моему, что программист имеет возможность объявить видимость переменной так, как она должна быть видна, а не так, как это позволит компилятор. Полностью оставил бы объектную модель двух плюсов, но различал бы структуры и классы так же, как они различаются в дельфи. Наследование структур запретил бы, а наследование классов сделал бы всегда виртуальным. Деструкторы виртуальные по умолчанию, понятное дело. Кастинг и адресную арифметику оставил бы как в сях. Тут без ограничений. Отменил бы понятие ссылки, оставил бы только указатели. Два параллельных механизма — это для профессиональных, а не для учебных задач, повторюсь еще раз. Насчет ассемблерных вставок — спорный вопрос. Можно, видимо, не поддерживать. Сишные совмещения — убрал бы, как и паскалевские аналоги. Исключительные ситуации оставил бы в модели дельфи — при возникновении таковой библиотеки компилятора приводят исключение к единой модели. И языковые и системные структурные. Причем при откате иметь возможность указать — возвращаться ли в точку исключения или нет (как в структурных), то есть механизм отката исключения должен собрать деструкторы и если обработчик не намерен возвращаться, то поубивать объекты. Оставил бы кложуры (модификатор closure) — указатели на функции объектов как в дельфи и BCB, чтобы поддерживать модель делегирования.

То есть как бы плюсы для использования есть и у паскаля и у сей.
2003-09-01 11:43:32 Сергей Круглов(15/1475)
У нас в институте был как раз собственно придуманный язык C-Talk (C + Small-talk). Это был C-подобный язык, откуда выкинули как раз всякие маньячества вроде int main(int argc, char**argv), printfы, указатели, строки===массивы и даже for(;;). Классы, кажется, были...

Само собой, у него был интерпретатор.

Справедливости ради, надо сказать, что его уже не преподают. Преподавали Java, собирались (по неподтвержденным данным) преподавать какой-то Ruby. Что это такое, я не знаю, но гугели, наверное, знает :)
2003-09-01 11:59:03 edhel Legolas(0/5)
2Евгений Каратаев> "проверки границ массива, встроенные строки и прочее что скрывает реальные механизмы работы с памятью"
Конечно, знать как идет работа с памятью неплохо бы, но имхо сейчас как раз уходят от этого: VB, Java, C#, php, perl — там практически нет никакой "работы с памятью". И имхо это больше нужно системщикам... Думаю для первого года обучения можно все-таки и границы массивов проверять, и встроенные строки юзать и проч. А для программеров (особенно системщикам) нужен отдельный курс(ы) — ASM/C/C++.
2003-09-01 12:04:30 edhel Legolas(0/5)
И еще (немного не в тему): а зачем вообще нужна адресная аримфетика? *(m+5)==m[5], m+i+5=m[i+5] — зачем это? m++ и m-- что ли так необходим, разве проблема с i++ и i--?
2003-09-01 12:26:22 Евгений Каратаев
edhel Legolas:
  1. while ( *dest++ = *src++);
  2. for( int i = 0; src[ i]; i++)
     dest[ i] = src[ i];
   dest[ i] = 0;
Вот два варианта копирования asciiz — строк. В первом случае используется два понятия — указатели на участки памяти, во втором — уже три. Те же указатели плюс итератор. Это сложнее. Что прочтет программист в первом случае и во втором? По-моему, в первом случае он прочтет именно то, что писал автор, а во втором начнет анализировать структуру неявного отображения итератора на ссылку на элемент массива. Во втором случае комментарий почти необходим. В целом же адресная арифметика, конечно, не является необходимой, но она дает возможность точно высказать мысль в отдельных случаях. Зачастую и более эффективно. Но это сугубо личное мнение.
2003-09-01 12:42:43 Евгений Каратаев
edhel Legolas:
Кстати, а как Вы объясняете студентам существование двумерных и более мерных массивов на машине с линейной адресацией? Все равно же приходится приводить к линейному массиву... Спросите как-нибудь студентов, как это может быть. Наверняка будут ответи типа "да оно там само". А если оно само, зачем тогда писать что-то?
2003-09-01 13:02:20 edhel Legolas(0/5)
  1. for(int i = 0; src[i]; i++) dest[i] = src[i] — имхо это все-таки более очевидная запись
  2. в Яве я строки копирую так: s2 = new String(s1)
2003-09-01 13:11:26 edhel Legolas(0/5)
Прикладникам-то этого знать и не обязательно — матрица она и есть матрица, че тут мозги парить... И имхо те студенты, которые в Паскале поймут организацию многомерных массивов, эти же поймут это и в С — чем тут С поможет-то?

зы: студентам я объяснял (когда вел занятия), что в принципе многомерные матрицы можно хранить и в одномерных массивах (m[i*N+j]), но в паскале и проч. это же можно реализовать в более удобном виде (m[i][j]) и в действительности это одно и то же
2003-09-05 12:31:25 Мистик(7/7)
сообщение промодерировано
У меня обучение состоялось таким образом: МК-52 (сначала по журналу <<Наука и жизнь>>, а потом мне это МК купили), BASIC (по книгам, без компьютера), C (вот тут я в первый раз сел за компьютер), опять BASIC, ASM (Atary), ... Когда программировал на C (школа 9-10 й класы), то что такое указатели вначале не понимал. Да ними и не пользовался. Принимал как должное, как надо записывать аргументы scanf и все... Писать на C++ зарекся (самому писать хорошо, читать и отлаживать чужой код --- увольте). ООП в Delphi считаю более удобным (виртуальные конструкторы, метаклассы, интерфейсы, ...) и понятным. Кроме того, в Delphi в случае неясностей можно обратиться к исходникам, к чему тоде не лишне приобщать студентов...

В зависимости от целей обучения, предложил бы такой план:

Основная программа


  1. Ассемблер (MIX, Z80, x86, ...) Имхо ---- MIX или Z80
  При этом желательно использовать эмулятор, чтобы полностью избавить студентов от таких лишних подробностей, как формат EXE-файла, редактирование связей, ... Моя практика показывает, что научить этому можно.
  1. C или Паскаль (Oberon?) Имхо --- Pascal.
  Создание консольных приложений и реализация алгоритмов. Графика. Кстати, графические алгоритмы довольно-таки интересны студентам (были)...
  1. ООП (Java или C++ или Object Pascal) Имхо Object Pascal
  Один язык основной, с остальными можно в ознакомительном порядке (+Smalltalk)

  1. UML и разные методологии: COMMET, RUP, CMM и XP(!). Последнее по счету но не по важности.

  Ну а далее специализации:
    a) Web-семейство (PHP, Perl, DHTML, ...)
    b) TeX
    c) ИИ (Пролог, LISP),
    d) семейство SQL (My, IB, MS, Oracle, ...)
    e%2
2003-09-05 12:47:26 edhel Legolas(0/5)
  1. нужен ли он математикам/физикам? имхо лучше его спецом...
  2. чтобы бы с графикой сделать в дельфи.... надо ее или после ООП и VCL давать, или вообще не давать, или можно модуль написать с обычными функциями circle/point/..., чтобы без ООП
2003-09-10 16:38:30 Trur

while ( *dest++ = *src++);
Для давно программирующего на си этот код воспринимается как одно целое — синоним strcopy. Всякий другой будет долго разбираться, что же имел в виду автор. Вообще в си полно такого рода идиом, которые приходится запоминать. Поэтому для обучения он мало подходит. Только для системщиков и то попозже.


Я бы предложил два варианта по вкусу.
  1. Паскаль, а лучше Component Pascal. Где-то есть проект по его русификации и вообще внедрению в массы. Информатика-21 называется.
  2. Лисп, а лучше Sheme. В MIT именно с него начинают, причем преподают даже физикам.
2003-09-10 20:21:03 edhel Legolas(0/5)
Начали все-таки мы Object Pascal-ю (ака Дельфи) учить студентов. И сразу же трабла возникла — русский текст в консоли не работает! (понятно дело — навыдумывали кучу кодировок — кому это надо было???) Пришлось искать реализацию модуля crt — нашел модуль win32crt: замена модуля crt и работает не в консоли, а в обычном вин-окне. И шаблон сделали типа: uses win32crt; begin writeln('Hello, world!'); end.

2Trurl>
  1. Среду для Component Pascal одни тут челы смотрели — BlackBox называется — не смогли в ней exe-файл даже сделать, хотя вроде фича заявлена. Я сам не разбирался, может это у них и руки кривоватые...
И к тому же какая-нибудь одна кривая дока для него — имхо не есть гуд.
  1. Посмотрю инфу по Sheme... или Scheme он называется?
2003-09-11 13:00:28 Trurl
2 edhel Legolas:
  1. Может и кривоватые. У меня с этим проблем не было. Справедливости ради, надо сказать exe-файлы там делать несколько сложнее, чем в Delphi. Но с другой стороны, надо то че — шашечки или ехать?
Дока для него вовсе не кривая, а как раз очень приличная. Я таких хороших док почти и не встречал. Единственный недостаток — англицкая она.
Ф.В.Ткачев из Института ядерных исследований РАН перевел меню, часть документации. И использовал BlackBox для спецкурса "Современное программирование. Введение в объектные и компонентные технологии" на физфаке МГУ. Возможно, скоро появятся методические материалы. Посмотрите на http://www.inr.ac.ru/~info21/
Еще Оберон преподают в Вологодском пед.университете http://www.uni-vologda.ac.ru/oberon Там тоже кое-что есть.

  1. По Scheme инфу на русском найти совсем уж трудно.
2003-09-11 14:11:27 arto(2/278)
собирались выпускать sicp, во всяком случае перевод где-то валялся в сети.
2003-09-13 13:55:17 edhel Legolas(0/5)
2Trurl> Английская дока для наших студентов — это тоже самое, что доки нет. На днях у чела(студента) спрашиваю — что же делает вот эта функция (в проге) ClearDevice — тишина... что же делает ваша функция ShowCircle — "эээ... ну...". С английским у них худо — особенно на начальных курсах...
2003-09-14 23:24:52 Андрей Новиков(10/793)
Мое глубокое мнение, что у программиста английский должен быть вторым родным. Во всяком случае, когда ко мне приходили на собеседование, это было первое, о что я проверял — умение свободно читать документацию и общаться с иностранными коллегами. Так им и передавайте :)
2003-09-16 11:06:08 edhel Legolas(0/5)
2Андрей Новиков> ну дык не программисты они, а математики-физики! программистов из них будет только 5%!..
2003-09-16 20:42:35 VIG(34/801)
edhel Legolas:

Ежели 95% не собирается стать программистами, то и вопрос темы особого смысла не имеет.

Этих следует учить не как программистов, а как юзеров, иначе для 95% студентов весь курс будет бессмысленной тратой времени. А для 5% нужны спецкурсы: тут тебе и теория программирования, и лисп, и ... и вообще можно развернуться (в пределах выделенных часов/финансов, кхе-кхе :-).

Для юзеров же я бы посоветовал Excel, включая Solver и немного VBA. Не очень круто, зато, по-моему, наиболее эффективно с точки зрения критерия время/результат. Вот.
 
2004-01-04 18:18:18 lovermann
Я учусь в экономическом ВУЗе на информатике и статистике, а наш препод говорит, что те, кто желает стать программистом, не должен обязательно учиться в университете, ба достаточно и какого-нибудь среднего специализированного учебного заведения.

Учим мы scheme. Я уже прочитал кучу статей по поводу того, хорошо нам от этого будет или плохо, но основная идея, которой я придерживаюсь, — это то, что в университете студенты должны получать навыки и развивать мышление. Изучение конкретного языка программирования — это привязка к чему-то конкретному. Язык scheme просто развивает мышление и даёт очень много для того, чтобы потом заинтересованные сами выбрали себе подходящий язык и программировали на нём.

Scheme в чистом виде на практике практически не употребляется, поэтому он выполняет как бы функцию того абстрактного языка, о котором здесь уже говорили.

На сайте scheme есть огромнейший список университетов, где преподаётся этот язык, как обучающий. Здесь кто-то сказал, что мало информации по этому языку на русском языке. Хоть я лично английский и не люблю, но я его знаю на достаточном уровне, чтобы читать и понимать документацию, поэтому по поводу языка документации аппелирую к Андрею Новикову: "Мое глубокое мнение, что у программиста английский должен быть вторым родным."
2004-01-04 18:49:59 Дмитрий Котеров(15/623)
Да, scheme — то еще зло. Я понимаю, как интересная игрушка — это еще ничего. Но то, что некоторые люди воспринимают его всерьез, наводит на серьезные же опасения. SXML, SXSLT, SXQuery... Web-программирование на Scheme (вставки Scheme-кода в HTML, наподобие того, как это сделано в PHP). Scheme и Java...

В общем, большой-большой бррр-рррр.
2004-01-04 19:07:15 edhel Legolas(0/5)
lovermann, Scheme надо будет посмотреть на досуге... мы начали все-таки на delphi учить первокурсников (в консольном режиме). Конечно, английский для программера очень полезно знать (практически необходимая), но факт в том, что многие наши студенты не знают его.

Все-таки надо будет подумать над тем, чтобы, действительно, выделить N групп, которые будут изучать программирование, а остальным давать только юзерство. У нас раньше было нечто подобное (когда я учился): была одна advanced группа по программированию (я был в ней) и одна просто advanced — у них было advanced-программирование %]
2004-01-05 10:58:26 lovermann
Мне, как гуманитару, вообще это с трудом даётся. Вот сейчас рекурсию разбираю: я уже и все типовые примеры в памяти держу, но вот решить новую задачу для меня проблема. О, как просто выглядят циклы в других языках (в паскале, например), а тут вместе цикла — рекурсия. Ужас какой-то.

Кстати, по поводу английского: прошу принять во внимание, что я сторонник того, чтобы обучение проходило на родном языке. Про документацию на англе я упомянул для тех случаев, когда деваться просто некуда. Жалко, но в РуНете нет сайта по scheme, может, поэтому и не решаются за него браться.

Для справки: scheme — это лисп-подобный язык.
2004-01-11 20:16:02 arto(2/278)
Дмитрий Котеров
а чем именно вам не нравится scheme?
2004-01-12 20:30:58 Дмитрий Котеров(15/623)
Скобками.
2004-01-12 20:44:05 arto(2/278)
"мелко, хоботов!" :)
2004-01-14 02:26:55 Дмитрий Котеров(15/623)
Там сколько этих хоботов, что мало не покажется.
2004-01-18 16:17:06 lovermann
Я где-то читал, что код программы на scheme будет короче, чем на других языках. Там ведь ни инициализации, ни типов переменных. Там даже переменную от функции не отличишь — играешь со всем, как хочешь :)
2004-01-19 12:31:07 Сергей Круглов(15/1475)
Кто играет, тот доиграется ;)
Вы думаете, что язык, в котором "переменную от функции не отличишь", подходит для начального обучения?
2004-02-09 10:20:05 Svarog
Добрый день.

Занимаюсь (точнее пытаюсь заниматься) программированием:Веб, .NET. До этого программингом не занимался, только в школе: Бейсик. Не давно понял, что многого не хватает, точнее основ. Связано это с тем, что в Университете(в настоящее время на заочке) я не учился, а в армии совсем разучился думать.

Я конечно понимаю, что написано об этом в топике много, но интересуют конкретные предложения, точнее, с чего начать.
2004-02-09 23:17:41 Дмитрий Котеров(15/623)
С PHP. Потому что с Perl закопаетесь однозначно.
2004-02-11 09:11:56 Svarog
Спасибо.
Предположим, начинаю я с PHP, продолжаю на чем? .NET?
2004-02-11 09:40:33 Сергей Сирик(20/599)
М Svarog
А Вы не хотите завести другую тему? Эта немного не про то ... Еще совет — покопайтесь в Архивах разделов Теория, Прочее, еще где-то уже не однократно всплывала тема про "с чего начать"
2004-02-11 10:05:06 Svarog
Ок, спасибо за совет.
2004-02-12 08:43:54 Вася(0/37)
Ать стоп! Беру свои обратно насчёт языка Паскаль. Начинать надо действительно с него, хотя на нём и не пишут. Уж слишком он интуитивно понятный.

к оглавлению раздела для программистов

К главной странице