Специальность «Программная инженерия» (бакалавриат)
Степень: Академический бакалавр
Наиболее распространенные экзамены при поступлении:
Содержание

Это очень серьезная отрасль, которая требует вовлечения команды профессионалов. В их компетенции построение программных систем. Специалист направления должен не просто обладать солидным багажом знаний и практическим опытом, но и постоянно совершенствоваться, углубляясь в тематику и знакомясь с новыми разработками и достижениями компьютерной техники.
Условия поступления
Направление предполагает точное знание математической науки, информатики и сопутствующих дисциплин. Поэтому абитуриенту предстоит сдать ЕГЭ по следующим предметам:
Будущая профессия
Молодой специалист с дипломом бакалавра может решать целый комплекс задач. Он сумеет разработать конкретные программные продукты и заняться научно-исследовательской деятельностью. Это увлекательная профессия, которая включает в себя и определенную творческую составляющую. Она предполагает умение охватывать проблему в комплексе, рассматривая все пути решения сложной задачи. Ведь профессиональная реализация предполагает не только создание новых программ, но и усовершенствование старых программных систем.
Куда поступать
Освоить специальность можно в следующих учебных заведениях:
Срок обучения
Программа обучения длиться 4 года при условии выбора очной формы.
Дисциплины, входящие в курс обучения
Бакалавриат позволяет получить глубокие знания по таким дисциплинам:
Приобретаемые навыки
По завершении обучения молодой специалист будет компетентен в следующих сферах:
Перспективы трудоустройства по профессии
Специалисты направления 09.03.04 «Программная инженерия» востребованы в разных организациях, начиная от государственного сектора и заканчивая частными компаниями. Это может быть работа не только в офисе, но и за домашним ПК. Особенности профессии заключаются в том, что сотрудник не привязан к конкретному месту работы. Он может сотрудничать с фирмой, которая находится даже в другом государстве, самостоятельно составляя график работы.
Выпускник направления может работать:
Перспективная отрасль предполагает достойный уровень оплаты труда. Новичок сможет рассчитывать на минимальный оклад в 30 тысяч рублей, а при хорошем багаже знаний такие специалисты зарабатывают от 100 тысяч.
Преимущества обучения в магистратуре
Магистерская программа позволяет углубить профессиональные знания, наработать ценный практический опыт. Ведущие вузы предлагают прохождение практики в лучших российских и международных компаниях в сфере IT.
После окончания курса выпускник становится настоящим экспертом.
Программная инженерия
Направление подготовки отражает эволюцию программирования от ремесла к науке и индустрии, основанную на традиционной триаде – методы, инструменты, технологии.
Основные данные для поступающих
| Код специальности | 09.03.04 |
|---|---|
| Квалификация | Бакалавр |
| Формы обучения и количество мест | Количество мест для приёма |
| Период обучения | 4 года + 2 года в магистратуре |
| Выпускающие факультеты | Факультет компьютерных технологий и информатики |
| Вступительные испытания (ЕГЭ) | Математика, Русский язык, Физика или Информатика |
| Проходной балл очная форма обучения (бюджет) средний за 3 последних года | 260 |
Cовременная научно-техническая область и новое образовательное направление:
Основные дисциплины
Общая математика: математический анализ; алгебра и геометрия; теория вероятностей и математическая статистика.
Компьютерная математика: дискретная математика; математическая логика и теория алгоритмов; вычислительная математика; теория автоматов и формальных языков.
Базовое программирование: программирование; объектно-ориентированное программирование; построение и анализ алгоритмов; алгоритмы и структуры данных; базы данных; компьютерная графика; криптография и защита информации; web-технологии.
Программно-аппаратная платформа: архитектура компьютера; операционные системы; архитектура распределенных вычислительных систем; сети и телекоммуникации.
Программная инженерия: введение в программную инженерию; разработка и анализ требований; проектирование и архитектура программных систем; конструирование программного обеспечения; тестирование программного обеспечения; проектирование человеко-машинного интерфейса; разработка прикладного программного обеспечения с графическим интерфейсом; качество и метрология программного обеспечения; управление разработкой и экономика программных проектов.
При обучении студент самостоятельно формирует свою образовательную программу, выбирая 11 из 22 дисциплин (по выбору студента), содержащихся в учебном плане. Среди этих дисциплин: программирование на ассемблере; функциональное программирование; логическое программирование; разработка приложений для мобильных платформ; технологии программирования виртуальной реальности; параллельные алгоритмы; распределенные алгоритмы; верификация программ; теория вычислительной сложности; методы оптимизации; теория принятия решений; физические основы информационных технологий; основы цифровой схемотехники; цифровая обработка сигналов; цифровая обработка изображений; разработка программного обеспечения информационных систем; основы технологий хранения данных.
Практики
В ходе прохождения обучения в бакалавриате и магистратуре для студентов предусмотрено прохождение практики – по 2 в каждом случае.
Студенческая практика по направлению «Программная инженерия» проходит в компаниях Google, «Моторола ЗАО», «Транзас», «Морские Комплексы и Системы»,HyperMethod IBS и на предприятиях концернов «Океанприбор», «РТИ системы», «ЦНИИ «Электроприбор», «РАСофт» и др.
По итогам прохождения практики многие студенты трудоустраиваются на условиях неполной занятости и могут совмещать трудовую деятельность с обучением в ВУЗе.
Результаты освоения программы
Объекты профессиональной деятельности выпускников по направлению подготовки 231000 «Программная инженерия»: программный проект (проект разработки программного продукта); программный продукт (создаваемое программное обеспечение); процессы жизненного цикла программного продукта; методы и инструменты разработки программного продукта; персонал, участвующий в процессах жизненного цикла программного продукта.
Выпускник этого направления должен уметь (в том числе):
Инфраструктура
Кафедра математического обеспечения и применения ЭВМ (МО ЭВМ) является базовой для созданного в 2005 году учебно-научного инженерного центра программных средств корпоративных систем (УНИЦ ПСКС) как структурного подразделения факультета компьютерной техники и информатики (ФКТИ). В нём работают не только представители кафедры МО ЭВМ, но и сотрудники других кафедр ФКТИ и университета, аспиранты и студенты старших курсов.
Будущая карьера
Получаемые квалификации и будущие профессии:
Примеры трудоустройства выпускников:
ОАО «НИИ ПС» («Научно-исследовательский институт программных средств»), ОАО «КОНЦЕРН «ОКЕАНПРИБОР», ОАО «Научно-инженерный центр Санкт-Петербургского электротехнического университета», ОАО «РИРВ» («Российский институт радионавигации и времени»), ОАО «Концерн «РТИ системы», ОАО «Концерн «ЦНИИ «Электроприбор», ОАО «РАСофт»ОАО «НПО РусБИТех», ОАО «Радиоавионика», ИХС РАН (Институт химии силикатов), НПК «ГОИ им. С.И.Вавилова», ФГУП «НИИТ» (научно-исследовательский институт телевидения), Санкт-Петербургский Центр Разработок ЕМС, Google (в Санкт-Петербурге), ЗАО «Моторола ЗАО», ЗАО «Транзас», ЗАО «ЭмСиАрт», ЗАО «Морские Комплексы и Системы», Компания ГиперМетод IBS (HyperMethod IBS), Компания F-Secure, ООО «СкайНет», ООО «БИТ Интеллектуальные технологии», ООО «ВикиВот!», ООО «НПК АСТРА», ООО «БИФРИ», ООО «Рэпид Софтвер Солюшнз», ООО «НПК АСТРА», ООО «НТЦ Аргус», ООО «Аларити СПб», ООО «НПЦ «Гранат» и др.
Первый курс обучения по направлению «Программная инженерия»
Приветствую вас.
Когда я заканчивал последний год обучения в школе, точнее отрабатывал решение тестов по ЕГЭ, я уже выбрал сферу в которой хотел получить профессию. Да, это IT. Выбрал как-то само собой, вообще не мучился. Конечно же подал документы в технический университет. И вот, заполняя анкету, нужно было выставить приоритеты по направлениям. Первой в списке я и поставил программную инженерию. Осознанно. Хотя мои представления об этой специальности не были до конца полны на тот момент. Ну собственно как выбрал, так туда и попал…
Первый семестр
Естественно учеба в университете была в новинку, много впечатлений и т.д. Направление «Программная инженерия» появилась в университете впервые. По нему готовят бакалавров, т.е 4 года обучения, затем можно пойти в магистратуру. Группа собралась из 14 человек (кстати, по завершению курса осталось всего 10)
О двух последних подробнее.
Введение в специальность представляло собою курс лекций, на которых речь шла об программировании в довольно-таки простой и понятной форме.
Алгоритмизация математических задач, это был курс практических занятий, на которых мы подробно разбирали блок-схемы, псевдокод, и как бы программировали на как бы языке «Кумир». Ну, собственно изучали всяческие алгоритмы.
По завершении семестра сдавали экзамены по Алгебра и геометрии, Информатике и Отечественной истории.
Второй семестр
О, а вот тут уже интересно.
Итак, перечислю дисциплины:
– Безопасность жизнедеятельности (куда без нее)
– Математический анализ (опять он)
– Иностранный язык (продолжаем изучение)
– Физкультура (аналогично)
– Дискретная математика (множества, графы и Булевы функции)
– Теория решения изобретательских задач
– Программирование на языке высокого уровня
– Основы программной инженерии
Три последних предмета представляют наибольший интерес.
Теория решения изобретательских задач – очень интересная дисциплина. Она меняет стиль мышления. Занятная концепция.
Программирование на языке высокого уровня, тут мы приступили к изучению великого и ужасного С++. Курс лекций параллельно с практическими занятиями. Ну, занятия – как занятия, за семестр 26 лабораторных работ. Некоторые темы лабораторных: Циклические вычислительные процессы, Обработка числовых последовательностей с использованием вектора, Матрицы, Массивы, Строки, Функции библиотеки для работы со строками и символами, Реализация стека и очереди, Указатели на функции, Рекурсивные функции, и другие. В общем за семестр изучили азы, достаточно так хорошо изучили.
Основы программной инженерии – вводный такой курс. Начиная от истории программирования, да разбора стандартов. Плюс еще касательно самого программирования – параллельное изучение среды BlackBox. Ну и реализация некоторых тех же лабораторных работ по Программированию на языке высокого уровня.
Экзамены сдавали следующие: Математический анализ, Дискретная математика, Основы программной инженерии и Программирование на языке высокого уровня.
Впечатления
Курс выдался интересным и главное – познавательным. Так как направление новое, может оказаться, что учебный план будет сырым, но очень радует энтузиазм преподавателей. Хотя, это конечно первый курс. Основное обучение по данному направлению будет на третьем и четвертом. Как говорится дальше — больше.
Сейчас, кстати, проходит учебная практика. Пишем программы и сопровождаем их документацией. Это как бы подготовка к двум курсовым работам на следующий курс. Такая же практика будет проводиться и после четвертого семестра. После третьего курса – уже производственная практика.
Ну, вот я и поведал вам об организации учебного процесса в моем университете. Кстати вот Он.
Программная инженерия как предмет обучения
Учреждения, занимающиеся обучением программному обеспечению, ответственны за подготовку специалистов, которые в состоянии создавать и обслуживать информационные системы, полностью отвечающие ожиданиям пользователей. В статье предложен ряд идей относительно того, как наилучшим образом выполнить эту задачу.
Общепринятого определения программной инженерии (software engineering) не существует. Одни считают, что «программная инженерия» просто более пафосное название программирования. Если вы программист, то, скорее всего, в своей визитной карточке напишете «разработчик ПО», а вовсе не «программист». Другие же вкладывают в понятие «программная инженерия» более высокий смысл. В учебниках можно найти следующее определение программной инженерии: «совокупность навыков, инструментальных средств и методов, предназначенных для создания качественного программного обеспечения».
Если не делать главный упор на качестве, программную инженерию можно отличить от программирования по ее существенно промышленной природе. Это позволяет дать иное определение: «разработка преимущественно крупных систем, предназначенных для использования в производственных условиях, в течение длительного периода, с которыми будут работать значительное число людей и которые могут претерпевать значительное число изменений», причем под «разработкой» здесь понимается управление, обслуживание, тестирование, документирование и т.д.
Дэвид Парнас, один из пионеров отрасли, особый упор делает на слово «инженерия», утверждая [1], что образование в данной области тесно связано с традиционными инженерными дисциплинами, в том числе с курсом материаловедения и тому подобными предметами, отличаясь от информатики так же, как электротехника от физики.
В своей статье я не буду опираться на какое-то одно из приведенных определений, а хотел бы остановиться на том, как интегрировать изучение программной инженерии в общий курс, касающийся программного обеспечения.
Возможно, не все согласятся с предложенными определениями, но мало кто будет отрицать важность данной дисциплины. Вряд ли она всегда оказывает такое влияние на жизнь социума, как паника по поводу проблемы 2000 года, но в памяти каждого наверняка свежи воспоминания о том, насколько серьезно мир зависит от программных систем. Вузы, обучающие программному обеспечению либо как части информатики, либо в рамках специального курса программной инженерии, призваны готовить специалистов, которые будут в состоянии создавать и обслуживать эти системы так, чтобы полностью отвечать ожиданиям их пользователей.
Специалисты по программному обеспечению
Американская ассоциация информационных технологий в апреле 2000 года [2] прогнозировала появление в течение 12 следующих месяцев 850 тыс. вакантных рабочих мест для ИТ-специалистов. Нехватка квалифицированного персонала ощущается в Европе и Австралии. Зарплаты остаются высокими, даже несмотря на массовое закрытие Internet-компаний и спад в экономике.
Хотя нет никаких признаков того, что в будущем такая тенденция не сохранится, глубокий экономический спад может заставить руководителей компаний более тщательно относится к подбору кадров. Кроме того, все больше людей приобретают навыки программирования, чему в немалой степени способствует появление все более совершенных инструментальных средств разработки, предназначенных для массового рынка. Вполне вероятно, например, что многие из 6 млн. человек, которые сейчас, по некоторым оценкам, работают с Visual Basic, не имеют образования, связанного с информатикой. Подобная ситуация создает конкуренцию и заставляет настоящих профессионалов предпринимать особые усилия, дабы не затеряться в море любителей.
Судя по высказываниям многих менеджеров, им нужны не просто сотрудники, а великолепные разработчики. А таких действительно не хватает. Литература по программной инженерии подтверждает [3], что разница в качестве работы самого квалифицированного и самого неквалифицированного разработчика в проекте может отличаться в 20 раз. Цель образовательной программы — готовить специалистов, которые удовлетворяли бы самым высоким требованиям.
Стоить отметить, что те, кто заказывает и использует наши системы, довольно терпимо относятся к нашим трудностям. Пользователи жалуются на программное обеспечение, но работают с ним. Однако вечно так продолжаться не может. Хотя относительно немного людей погибли непосредственно от ошибок в программных системах — известно всего несколько десятков случаев [4], нет необходимости специально напоминать о многих известных авариях, чтобы уведомить публику о нестабильности наших методик.
Даже если бы такие случаи не происходили, проблемы, связанные с программным обеспечением, серьезны настолько, что заставляют некоторые государственные органы ввести процедуру лицензирования. Как бы вы не относились к подобным инициативам (а доводом в их защиту служит и мнение Парнаса, утверждающего, что программные инженеры должны в обязательном порядке проходить лицензирование и регистрацию), они отражают общую тенденцию, суть которой сводится к необходимости отделять специалистов по программному обеспечению от программистов-любителей.
Эти тенденции имеют важные последствия для вузов. Конечно, обучение использованию популярных в данный момент инструментов может привлечь внимание студентов (желающих получить навыки, спрос на которые, судя по рекламным объявлениям, весьма высок). Однако подобное решение — не самая лучшая услуга, которую вы можете оказать будущим профессионалам. Вопрос в том, стоит ли их обучать фундаментальным методам мышления, который будут применяться ими в течение всей карьеры и которые помогут добиваться успеха в столь быстро меняющейся области. Успех сопутствует тем, кто способен выйти за рамки инструментария, популярного в какой-то момент времени, и развиваться гармонично с развитием данной дисциплины.
Это не означает, что следует вообще исключить из рассмотрения инструментарий. В любой инженерной дисциплине инструментарий составляет важную часть профессиональных навыков. Тем не менее, нельзя ограничиваться только ими. Следует изучать фундаментальные концепции, которые практически не изменились с момента своего появления, т. е. с момента формирования отрасли. Как и аппаратная архитектура, средства разработки программ тоже меняются, но концепции остаются.
Пять целей учебного курса
Учебный курс по программному обеспечению должен включать в себя пять взаимно дополняющих моментов:
Принципы
К самым важным вещам, которые должен знать профессиональный программный инженер, относится набор концепций, которые вновь и вновь используются в его работе. Большая часть этих концепций представляет собой не какие-то конкретные методики; если к ним и относится та или иная методика, то лишь в качестве иллюстрации лежащих в его основе логических рассуждений. Именно этим определяется самая яркая характеристика профессионального программного инженера: искусность этих мощных и элегантных интеллектуальных схем, которые, в значительно большей степени, нежели какие-то определенные трюки, и составляют признанные сокровища нашей профессии. Большую их часть невозможно постичь за один присест. Они требуют постепенного совершенствования, шаг за шагом, методом проб и ошибок и под руководством мудрых наставников.
Приведенный во врезке список далеко не полон, но он должен продемонстрировать, что многое из того, чему мы должны научить, нельзя объяснить словами; это набор творческих идей, овладение которыми приходит постепенно, по мере того, как программист-любитель превращается в мастера.
Большая часть людей, сегодня в силу своего высокого служебного положения определяющих, каким быть учебным курсам по программному обеспечению, начинали свою карьеру в то время, когда компьютеры были некой тайной для избранных — одно только знание того, как с ними работать, уже ставило человека над остальными. Времена меняются. Сегодня, как заметил Дэннис Цикритзис [5], специалисты по программному обеспечению могут многое узнать о новых разработках, просматривая утренние газеты. Такая уничижительная обыденность заставляет нас в большей степени, чем раньше, четко формулировать, как для самих себя, так и для наших студентов, что дает нам право называться профессионалами.
Практика
На более приземленном уровне обучение программной инженерии предусматривает ознакомление студентов с практическими методиками, доказавшими свою продуктивность и тоже имеющими немаловажное значение для профессионалов.
Приложения
Под заголовком «приложения» скрываются традиционные специфические области разработки программного обеспечения: фундаментальные алгоритмы и структуры данных, создание компиляторов, операционные системы, базы данных, методы искусственного интеллекта и численные методы.
Речь не идет о том, чтобы искусственным образом присоединять эти дисциплины к программной инженерии. Наоборот, необходимо добиваться того, что какими бы не были индивидуальные традиции, методики и результаты, все это темы, связанные с программным обеспечением, и их изучение должно вестись согласованно с представлением о программном обеспечении, сложившемся в данном вузе. Выгода будет взаимной. Обучение специальным предметам будет вестись эффективнее, если студенты получат более глубокое представление о методологии. Например, программные проекты могут быть посвящены предмету, изучаемому студентом. Следует исходить из того, что студенты уже получили общие навыки проектирования и программирования.
Инструментальные средства
Модные в данный период времени инструментальные средства не должны определять направление преподавания. Скажем, Парнас довольно жестко возражает против изучения конкретных языков и инструментальных средств. Но если эти аспекты и не должны быть центральными, не следует их игнорировать вовсе. Студентам необходимо дать представление о некоторых передовых инструментальных средствах, используемых в отрасли. Это изучение должно быть проникнуто критическим духом. Студентам надо предоставить возможность проанализировать достоинства и ограничения инструментария и представить, какими должны быть лучшие решения.
Курс изучения инструментария не может и не должен быть исчерпывающим; лучше выбрать несколько языков программирования и ряд популярных продуктов и помочь студентам детально в них разобраться. Если им требуются другие инструменты, они смогут изучить их во время работы. Во время обучения студенты должны ознакомиться с некоторыми из них, чтобы получить общее представление о том, что есть на рынке и понять, чего от них ждут их будущие работодатели.
Неизбежно некоторые из полученных навыков к тому моменту, как студенты завершат обучение, устареют, но в этом нет ничего страшного, если изучение инструментария — компонент процесса обучения, а не основная цель, и воспринимается как изучение некоторых примеров в свете более общих принципов. Когда придет время постигать более совершенный инструментарий, знание некоторых из предшествующих продуктов и понимание их ограничений может оказаться весьма полезным.
Эти утверждения в первую очередь применимы к языкам программирования. Каждый серьезный проект подразумевает выбор подходящего языка разработки. Очень показательно в этом отношении распространение Паскаля в 70-х годах. Если обучение основано на языке, который в настоящее время не является доминирующим для индустрии, студенты должны прослушать несколько вспомогательных курсов (или разделов курса), посвященных стандартным инструментам, как для того, чтобы употреблять правильные термины в своих резюме, так и для того, чтобы получить представление о всем разнообразии практических подходов. Хороший программный инженер в любом случае должен знать несколько языков программирования.
Продуманная программа обучения должна выдерживать нарастающие попытки со стороны заинтересованных сторон (среди которых, пожалуй, наиболее агрессивны семьи студентов) заставить изучать конкретные инструментальные средства, в частности, языки программирования, исходя из того, что чаще всего упоминается среди обязательных требований к кандидатам в публикуемых объявлениях о приеме на работу. Подобное давление может оказаться чрезвычайно опасным.
Случись это 25 лет назад, университеты никогда бы не перешли на Паскаль, поскольку знание этого языка даже не упоминалось в рекламных объявлениях; отрасль, по большей части, и не слышала о нем. Этот феномен вызывает все большее беспокойство среди преподавателей, которым хорошо известно, что популярные сегодня навыки завтра могут и вовсе не потребоваться.
Математика
Одна из тем, которые, по мнению Парнаса, относятся к курсу информатики, но не к программе по компьютерной инженерии, — это семантика. Мое мнение по этому вопросу формируется с учетом собственного опыта как разработчика и менеджера программных проектов. Как и Парнас, я не слишком заинтересован в овладении студентами скрытых деталей теории языков на уровне доктора философии, но высоко ценю способность программистов мыслить формализовано. Хотя ни в одном обычном программном проекте формальная семантика вовсе не применяется повседневно, определенное понимание того, что программирование и языки программирования — это математические объекты, подверженные формальному описанию, является ключевым преимуществом. И я пришел к выводу, что это оказывается весьма полезно с практической точки зрения в коллективах, работающих над программным обеспечением.
Уровень таких знаний не обязательно должен быть чрезвычайно высок. В книге [6] я попытался прокомментировать в практических терминах, понятных обычному программисту, формальную семантическую базу, которая, с моей точки зрения, ему необходима. Снова и снова работая над программными проектами, я понимаю, что студенты, научившиеся применять математическое мышление к разработке программного обеспечения, имеют огромные преимущества по сравнению с теми, кто подобными навыками не обладает. Судя по моему опыту, профессиональный разработчик, полностью реализующий весь свой потенциал, должен понимать такие концепции, как семантика Хоара.
Эти темы предусмотрены университетским учебным курсом, но очень трудно обучить им потом, после того, как выпускники продолжительный срок проработали на производстве — что математическая культура куда важнее для участников проекта, чем знания по материаловедению. Одна из отличительных особенностей традиционных инженерных дисциплин состоит в том, что, помимо всего прочего, они имеют серьезный математический базис. Семантика Хоара и тому подобные вещи — самый близкий аналог в программной инженерии уравнениям Максвелла или законам механики.
Математические дисциплины, изучаемые в учебном курсе по программному обеспечению, должны включать в себя как математический анализ и дискретную математику a la Кнут, так и основы математической логики и введение в формальную семантику в практических терминах, и некоторую практику с использованием современных формальных языков.
Обучение на практике
Помимо теоретических лекций, любой курс обучения должен включать в себя программные проекты. Зачастую они оказываются недостаточно эффективными, для того чтобы подготовить студентов к настоящим трудностям профессиональной разработки программного обеспечения, которая предусматривает создание крупных систем (а не относительно небольших учебных), участие в больших коллективах (что крайне редко в условиях университета), модификацию унаследованных систем, разработанных кем-то другим (а не создание «с нуля») и необходимость иметь дело с конечными пользователями (а не с профессором и однокашником).
Невозможно, а, скорее всего, и не требуется, в университетских условиях в полной мере имитировать подобные обстоятельства. В конце концов, вуз не завод и не должен им быть. Но студентов необходимо готовить к реальным трудностям, с которыми им придется столкнуться. Стандартный учебный проект для этой цели не достаточен. Основной метод — долговременный проект, который студенты должны вести в течение не квартала или семестра, а, как правило, в течение всего годового курса. Это должен быть групповой проект, включающий в себя этапы анализа, проектирования и реализации. Он должен предусматривать повторное использование, анализ, модификацию и расширение уже существующего программного обеспечения. Наилучший способ добиться последней цели — представить проект, реализующийся несколько лет, при том, что каждый новый курс использует результаты предыдущего и разрабатывает проект дальше.
Подобная идея, на первый взгляд, может показаться нереальной, но группа энтузиастов — преподавателей Университета Монаша именно так ведет обучение последние несколько лет. В результате создана оригинальная программа графического моделирования, которую каждый новый курс совершенствует, изучает в процессе преодоления трудностей модернизации кода, разработанного кем-то раньше [7]. Есть серьезные препятствия, в частности аттестация в рамках такого проекта и трудности организации годовых проектов в рамках стандартного учебного расписания. Но с решимостью и энтузиазмом все трудности преодолимы.
Обратный учебный процесс
Идея преподавания, дополняющая многолетний проект, состоит в реализации одного из самых многообещающих свойств современной технологии создания программного обеспечения: повторного использования. Принцип обратного учебного процесса [8] или «постепенного открытия черных ящиков» состоит в том, что сначала студенты используют мощные инструментальные средства и компоненты в качестве частей своих собственных приложений, а затем постепенно поднимают завесу тайны. Это дает возможность понять, как устроены эти инструменты, предложить небольшие изменения и добавить свои собственные расширения. Суть метода состоит в том, что студент постепенно превращается из пользователя в создателя, но с самого начала сосредотачивается на мощных и, по возможности, крупных примерах.
Такой подход дает несколько преимуществ. С самого начала студенты работают с интересными программами, например, с графическими системами. Обучение базируется на возможности сразу видеть результаты своей работы. Современные студенты с раннего детства знают, что такое электронные игры и персональные компьютеры, и их вряд ли заинтересуют азбучные примеры введения в программирование (задача восьми ферзей и тому подобные).
Более того, студенты на собственном опыте осознают необходимость и преимущества абстракций и упрятывания информации. Можно пытаться научить их этим концепциям в теории, но, вероятно, студенты будут воспринимать эти попытки лишь как скучные проповеди. Ничто не позволяет осознать, что подобные рассуждения — не просто призывы к «правильному» поведению, а действительно описывают навыки, необходимые для работы над крупным проектом, особенно в тех случаях, когда при попытке использовать или модифицировать компонент обнаруживается, что и речи нет об отделении корректных спецификаций от корректной реализации, о корректных соглашениях, о корректном описании обработки исключительных ситуациях.
Эта стратегия подробно представлена в моих работах [9]. Я считаю, что она может стать основой учебного курса. До сих пор, насколько мне известно, реализовывать ее в серьезном масштабе никто не пытался, поэтому это влечет за собой определенный риск и требует очень тщательного планирования, организации и исполнения, но не является недостижимой для инициативных и передовых вузов. И может серьезно изменить качество подготовки студентов.
Студенты-непрограммисты
Помимо обучения собственных студентов факультеты информатики часто предлагают учебные курсы по программному обеспечению студентам, специализирующимся в других дисциплинах, особенно в разных областях инженерии. Преподаватели оказываются между двух огней: нужно ли разрабатывать миникурсы, охватывающие основные принципы самой дисциплины, или стоит предлагать так называемые «вспомогательные курсы», которые точно отвечают текущим требованиям заказчиков, часто сосредотачиваясь на конкретных навыках, языках и инструментах.
Не составляет труда найти аргументы в пользу обеих точек зрения. Что касается первого подхода, то совершенно естественно, что специалисты по компьютерам хотят ограничиваться темами своей собственной дисциплины и попытаться передать некоторые из фундаментальных концепций. Их возмущают попытки коллег из других областей помешать им в этом. Их также обижает акцент на чисто утилитарные навыки, которые принижают интеллектуальный вклад их профессии.
Когда несколько лет назад учебные курсы по программированию были включены в состав программы подготовительных классов французской сети элитных инженерных школ Grandes Ecoles, официальная инструкция призывала преподавателей использовать Паскаль, но останавливаться на введении в рекурсию. Самое интересное в этой инструкции то, что остальной учебный курс посвящен серьезному изучению математики, в том числе достаточному числу таких абстрактных предметов, как топология. Сильные мира сего решили, что рекурсия не нужна, поскольку общество негативно отреагирует, если мы разрешим нескольким 17-летним подросткам одним глазком взглянуть на бесконечность. Они, по-видимому, посчитали, что программисты не опираются на науку, а всего лишь знают несколько трюков.
Однако было бы несправедливо отрицать, что студенты и их будущие работодатели вправе ожидать получения практических навыков.
Решение, вероятно, находится где-то посредине: следует отвечать запросам заказчиков, в то же время, руководствуясь принципам педагогики, изучать и идеи, и практические решения. По мере развития дисциплины и эта задача может стать намного легче. Математики ведь тоже ведут курсы на других факультетах, но они, по-видимому, могут обучать математике так, как они хотят, в то же время учитывая требования рынка.
Участие в фундаментальных исследованиях
Анализируя историю развития ИТ за последние несколько десятилетий, нельзя игнорировать то обстоятельство, что, если большая часть новаторских решений в 60-е и 70-е годы были предложены вузами, то в 80-х и 90-х вклад небольших фирм и исследовательских лабораторий крупных корпораций оказался значительно весомее. Это чрезмерное обобщение, которое лишь подтверждается редкими исключениями, может обидеть некоторых читателей. Было бы, однако, сложно найти среди последних достижений неопровержимые эквиваленты таким широко известным решениям, как Паскаль и Модула-2 Вирта, операционная система THE Дейкстры, взаимодействующие последовательные процессы и мониторы Хоара, созданный в Университете Осло язык Симула. Эти и другие фундаментальные изобретения периода становления компьютерной отрасли доказали, что университеты могут предложить не только прекрасные теории.
Частично причина такого изменения ситуации связана с тем, что планка оказалась слишком высоко поднятой. Компиляторы Вирта завоевали себе громкое имя, но трудно представить компилятор, каким бы новаторским он не был, способный добиться аналогичных результатов сегодня. Университетскому коллективу очень непросто конкурировать с сотнями разработчиков, создающих Visual C++ в корпорации Microsoft, или даже специалистов, занимающихся компилятором GNU GCC.
Все, в том числе и студенты, рассчитывают на то, что компилятор будет поставляться в рамках всеобъемлющей среды разработки со всеми ее атрибутами — визуальным отладчиком, обозревателем, модулем создания графического пользовательского интерфейса и средствами конфигурационного управления. При всей критике в адрес Visual C++ и аналогичных инструментов со стороны академических кругов, которой они, в определенной степени, заслуживают, подобные инструменты предлагают множество ресурсов и функций, устанавливая тем самым высокий стандарт для каждого, кто решится с ними конкурировать. В таком соревновании академическим институтам сейчас трудно оставаться на равных. Так что ученым следует найти другие задачи, в которых они способны оставить заметный след.
Я не претендую на знание всех таких новых областей, но одна кажется мне многообещающей. Речь идет о компонентной разработке и о качестве. Программная отрасль декларирует широкое применение повторно используемых компонентов. Но нет никаких гарантий качества их, нет стандарта, нет правил, нет ведомства, которое занималось бы их сертификацией. Риск столь же велик, как и открывающиеся возможности. Крупный проект может потерпеть неудачу, причем катастрофическим образом, из-за небольшого дефекта в одном из самых незначительных компонентов. Именно это привело к катастрофе во время первого запуска ракеты Ariane 5 — из-за плохо выполненного повторного использования небольшого программного компонента — и задержало реализацию проекта на полтора года, что обошлось европейским налогоплательщикам в 10 млрд. долл. [10].
Качество должно быть прерогативой научных кругов. Эта проблематика открывает огромные возможности. Реализация долговременного проекта, источника диссертаций, статей, сотрудничества и безукоризненной репутации, может иметь важные следствия:
Проект такого рода, хотя, конечно, не уникален среди других проектов в области программной инженерии, в состоянии дать толчок развитию факультетам информатики и поможет им получить безусловное признание на международном уровне, особенно в том случае, если дополнит собой программу обучения, основным приоритетом которой является высокое качество программного обеспечения.
Говоря о «программном обеспечении», следует помнить, что данный термин впервые появился 35 лет назад. С того времени, однако, мы узнали достаточно много, чтобы обучать студентов согласованному набору принципов и методик, не скрывая от них (или от самих себя), как многое еще остается неизвестным.
В статье я попытался соблюсти баланс между теорией и практикой, принципами и методиками, рассуждая о том, каким должен быть учебный курс. Я попытался показать, что не следует жертвовать ни одним из этих аспектов в ущерб другому, и описать сложности, которые стоит преодолевать: создать программу обучения и исследований, которая одновременно достаточно серьезна и напряженна, интересна для студентов, технически современна, имеет крепкие корни в практической области и увлекательна с научной точки зрения.
Литература
1. D.L. Parnas, «Software Engineering Programmes Are Not Computer Science Programmes,» CRL Report 361, Communication Research Laboratory, McMaster Univ., Apr. 1998; to be published in Annals of Software Eng., 2001
2. Information Technology of America, «Major New Study Finds Enormous Demand for IT Workers: Research Pinpoints Hot Jobs and Skills Needed, Offers Insights on Employer Preferred Training Approaches».
3. B.W. Boehm, Software Engineering Economics, Prentice Hall, 1981
4. P.G. Neumann, «Illustrative Risks to the Public in the Use of Computer Systems and Related Technology».
5. D. Tsichritzis, «The Changing Art of Computer Science Research», in Electronic Commerce Objects, D. Tsichritzis, ed., Centre Universitaire d?Informatique, Universite de Geneve, 1998
6. B. Meyer, Introduction to the Theory of Programming Languages, Prentice Hall, 1990
7. C. Mingins et al., «How We Teach Software Engineering», J. Object-Oriented Programming, Feb. 1999
8. B. Cohen, «The Education of the Information Systems Engineer», Electronics & Power, Mar. 1987
9. B. Meyer, Object-Oriented Software Construction, 2nd ed., Prentice Hall, 1997
10. J. Jezequel and B. Meyer, «Design by Contract: The Lessons of Ariane», Computer, Jan. 1997
Бертран Мейер (Bertrand_Meyer@eiffel.com) — директор по технологиям компании Interactive Software Engineering. Среди опубликованных им книг — «Объектно-ориентированное конструирование программного обеспечения» (Object-Oriented Software Construction Prentice Hall, 1997).
Принципы: что знают специалисты по программному обеспечению
Эта проблема уникальна для программного обеспечения, поскольку мы имеем дело с виртуальными, эфемерными величинами. Никто не может спутать настоящий мост с нарисованным или автомобиль с его чертежом. Перейти реку по нарисованному мосту невозможно, впрочем, как и ездить на нарисованной машине. Но в случае программного обеспечения различия далеко не всегда столь очевидны; в отличие от рисунков Магрита, мы постоянно рискуем спутать трубу с ее изображением. Фокусирование на реальных вопросах — необходимое условие становления специалиста по программному обеспечению.
Специалисты по программному обеспечению — лучшие в мире специалисты по созданию хаоса. Мы должны объяснить нашим студентам, что это непреложный факт и показать им, что следует в связи с этим предпринимать.
Поделитесь материалом с коллегами и друзьями


