К вопросу о том, что преподавать
От: Mamut Швеция http://dmitriid.com
Дата: 30.10.04 18:43
Оценка: 62 (9) +8
Частично здесь
Автор: Mamut
Дата: 28.10.04
.

Читаю, значит, Фаулера, "Refactoring, Improving the Design of Existing Code". И натыкаюсь на великолепную вещь:

The compiler doesn't care whether the code is ugly or clean.

Компилятору все равно, написан код коряво или как следует.


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

Причем во всех этих (иногда священных войнах) практически не мелькала проблема обучения программированию. Не обучения программированию на С++, Яве, Обероне или иных. А просто обучение программированию. А это — задача намного сложнее.

Как у нас (да и не только у нас) обычно обучают программированию?

#include <iostream>

void main()
{
    cout << "Hello world!";
}


"Дети, запомните, что надо обязательно писать следущие элементы в ваших программах: #include <iostream>, void, main, cout, <<". И так шаг за шагом ученики/студенты зазубривают простейшие элементы синтаксиса, простейшие алгоритмы, так и не научившись думать.

Позвольте привести два примера из разряда "свежо предание, да верится с трудом". Из недавней моей студенческой жизни.

Пример 1.

Профессор на первой же паре предлагает всем приобрести книгу типа "С++ за 21 день". Дальнейшее обучение, со всеми примерами, идет по ней. Курс ведется так: 50% — терия, 50% — практика, на которой буквально насильно вбиваются в голову примеры из книги.

Экзамен — три примера из книги, две дополнительные задачи "для самых умных". Все прошли. Факультет — "Програмирование"

Пример 2.

В "соседнем" университете на таком же факультете учился мой друг. Первый семестр их преподователь гонял только по алгоритмам и блок-схемам, причем зачастую довольно сложным. В отдельных семестрах до 80% не проходили курс и "оставались на следущий год". Как его ненавидели!

Результат налицо. Устроили мы небольшой мозговоц штурм насчет некоторых алгоритмов для одного проекта. Несмотря на то, что я быстро находил решения (иногда изящные), каждый раз моему другу удавалось находить решение, которое было а) работоспособное в 100% случаев, б) эффективное, с) независимо от языка программирования. В большинстве случаев мы использовали его решения, за исключением тех моментов, когда уже были готовые решения (вроде STL).

--Конец примеров--

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

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

Именно поэтому я хочу попросить общественность вернуться к "истокам":

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

(с) LapteVV
Автор: LaptevVV
Дата: 20.10.04


Так вот. Как и чему мы будем их учить? Об этом надо действительно думать. Это я вам заявляю со всей ответственность человека, недавно вышедшего из горнила университета и который до сих пор пытается переучится думать. Т.е. который пытается научится думать правильно.

З.Ы. Хоть и небольшой, но опыт программирования на различных языках у меня есть. C++, Pascal, Object Pascal(Delphi), PHP, VB 6. Ни один из этих языков не учит программированию. Они — лишь средства, и с помощью любого из них можно создать и конфетку и отходы.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>


dmitriid.comGitHubLinkedIn
Re: К вопросу о том, что преподавать
От: Andir Россия
Дата: 31.10.04 03:46
Оценка:
Здравствуйте, Mamut, Вы писали:

[skip]

M>К чему я веду? К тому, что главным в обучении студентов должно стать обучение умению думать, планировать и искать решения.


Это при обучении именно программированию, в случае же с языками — когда учат именно первому языку и во многих случаях я считаю правильным и оправданным вдалбливание конструкций, чтобы приоткрыть дверь в мир увлекательного программирования, когда компьютер делает то что ты хочешь ...
Проблема одна в программировании, те кто не знают никакого языка программирования, они даже не мыслят в ту сторону, в которой можно рассказывать о императивном или функциональном стилях. Их нужно научить мыслить "языком программирования", а это почти невозможно без понятия хотя бы одного из них. А те кто знают, хоть один язык ... уже могут учиться дальше, но нужно выровнять уровень тех и тех ... в этом и состоит сущность "C++ в 21 день с примерами".

Пример: Люди которые знают, что такое мат. индукция на шаге n = n + 1, не всегда знают, что такое n += 1.

C Уважением, Andir!
using(RSDN@Home 1.1.4 beta 3){/* Работаем! */}
Re[2]: К вопросу о том, что преподавать
От: Mamut Швеция http://dmitriid.com
Дата: 31.10.04 15:20
Оценка:
Здравствуйте, Andir, Вы писали:

A>Здравствуйте, Mamut, Вы писали:


A>[skip]


M>>К чему я веду? К тому, что главным в обучении студентов должно стать обучение умению думать, планировать и искать решения.


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

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

