Xpoint
   [напомнить пароль]

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

Метки: [без меток]
2003-08-15 10:43:48 [обр] edhel Legolas(0/12)[досье]

Вопрос таков: какой язык лучше использовать в вузах для обучения студентов программированию??? Сейчас зачастую это морально устаревший Borland Pascal. Претенденты такие:

  1. Delphi
  2. Visual C++ (может быть сначала консольные приложения, потом классы, затем библиотека классов)
  3. C#
  4. Visual Basic
  5. Java (нет обычных глобальных функций/методов - для обучения не есть гуд)

(перечислены в порядке моего имхо предпочтения)

спустя 1 минуту [обр] edhel Legolas(0/12)[досье]
дополнение: причем студенты некоторые могут в последствии идти на специализациюю связанную с программированием, а некоторые нет
спустя 39 минут [обр] arto(2/497)[досье]
lisp
scheme
python
спустя 13 минут [обр] edhel Legolas(0/12)[досье]
шо есть scheme?
спустя 5 минут [обр] Сергей Круглов(19/2057)[досье]
типа лиспа тоже язык
спустя 5 минут [обр] Евгений Бондарев aka Eugene Bond(31/1600)[досье]

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

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

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


Это не более, чем мое ИМХО

спустя 4 минуты [обр] Андрей Новиков(16/1242)[досье]
Учить надо начинать с Паскаля. Он морально устарел, но он канонический. Все остальные языки надо учить уже понимая, что такое программирование.
спустя 2 часа 16 минут [обр] Денис Имаев(0/273)[досье]
Андрей Новиков:
Вот именно - Паскаль и был разработан математиками для этого. Начинать нужно с изучения основ алгоритмического программирования (и IMHO повозиться с ограничивающими функциями, и доказательством корректности), а для этого паскаль идеально подходит.
спустя 50 минут [обр] Даниил Иванов(0/63)[досье]
Собственно, почему тогда не изучать основы алгоритмического программирования на Си? Он не более сложен в обучении, чем Паскаль (моменты типа того, что в Си не контролируется выход за границы массива, в расчет не берем) и, как минимум, не менее функционален.
спустя 38 минут [обр] Владимир Палант(27/4445)[досье]
Си гораздо менее строг и менее логичен. IMHO для начинающих не идеальный вариант.
спустя 20 минут [обр] Андрей Новиков(16/1242)[досье]
Учебный язык должен долбать ошибками компиляции, а не позволять делать все, что душе угодно.
спустя 2 часа [обр] Andrey Nedbalski(0/30)[досье]
Паскаль не дает полного понимания ООП, что очень важно на данный момент. Да и на собственном опыте убедился, насколько трудно переучиваться с паскаля на С++. Года 2, опыт программирования на паскале, мешал правильно строить программы на C++
спустя 14 минут [обр] Владимир Палант(27/4445)[досье]
В смысле понимания ООП лучше Java, опять же потому что позволяет меньше, да и всевозможных реликтов в ней меньше. А учиться программированию на примере Visual C++ я и злейшему врагу не пожелал бы...
спустя 6 минут [обр] Евгений Бондарев aka Eugene Bond(31/1600)[досье]
Andrey Nedbalski:
Скорее всего в этом есть доля вины преподавателей, которые сами видели только структурное программирование как приемлимую концепцию написания программ.
У нас тоже были такие "антиквары", которые не использовали преимущества TurboVision, а писали все интерфейсы "по своему, без этих объектов".
спустя 44 минуты [обр] Сергей Круглов(19/2057)[досье]

Если выбирать среди C-подобных языков (со скобками {}, а не BEGIN-END и т. д.) лучше тогда Java.

На первых порах можно сказать, что писать

public class Program{
  public static void main(String argv[]){

  }
}

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

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

спустя 1 час 47 минут [обр] Алексей Полушин(0/231)[досье]
Начинать обучать программированию надо с ассемблера. Для того, чтобы понимать, а что же получается на выходе компилятора. И когда вы посмотрите на код, который генерирует С++, то подумаете - а может, на самом деле лучше "без этих объектов".
http://www.joelonsoftware.com/......ian/Articles/BacktoBasics.html
спустя 1 день 20 часов [обр] edhel Legolas(0/12)[досье]
  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, но для него только английская дока, так что с ним разбираться запаришься...

спустя 5 часов [обр] Евгений Бондарев aka Eugene Bond(31/1600)[досье]
edhel Legolas[досье]
Был еще и WinPas - паскаль под виндовс. Позволял аналогом TurboVision создавать виндовс-интерфейсы, а так же писать практически консольные приложения в нетекстовом интерфейсе.
спустя 11 минут [обр] arto(2/497)[досье]
какя-то привязка к windows....
спустя 2 часа 20 минут [обр] Давид Мзареулян(14/1003)[досье]
А ведь как ни крути, а лучшим процедурным языком для обучения как был так и остался Паскаль...
спустя 8 часов [обр] Андрей Новиков(16/1242)[досье]
Object Pascal 7 содержал полноценный IDE под Windows и что-то, аналогичное MFC, уже не помню - в прошлой жизни было :)
спустя 2 дня 1 час [обр] edhel Legolas(0/12)[досье]
2Андрей Новиков> это был OWL
спустя 6 часов [обр] Дмитрий Котеров(15/912)[досье]
Да, вероятно, BP7 еще долгое время останется в этом отношении вне конкуренции. Одна из главнейших причин — там Help замечательный, нигде такого нет. Ну а с 64К придется до поры до времени мириться.
спустя 33 минуты [обр] Владимир Палант(27/4445)[досье]
Так уж часто вам мешал этот 64k? У меня только одна программа была, да и то - начинающие таких не пишут.
спустя 38 минут [обр] Давид Мзареулян(14/1003)[досье]
C другой стороны, Cи очень дисциплинирует при работе с указателями. В Паскале указатели слишком "извне", и я часто сталкивался с ситуацией, когда человек долго писал на Паскале (досовском), и ни разу не использовал указатели. И имеет большие трудности в понимании, что это такое и зачем. В Си такая ситуация невозможна - там указатели появляются буквально начиная с "Hello, World!". Так что по этому критерию Си, наверное, лучше.
спустя 5 часов [обр] Сергей Сирик(28/737)[досье]

