Объектно-ориентированный подход и преподавание программирования СУБД в МФТИ
С. П. Прохоров
Эта статья появилась в результате утопической, возможно, идеи научить студентов работать еще в институте. К сожалению, опыт привлечения студентов к работе над реальными проектами оказался неудачным.
Поначалу мне эта идея не казалась такой уж утопической. Да и сейчас я думаю, что она вполне осуществима. Дело в том, что я не только преподаю в Московском физико-техническом институте (МФТИ), но и сам окончил его в свое время.
Физтех довольно известный институт, и много ходит о нем разных историй, правдивых и не очень. В этом году исполняется 55 лет с момента образования Физтеха как факультета МГУ и 50 лет его существования в качестве самостоятельного института. Поэтому есть повод немного рассказать об МФТИ.
Мысль о том, что не все у нас благополучно с наукой, особенно с прикладной, стала волновать крупнейших ученых еще до войны. В 1938 г. в газете "Правда" (а, кто не знает, в то время это была самая важная газета) появилась статья, подписанная многими видными учеными, в первую очередь физиками, в которой ставился вопрос об организации высшей политехнической школы нового типа. Такой школы, которая сочетала бы в своих программах высокий университетский уровень знаний в области математики и физики с умением применять эти знания для решения сложных научных и инженерных задач. Вопрос был поставлен, но шел 1938 г. Репрессии, кадровые перестановки, а в 1939 г. уже начался передел мира. Было не до этого.
Опыт Второй мировой войны показал, что будущая война (в том, что она состоится, никто не сомневался) станет в первую очередь войной технологий. Следовательно, надо готовить кадры, способные эти технологии развивать, причем уже в вузе следует учить их так, чтобы в НИИ и КБ они пришли готовыми к практической работе. Стало быть, надо собрать наиболее перспективную молодежь со всей страны и привлечь к ее обучению лучших специалистов страны.
Так 25 ноября 1946 г. появилось постановление об организации в МГУ им. М. В. Ломоносова физико-технического факультета. Программы по высшей математике составлялись на механико-математическом факультете МГУ, курс физики разрабатывался лучшими физиками с физического факультета университета. Достаточно сказать, что поначалу курс общей физики на факультете читал Л. Ландау.
Лауреат Нобелевской премии академик П. Капица оказал сильное влияние на формирование Физтеха. С 1921 по 1934 гг. он работал в Кембридже в институте великого физика Эрнста Резерфорда. Все лучшее, что было в английской высшей школе, и, прежде всего, принцип "главное – учеба, а не школярство", Капица передал физтеховцам.
Я написал, что к работе привлекались лучшие физики университета, не случайно. Если вы возьмете журнал "Успехи физических наук" за 40-е, начало 50-х годов, то будете поражены количеством статей, клеймящих буржуазных идеалистов, которые работали в нашей науке. Их гневно критиковали, прорабатывали на собраниях. Организации (в том числе физфак МГУ) каялись, что не досмотрели и чуждые идеологические веяния проникли в их ряды и (о, ужас!) растлевали нестойкие души студентов.
Еще хуже дела обстояли в химии и биологии. Тут уж был настоящий разгром. Трудно себе представить, чтобы человек, отдавший свою жизнь борьбе с голодом, занимавшийся выведением новых сортов, устойчивых к засухе и болезням, академик Н. Вавилов умер в саратовской тюрьме от голода. Его родной брат - С. Вавилов был в то время президентом Академии наук СССР и ничего не мог сделать для облегчения его участи.
Модно было навешивать ярлыки. Человеку, который попадал под "чуждые буржуазные веяния", оказывался в безвыходном положении: если "повезет" и не попадешь в тюрьму, то все равно плохо - работы лишиться можно запросто, достаточно написать научную статью, развивающую идеи буржуазного ученого, Доктора наук считали удачей возможность устроиться учителем в школе.
Сейчас довольно часто с экрана звучит призыв "продлить свою молодость". Это рекламируются витамины Лайнуса Полинга, выдающегося ученого, химика, биолога, медика, лауреата двух Нобелевских премий. По-моему, кроме М. Складовской-Кюри и Л. Полинга, никто не получал двух Нобелевских премий.
Но это сейчас Л. Полинг признан у нас, а в 40-50-х годах не было для наших ученых более страшной опасности, чем прослыть "паулангистом". А дело было так. В 1946 году появилась книга выдающихся советских химиков Я. Сыркина и М. Дяткиной "Химическая связь и строение молекул", которые ссылались на некого западного ученого Паулинга (в латинской транскрипции Полинг пишется Pauling). Речь в книге шла о квантовой химии. Один довольно крупный философ-материалист, специализирующийся в области правильной трактовки открытий в области естественных наук, прочел эту книгу и, возможно, перевод каких-то работ Л. Полинга. Он ничего не понял, кроме замечания Полинга-Паулинга, что тот отнюдь не уверен, что его теория верна и атомы и электроны действительно ведут себя так, как предполагается в его теории. Этого оказалось достаточно, чтобы философ написал гневную статью о буржуазных идеалистах и их поклонниках ("паулангистах") в советской науке. Авторы книги (Я. Сыркин и М. Дяткина) были изгнаны из МГУ. И вот тут доктору химических наук, профессору МГУ М. Дяткиной "повезло" - она смогла устроиться учителем химии в школу.
А в 60-х годах СССР стал активно бороться за мир и тут выяснилось, что в США есть крупный прогрессивный ученый, пламенный борец за мир - L. Pauling. Хорошая новость - он является лауреатом Нобелевской премии за мир. Плохая новость - это тот мракобес, который получил ранее Нобелевскую премию по химии за свои "сомнительные" достижения. Что делать? К счастью, обнаружилось, что так как L. Pauling живет в США, то правильное прочтение его фамилии будет Полинг, а не Паулинг. Вроде речь идет о другом человеке. Так умер мракобес Паулинг и появился прогрессивный ученый Полинг. Его "реабилитировали", хотя и условно. "Идеалистические заблуждения" ему еще долго не прощали.
Вот в такой обстановке в МГУ открыли "закрытый" Физико-технический факультет. Закрытый означало, что он работает, в частности, "на оборонку", а точнее готовил специалистов в области новых технологий: радиоэлектроники, физики высоких энергий, аэрофизики. Все это было "закрыто". Так же как исследования в области кибернетики или генетики.
"Закрытость" факультета пошла ему на пользу. В основу образования были положены принципы обучения, принятые в ведущих учебных школах Запада. Программы были весьма нетрадиционны. Обучение длилось шесть лет, причем последние два года студент работал в научно-исследовательском институте или конструкторском бюро как полноправный сотрудник. Считалось, что диплом заслуживает оценки "отлично", только если результаты работы опубликованы (или хотя бы сданы в печать).
Ясно, что иметь два физических факультета - большая роскошь, даже для МГУ. А то, что на ФТФ нашли работу некоторые из изгнанных с физфака преподавателей, служило дополнительным раздражителем для "идейных товарищей". Весной 1951 г. руководство МГУ сумело закрыть физико-технический факультет, но спрос на высококвалифицированных специалистов был такой, что уже в сентябре этого же года открыли полностью самостоятельный Московский физико-технический институт.
Лауреат Нобелевской премии академик Н. Семенов, как и П. Капица, оказал значительное влияние на формирования Физтеха. Выпускникам 50-70-х годов особенно памятны их выступления на ежегодных традиционных встречах, посвященных годовщине основания Физтеха.
Физтех в нынешнем виде - это компактное учебное заведение. Традиционно в российских университетах обучение продолжалось пять лет и выпускники получали дипломы специалистов (инженер, математик, физик). В 90-е годы это вызвало и вызывает до сих пор трудности для тех университетов, которые решили перейти на западную систему подготовки специалистов (бакалавр, магистр). Так как в МФТИ с самого начала обучение продолжалось шесть лет, то переход института на западную систему подготовки прошел более-менее безболезненно. Это связано с тем, что в МФТИ первые три года все студенты занимаются фактически по одной программе, независимо от дальнейшей специализации. Фундаментальные знания в области физики и математики являются обязательными для всех студентов. А последние два года студент занимается углубленным изучением узкой области, выполняет сложную практическую задачу, которая становится основой его магистерской диссертации.
Поэтому студент Физтеха на старших курсах - это человек, который уже много что знает. И главное - может быстро научиться тому, что еще не знает. Это было и есть вроде аксиомы для меня. Однажды мне нужно было срочно найти программистов, способных выполнить сложный проект. Необходимо было заняться реинжинирингом. Исходная ситуация такова. Есть база данных, которая довольно небрежно состряпана. Небрежно потому, что готовился демонстрационный вариант. А если так, зачем какие-то там проверки, тесты, зачем всякие сложности вроде триггеров или внешних ключей. Я таких "программистов", работающих по принципу "тяп-ляп", сильно не уважаю. Если точнее, то за программистов не признаю. Разве что "системными аналитиками" и то убогими готов признать. К сожалению, в нашем случае все оказалось намного хуже. Этот "демонстрационный вариант" был принят в эксплуатацию. Но как эта база данных могла работать, если не было элементарного контроля за тем, что в нее попадает, как она модифицируется?
Итак, имеем "живую" базу данных с противоречивой, даже ложной, информацией. Имеем некоторое множество программ, написанных частично на Basic, частично на Cи++. Что можно сделать в такой ситуации? Ведь база данных уже реально эксплуатируется. Сделать реинжиниринг такой системы - интересная задача. Идея проста. Вначале переписываешь все программы, которые вносят новую информацию или модифицируют старые данные. Ставишь множество преград, блокирующих ввод некорректной информации. Одновременно пишешь программы, выводящие нужную информацию. Также задаешь множество контролирующих шагов для проверки и коррекции "старой" информации, так как иначе система часто "вылетает". Но чинить ее невозможно потому, что по условию, пока полностью не переписаны все программы, консервативные пользователи работают со старыми программами. Когда, наконец, все программы переписаны, все заработает, начинаешь переписывать базу данных. Ставить триггеры и внешние ключи и прочие хорошие вещи. Наконец, на последнем этапе еще раз переписываешь программы ввода и вывода, выбрасывая все лишние проверки, так как большинство проверок проводится через триггеры и прочие "игрушки".
Все хорошо, все понятно, как надо делать, но работать приходится со студентами. А студенты - это такой народ: какую зарплату им не предлагай, все равно они регулярно пропадают. И не потому, что сессия. Образ жизни такой. Душа просит. Но, с другой стороны, студент Физтеха, если задача интересная, способен работать вовсе без зарплаты. Это я по себе и другим физтеховцам знаю. И то, что сейчас капиталистический XXI век, а не социалистический XX, роли не играет.
В конце концов от работы этой пришлось отказаться, хотя первую часть - переписывания всех программ ввода и большую часть программ вывода - мы сделали. Приятно, что людям помогли. Сделали систему работоспособной. Но развивать работу при студенческой необязательности не хотелось.
Еще одна вещь, которая задевала, было то, что программировали мы на объектно-ориентированном языке Cи++, но использовали реляционную СУБД MS SQL. Неприятно это.
Нас обучали, что любое исследование должно начинаться с модели. Физическая эта модель, или математическая, или какая другая сути не меняет. Формализм должен быть. И уж если мы декларируем объектно-ориентированный подход как наиболее перспективный и для проектирования программного обеспечения, и для программирования, то надо доводить дело до логического конца. И СУБД нужно использовать объектно-ориентированную.
Поэтому в курсе по базам данных, который я читаю в МФТИ, акценты были смещены с реляционных баз данных, которые были в центре курса, на объектно-ориентированные, а точнее на Cachе. Желающие узнать подробнее о Cachе могут посмотреть сайт http://www.intersystems.ru.
Курс по базам данных читается на четвертом курсе, т. е. выпускном для бакалавров. Этим и определяется его содержание. Это курс для студентов, заканчивающих базовое образование и готовящихся продолжить учебу в магистратуре. Как правило, они крайне заинтересованы найти работу на неполный день на ближайшие два года, которые необходимы для подготовки магистерской диссертации.
Поэтому мы определили для себя как основную цель - подготовить специалистов, которые смогли бы стать лидерами разработки Cache-проектов в небольших и средних по размерам фирмах. Понятно, что это сильно отличается от традиционного обзорного курса по базам данных, когда студенты что-то изучают, что-то сдают, а затем почти все успешно забывают.
Это значительно выше бакалаврского уровня, предусматривающего, что к концу обучения студент должен уметь решать небольшие задачи, однако это не означает, что он способен вести сложные проекты.
Наша задача была еще сложнее. Мы хотели не только научить проектировать базы данных, но и воспитать энтузиастов объектно-ориентированного подхода к проектированию программных комплексов.
Проблем было несколько. Во-первых, различная подготовка студентов. В МФТИ учатся самые талантливые ребята со всей России. Доля студентов, окончивших московские школы, в них мала (около 10%). Это не типично для московских вузов, где доля студентов-москвичей составляет около 80%. Материальная поддержка студентов со стороны родителей часто очень незначительна, чтобы они могли купить себе компьютер на младших курсах. Конечно, они решают практические задачи на компьютерах института, но отсутствие личного компьютера сильно сказывается. Есть большой разброс в умении программировать.
Во-вторых, они, конечно, слышали об объектно-ориентированном подходе и технологии программирования, но опыта написания больших программных систем у них нет, все знания носят абстрактный характер.
В-третьих, никто из них не писал, естественно, ни проектное задание, ни документацию, отсутствует понимание, что такое проектирование системы, вообще, что такое дисциплина проектирования, как проектировать - все это они представляется весьма смутно, все на уровне интуиции и "здравого смысла".
Еще одна проблема была связана с Cachе. Вернее, с версией 3.2. Достаточно много затруднений возникало при написании студентами графического интерфейса с базами данных. Дело в том, что перед студентами с самого начала ставилась задача научиться создавать реальные пользовательские системы. То есть хороший интерфейс - это обязательное условие. Если его нет, то нет и системы. В этом отношении версия 4.0 - большой шаг вперед.
Есть и другое обстоятельство, почему с самого начала необходимо учить студентов делать хороший интерфейс с базами данных. Это недооценка важности разработки хороших средств отладки и тестирования системы. На это у них "нет времени". Это касается не только студентов. Многие (если не большинство) программисты страдают скрытой манией величия. Им кажется, что ошибки в их программах невозможны. Только досадные "описки", поэтому, конечно, не нужны средства отладки. Бороться с таким отношением надо со студенческой скамьи.
Наконец, есть серьезные основания полагать, что скоро традиционные клиент-серверные системы уступят место Web-технологии. Поэтому, если учить студентов не элементам Cache, а умению создавать коммерческий продукт на основе Cache, то приходится жертвовать временем и изучать будущую среду обитания.
Закончившийся учебный год был первым годом, когда в МФТИ читался курс по объектно-ориентированному подходу к созданию баз данных.
Итоги. Студенты, имеющие опыт работы программирования на объектно-ориентированных языках (Cи++, Java), не испытывают никаких затруднений при разработке баз данных на Cachе. Более того, достоинства объектно-ориентированного подхода у них не вызывают сомнения, даже если для повышения производительности запросы пишутся на SQL. В течение учебного года каждый из студентов написал на Cache две-три базы данных. Оригинальность подходов к переложению предметной области в терминологию классов иногда поражала.
Например, студентам было предложено написать базу данных для предварительного заказа блюд в ресторане. Похожая задача есть в tutorial, который распространяется фирмой. Но задача была существенно усложнена. Есть разные типы меню, предлагаемые в зависимости от времени суток или вкусов заказчика (утреннее меню отличается от вечернего, есть диетические блюда, вегетарианские и т. д.). Одни и те же блюда могли входить в разные меню. Были введены и другие условия, усложняющие задачу.
Казалось естественным, что основной класс для этой решения этой задачи должен быть "ресторан", в котором есть подклассы "меню", "блюда" и т. д. Так и поступило большинство студентов. Но один из студентов в качестве основного класса выбрал класс "блюдо". Т. е. важно, есть такое блюдо или нет. А в каком ресторане можно его заказать, в какое время - дело второстепенное. Очевидно, этот студент был большой гурман. Ресторан как таковой его интересовал меньше, чем любимая еда.
Что касается эффективности созданной базы данных, удобства работы с ней, то она была не ниже, чем у баз данных, разработанных на основе традиционного подхода.
Для получения отличной оценки, необходимо было выбрать (или придумать) себе задачу и решить ее, т. е. спроектировать и запрограммировать свою базу данных для какой-то предметной области. Для большинства это также не вызвало затруднений. Примеры студенческих задач: каталог звезд (атлас), система резервирования авиабилетов, каталог видеотеки и т. д. Т. е. в отношении умения самостоятельно поставить и решить задачу, включая разработку интерфейса, затруднений также не возникло.
Что не получилось? Первоначально предполагалось, что студенты будут выполнять курсовое проектирование базы данных, т. е. будет подготовлено проектирование задачи с помощью UML, программирование базы данных, написан интерфейс системы с использованием Web-технологий, проведена отладка базы данных, написана документация, проведена защита проекта. В полном объеме этого достичь не удалось. Причина простая - не хватило времени на усвоение материала.
Теоретически за три предшествующих года обучения на физтехе студенты прослушали лекции, выполнили практические задания по всем составляющим объектно-ориентированного подхода. Считалось, что они знают, что такое объектно-ориентированный подход к проектированию программного обеспечения, что такое UML, что такое объектно-ориентированные языки программирования и умеют программировать хотя бы на одном из них. Считалось, что они знают, что такое Web-технология, Web-дизайн и умеют работать хотя бы с FrontPage (или напрямую использовать HTML). На практике оказалось, что эти курсы воспринимаются ими как разрозненные, не связанные между собой дисциплины, не было курса, который заставил бы студентов осознать, что такое единый объектно-ориентированный подход к разработке программных систем. В результате получилось, что такие вещи, как UML, работа с Rational Rose, Web-технологии создания клиент-серверовских систем, HTML, работа с продуктами MacroMedia, пришлось "проходить" заново.
Поэтому программа курса на новый учебный год будет полностью пересмотрена. Прежде всего, мы решили отказаться от традиционного подхода к построению курса по базам данных, когда изучаются различные подходы к построению баз данных, проводятся сравнения объектно-ориентированного (ОО) подхода с реляционным, сетевым, иерархическим. Стержневым понятием курса будет не теория баз данных и место объектно-ориентированных СУБД среди других СУБД, а объектно-ориентированный подход к разработке программных систем.
Первый семестр должен сформировать у студентов понимание, что объектно-ориентированный подход является наиболее перспективным при разработке программного продукта. Что существующие средства проектирования и программирования позволяют использовать ОО-подход как единый и непрерывный цикл разработки программных систем.
Второй семестр - самостоятельное проектирование информационно-поисковой системы на базе Cache с использованием объектно-ориентированного подхода от постановки задачи и до подготовки документации. Курс заканчивается защитой проекта.
Студенты знают почти все. Тому немногому, что они не знают, мы их научим.
Задача первого семестра - "выравнивание" студентов. Они приходят с разными познаниями в теории и с разным уровнем умения программировать. Необходимо, насколько это возможно, подтянуть менее подготовленных студентов к уровню сильнейших. Поэтому лекции начинаются с изложения объектно-ориентированного подхода к разработке программного обеспечения. Затем следует изложение основных понятий объектно-ориентированной СУБД Cache как важнейшего компонента объектно-ориентированной технологии при создании информационно-поисковых систем. На практикуме студенты учатся работать с Cachе Object Architect и решают свою первую задачу - создание каталога фильмов в видеотеке. Еще не зная тонкостей Cachе и, возможно, не зная Java и HTML, они видят, что Cachе - это удобное средство для быстрого решения небольших практических задач. На семинарах студенты изучают базовые элементы HTML, чтобы на практикуме, используя Cachе Web Form Wizard, научиться изменять входные и выходные формы. По мере накопления знаний о Cachе они должны будут модифицировать базу данных, начальная постановка задачи будет изменяться. Мы готовим студентов к реальной жизни. Поэтому они должны быть готовы к тому, что заказчик часто меняет свои требования. Студенты должны чувствовать, какую цену приходится платить за недостаточно продуманную постановку задачу.
Таким образом, первый семестр посвящен изучению основ Cachе и Web-технологиям. SQL рассматривается в первую очередь как один из инструментов Cachе, позволяющих повысить эффективность решения ряда задач. Семестр заканчивается проектированием еще одной базы данных. Проектные решения должны быть обоснованными, а интерфейс с базой данных должен выглядеть изящным.
Второй семестр посвящен изучению тонкостей Cachе. Архив пользовательской конференции Intersystems содержит множество практических примеров, как обходить возникающие время от время в работе трудности. Кроме того, есть очень важные моменты, связанные с безопасностью баз данных, наличием различных правил доступа к данным. Необходимо также уметь перехватывать и обрабатывать ошибки, возникающие при неправильном обращении к базе данных.
На практикуме студентам надо будет разработать достаточно сложную базу данных с использованием UML. Семестр заканчивается защитой выполненной работы. Обязательно наличие документации, описания системы. Интерфейс должен быть элегантен, а база данных - устойчива к ошибкам пользователя.
Но самая главная цель, которую мы ставим перед собой, - "зажечь" студента. Чтобы он почувствовал, что программирование - это очень интересная и приятная работа. Тогда на него можно положиться и в реальных проектах.
В МФТИ учатся не только студенты, но и специалисты, желающие повысить свою квалификацию и получить диплом о дополнительном образовании. Курс по Cache входит в программу специализации по информатике, которая построена на базе Computing Curricula 2001, разработанных совместно ACM и IEEE Computer Society. Так что если вы хотите повысить свою квалификацию или квалификацию ваших сотрудников, а также получить диплом о дополнительном образовании, то вы можете это сделать в Компьютерном учебно-методическом центре МФТИ.
Статья опубликована 03.12.2001.