Ой, как верно... Но где бы, как бы найти золотую середину?

A>Их нужно научить мыслить "языком программирования", а это почти невозможно без понятия хотя бы одного из них.


Верно. Я, кстати, слукавил слегка. Того самого моего друга из второго примера для имплементации алгоритмов учили Паскалю. Правда у него потом были небольшие проблемы с переходом на обЪектно-ориентированые подходы.

A>А те кто знают, хоть один язык ... уже могут учиться дальше, но нужно выровнять уровень тех и тех ... в этом и состоит сущность "C++ в 21 день с примерами".


A>Пример: Люди которые знают, что такое мат. индукция на шаге n = n + 1, не всегда знают, что такое n += 1.


A>C Уважением, Andir!
... << RSDN@Home 1.1.4 beta 3 rev. 185>>


dmitriid.comGitHubLinkedIn
Re[3]: К вопросу о том, что преподавать
От: Vark  
Дата: 09.12.04 05:02
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Здравствуйте, Andir, Вы писали:


A>>Здравствуйте, Mamut, Вы писали:


A>>[skip]


M>>>[skip]


Ох, все вы верно говорите, однако проблема как не была решена, так и не будет решена в большинстве вузов страны ...
Мне самому в свое время не давали теорию алгоритмов (правда я по специальности прикладной математик , но у параллельной группы программитов ее тоже толком не было), поэтому, как ни ужасно это не звучит, нормально изучил теже бинарные деревья я самостоятельно по купленным собственноручно книгам по программированию ... учась уже в аспирантуре, хотя должен был в них "шарить" уже давно ...
Re[4]: К вопросу о том, что преподавать
От: Mamut Швеция http://dmitriid.com
Дата: 09.12.04 11:57
Оценка:
Здравствуйте, Vark, Вы писали:

V>...поэтому, как ни ужасно это не звучит, нормально изучил теже бинарные деревья я самостоятельно по купленным собственноручно книгам по программированию ... учась уже в аспирантуре, хотя должен был в них "шарить" уже давно ...


Звучит нормально Сам такой
... << RSDN@Home 1.1.4 beta 3 rev. 185>>


dmitriid.comGitHubLinkedIn
Re: К вопросу о том, что преподавать
От: LaptevVV Россия  
Дата: 09.12.04 12:26
Оценка: 10 (1) +1
Здравствуйте, Mamut, Вы писали:

M>Частично здесь
Автор: Mamut
Дата: 28.10.04
.

Большая ветка, наверное — не открывается...

M>

M>...Надо первачков учить. Студенты есть из сел, поэтому сначала их надо в проблематику написания программ ввести, не касаясь сильно компьютерных особенностей...

(с) LapteVV
Автор: LaptevVV
Дата: 20.10.04


Не могу утерпеть...
1. Состав дисциплин по программированию определяется стандартом специальности. Плюс, вуз (конкретно я — заведующий кафедрой) имеет право вводить региональные дисциплины, дисциплины по выбору и дисциплины специализации в рамках определенных в стандарте часов. Стандарт обновляется раз в 5 лет, но, совершенно очевидно, что он при этом отстает года на 3 от сегодняшнего дня, так как его составляют люди, очень далекие от программирования. Поэтому федеральные дисциплины в стандарте прописываются несколько обтекаемо.
2. Кадры!!!! Которые решают все! Сейчас в вузе платят настолько мало, что квалифицированный программистский народ просто не держится. В вузе работают либо женщины, которые и программировать-то не программировали, либо стариканы, вроде меня, которые программирование изучали хрен знает сколько времени назад. Ну, я еще хоть барахтаюсь, пытаюсь хотя бы в нише клонов С++ новые вещи изучатиь и давать. А остальные-то — просто сами не могут... Исключение составляют аспиранты. которые хотят защитить диссер. Они как раз молодые, шустрые, знают то, что сами изучали и легко изучают новое. Но сколько таких аспирантов может быть на кафедре, если доценту положено не более 3-х.
3. Студенты. Контингент — очень разный. Хотя на моей специальности — элита молодежи Астрахани, но набирают много коммерческих студентов, иначе вузу просто не прожить. А их подготовка так слаба, что и говорить не о чем — у меня на 3-м курсе из 60-ти человек осталось 15, остальные "рассосались" кто-куда...

Мы все же пытаемся не отставать... Но обучать думать — это практически не получается...
Лучшие (примерно 15 из 60) — те и так умеют... А лучшие из худших (тоже примерно еще 20 — не забывайте, что 75% — коммерческие студенты) просто хотят получить определенную сумму знаний. А худшие из худших — не умеют, и даже не очень хотят — их засунули родители, так как не хотели, чтобы дите в армию пошло — это если пацан. А почему девушки у нас коммерческие — я даже не могу сказать — сие есть дело темное

