Rambler's Top100 Service калинин.ru / студенческое /  << 22.01.01 >>

Опыт, сын ошибок трудных...

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

  Цитата
 

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

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

Спору нет, теория программирования очень важна. Не надо плеваться в меня и бросаться булыжниками --- формальное определение алгоритма, доказательства теорем Шенона и т.п. очень интересны и полезны. Но по-своему! Конечно же, настоящий профессионал должен понимать откуда "растут ноги" и почему определение алгоритма при помощи машин Тьюринга и рекурсивных функций эквивалентны. Но это лишь край знаний. Большой, но совершенно бесполезный без другого края --- реального опыта программирования.

Забавно --- многие студенты, когда начинают изучать алгоритмы сортировок, заявляют то, что это "сейчас уже не надо" и что "в PHP, ASP, ABC и BCD [подставить сюда любую аббревиатуру] все это есть". Сейчас я все более и более склоняюсь к мысли, что они в чем-то правы. Но не в том, "что не надо", а в том, что очень рано вдалбливать (а ведь именно так это выглядит со стороны) в людей то, что они в принципе не могут понять. Нет, они все выучат. Нужный процент студентов получит пятерки и четверки. Но практически никто из них не будет понимать, что и зачем они выучили.

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

  Цитата
 

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

Это означает, что не существует таких технологий, при помощи которого мы могли бы решать любые задачи. Тем самым, логически вытекает, что программист и системный аналитик должен знать значительно больше, чем одна-две предложенных индустрией технологии. Дело в том, что любая технология решает чрезвычайно узкий круг задач, для которых она была предназначена. И попытки решения одними и теми же средствами разных по классу задач приводит к настолько уродливым конструкциям, которые надолго не выходят из памяти после знакомства с ними. И самое страшное, что их создатели не могут осознать этого по той простой причине, что не знакомы с иными методами. Вот еще одна цитата в тему из книги Эдварда Йордона "Decline & Fall of the American Programmer" (я так думаю, что вскоре я смогу ее прокомментировать в соответствующем разделе моей домашней странички):

  Цитата
 

...most programmers learn their trade by patching up inadequate systems, instead of learning how to build good ones.

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

Все это к тому, что алгоритмы сортировки, конечно же, надо помнить каждому программисту, включая тех из них, кто уже связал свою жизнь с PHP или Inprise C++ Builder.

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

Только откуда же этой практике взяться? Формально, в нашем курсе есть порядка 13 лабораторных работ и пяти заданий в курсовом проекте во время первого семестра и 8 лабораторных работ вместе с четырьмя заданиями курсового проекта во втором семестре. Интересно, это много, или мало?

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

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

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

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

  Цитата
 

There is ironic "catch-22" situation here: the shortage everyone bemoans is a shortage of trained, competent programmers and system analysts --- but the only way industry can get the trained people it needs is to hire the relatively useless colledge graduates and educate them on the job.

Так что подобная ситуация нормальна и естественна. А вот можно ли ее изменить?

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

Резюме

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

Кстати сказать, все известные мне исключения студентов-программистов получали свои знания и практику вне ВУЗа. Это был дополнительный интерес, попытки что-то написать "для себя" и т.д. И, что самое интересное, студент по возможности не должен работать программистом до 4-5 курса. Потому что в ином случае, его познания, скорее всего, примут застывшие формы "сосуда, куда налили". Опять же, предыдущее предложение имеет известные мне исключения.


Версия для печати


  Рядом в разделе:
Прорвались! (01.02.01)
   Свершилось. Теперь я краснодипломированный "математик минус инженер", рекомендованный к продолжению обучения в аспирантуре сразу же после окончания института и т.д. Точнее,...   >>>>
Преподаватели (19.11.00)
   Сегодня я буду брюзжать. Почему? Хочется... настроение такое. Кроме того, мне надоело рассказывать о молодых и неопытных студентах, поэтому теперь немножко...   >>>>
  Рядом по дате:
Прорвались! (01.02.01)
   Свершилось. Теперь я краснодипломированный "математик минус инженер", рекомендованный к продолжению обучения в аспирантуре сразу же после окончания института и т.д. Точнее,...   >>>>
Обзор CORBA (14.01.01)
   CORBA (расшифровывается как Common Object Request Broker) это технология, которая позволяет рассматривать компоненты распределенной системы как объекты, отвечающие некоторым определенным интерфейсам....   >>>>
  Содержание:
Заглавная страница
Мой блог
Мое резюме
Дайджест
Программирование
   C&C++
Сети
Unix
Алгоритмы
Оптимизация
Соревнования
Отвлеченно
XML
TeX
Просто так
Студенческое
Туризм
  Байки
Фотографии
Комментарии
   Книги
Web-ресурсы
Фильмы
Интернет
Программное обеспечение
Жизнь
Благодарности
Форум
Хронология
 
  В этом разделе:
Прорвались! (01.02.01)
   Свершилось. Теперь я краснодипломированный "математик минус инженер", рекомендованный к продолжению обучения в аспирантуре сразу же после окончания института и т.д. Точнее,...   >>>>
Опыт, сын ошибок трудных... (22.01.01)
   Не умеют студенты программировать. Не все, конечно же, бывают и исключения, но "ан масс" --- не умеют. Можно обвинять в этом...   >>>>
Преподаватели (19.11.00)
   Сегодня я буду брюзжать. Почему? Хочется... настроение такое. Кроме того, мне надоело рассказывать о молодых и неопытных студентах, поэтому теперь немножко...   >>>>
Космические корабли бороздят большой театр (20.10.00)
   В бланке отчета по нашим лабораторным работам, которые заполняют студенты после их выполнения, кроме пунктов "задание" и невнятного "сценарий выполнения", существует...   >>>>
Автоматизация заполнения базы данных "по студентам", немного статистики (21.09.00)
   Я уже провел две лабораторных работы и один семинар с первым курсом в этом семестре и, так как на лабораторных мне...   >>>>
Еще один способ подготовки копии конспекта лекций (13.09.00)
   Вопрос о том, где же добыть лекции, мучает каждого студента перед сессией. Вообще говоря, я не знаю, может быть в других...   >>>>
Формальные оценки (07.09.00)
   Оценка знаний у студента, на мой взгляд, является самым спорным вопросом всего "учебного процесса". Вообще, выставление отметок превращается в некоторое странное...   >>>>
Содержание раздела полностью...
   Примерно в тоже время
Прорвались! (01.02.01)
   Свершилось. Теперь я краснодипломированный "математик минус инженер", рекомендованный к продолжению обучения в аспирантуре сразу же после окончания института и т.д. Точнее,...   >>>>
Обзор CORBA (14.01.01)
   CORBA (расшифровывается как Common Object Request Broker) это технология, которая позволяет рассматривать компоненты распределенной системы как объекты, отвечающие некоторым определенным интерфейсам....   >>>>
Хронология полностью...
   Содержание
Заглавная страница
Мой блог
Мое резюме
Дайджест
Программирование
  C&C++
Сети
Unix
Алгоритмы
Оптимизация
Соревнования
Отвлеченно
XML
TeX
Туризм
  Байки
Фотографии
Комментарии
  Книги
Web-ресурсы
Фильмы
Интернет
Программное обеспечение
Жизнь
Студенческое
Просто так
Благодарности
Форум
Хронология
© 2000-2008, Andrey L. Kalinin
mailto:andrey@kalinin.ru
Rambler's Top100