Первокурсников, начинающих изучать курс компьютерных наук в Массачусетсском технологическом институте (Massachusetts Institute of Technology, MIT), в этом учебном году ожидают большие перемены.
По
мнению доцента кафедры электротехники и компьютерных наук (само название кафедры
показывает, что в MIT ценят традиции) д-ра Линн Андреа Стайн, алгоритмы - хорошо,
но агенты - лучше. Суть предложения госпожи Стайн ошеломляюще проста: преподаватели
должны готовить студентов к тому, что ожидает их в реальной жизни.
Те
изменения, которые произошли в технологии программирования за последнее десятилетие,
не нашли практически никакого отражения в учебных планах американских университетов
и колледжей. Изучение новых парадигм проектирования программ, ставших уже привычными
для многих практиков этой крайне изменчивой по самой своей природе профессии,
становится возможным уже на студенческой скамье. На помощь приходят Java и модели
программ-агентов.
Путь к простым истинам сложен - чему только ни училась Линн
на своем веку!.. Каллиграфии и ивриту, биологии и игре на флейте, а также, разумеется,
математике и приемам оказания первой медицинской помощи. "Просто удивительно,
как много узнаешь, собирая ромашки", поражается она. Насмешливая фраза из Стивена
Ликока: "Рыцарь вскочил на коня и поскакал, как безумный, во всех направлениях"
- про госпожу Стайн.
"Для меня исследовательская работа и преподавание неразрывны.
По сути, это одно и то же, только в лаборатории ты не знаешь ответов на те вопросы,
которые тебе задают".
От собирания ромашек Линн перешла к собиранию аргументов и
фактов, затрагивающих святая святых - университетский курс CS101, "ведение в
программирование". Выяснилось, что изучение механизмов исполнения алгоритмов
по привычной уже последовательной модели "один поток команд - один поток данных"
приводит к формированию стереотипа, от которого впоследствии бывает трудно избавиться.
Отлаженную программу оценивают по результатам ее выполнения - а как же еще?
Шествуя по этой натоптанной дорожке, преподаватели часто предлагают
студентам воспринимать появление феномена Java как "вариации на тему C++". "Если
же вы хотите, чтобы уже первые курсовые стали такими маленькими шедеврами, как
клиент-серверные приложения или сетевые варианты динамичных видеоигр, то от
родной методики старого варианта CS101 придется отказываться",- утверждает Линн
Стайн.
Итак,
долой старый добрый текстик "Hello, world!"; его место занимает не менее крохотный,
однако возмутительно зацикленный while (true) { echo(); }.
В реальных программах сегодня приходится иметь дело с явно
или неявно взаимодействующими (конкурентными) компонентами; именно их взаимодействие
составляет суть работы программы. Результатом становится не вывод на экран числа
или текста, мультимедийных окошек - нужное подчеркнуть, а непрерывный процесс
связи с миром, внешним по отношению к программе. Именно этот внешний мир управляет
поведением программы, а не одна только воля программиста.
За последние несколько лет технология разработки программ претерпела революционные изменения (визуальное программирование, событийная логика программы, компонентная технология, использование макросредств и пр.), что должно было бы отразиться на методике обучения; но этого, к сожалению, не произошло. И схема "типичного пути начинающего программиста: Бейсик Х Паскаль Х Си++ Х программирование под Windows", при всей своей несовременности является весьма характерной. Андрей Колесов, PCWeek/русское издание, октябрь 1997 |
Курс, предложенный Линн Стайн, рассчитан на один или два семестра и состоит из четырех разделов. В первом из них излагаются концептуальные основы технологий программирования, основанных на событийной логике и работе взаимодействующих компонентов. "Раньше в изложении техники программирования мы действовали так, как будто требовалось обучить марсианина искусству приготовления сэндвичей; теперь же начинающему программисту предлагается роль режиссера или предпринимателя. Результат твоей работы - не сэндвич в одном экземпляре, а работоспособный бизнес или пьеса, идущая без накладок".
Во втором разделе курса речь идет об основных конструкциях программы в терминах синтаксиса и семантики этих конструкций. Однако уже в первых примерах разбираются те программы, при выполнении которых приходится учитывать поведение "соседних" программ-компонентов и события во внешнем мире. По завершении этой части курса студенты осваивают программирование в терминах "взаимодействующих сущностей", приходя к выводу о том, что автономные, stand-alone программы - существа, в природе встречающиеся все реже.
Значительная часть курса посвящена приемам и альтернативам проектирования программ в рамках модели "сообществ программных компонентов". Изучаются такие вопросы, как наследование, обработка исключительных ситуаций и диспетчеризация. Рассматривается такая абстракция понятия процедуры, которая приводит студентов к представлению о технике событийного программирования. Источники сигналов о событиях могут находиться либо на аппаратном уровне, либо в "соседних" программных компонентах, либо во внешнем мире.
Завершающий раздел курса посвящен проблеме "связывания сущностей". Здесь среда Java AWT представлена и как инструмент, и как объект изучения - система, управляемая событиями.
Тема разработки программных интерфейсов является в этом курсе сквозной. Речь идет не только о том, что должны содержать спецификации интерфейса, но и о том, чего они содержать не должны.
Наконец, одной из доминант курса становится проблема обеспечения надежности и жизнеспособности (liveness) программ.
В итоге, по мнению Линн Стайн, студент получает в свое распоряжение компактный "Cловарь основных концепций", что позволяет ему научиться задавать правильные вопросы по мере того, как продолжается изучение им системных технологий.
"Абстракции последовательного выполнения программ по Тьюрингу и фон-Нейману были крайне важны в историческом плане и позволили многое сделать. Но дело в том, что алгоритмы часто оказывались не дискретными, не последовательными по своей структуре; стоит проследить за эволюцией систем с разделением времени", - подчеркивает Линн. "Когда я начала работать над этим курсом, технология Java отсутствовала. Мои интересы в то время были связаны с роботами. Расказывая студентам о роботах, я стала вводить в курс представления о жизненном цикле программ, разработке встраиваемых приложений и интерактивных систем. Появление Java и WWW стало для меня свидетельством того, что событийное программирование начинает доминировать в реальном мире".