Вот и думай тут, чему учить...
Сейчас ИТ уже подошли к такой стадии развития, что некоторые вещи на первых двух курсах просто приходится учить на память. В частности, первый язык программирования... Это как в таблице умножения — мы ж не изучаем теорию чисел, чтоб выучить таблицу умножения... Или как правила русского языка ( вообще любого языка)... А думать приходится уже позже, на основе усвоенных знаний... И вот тут и выясняется, что тот, кто умеет — он уже раньше в школе научился. А тот кто в школе не научился — он в вузе уже не научится...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: К вопросу о том, что преподавать
От: Трурль  
Дата: 09.12.04 12:27
Оценка:
Здравствуйте, Mamut.
Полностью поддерживаю общий смысл сообщения и все же...
Вы писали:
M>Читаю, значит, Фаулера, "Refactoring, Improving the Design of Existing Code". И натыкаюсь на великолепную вещь:

M>

M>The compiler doesn't care whether the code is ugly or clean.

M>Компилятору все равно, написан код коряво или как следует.


M>И ведь действительно, компилятору-то все равно.


Programs must be written for people to read, and only incidentally for machines to execute.
— Abelson & Sussman,

Re[5]: К вопросу о том, что преподавать
От: Shady Россия  
Дата: 09.12.04 13:56
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Здравствуйте, Vark, Вы писали:


V>>...поэтому, как ни ужасно это не звучит, нормально изучил теже бинарные деревья я самостоятельно по купленным собственноручно книгам по программированию ... учась уже в аспирантуре, хотя должен был в них "шарить" уже давно ...


M>Звучит нормально Сам такой

Аналогично, "прикладной математик", здавший всё программирования на первом курсе (сразу за 1-2-3-4 курс) . Ессесно по договаренности с преподом
Что преподовали преподы на свои лекциях я не шибко интересовался...
"Man feed machine
Machine feed man"
Peter Gabriel — OVO — The Tower That Ate People
Re[2]: К вопросу о том, что преподавать
От: Mamut Швеция http://dmitriid.com
Дата: 12.12.04 22:31
Оценка:
[skipped, sorry]

Подпишусь по каждым словом, бо "свежо предание, а верится с трудом" (с)

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

Вот такие пироги. И поделать ничего нельзя. И профессора по-человечески жалко, потому что индустрия-то не стоит, а человек просто может не поспеть за ней. Что делать — тоже нокто не знает, увы.




LVV>Мы все же пытаемся не отставать... Но обучать думать — это практически не получается...



Опять же, увы, но реалии именно таковы. "Рожденный ползать летать..." (с) — это об умении программировать. Причем иногда бывает обидно с другой стороны. Есть у меня друг. Парень из деревни, компьютер, наверное, только в университете увидел. Учится на инженера-программиста (как попал — отдельная история, за рамки выходящая). Так вот, два года он убил на то, чтбы раскочегарить свои (в общем, далеко неглупые) мозги и настроить их "на нужную волну". И ничего — сейчас ярый линуксоид, с ситемой на "ты", учит С++ и Перл. А сколько еще таких — уууу
... << RSDN@Home 1.1.4 beta 3 rev. 185>> ... <<Winamp is playing "Ozzy Osbourne — my little man">>


dmitriid.comGitHubLinkedIn
Re: К вопросу о том, что преподавать
От: GlebZ Россия  
Дата: 13.12.04 18:33
Оценка: 11 (2)
Здравствуйте, Mamut, Вы писали:

Немного не в тему, но все же.
Учился я в МТУСИ по специальности ПО. Был у нас преподаватель — к сожалению имени и отчества не вспомню за давностью лет, но ее фамилия — Кувыкина. Вела она 4 семестра C++. На первом занятии, она объяснила, что ПО расшифровывается не как "Программное обеспечение", а как "Половина осталась". При опросе, кто на чем программировал, больше половины народа ответил "Лексикон". После первого семестра, действительно, осталась только половина. Второй половине, она ставила зачет, только если человек принесет заявление о переводе на другую специальность. Аргументация была проста — если вы не выполнили задания, вы не сможете стать программистом. Не все стали программистами, многие учились ради корочки. Но не только после экзамена на 4 семестре, но и в течении всего времени обучении в институте, все знали C++. И могли свободно построить любой список или дерево. Никто из тех кто ушел ничего плохого о ней не говорил, поскольку выбили их правильно. Не их это была профессия.

Мораль ИМХО: очень важно кто учит, и очень важно кого учат.

С уважением, Gleb.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.