Учебный план

Поступайте на КТ, потому что больше вас нигде этому всему не научат. А чему именно — вы узнаете на этой странице.
Математический анализ
1−4 семестр
Математике на кафедре уделяется большое внимание, потому что у хорошего специалиста должен быть сильный математический аппарат.
Этот фундаментальный курс читают преподаватели с большим стажем: например, доцент нашего факультета и медалист международной олимпиады школьников по математике Константин Петрович Кохась и профессор Олег Леонидович Виноградов.
Линейная алгебра
1−2 семестр
Линейная алгебра является одним из основополагающих предметов для всей высшей математики — в течении всего обучения в университете вам придётся вспоминать различные её области. Вас научат работать с матрицами, тензорами, комплексными числами и использовать продвинутые вычислительные техники для ускорения операций над этими объектами. Темы, изученные на этом курсе, встретятся как в теоретических курсах, таких как математический анализ и теория вероятности, так и в прикладных, например, в машинном обучении и в различных оптимизациях из курса алгоритмов и структур данных.
Дифференциальные уравнения
3 семестр
Дифференциальные уравнения необходимы при описании динамических систем, к примеру модель «хищник-жертва»: в лесу живут волки и зайцы, чем больше волков, тем меньше зайцев, а чем меньше зайцев, тем меньше волков. Этот курс, сложный, но интересный, позволит вам ознакомиться с одной из передовых и востребованных областей математики.
Теория вероятности и математическая статистика
4−5 семестр
Теория вероятностей и математическая статистика используются для решения широкого класса задач: от прогнозирования курсов валют до построения моделей в машинном обучении. Эти дисциплины изучают закономерности случайных событий и величин, операции над ними и законы, которые их описывают.
Методы оптимизации
4 семестр
Большая часть задач машинного обучения — задачи минимизации и максимизации. Например, одна из базовых задач — найти локальный минимум унимодальной функции. Этот курс посвящен основным методам решения таких задач. В рамках дисциплины рассматриваются такие методы, как градиентный спуск и симплекс-метод — последний используется для решения задачи линейного программирования в теории игр.
Теория игр
8 семестр
Этот раздел математики формализует игровые стратегии, в нём рассматриваются экономические и комбинаторные игры. Экономические игры, в которых участники ходят одновременно, анализируются с помощью различных методов оптимизации. Комбинаторные игры, в которых участники ходят по очереди, порождают масштабную теорию, связанную с дискретной математикой, алгеброй и математической логикой.
Дискретная математика
1−4 семестр
Дискретная математика является теоретической основой компьютерных наук. Она изучает такие полезные каждому программисту структуры как графы, булевы функции и матроиды. Вы узнаете что такое машина Тьюринга на самом деле, как эффективно сжимать данные и почему нельзя распарсить HTML-страницу регулярными выражениями.
Алгоритмы и структуры данных
1−4 семестр
Вы наверняка замечали, что некоторые программы работают не очень быстро (говоря профессиональным языком, "тормозят"). Часто это бывает связано с тем, что в программе используются неэффективные алгоритмы и структуры данных. В рамках этого курса вы научитесь узнавать, быстро будет работать ваша программа или нет, как хранить данные так, чтобы можно было быстро найти нужное значение, как умножать числа быстрее, чем школьным методом в столбик, как найти пару ближайших точек на плоскости, не проверяя при этом все пары точек, как оптимально собирать рюкзак в дорогу (на самом деле нет, но почти).
Математическая логика
4 семестр
На этом курсе вы узнаете, что даже очевидные на первый взгляд утверждения на самом деле не так уж и очевидны: например, вас научат доказывать, что 2 + 2 = 4. Также вы познакомитесь с различными подходами формализации естественного языка доказательств и поймёте, что общего имеют строгие теоретические выкладки с системой типизации в современных языках программирования.
Методы трансляции
5 семестр
Этот небольшой теоретический курс посвящен теории парсеров. Вы узнаете чем парсер отличается от лексера, какие бывают грамматики и почему так сложно написать хорошую IDE для C++. А также познакомитесь с инструментами автоматической генерации парсеров по грамматике и даже напишете свой собственный.
Параллельное программирование
5 семестр
Этот курс охватывает теоретические аспекты реализации многопоточных систем — целый раздел Computer Science. На лекциях изучается Java Memory Model, задача нахождения консенсуса, способы распараллелить известные структуры данных — списки, очереди, хэш-таблицы. Рассматриваются способы правильной реализации многопоточных алгоритмов и основные допускаемые ошибки.
Функциональное программирование
5 семестр
Вы узнаете, не только что такое монада, но и что такое комонада, а также научитесь писать код без глобального состояния, работать с бесконечными списками и поймёте, что данная парадигма повсеместно используется в реальных проектах. Всё это будут рассказывать, показывать и вести преподаватели кафедры, которые не только работают с языком Haskell, но и участвуют в разработке самого популярного компилятора для этого языка — GHC.
Анализ данных
5 семестр
Анализ данных — это область математики и информатики, занимающаяся построением математических методов и алгоритмов для исследования, фильтрации и моделирования различных данных, а также получения из них полезных результатов, которые могут быть использованы для принятия решений в научной работе или бизнесе. Основная особенность используемых в анализе данных методов и алгоритмов заключается в том, что они не имеют четко зафиксированного ответа на каждый исходный датасет, что и отличает их от классических алгоритмов, изучаемых на других курсах.
Компьютерная алгебра
5 семестр    •     предмет по выбору
В рамках этой дисциплины рассматриваются получисленные алгоритмы, используемые в криптографии, теории кодирования и вычислительной математике. Курс понравится всем, кто любит дискретную математику и алгебру, и интересуется принципами работы аналитических решателей математических задач — таких, как WolframAlpha.
Теория типов
5 семестр    •     предмет по выбору
Во всех компилируемых языках программирования существует статическая проверка типов, которая помогает отлавливать некоторые ошибки еще до запуска программы. В рамках этого курса вы узнаете, как работают вывод и проверка типов в языках программирования. Вы перестанете бояться слов «Лямбда-исчисление» и узнаете, как работают ленивые вычисления в языке Haskell.
Сложная и богатая система типов позволяет не только избежать нетривиальных багов, но и доказывать целые математические теоремы. В практической части курса предлагается самостоятельно написать доказательства на языках Coq, Agda, Arend.
Машинное обучение
6 семестр
Это необычный курс машинного обучения: здесь вы узнаете не только как писать fit и predict, но и узнаете как и почему на самом деле работают различные алгоритмы машинного обучения. Вы познакомитесь с нюансами реализации этих алгоритмов и напишете их сами, рассмотрите различные задачи машинного обучения, научитесь находить решения и оценивать их эффективность, а также обрабатывать результаты.
Распределенное программирование
6 семестр    •     предмет по выбору
Распределённые системы в нашем мире встречаются повсюду. Включите браузер, зайдите на любой крупный сайт — и вы приведёте в движение сложную конструкцию, состоящую из баз данных, кэшей, вычислительных узлов, балансировщиков нагрузки и многих других устройств и технологий, обеспечивающих функционирование интернета. Все они формируют распределённую систему, так как работают параллельно и взаимодействуют друг с другом с помощью посылки сообщений.
Курс учит разрабатывать распределённые системы, начиная с теоретических азов и простейших алгоритмов и заканчивая анализом и пониманием принципов работы сложных современных распределённых систем.
Теория сложности
6 семестр    •     предмет по выбору
Почему так сложно доказать, равны P и NP или нет? Теория сложности поможет вам ответить на этот и другие вопросы. На этом курсе вы узнаете, что существуют и другие сложностные классы, познакомитесь с открытыми проблемами в области и поймете, как сводить одни задачи к другим.
Биоинформатика
6 семестр    •     предмет по выбору
Вы узнаете, чем ген отличается от генома, как ученые получают последовательность ДНК из образцов биоматериала, какую информацию можно узнать из своей ДНК и, главное, как знание алгоритмов и структур данных помогает ученым в решении задач, возникающих в современной биологии. Лекции читают ведущие научные сотрудники лабораторий ИТМО, СПбГУ и Института Биоинформатики.
Эволюционные вычисления
6 семестр    •     предмет по выбору
Для большинства интересных и практически полезных задач нельзя найти оптимальное решение за разумное время. Область научных исследований, в которой занимаются решением таких сложных задач с помощью алгоритмов, вдохновленных теорией эволюции, называется эволюционными вычислениями. Сначала генерируется набор случайных решений — «особей». Они могут быть очень далеки от оптимальных. Затем запускается процесс эволюции: в решения вносятся небольшие случайные изменения (мутации), некоторые решения скрещиваются между собой и порождают «потомков». Из получившихся решений в новое поколение отбираются наиболее приспособленные, и процесс повторяется.
Криптография
6 семестр    •     предмет по выбору
Вы познакомитесь с основами криптографии, а также со свежими результатами в этой полезной и интересной области. На лекциях вам расскажут про схемы симметричного и антисимметричного шифрования и их стойкость, про хеш-функции с соответствующими структурами данных, а также про методы работы блокчейна. На практиках вам придётся сломать шифр, написать несколько криптографических структур данных, а также изучить последние результаты в криптографии и разные забавные вещи, например, взлом машин Тесла.
Теория информации
7 семестр
При передаче данных по каналам связи возникают помехи — этот курс посвящён тому, как с ними справляться и эффективно передавать данные в реальном мире. Для полноценного понимания этого курса вам понадобится применять знания из различных математических дисциплин: теории вероятности, математического анализа, дискретной математики и линейной алгебры. Вы изучите основные конструкции, которые используются для кодирования информации в разных сферах жизни — от оптических дисков и космических спутников до современных стандартов мобильной связи стандарта 5G.
Архитектура ЭВМ
1 семестр
Этот курс заставит усомниться в своих знаниях даже экспертов внутреннего устройства компьютеров. Вам предстоит глубоко погрузиться в железо и изучить, как работают компоненты современного компьютера, как процессоры оптимизируют исполнение кода и к чему могут привести подобные оптимизации.
Программирование
1−2 семестр
На этом курсе те, кто раньше не занимался программированием, впервые с ним познакомятся, а все остальные научатся писать чистый и лаконичный код. Основы программирования рассказываются на языке Java. В рамках курса вам предстоит выполнить много домашних заданий, каждое из которых проходит тщательный code review.
Во втором семестре обзорно рассматриваются различные парадигмы программирования. Вы реализуете несложные приложения на разных языках — сначала на объектно-ориентированной Java, потом на JavaScript, и наконец на функциональном Clojure. Курс завершается изучением декларативной парадигмы на примере языка Prolog.
Основы C++
2 семестр
На этом курсе вы осознаете, что совершенно не умеете писать на C++, даже если последние пять лет писали на них олимпиады по программированию. В первой половине семестра рассматриваются особенности железа и операционных систем, существенные для системного программиста. Вторая половина посвящена знакомству с языком C++: базовым конструкциям, шаблонам, наследованию. За время прохождения курса вы научитесь писать простые программы на ассемблере и C++ и глубоко вникнете в суть неасимптотических оптимизаций.
Современный C++
3/5/7 семестр    •     предмет по выбору
В продолжении курса по C++ рассматриваются современные концепции и техники языка. Начиная с умных указателей и move-семантики (С++11) и заканчивая возможностями С++20, некоторые из которых ещё даже не поддержаны во всех компиляторах. Поговорим не только о возможностях языка, но и об общих подходах к разработке: про type erasure и переменные произвольного типа (std:any), про интрузивность и написание компактных мультииндексных структур. Курс заканчивается лекциями про многопоточность и её спецификой в С++.
Android
3/5/7 семестр    •     предмет по выбору
Начнём с того, как собрать мобильное приложения на Java или Kotlin, запустим эмулятор и adb. Разберемся с мобильной вёрсткой, научимся создавать apk и разберемся, почему в разработке под Android никуда без многопоточности. Познакомимся с сетью, базами данных, API и напишем тесты.
iOS
3/5/7 семестр    •     предмет по выбору
Разберемся во всём от Xcode до публикации в App Store. Под капотом: особенности Swift, мобильный UI, views, контроллеры. Изучим стандартную библиотеку Swift, навигацию в приложении и жизненный цикл приложения. Научимся получать данные по сети и хранить их на девайсе. Поработаем с инструментами для отслеживания ошибок в опубликованных приложениях.
Web
3/5/7 семестр    •     предмет по выбору
Курс web-программирования построен в формате обзора технологий, применяемых в построении современных интернет-приложений. В рамках курса предлагается не только изучить в теории, но и опробовать на практике различные элементы построения современного интернета, из которых по итогам курса студентами будет создано полноценное web-приложение, отвечающее современным стандартам индустрии. Отличительная особенность курса в том, что после каждого занятия создаваемое приложение будет улучшаться в том же порядке, в каком развивался интернет, создавая ретроспективное представление об устройстве веба.
Операционные системы
3 семестр
На этой дисциплине рассказывают, какие принципы используются при проектировании и разработке операционных систем и как устроены их основные компоненты — аллокаторы памяти, файловые системы, планировщики процессов.
Java Advanced
4 семестр
Изучив основы языка Java и познакомившись с его базовой функциональностью на первом курсе, студенты переходят к рассмотрению более продвинутых возможностей языка, напрямую использующихся в настоящих, «боевых» проектах в индустрии.
На этом курсе вы освоите инструменты многопоточности, предлагаемые Java, напишите высокопроизводительные сервер и клиент, усвоите тонкости локализации приложений, научитесь тестировать свои приложения и разберётесь в таких продвинутых темах, как Stream API и Remote Method Invocation. Кроме того, пристальный надзор и помощь преподавателей практики во время код-ревью научат вас писать более чистый, аккуратный и читаемый код.
Фронтенд
5/7 семестр    •     предмет по выбору
Курс от Яндекса, на котором рассказывают основы фронтенд-разработки. Состоит из двух частей: в одной показываются основы вёрстки и разработки пользовательских интерфейсов (HTML, CSS, UX/UI), в другой — изучают основные языки веб-разработки — JavaScript и TypeScript.
Проектирование ПО
7−8 семестр
На этом предмете изучаются основные паттерны промышленного программирования. В осеннем семестре изучаются более простые паттерны: Builder, Scanner, Iterator, а также некоторые полезные концепции, например TDD и AOP. В весеннем семестре рассматриваются принципы построения системы в целом: акторы, реактивное программирование, Event Sourcing и CQRS. Каждая изученная тема сопровождается домашним заданием.
Базы данных
7 семестр
В рамках данного курса вы узнаете, как работают современные реляционные базы данных, а также познакомитесь с их математической подоплекой — реляционной алгеброй. Ещё вы научитесь писать оптимальные запросы и узнаете, как различные системы управления базами данных их исполняют.
Английский язык
1−6 семестр
Все студенты изучают английский язык. Обучение происходит не в обычных учебных группах: перед началом курса вы пройдёте тестирование на знание языка и попадёте в группу соответствующую вашему уровню по кембриджской системе — от A2 (Pre-Intermediate) до C1 (Advanced).
Первые два года вы будете изучать General English. В некоторых продвинутых группах занятия ведут носители языка. Третий курс посвящён английскому в IT — вас научат писать резюме и проходить собеседования, презентовать свои проекты и общаться с коллегами на английском языке.
Также при желании вы можете изучить шведский или немецкий язык, выбрав двухлетние факультативы.
Физическая культура
1−7 семестр
Физкультура — обязательный для всех российских ВУЗов предмет. В университете ИТМО есть огромное количество различных спортивных секций: здесь для каждого найдётся какой-нибудь вид спорта по вкусу — от всем знакомых футбола и тенниса до фехтования и алтимат-фрисби. Для тех же, кто далёк от мира физических нагрузок, или, возможно, просто не хочет тратить на физкультуру своё драгоценное время, есть секции по шахматам и шашкам специально для студентов нашей кафедры.
Безопасность жизнедеятельности
3 семестр
Эта дисциплина о том, как взаимодействовать с вещами и процессами, которые нас окружают. От банковских карт и кредитов до тонкостей законодательства, от здорового питания до эко-френдли жизни, от психологического здоровья до самообороны.
История
3 семестр
В рамках этого обязательного курса вы сможете выбрать один из треков, который вам наиболее интересен: от общей истории России до подробного знакомства с социально-экономическими процессами Европы XX века или истории науки и техники.
Философия
6 семестр
Вы узнаете что такое философия и как она может пригодиться в повседневной жизни, изучите историю становления дискурса научности и поймете, почему на самом деле разница между британскими учеными и богами греческой мифологии не так велика, как кажется на первый взгляд.
Предпринимательская культура
6 семестр
Этот предмет поможет вам сформировать понимание того, как правильно управлять проектами в различных сферах, какие инструменты и методы существуют для этого, а также как взаимодействовать с коллегами, командой, внешними и внутренними заинтересованными сторонами.