Паскаль онли. Для понимания, что же такое данные, и что такое - действие над ними. Потом уже можно объяснять, как над ними можно извратиться в плане инкапсуляций, полиморфизмов и т.д. В Object Pascal (который Дельфи) все основные моменты ООП отражены вполне нормально. И уже на третьем семестре можно и Яву попробовать.

ИМХО язык таки важен, но более важно то, чтобы учить именно ПРОГРАММИРОВАНИЮ, а не языку :)

спустя 14 часов [обр] edhel Legolas(0/12)[досье]

Недостатки BP7 по ИМХО: 64К, в ХР проблема с отображением русских символов, на быстрых компах трабла с модулем CRT, извращенные динамические массивы (getmem/freemem), скудная устаревшая библиотека классов (TV :P).

Думаю может все-таки действительно с Object Pascal aka Delphi начинать?..

спустя 13 минут [обр] Евгений Бондарев aka Eugene Bond(31/1600)[досье]
edhel Legolas:
Как раз "извращенные динамические массивы (getmem/freemem)" замечательно учат аккуратности программирования и пониманию логики организации связанных списков!
спустя 36 минут [обр] Сергей Сирик(28/737)[досье]
Да нет, там (в Дельфях) для написания простой учебной программки сортировки надо в дебри залезать ...
спустя 56 минут [обр] edhel Legolas(0/12)[досье]

2Евгений Бондарев> (1) студенты-"не программисты" в большинстве случаев все равно не понимают как работает этот getmem/freemem, в С++/java динамические массивы "красивее", (2) каким образом извращенные динамические массивы используются для организации списков? для этого используют new/dispose.

2Сергей Сирик> ????? в консольном приложении программы будут выглядеть практически одинаково - разве нет? (без использования классов)

спустя 5 минут [обр] Евгений Бондарев aka Eugene Bond(31/1600)[досье]
edhel Legolas:
Хм...
(2) - согласен. запамятствовал
спустя 29 минут [обр] Виктор Сорока(0/18)[досье]

Никто не вспомнил (или я пропустил) о параллельном программировании
тут однозначно Ява (Аду никто не любит :( )

присоединяюсь ко всем рекомендующим Паскаль, как язык для начинающих

спустя 3 минуты [обр] Евгений Бондарев aka Eugene Bond(31/1600)[досье]
Виктор Сорока:
Для параллельного программирования нужна хорошая теоретическая база
спустя 2 дня 23 часа [обр] Дмитрий Котеров(15/912)[досье]

Давид Мзареулян:

C другой стороны, Cи очень дисциплинирует при работе с указателями.

Это утверждение из серии «все, что не убивает тебя, делает тебя сильнее». Это не дисциплина, это самая настоящая муштра. В то же время, как раз идее указателей лучше учиться на Паскале, потому что там указатели — в действительности не указатели, а ссылки. Указатель можно увеличить и уменьшить на единичку, с ним можно выполнять различную арифметику. С указателями же Паскаля всего этого делать нельзя. Ссылка проще, чем указатель, поэтому обучение лучше начинать с нее. То, что, работая со ссылками, практически невозможноошибиться, — это только плюс. Ссылка — это как номерок на пальто в гардеробе. Вместо того, чтобы перевешивать целиком пальто при сортировке, можно просто перевесит номерки.

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

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

Таким образом, обучать программированию с Delphi (точнее будет сказать — с Object Pascal) я бы и врагу не посоветовал. Когда надо рассказывать про ООП, действительно, лучше всего подойдет Java, потому что она урезана до безобразия. Ну а уж потом, для того, чтобы показать на практике, как же она урезана и как же там все плохо, можно браться за C# и C++. C++ же самый сложный и непостижимый для обучения, но, в то же время, он прекрасно показывает, что, если крутить с энергией сверхновой, из белья можно выжать не только воду, но и изотопы цезия.

спустя 9 часов [обр] Василий Богатов aka Xpom[досье]

я немножко припозднился (дискуссия потолстела оффтопиком и скатилась к обсуждению языков программирования) но все же...
вообще топикообразующий вопрос, имхо, поставлен несколько узковато "какой язык программирования выбрать для преподавания в ВУЗе"... каком ВУЗе какой направленности (гум/тех)? для чего им программирование? для какой выпускной специализации? в каком объеме? в какой форме (практикум/лекция, основной курс/факультатив)? - все это не ясно... т.е. нет исходных данных... вопрос без потери смысла можно несколько переозвучить - "какой язык программирования выбрать в абстрактном ВУЗе неважно какой направленности для преподавания в разных объемах и мы еще не решили в какой форме?" ... хорош вопрос? а остался в принципе таким же простым... ответ же на такой вопрос тоже может быть прост - "придумайте себе абстрактный язык программирования и преподавайте его"... однако подход к ответу на вопрос может быть и иным - "выберете язык Ассемблера - значит и будете преподавать язык Ассемблера", "выберете Паскаль - значит и курс можно будет смело назвать - "Программирование на языке Паскаль", "выберете Си - будет "Программирование на языке Си"... думаю ясно, к чему я клоню... преподавание программирования не есть преподавание языка программирования... для преподавание программирования формально язык-то не важен... причем тут вообще конкретные языки тогда?.. знание правил написания кода (а если с самого начала вести преподавание какого-то конкретного языка, то то, чему вы научите и будет тогда для обучаемого - правилами написания кода, т.е. просто знание синтаксиса) разве есть цель обучания программированию? разве в общем смысле программирование - не есть ли составление алгоритма (для качественного достижения результата)? может для начала студентам блок-схемки показать (а мы обсуждаем автоматические деструкторы), может им абстрактные понятия дать типа "переменная", "функция", "ссылка", "цикл", "оператор", "условный переход", а потом "ооп", "класс", "объект" и тп (а мы про динамические массивы рассуждаем), может студентам на русском языке стандартные конструкции типа "если.. то..", "пока.. выполнять.." разобрать (а давайте про контекстно-зависимые грамматики поговорим)?
я так понял, ключевое слово - начинать, а вы, друзья программеры (многие тут) говорите про то, как надо хорошо писать, да как бы к чему-то плохому не приучить, да чем один ооп хуже другого... посоветовали...

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

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

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

С уважением.

спустя 31 минуту [обр] Дмитрий Котеров(15/912)[досье]
 "выберете язык Ассемблера - значит и будете преподавать язык Ассемблера", "выберете Паскаль - значит и курс можно будет смело назвать - "Программирование на языке Паскаль", "выберете Си - будет "Программирование на языке Си"...

Как убежденный последователь методики коан, я тут с Вами решительно не согласен. Представив себе аналогию мозга и нейронной сети, начинает казаться, что обучать все же лучше на контрольных примерах. Так оно обучается лучше, так интереснее, наконец, так более практично. Соответственно, обучать программированию следовало бы именно на некотором языке программирования, причем не на абстрактном, а на самом что ни на есть материальном. Чтобы обучающийся мог сам проводить эксперименты и сравнивать полученные результаты с тем, что он ожидал.

Что касается этого «бумажного программирования» и «математического подхода к программированию», то даже Лем писал, что математика — ведь, страшно неуклюжая для описания алгоритмов и вообще — программирования. Бумажка — это большей частью все же математика. По крайней мере, если пишете ручкой, а не карандашом с ластиком.

спустя 1 час 10 минут [обр] Василий Богатов aka Xpom[досье]

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

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

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

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

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

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

спустя 7 минут [обр] Владимир Палант(27/4445)[досье]
Я согласен с тем, что обучение программированию не должно привязываться к языкам, в первую очередь учиться надо именно программированию. Но из этого далеко не следует, что учиться надо на бумаге. Я видел результаты такого подхода на своём первом курсе в университете. Те из студентов, кто уже умел программировать, без проблем обращались с псевдо-языком, который изобрёл наш профессор. А вот не умеющих программировать он ставил в тупик, они всё время делали одни и те же ошибки и не понимали, почему надо делать так, а нельзя эдак. Когда же на втором семестре пошла Java, то те же самые новички резвенько начали программировать. Ведь сразу стало ясно - вот такую конструкцию компилятор не пропустит и вот это он тоже не понимает. И самое главное - стал виден результат, стало понятно, что этот код действительно что-то делает.
спустя 6 часов [обр] edhel Legolas(0/12)[досье]

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); и т.д. и т.п.... И все становилось на свои места.

