Что вы делате не так, уважаемые преподаватели
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.01.10 18:18
Оценка: 61 (4) +3
Эта микро-сатья родилась как ответ на одно из сообщений темы Перевод статьи Страуструпа
Автор: LaptevVV
Дата: 13.01.10
. Поняв, что получилось слишком много решил оформить в виде отдельной темы.

Недавно создатель C++ Бьярн Страуструп написал и опубликовал статью под заголовком «What should we teach new software developers? Why?» (Чему мы должны учить новых разработчиков ПО? И зачем?). В ней он делится неожиданным для него наблюдением – есть огромный разрыв между тем, что требуется от разработчика ПО на практике, и тем, чему и как его учат в высших учебных заведениях. Фактически никаких реальных решений данной проблемы Страуструп в статье не приводит (и вообще, занимается в основном переливанием из пустого в порожнее). Но сама проблема стоит отдельного рассмотрения.
Не вдаваясь в причины появления такой статьи (подозреваю, что такой причиной стало неприятие учениками его любимого детища) хочется заметить, что проблема и вправду сложная и важная. Дискуссия (Перевод статьи Страуструпа) на нашем форуме Образование и наука показала, что даже сами преподаватели зачастую не понимают причин такого положения дел и не знают, как исправить эту ситуацию.
На мой взгляд, стать хорошим программистом можно только на практике. Нет, конечно, теория очень важна, и лучше, если ее преподают хорошие учителя по хорошей программе. Куда хуже, если она получается при чтении урывками книг неизвестного качества, или если ее нет вовсе, но все же практика для программистов – это очень важная часть процесса обучения. В сущности, хороший программист учится всю жизнь.
По сути, программист, работающий на коммерческом или государственном предприятии (т.е. не занимающийся наукой непосредственно) – это инженер или даже рабочий. Обычно программист даже не производит сложных расчетов. Он создает проект ПО или вовсе воплощает в жизнь проект, разработанный кем-то другим (клинические случаи, когда программист пишет код, даже не задумываясь о проектировании, отбрасываем).
Для программиста несомненно важны такие преподаваемые в ВУЗах знания, как общеупотребительные алгоритмы, устройство компьютера, языки программирования, математика, логика и даже, возможно, физика (хотя на мой взгляд, школьной программы обычному программисту хватило бы за глаза). Но также ему нужны умения: работы в команде над одним проектом, использования средств контроля версий, тестирования ПО, использования различных фреймворков. Да и знания, перечисленные в первом списке, требуют опыта практического применения. Ведь далеко не факт, что человек знающий алгоритм сортировки, сможет применить его на практике. Более того, как справедливо замечает Страуструп, «мы часто видим студентов с хорошими оценками по алгоритмам, структурам данных и программной инженерии, которые, тем не менее, на занятиях по операционным системам используют сомнительные решения с абсолютным пренебрежением к всё тем же алгоритмам, структуре данных и кода». Странно только то, что Страуструп не видит, что причиной тому является отсутствие реальной практики.
Вы будете смеяться, но в советские времена при подготовке «работяг» в ПТУ использовалось весьма эффективное сочетание теоретических и практических занятий. Станочник или даже электрогазосварщик в первом полугодии обучения (помимо школьной программы 9-10 класса) получал базовую теорию по выбранной им профессии, а уже начиная со второго полугодия обучения вводились один или два дня практических занятий. Сначала эти практические занятия велись на базе ПТУ (в них обычно были нужные станки и оборудование), а потом, ближе ко второму курсу, занятия переходили в цеха реального завода. Так поступали не везде (не везде могли договориться с заводами), но по крайней мере в ПТУ при заводах (например, при ЗИЛ-е) такое практиковалось. В итоге ПТУ-шник к концу обучения умел сносно работать на настоящих станках (причем даже с ЧПУ, т.е. компьютерах) или (если выбранной специальностью была электрогазосварка) умел резать метал автогеном и сваривать его же электросваркой. При этом рабочий получался весьма качественный (по сравнению с обучением на производстве), так как он имел серьезную (по крайней мере для станочников) теоретическую подготовку. Единственная проблема, возникающая при этом – это нагрузка на ученика. 4-5 пар при этом было нормой.
Почему же при подготовке программистов, большая часть которых также работает «на производстве», практика считается чем-то второстепенным или даже вообще не нужным?
Аргументы против введения обязательных одного-двух дней практики в неделю: «придется жертвовать какими-то предметами», «неясно, где проводить практику». Еще одна проблема – кто должен контролировать практикантов?
Программистов учат 5 лет. Можно учить шесть, как врачей. Причем часть шестого года вообще превратить во что-то похожее на ординатуру врачей (когда ученик занимается реальной практикой за нереально мизерные деньги, но под надзором реальных профессионалов), а часть ее распределить по начальным годам обучения.
Если ввести один-два дня практических занятий в неделю, то на начальных курсах их можно проводить прямо в институте, под началом преподавателей. Это будет полезно не только ученикам, но и самим преподавателям, которые, участвуя в реальном процессе разработки, вынуждены будут держать себя «в тонусе», то есть иметь необходимую для преподавателей данной специальности практику реальной работы. Кроме того, они будут видеть реальные успехи своих учеников, что позволит точнее оценивать их успеваемость. На старших курсах студентов можно продавать «в рабство», т.е. заключать контракты с фирмами. В результате фирмы получат специалистов, готовых к работе у них, а ВУЗы – почти гарантированное трудоустройство (хотя бы для тех, кто на самом деле способен быть программистом).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.