пятница, 12 апреля 2013 г.

Статья "Преподавание программирования и математика"

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


Мусин Наиль Минбариевич
Преподавание программирования и математика

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

Однако уже достаточно много лет происходит обучение по специальности «Прикладная математика и информатика» с квалификацией «Математик, системный программист». Естественно было ожидать, что должна быть налажена непрерывная цепочка из трех ступеней:

чистая математика -> численные методы -> написание программ

Естественно было бы ожидать, что преподаватель каждой из трех ступеней должен был бы хорошо подготовлен в двух других. Однако слабое место в этой цепочке – третья ступень. Преподавание языков программирования ( в нашем случае в филиале - это Си Шарп и Maple) и практикума на ЭВМ ведутся людьми, получившими лишь общую математическую – не профессиональную - подготовку. Однако учебная программа просто обязывает их программировать математические задачи.

И здесь происходит сбой.

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

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

Возьмем, например, книгу С/С++.Структурное программирование: Практикум/ Т.А. Павловская, Ю.А. Щупак.- СПб.: Питер, 2003.

На стр. 40 рассматривается тема «Вычисление суммы ряда». Рассматривается вычисление суммы ряда \(\sum_{n=1}^{\infty}C_n\) с заданной точностью \(\varepsilon\). С математической точки зрения изложение совершенно неприемлемо. Предлагается прекращать вычисления при достижении неравенства \(|C_n|<\varepsilon\). Это работает, когда ряд знакочередующийся, а члены ряда по модулю монотонно убывают. Но математику ясно, что в общем случае уже на следующем слагаемом это неравенство может нарушиться. Пусть, к примеру, ряд с положительными членами. Остаточный член имеет вид \(C_n+C_{n+1}+C_{n+2}+...\) Именно эта величина должна быть меньше \(\varepsilon\), но если мы ограничимся только величиной \(C_n\), то даже читающему эти строки далекому от математики человеку очевидно, что требуемой точности мы не достигаем. Кроме того, по мнению Павловской, так как невозможно предсказать, когда «её» неравенство достигается, надо задать a priori количество итераций, под этим она понимает задание количества слагаемых, например, у нее \(n=500\). Но в очень многих задачах количество \(n\), как правило, значительно меньше. Конечно, надо вычисления останавливать с некоторого \(n\) при \(|R_n|=|\sum_{k=n}^{\infty}C_k| <\varepsilon\). Для этого имеются хорошо разработанные подходы к оценке величины \(|R_n\). Но работа с остаточным членом ряда требует неплохого знания математики.

Тот же самый неверный подход и на стр. 50 книги С/С++. Программирование на языке высокого уровня / Т.А. Павловская. - СПб.: Питер, 2003.

Тут небольшое замечание и по поводу преподаваемого языка. Языки С и С++ уже давно устарели, сейчас им на смену пришел язык C# (Си Шарп). Вышеуказанный автор идет в этом отношении в ногу со временем. Однако и в новом учебнике С#. Программирование на языке высокого уровня. Учебник для вузов / Т.А. Павловская. - СПб.: Питер, 2009 сохранен тот же подход к суммированию рядов…(см. стр. 84 и далее). А очень жаль, на самом деле в указанных книгах автор демонстрирует высокое педагогическое мастерство.

Вывод: программирование математических задач и практикум на ЭВМ должен проводить математик, хорошо подготовленный для преподавания на уровне описанной выше первой ступени. Конечно, преподавание языков программирования не сводится только к математическим задачам, но речь идет о специальности «Прикладная МАТЕМАТИКА, информатика», и еще раз напомним, что должна достигаться квалификация «математик, системный программист».

И, конечно, совсем вне педагогики был бы случай, когда преподаватель неправильно суммировал бы ряды, заставляя студентов следовать приведенной выше схеме из учебника Павловской. А что если студент принесет правильное решение, основанное на адекватной оценке остаточного члена? Что его ожидает? Вместо заслуженной «отлично» он подвергнется обструкции, а незаслуженные «отлично» получат послушные студенты. Кто будет на выходе из вуза?

Источник: http://exponenta.ru/educat/systemat/musin/index7.asp

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

Комментариев нет:

Отправить комментарий