спустя 1 час 20 минут [обр] Евгений Каратаев[досье]

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-средств как таковых.

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

Это мое личное, сугубо субъективное мнение, основанное на знакомстве со многими программистами, получавшими различное образование. Подвел статистику - получилось, что отклонения от списка приводят к появлению белых пятен в понимании программистами того, что и как они делают. Надеюсь, что не сильно разочаровал.

спустя 32 минуты [обр] edhel Legolas(0/12)[досье]
Для боевых программеров - так план может и прокатит... А давайте вспомним первые языки, с которых начинал каждый из нас. Я учил языки в такой последовательности: GW Basic/QBasic, TP 6.0, ASM, C/C++, Java/JavaScript/SQL (параллельно), Prolog, Perl/PHP.
спустя 7 минут [обр] Василий Богатов aka Xpom[досье]

2Владимир Палант:
у меня был несколько иной опыт первого курса: первый семестр - "Алгоритмы и алгоритмические языки" (машина Тьюринга, алгоритмы Маркова и тп), был и Паскаль (на практикумах), во 2м семестре офигительно преподавали Ассемблер (естественно, не все его сотни команд, или сколько их там). именно "на бумажке", потому как компов с этим самым Ассемблером мы так и не увидели. так вот в течение всего семестра парням (далеко не двоешникам), которые уже вовсю фигачили на Си, задачки делали девчонки из Мурманска, которые компа до сих пор-то не видели, но у которых с математикой и с головой было все в порядке (еще один "+" в пользу математики)... но и Паскаль, как впоследствии и Ассемблер, были исключительно на бумажке, а тыкаться носом в ошибки компилятора и "подбором" писать программу - не самое педагогически и методологически верное решение (если уж мы про обучение)... и результат - не главное, главное - ход мысли, т.е. алгоритм... и именно после того самого первого первого курса я хожу 2 дня думаю над задачей, а потом за 15 мин это дело набираю и в 95% случаев все работает... плохо писать прогу сразу на компе... в качестве примера, у многих пишущих (не программы) достаточно сильно изменяется мышление после долгой работы на компе, т.е. если человек писал лет 10 статьи на бумаге и печатной машинке, где пишешь порой всего по паре раз - черновик + чистовик, а потом пересел на компьютер, где можно в процессе написания все нафиг переколбасить... с мыслями в голове так же - для бумаги мысль твоя уже должна быть выношена и готова, а для компа это далеко не обязательно... так что мой вывод - "бумага дисциплинирует" (что, имхо, важнее культуры написания кода и тп)

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

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

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

фуф...

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

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

