Чему нужно учить в магистратуре по Computer Science?
Продолжаем рассказывать о нашем опыте построения «самой лучшей магистратуры по Computer Science» =) и интересоваться мнением IT-сообщества. Напомню, что нашей целью было создать магистратуру с сильной программой, в которой не было бы «лишних» курсов. И благодаря сотрудничеству с Академией Современного Программирования и лабораторией математической логики Санкт-Петербургского отделения математического института им. В.А. Стеклова РАН у нас это успешно получилось сделать.
В прошлый раз мы написали о том, как создавалась кафедра и о том, чего нам удалось добиться за 5 лет.
В этом посте мы обсудим, чему нужно учить в магистратуре по Computer Science.
Краткий отчёт за прошедший год
В целом у нас всё хорошо, один курс выпустили,
другой набрали.
… и ответы на некоторые вопросы
В прошлом году мы задавали несколько вопросов.
Как решить проблему с необходимостью читать в магистратуре базовые (бакалаврские) курсы?
Уровень образования везде разный, и к сожалению, не везде высокий. Мы набираем абитуриентов со всей России и СНГ, и поэтому нам приходится в первом семестре читать некоторые базовые курсы, чтобы у всех студентов было достаточно знаний, для понимания курсов магистерского уровня (к примеру, нам приходится читать математическую логику, т.к. без неё сложно понять что-то про функциональное программирование).
Самое разумное, что можно сделать для решения этой проблемы — это открыть собственный бакалавриат. Но это далеко не самое простое решение.
Тем не менее, мы решили пойти по этому пути и открыть свой бакалавриат
Мы также прислушались к вашим советам и стали двигаться в направлении онлайн-курсов.
Подробнее об этом мы напишем в следующий раз.
Какие направления обучения заинтересовали бы вас?
Как и раньше, у нас есть три направления: теоретическая информатика, разработка ПО и алгоритмическая биоинформатика. Увеличивать количество направлений мы не стали, т.к. у нас направление специализации можно выбирать самостоятельно, изменяя список за счёт курсов по выбору.
Чем привлекать сильных студентов?
Мы считали, что сильных студентов можно привлечь
В этом году Санкт-Петербургское отделение математического института РАН, сотрудники которого принимают непосредственное участие в обучении на кафедре, получило мегагрант на создание лаборатории алгоритмов и теории сложности под руководством профессора Ф.В. Фомина (университет г. Берген, Норвегия, список публикаций). Теперь студенты нашей кафедры смогут заниматься наукой под руководством учёных из этой новой лаборатории.
Напомню, что в Академическом университете уже есть лаборатория алгоритмической биологии во главе с профессором Калифорнийского университета Павлом Певзнером (список публикаций), которая так же была создана на мегагрант.
Приглашённые курсы
Ещё один способ привлечь сильных студентов — это уникальные курсы. Для этого мы будем приглашать ведущих учёных из разных стран, чтобы они читали у нас свои курсы, как уже делается в Computer Science клубе.
В связи с этим несколько вопросов. Предположим, что у вас есть возможность позвать кого угодно для чтения курсов в ваш университет.
- Какие (зарубежные) курсы вы бы считали исключительными (т.е. не имеющими аналогов в России)?
- Каких учёных вы бы позвали для чтения курсов? (интересно, сколько раз в комментариях упомянут Кнута =))
- Вот примерный список наших курсов в магистратуре (курсы по всем трём направлениям за исключением семинаров, молекулярной биологии и иностранных языков):
Математические дисциплины:
- Алгебраические структуры
- Алгоритмы и структуры данных
- Вычислительная геометрия
- Дискретная математика
- Комбинаторика
- Конструктивная криптография
- Математическая логика
- Машинное обучение
- Сложностная криптография
- Структурная теория сложности
- Теория графов
- Теория формальных языков
Прикладные дисциплины:
- Базы данных
- Введение в Unix
- Виртуализация и виртуальные машины
- Высокопроизводительные и параллельные вычисления
- Компьютерная графика
- Компьютерное зрение
- Методы формальной верификации программ
- Обобщенное и генеративное программирование
- Операционные системы
- Основы Software Engineering
- Обработка большого объёма данных
- Программирование в ядре Linux
- Программирование в ядре Windows
- Проектирование ПО
- Разработка интерактивных интерфейсов
- Разработка языковых процессоров
- Сетевые технологии
- Тестирование ПО
- Функциональное программирование
Языки программирования:
- Программирование на языке C++
- Программирование на языке Java
- Скриптовые языки
- Языки на основе JVM
Каких курсов тут не хватает? Может быть какие-то курсы лишние?
(Мы уже ведём разговоры с несколькими учёными, которые приедут читать курсы этой осенью, но было бы интересно узнать мнение IT-сообщества.)
Спасибо за внимание! Будем рады услышать ваши комментарии.