2Евгений Каратаев:
согласен с edhel Legolas - срок тянет на 5 лет .) как на ВМК на программистском потоке .)) Евгений, спрашивая Legolas'а о том, что из студентов тот хочет получить, вы сами отвечаете на свой вопрос - весьма профессиональных программистов... а у них по построению вроде бы другая специальность должна быть .))

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

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

спустя 8 минут [обр] Василий Богатов aka Xpom[досье]
2edhel Legolas:
для п. 1 (совсем прикладники) достаточно, видимо, будет п.0 Евгения Каратаева + фундаментальные алгоритмы + Паскаль с обильными задачками и примерами, а дальше - собственно Маткад и тп
для п. 2 (боевые) - все 8 пунктов Евгения Каратаева + фундаментальные алгоритмы... и начало в виде АСМа - ничем не плохо... вот преподавать его хорошо мало кто умеет... у нас вот был Пильщиков в Универе, его книжка "Ассемблер" - ну просто закачаешься, ни одного лишнего слова, одно удовольствие читать, причем именно для обучения!
спустя 46 минут [обр] Василий Богатов aka Xpom[досье]
Пильщиков, "Ассемблер": http://books.dore.ru/bs/f1bid288.html
спустя 18 минут [обр] edhel Legolas(0/12)[досье]

У нас (матфак не специализированного универа) сейчас технология такая:
1 курс: лекции "Программирование" (теория с примерами на паскале) + семинары (паскаль) + практика (задачки за машинами), параллельно читаются математиками курсы типа Дискретная математикая, Логика, где рассказывают, в частности, и про машину Тьюринга и проч....
2 курс: начинается ООП: лекция+семинар+практика (на том же Паскале), пролог, асм (не Intel с прогой для интерпретации %P)
3,4 курс: спецы по C/C++, Java, SQL, ASP
5: Internet

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

спустя 9 часов [обр] Дмитрий Котеров(15/912)[досье]

Василий Богатов:

если имеется в виду его "Сумма технологии",

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

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

Ведь самое продуктивное обучение — это когда обучающийся сам до всего доходит, а учитель лишь показывает ему направление, а чаще — направление, где искать указатель направления («изобретение велосипеда»). Это заставляет думать, по крайней мере, и доставляет радость познания, созидания и всякого другого «-ания». Так что, вместо того, чтобы с нуля начинать изучение программирования с абстрактных теорий, Кнута (и пряника), блок-схем и бумажки, лучше будет за это же самое время поковырять 2-3 разных языка. Так мы получим а) представление о том, что все языки суть одинаковы, б) практический навык и в) возможность экспериментировать с простенькими программами, сразу наблюдая результат экспериментов.

спустя 1 час 30 минут [обр] Василий Богатов aka Xpom[досье]

2Дмитрий Котеров:

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

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

Посмотреть, что получится

спустя 30 минут [обр] Василий Богатов aka Xpom[досье]

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

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

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

спустя 2 минуты [обр] Василий Богатов aka Xpom[досье]

[дополнение]: а если у народа есть доступ непосредственно к учебным планам (прошлых лет или нынешним) - всецело призываю поделиться с Legolas'ом! :)

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

спустя 11 часов [обр] Дмитрий Котеров(15/912)[досье]
Василий Богатов:
Можно сколько угодно говорить о воде, описывать ее химические и физические свойства. Но, лишь напившись, утоляешь жажду.
спустя 2 часа 54 минуты [обр] Василий Богатов aka Xpom[досье]

Дмитрий Котеров:
вы против принципа "Пусть расцветает сто цветов"?

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

спустя 2 дня 17 часов [обр] edhel Legolas(0/12)[досье]
http://www.bluej.org/ - рульная вещь - среда для обучения основам ООП на основе Явы.
спустя 1 час 55 минут [обр] Василий М.+(0/171)[досье]

Как студент скажу - начинать надо с С, но не с Паскаля и других малоиспользуемых в работе языков.
Почему? Да потому, что время, убитое на тот же Паскаль не стоит тех мучений и знаний, которые даются студенту. Сейчас я перешёл на 2 курс института, и полагаю, что пол с лишним семестра потраченых на изучение основ программирования на Паскале были попросту ПОТЕРЯНЫ.
Все эти алгоритмы можно было изучать и на С с гораздо большим успехом. То же самое. Только когда изучаешь Паскаль, ты переступаешь через себя - мне уже 21, хочется изучать то, что хочется и нужно и то, что пригодится в жизни, а заставляют работать на богозабытом языке, который нигде не используется уже десяток лет. А это время. Это деньги.

Товарищи деканы, учителя и преподаватели!
Ну не мучайте вы студентов тем, что им не нужно. Отступите вы от этих канонов патриорхального существования. И студенты к вам потянутся.

спустя 1 час 56 минут [обр] Андрей Новиков(16/1242)[досье]
В институтах никогда не учили тому, что нужно в Вашем понимании. Этому учат в ПТУ и на курсах повышения квалификации. В институтах ставят голову.
спустя 8 минут [обр] Евгений Каратаев[досье]
Onnix X:
Аплодисменты. Все ждал - написать самому, чтобы студентов не уродовали паскалем и прочими так называемыми учебными выдумками или кто-то другой напишет.
Вот давайте без истерик прикинем, чем пользуется народ и как эти средства возникли.
Вот мой первый список - TeX, Perl, C, C++, Asm, PHP, может кто помнит, еще М. Средства показавшие себя надежными, практичными и востребованными. Возникли из практических потребностей программистов. Написаны программистами для программистов. И кто из них когда-либо был назван учебным, методичным и легко понимаемым?
Второй список - Java, SQL, Pascal, Ada, COBOL, XXXScript. Методичные. Чрезвычайно удобны для доцента, чтобы выйти к доске и поумничать. Причем объем вещания скажем по SQL как раз примерно на семестр. Математика там, проекции и прочее. Чрезвычайно проблемные и неудобные в реальной эксплуатации. Созданы и одобрены умниками. Посмотрите сами, какими вопросами завалены программерские форумы. Я нахожу, что статистика форумов отражает не востребованность и используемость средства, а его проблемность.
Господа, если в Ваших руках обучение людей, не уродуйте их. И растите программеров-пофигистов, чтобы им было до лампочки на каком языке писать. Спасибо за внимание.
спустя 1 час 11 минут [обр] Василий М.+(0/171)[досье]

Евгений Каратаев: Аплодисменты!

В институтах ставят голову.

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

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

А вообще, профессия программист уже становится неопределённым термином. Необходимо разделять науку программирования на программирование нацеленное на работу в веб, на обычное программирование и т.д., не знаю какое там ещё есть. А то например я знаю, что на протяжении 5 лет я пройду около .... не помню сколько, но много языков. И зачем столько? За двумя зайцами не угонишься. Был у нас ВБ. Ну и закончился. И больше не будет. И что теперь? Я стал спецом в ВБ? Нет, не стал. Хотя бы потому, что для удовлетворительного знания какого-либо языка необходимо не меньше года каждодневной работы.
А я не могу это себе позволить.

спустя 2 часа 22 минуты [обр] Андрей Новиков(16/1242)[досье]
Василий М.[досье], спасибо за отсутствие сомнений, но я себя позиционирую, как кустаря-одиночку, а не профессионала. Вы прочитали статью http://www.joelonsoftware.com/......ian/Articles/BacktoBasics.html, приведенную в начале этого обсуждения? Вот в частности для этого и нужно учить то, что в будущем никогда не пригодится.
спустя 23 минуты [обр] Евгений Каратаев[досье]

Хотелось бы услышать мнение тех, кто преподает, или связан с дообучением, кроме флейма на темы

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

услышать также оттенение "учебности" языка. Кто и что именно вкладывает в понятие "учебный"?

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

Что именно?

спустя 1 час 49 минут [обр] edhel Legolas(0/12)[досье]
Знаю, что после Паскаля добрая часть студентов (или злая?))) не может понять почему нельзя писать "char c*; cin>>c;". Интересно, а если сразу учить С - поймут? Кто-нибудь учил С/С++ как первый свой язык?
спустя 12 минут [обр] edhel Legolas(0/12)[досье]

2Евгений Каратаев

  1. имхо это все-таки хорошо и имхо хорошо, что новые С-компиляторы хоть варнинги не хилые выдают
  2. на это конечно пофиг, но имхо для языка это и не являются необходимостью: С++, ++С, С+=1, С=С+1, С=++С - оно тебе надо?

3,4. Вирт что ли мудак? %]

  1. какие-такие дикие понятия у С++ по сравнению с Паскалем? множественное наследование и арифметика указателей?
  2. литература понятно дело нужна, но достаточно и книг; если по языку только английская литература, то это будет тоже геморой для всех...
  3. -
  4. а нужно чтоб не просекали?
спустя 3 часа 29 минут [обр] Василий М.+(0/171)[досье]
edhel Legolas: мой первый язык был JS :)
спустя 19 часов [обр] Сергей Сирик(28/737)[досье]
Onnix X:
Евгений Каратаев:
Знали б вы, как я сейчас жалею, что на четвертом курсе "крутой веб-программист" напрочь игнорировал курс по тестированию, который читается по накатанным рельсам уж не знаю сколько лет ... понимаешь это только к сожалению с высоты должности менеджера проектов ... когда пытаешься дообучать подчиненного тестера, и не можешь найти именно что тех общих и правильных слов, которые говорились в институте и пролетали мимо ушей.
спустя 23 часа [обр] Давид Мзареулян(14/1003)[досье]

Вообще, с большим любопытством бы посмотрел на человека, у которого первым языком был "С++". Кроме шуток. Я его (человека этого) уже заранее уважаю.

Читаю я это обсуждение, и всё-таки склоняюсь к ответу "С" (без плюсов).

спустя 16 часов [обр] edhel Legolas(0/12)[досье]
Ну допустим С без плюсов - это первый год обучения, но потом же все равно надо ООП и все равно С++?
спустя 1 час 5 минут [обр] Евгений Каратаев[досье]

edhel Legolas:
На выходные все не выходила из головы тема учебного языка. На самом деле ничего не подходит. В первом приближении близок к задаче паскаль (не пинайте ногами, но только в первом). Что бы делал я - взял бы и вынул из паскаля всю муть типа проверки границ массива, встроенные строки и прочее что скрывает реальные механизмы работы с памятью. Не будем путать людей. При работе с ножом каждый должен по крайней мере один раз порезаться, а при работе с памятью по крайней мере один раз выйти за пределы массива. Синтаксис объявления переменных сделал бы как в сях. Во втором приближении получается что-то вроде си. Но не совсем. От паскаля оставил бы понятие юнита и не использовал бы сишных хедеров. Полностью убрал бы в учебных целях препроцессор. Это профессиональное, а не учебное средство, это отдельный язык. Декларации переменных оставил бы как в двух плюсах. Это методически более правильно, по-моему, что программист имеет возможность объявить видимость переменной так, как она должна быть видна, а не так, как это позволит компилятор. Полностью оставил бы объектную модель двух плюсов, но различал бы структуры и классы так же, как они различаются в дельфи. Наследование структур запретил бы, а наследование классов сделал бы всегда виртуальным. Деструкторы виртуальные по умолчанию, понятное дело. Кастинг и адресную арифметику оставил бы как в сях. Тут без ограничений. Отменил бы понятие ссылки, оставил бы только указатели. Два параллельных механизма - это для профессиональных, а не для учебных задач, повторюсь еще раз. Насчет ассемблерных вставок - спорный вопрос. Можно, видимо, не поддерживать. Сишные совмещения - убрал бы, как и паскалевские аналоги. Исключительные ситуации оставил бы в модели дельфи - при возникновении таковой библиотеки компилятора приводят исключение к единой модели. И языковые и системные структурные. Причем при откате иметь возможность указать - возвращаться ли в точку исключения или нет (как в структурных), то есть механизм отката исключения должен собрать деструкторы и если обработчик не намерен возвращаться, то поубивать объекты. Оставил бы кложуры (модификатор closure) - указатели на функции объектов как в дельфи и BCB, чтобы поддерживать модель делегирования.

То есть как бы плюсы для использования есть и у паскаля и у сей.

спустя 13 минут [обр] Сергей Круглов(19/2057)[досье]

У нас в институте был как раз собственно придуманный язык C-Talk (C + Small-talk). Это был C-подобный язык, откуда выкинули как раз всякие маньячества вроде int main(int argc, char**argv), printfы, указатели, строки===массивы и даже for(;;). Классы, кажется, были...

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

Справедливости ради, надо сказать, что его уже не преподают. Преподавали Java, собирались (по неподтвержденным данным) преподавать какой-то Ruby. Что это такое, я не знаю, но гугели, наверное, знает :)

спустя 15 минут [обр] edhel Legolas(0/12)[досье]
2Евгений Каратаев> "проверки границ массива, встроенные строки и прочее что скрывает реальные механизмы работы с памятью"
Конечно, знать как идет работа с памятью неплохо бы, но имхо сейчас как раз уходят от этого: VB, Java, C#, php, perl - там практически нет никакой "работы с памятью". И имхо это больше нужно системщикам... Думаю для первого года обучения можно все-таки и границы массивов проверять, и встроенные строки юзать и проч. А для программеров (особенно системщикам) нужен отдельный курс(ы) - ASM/C/C++.
спустя 5 минут [обр] edhel Legolas(0/12)[досье]
И еще (немного не в тему): а зачем вообще нужна адресная аримфетика? *(m+5)==m[5], m+i+5=m[i+5] - зачем это? m++ и m-- что ли так необходим, разве проблема с i++ и i--?
спустя 21 минуту [обр] Евгений Каратаев[досье]

edhel Legolas:

  1. while ( *dest++ = *src++);
  2. for( int i = 0; src[ i]; i++)

     dest[ i] = src[ i];
   dest[ i] = 0;
Вот два варианта копирования asciiz - строк. В первом случае используется два понятия - указатели на участки памяти, во втором - уже три. Те же указатели плюс итератор. Это сложнее. Что прочтет программист в первом случае и во втором? По-моему, в первом случае он прочтет именно то, что писал автор, а во втором начнет анализировать структуру неявного отображения итератора на ссылку на элемент массива. Во втором случае комментарий почти необходим. В целом же адресная арифметика, конечно, не является необходимой, но она дает возможность точно высказать мысль в отдельных случаях. Зачастую и более эффективно. Но это сугубо личное мнение.

спустя 16 минут [обр] Евгений Каратаев[досье]
edhel Legolas:
Кстати, а как Вы объясняете студентам существование двумерных и более мерных массивов на машине с линейной адресацией? Все равно же приходится приводить к линейному массиву... Спросите как-нибудь студентов, как это может быть. Наверняка будут ответи типа "да оно там само". А если оно само, зачем тогда писать что-то?
спустя 19 минут [обр] edhel Legolas(0/12)[досье]
  1. for(int i = 0; src[i]; i++) dest[i] = src[i] - имхо это все-таки более очевидная запись
  2. в Яве я строки копирую так: s2 = new String(s1)
спустя 9 минут [обр] edhel Legolas(0/12)[досье]

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

зы: студентам я объяснял (когда вел занятия), что в принципе многомерные матрицы можно хранить и в одномерных массивах (m[i*N+j]), но в паскале и проч. это же можно реализовать в более удобном виде (m[i][j]) и в действительности это одно и то же

спустя 3 дня [обр] Мистик(7/13)[досье]
сообщение промодерировано

У меня обучение состоялось таким образом: МК-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(!). Последнее по счету но не по важности.

  Ну а далее специализации:

  1. Web-семейство (PHP, Perl, DHTML, ...)
  2. TeX
  3. ИИ (Пролог, LISP),
  4. семейство SQL (My, IB, MS, Oracle, ...)

    e%2

спустя 16 минут [обр] edhel Legolas(0/12)[досье]
  1. нужен ли он математикам/физикам? имхо лучше его спецом...
  2. чтобы бы с графикой сделать в дельфи.... надо ее или после ООП и VCL давать, или вообще не давать, или можно модуль написать с обычными функциями circle/point/..., чтобы без ООП
спустя 5 дней [обр] Trurl[досье]

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

Я бы предложил два варианта по вкусу.

  1. Паскаль, а лучше Component Pascal. Где-то есть проект по его русификации и вообще внедрению в массы. Информатика-21 называется.
  2. Лисп, а лучше Sheme. В MIT именно с него начинают, причем преподают даже физикам.
спустя 3 часа 42 минуты [обр] edhel Legolas(0/12)[досье]

Начали все-таки мы Object Pascal-ю (ака Дельфи) учить студентов. И сразу же трабла возникла - русский текст в консоли не работает! (понятно дело - навыдумывали кучу кодировок - кому это надо было???) Пришлось искать реализацию модуля crt - нашел модуль win32crt: замена модуля crt и работает не в консоли, а в обычном вин-окне. И шаблон сделали типа: uses win32crt; begin writeln('Hello, world!'); end.

2Trurl>

  1. Среду для Component Pascal одни тут челы смотрели - BlackBox называется - не смогли в ней exe-файл даже сделать, хотя вроде фича заявлена. Я сам не разбирался, может это у них и руки кривоватые...

И к тому же какая-нибудь одна кривая дока для него - имхо не есть гуд.

  1. Посмотрю инфу по Sheme... или Scheme он называется?
спустя 16 часов [обр] Trurl[досье]

2 edhel Legolas:

  1. Может и кривоватые. У меня с этим проблем не было. Справедливости ради, надо сказать exe-файлы там делать несколько сложнее, чем в Delphi. Но с другой стороны, надо то че - шашечки или ехать?

Дока для него вовсе не кривая, а как раз очень приличная. Я таких хороших док почти и не встречал. Единственный недостаток - англицкая она.
Ф.В.Ткачев из Института ядерных исследований РАН перевел меню, часть документации. И использовал BlackBox для спецкурса "Современное программирование. Введение в объектные и компонентные технологии" на физфаке МГУ. Возможно, скоро появятся методические материалы. Посмотрите на http://www.inr.ac.ru/~info21/
Еще Оберон преподают в Вологодском пед.университете http://www.uni-vologda.ac.ru/oberon Там тоже кое-что есть.

  1. По Scheme инфу на русском найти совсем уж трудно.
спустя 1 час 10 минут [обр] arto(2/497)[досье]
собирались выпускать sicp, во всяком случае перевод где-то валялся в сети.
спустя 1 день 23 часа [обр] edhel Legolas(0/12)[досье]
2Trurl> Английская дока для наших студентов - это тоже самое, что доки нет. На днях у чела(студента) спрашиваю - что же делает вот эта функция (в проге) ClearDevice - тишина... что же делает ваша функция ShowCircle - "эээ... ну...". С английским у них худо - особенно на начальных курсах...
спустя 1 день 9 часов [обр] Андрей Новиков(16/1242)[досье]
Мое глубокое мнение, что у программиста английский должен быть вторым родным. Во всяком случае, когда ко мне приходили на собеседование, это было первое, о что я проверял - умение свободно читать документацию и общаться с иностранными коллегами. Так им и передавайте :)
спустя 1 день 11 часов [обр] edhel Legolas(0/12)[досье]
2Андрей Новиков> ну дык не программисты они, а математики-физики! программистов из них будет только 5%!..
спустя 9 часов [обр] VIG(38/839)[досье]

edhel Legolas:

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

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

Для юзеров же я бы посоветовал Excel, включая Solver и немного VBA. Не очень круто, зато, по-моему, наиболее эффективно с точки зрения критерия время/результат. Вот.

спустя 3 месяца 19 дней [обр] lovermann[досье]

Я учусь в экономическом ВУЗе на информатике и статистике, а наш препод говорит, что те, кто желает стать программистом, не должен обязательно учиться в университете, ба достаточно и какого-нибудь среднего специализированного учебного заведения.

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

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

На сайте scheme есть огромнейший список университетов, где преподаётся этот язык, как обучающий. Здесь кто-то сказал, что мало информации по этому языку на русском языке. Хоть я лично английский и не люблю, но я его знаю на достаточном уровне, чтобы читать и понимать документацию, поэтому по поводу языка документации аппелирую к Андрею Новикову: "Мое глубокое мнение, что у программиста английский должен быть вторым родным."

спустя 31 минуту [обр] Дмитрий Котеров(15/912)[досье]

Да, scheme — то еще зло. Я понимаю, как интересная игрушка — это еще ничего. Но то, что некоторые люди воспринимают его всерьез, наводит на серьезные же опасения. SXML, SXSLT, SXQuery... Web-программирование на Scheme (вставки Scheme-кода в HTML, наподобие того, как это сделано в PHP). Scheme и Java...

В общем, большой-большой бррр-рррр.

спустя 17 минут [обр] edhel Legolas(0/12)[досье]

lovermann[досье], Scheme надо будет посмотреть на досуге... мы начали все-таки на delphi учить первокурсников (в консольном режиме). Конечно, английский для программера очень полезно знать (практически необходимая), но факт в том, что многие наши студенты не знают его.

Все-таки надо будет подумать над тем, чтобы, действительно, выделить N групп, которые будут изучать программирование, а остальным давать только юзерство. У нас раньше было нечто подобное (когда я учился): была одна advanced группа по программированию (я был в ней) и одна просто advanced - у них было advanced-программирование %]

спустя 15 часов [обр] lovermann[досье]

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

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

Для справки: scheme — это лисп-подобный язык.

спустя 6 дней [обр] arto(2/497)[досье]
Дмитрий Котеров[досье]
а чем именно вам не нравится scheme?
спустя 1 день [обр] Дмитрий Котеров(15/912)[досье]
Скобками.
спустя 13 минут [обр] arto(2/497)[досье]
"мелко, хоботов!" :)
спустя 1 день 5 часов [обр] Дмитрий Котеров(15/912)[досье]
Там сколько этих хоботов, что мало не покажется.
спустя 4 дня [обр] lovermann[досье]
Я где-то читал, что код программы на scheme будет короче, чем на других языках. Там ведь ни инициализации, ни типов переменных. Там даже переменную от функции не отличишь — играешь со всем, как хочешь :)
спустя 20 часов [обр] Сергей Круглов(19/2057)[досье]
Кто играет, тот доиграется ;)
Вы думаете, что язык, в котором "переменную от функции не отличишь", подходит для начального обучения?
спустя 20 дней [обр] Svarog(0/1)[досье]

Добрый день.

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

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

спустя 12 часов [обр] Дмитрий Котеров(15/912)[досье]
С PHP. Потому что с Perl закопаетесь однозначно.
спустя 1 день 9 часов [обр] Svarog(0/1)[досье]
Спасибо.
Предположим, начинаю я с PHP, продолжаю на чем? .NET?
спустя 28 минут [обр] Сергей Сирик(28/737)[досье]
М Svarog[досье]
А Вы не хотите завести другую тему? Эта немного не про то ... Еще совет - покопайтесь в Архивах разделов Теория, Прочее, еще где-то уже не однократно всплывала тема про "с чего начать"
спустя 24 минуты [обр] Svarog(0/1)[досье]
Ок, спасибо за совет.
спустя 22 часа [обр] Василий М.+(0/171)[досье]
Ать стоп! Беру свои обратно насчёт языка Паскаль. Начинать надо действительно с него, хотя на нём и не пишут. Уж слишком он интуитивно понятный.
:)
спустя 10 месяцев [обр] Роман Рабинович[досье]
Хоть и несколько месяцев спустя, но позвольте и мне вмешаться в разговор.
Во-первый, хотелось передать привет студенту МГИУ Сергею Круглову, т.к. мы его оба заканчивали (судя по разговорам). И рассказать ему о том, что язык Ruby уже давно успешно преподается в данном ВУЗе. Теперь все студенты и школьники (есть Малый-ЦКТ) первым делом изучают этот язык. В подтверждение привожу ссылку на сайт одного из преподавателей Ruby Рогановой Н.А. http://www.msiu.ru/~roganova/
Во-вторых, я являюсь преподавателем данного языка (в рамках курса "Языки программирования сверхвысокого уровня") в МЭТТ ГАИ. О моих успехах на этом поприще можно почитать на http://rubynews.ru .
В-третьих, тенденция в мире такова, что не хватает именно высокоуровневых программистов. Отсюда растет интерес к скриптовым и интерпретируемым языкам. Дело в том, что последнее время скорость выполнения программы стала не так критична (т.к. может быть поглащена высокоскоросным железом). Решающим фактором стала скорость разработки этого самого программного обеспечения. Именно на этой почве стали повляться такие технологии как Java и .Net. Не самые удачные на мой вкус, но я вообще по жизни привереда... :-) Так вот, востполняя пробелы в образовании программистов вы даете им тот багаж знаний, который им не понадобится в новом мире программного обеспечения, т.к. найти работу программистом на ассемблере или Си будет ох как затруднительно. А уж про низкоуровневые алгоритмы я и не говорю, т.е. мало кто будет задумываться над тем как выполняется сортировка и что именно она сортирует.
Да это деградация в некотором роде, но мало кто сейчас скучает по команде goto или jmp. Даже язык ассемблера для VM Parrot исключил эту конструкцию (заменив ее другой). Кстати, этот язык ассемблера имеет команду print и команду конкатенации строк. Тоже веяние новых требований рынка программного обеспечения. Бытстрая разработка — вот истинная ценность в новом мире! Чем быстрее вы разработаете программный продукт, тем выше будет ваша конкурентоспособность. Все остальное вторично!
Учить начинающих программистов можно любому языку, но подумайте об их будущем. Им не понадобятся методы сортировок и способы поиска максимального-минимального элемента. Эти алгоритмы известны, а значит реализованы во встроенных библиотеках современных языков. Им придется искать алгоритмы другого уровня и оперировать другими структурами и понятиями. Да, им понадобятся фундаментальные знания, но не в том объеме в котором они необходимы программистам на Си и ассемблере. Держать курс надо на объектно-ориентированные скриптовые языки интерпретируемого типа, такие как Python и Ruby (возможно новая версия Perl). Причем второй имеет более сильные позиции, чем первый. Все это мое IMHO, но, согласитесь, небезосновательное...
спустя 1 год 7 месяцев [обр] ZebraHunter[досье]

Прошло уже более полутора лет, но все же хотелось бы сказать кое-что:
Во-первых, я так и не понял условий задачи - что значит "научить программированию"/"учить программированию" и т.д. Что должны знать студенты по окончании этого курса? И для чего студентам, не связанным с "программированием" как таковым этот курс слушать? Для того, чтобы дать ответ надо хотя бы знать, будут ли они проектироващиками и поэтому не будут напрямую связанны с программированием как введением кода и низкоуровневыми моментами разработки, или же они будущие бухгалтеры/филологи или кто-то еще?
Если подразумевалось обучение основным алгоритмам и построению своих, то по-моему вообще нужен просто хороший преподаватель, доск а и несколько маркеров + внимание студентов. А конкретный язык программирования будет только мешать или приведет к бессознательному (ну хорошо, наполовину бессознательному) введению указаных преподавателем инструкций.
Если говорится о программистах и их первом языке, то тут все зависит от специализации. Начинать с чисто скриптового языка вроде python или perl, "полностью" объектно-ориентированной технологии вроде Java/.NET или же дать сначала азы С/C++? Главное не то, с чего начинать, а то как расширять эти знания. Во всяком случае, я не считаю свободу работы с указателями С/C++ абсолютным плюсом. А еще я не верю в то, что эффективность кода, написанного человеком на ассемблере выше чем у компилятора. Иногда - да, но не всегда. Так было с графикой до появления GPU, а теперь? Далеко не так.
А главная проблема обучения с моей точки зрения - упор на математику. Людей окружают программы и если они не фанатики, им очень быстро надоедает решать математические задачки. Хочется чего-то, что может быть полезным не только для примера. А язык? Опять же зависит от того, что хотите получить.

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

спустя 8 дней [обр] Eugene Efremov(0/68)[досье]

ZebraHunter[досье], кстати, да. Изначальная задача поставлена некорректно.

Прежде, чем задаваться вопросом «Какому языку обучать студентов», следует ответить на другой вопрос: «С какой целью их вообще обучают программированию? Какой результат ожидается от этого курса?»

Покуда цели неопределны — рассуждать о том, какие средства использовать, не имеет смысла.

Powered by POEM™ Engine Copyright © 2002-2005