• A
  • A
  • A
  • АБВ
  • АБВ
  • АБВ
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта

Содержание программы

1 год

1 год
1 2 3 4

Программирование на GPU

Архитектура графических процессоров серьёзно отличается от центрального процессора. За счёт этого некоторые алгоритмы могут работать на GPU существенно быстрее. Курс разбирает особенности архитектур графических процессоров, основные принципы массового параллелизма, использование стандарта OpenCL для программирования графических процессоров, а также базовые техники оптимизации программ на GPU. На практике предлагается реализовать несколько алгоритмов, которые будут выполняться существенно быстрее аналогов на CPU.

Blockchain

Технология blockchain позволяет создавать распределённые базы данных без доверия между узлами системы. Курс разбирает основные принципы blockchain и криптовалют Bitcoin и Ethereum. Основное внимание уделено "смарт-контрактам" в Ehtereum, позволяющим формально описывать отношения между участниками. Разбирается виртуальная машина Ethereum, язык Solidity, основные ошибки при создании смарт-контрактов и их применении в реальной жизни.

Эффективное программирование на C++

Основной фокус курса — эффективное использование языка C++ и инструментов вокруг него для разработки программных систем. Курс нацелен на студентов, уже уверенно владеющих С++11. Рассматриваются возможности последнего стандарта C++20 (модули, концепты и другие), идиомы для логирования и обработки ошибок, полезные сторонние библиотеки вроде Boost, сложности при сборке приложений с использованием C++ под разные ОС и как их решать, взаимодействие между C++ и другими языками.

Rust

Rust — современный мультипарадигмальный язык, рассчитанный на области, схожие с C++: системное программирование и высокопроизводительные приложения. Интересно сочетает в себе идеи функционального программирования и полуавтоматического управления памятью. Курс рассматривает все основные концепции и идиомы Rust, а также закрепляет их на практике.

Программирование параллельных систем

Почти любое современное приложение в том или ином виде сталкивается с параллелизмом, конкуретностью или многопоточностью. Этот курс концентрируется на теоретических обоснованиях систем с общей памятью (вроде потоков внутри одного процесса): вводятся необходимые модели и формализмы, с нуля строятся и обосновываются примитивы синхронизации. На практиках предлагается реализовать рассказанные алгоритмы и самостоятельно убедиться в нетривиальности корректного параллельного программирования.

Программирование распределённых систем

При программировании распределённых приложений (например, в веб) возникают сложности, не встречающиеся при обычном программировании: отсутствует строгое понятие "времени", возможны скрытые отказы частей приложения, языки программирования хуже ловят ошибки и гораздо сложнее доказывать корректность алгоритмов. Курс разбирает математические основы создания и проектирования распределённых систем, а также популярные технологические решения задач, возникающих на практике.

Алгебра-3

Этот адаптационный курс напоминает основные результаты линейной, абстрактной алгебры и алгебры многочленов. Также курс вводит и детально рассматривает конечные поля; не только математические результаты, но и технические подробности написания программ, работающих в конечных полях. Вся теория курса подкрепляется практикой и дальше используются в курсе "Теория кодирования".

Теория кодирования

При передаче данных могут возникать ошибки на физическом уровне. Теория кодирования позволяет создать алгоритмы для выявления и исправления ошибок, что активно применяется в сетевом оборудовании. Курс знакомит слушателей с основными определениями и результатами теории кодирования, а также основными семействами кодов (Хэмминга, БЧХ, Рида-Соломона). Внимание уделяется не только математическим обоснованиям, но и эффективной реализации кода в программе или "в железе".

Теория игр

Теория игр - раздел математики, изучающий ситуации, где сталкиваются интересы нескольких "игроков". Это включает как игры в бытовом понимании, так и более необычные применения вроде выставления оценок на экзамене или сложных переговоров. Курс рассказывает об основных способах формального задания игр, классических результатах, парадоксах и способах поиска оптимальных стратегий.

Основы информационной безопасности

Этот вводный курс рассказывает об основных способах защиты информации и различных видах угроз: физическое повреждение носителей, шифрование данных, некорректная настройка сети, флуд. Полученные знания закрепляются на практикуме, где студентам предлагается самостоятельно проверить защищённость учебного стенда или защитить его от атаки.

Reverse engineering

Курс посвящён обратной разработке без исходного кода -- это исследование скомпилированной программы с целью понять её логику. Изучаются основные инструменты статического и динамического анализа приложений для x86. В качестве практических заданий предлагается подобрать “флаги” к специально созданным примерам.

Компьютерная графика

Синтез изображений в реальном времени (Real-Time Rendering) - ключевая область компьютерной графики. Технологии синтеза изображений используются в системах виртуальной реальности и являются неотъемлемой частью подавляющего большинства тренажерных и игровых проектов. В рамка курса будут рассмотрены базовые элементы области синтеза изображений: основы фотометрии и радиометрии, модели освещения, преобразование проекций, визуализация отражений и теней. Курс имеет практический уклон и предполагает реализацию курсовых работа на основе OpenGL.

Game development

Компьютерные игры выставляют специфичные требования к программированию: надо максимально эффективно использовать ресурсы одного компьютера, есть огромное количество важных внешних ресурсов (спрайты, модели, звуки, игровая логика), а также сложные и порой противоречивые требования к логике программы. Мобильные и многопользовательские игры добавляют ещё больше ограничений. Этот курс знакомит студентов с особенностями разработки игр и основными технологиями, которые для этого нужны.

Процесс командной разработки ПО

В этом курсе подробно рассматриваются и сравниваются стандартные способы построения процесса командной разработки программного обеспечения. Для создания хорошего продукта может быть недостаточно хороших специалистов энтузиазма, хорошо построенный процесс позволяет повысить эффективность команды в целом. Чтобы участвовать в уже построенных процессах было удобно, полезно понимать, как они устроены и что ожидается от каждого члена команды в том или ином способе организации команды.
 

Управление разработкой ПО

Разработка программного обеспечения — сложный процесс, требующий координации множества людей, планирования, оценки и управления рисками. Курс рассказывает основы построения управления разработкой, включая традиционную и гибкую модели, организацию коммуникаций, базовые задачи менеджеров. Также упоминаются бизнес-модели, управление рисками, роль лидера в ИТ-организациях и самоорганизация.

Психология команды

В этом курсе будут рассмотрены различные закономерности и процессы, часто возникающие в командах из нескольких человек. Оказывается, что многие проблемы, кажущиеся уникальной комбинацией сокомандников, на самом деле давно изучены и понятны. Вдумчивое участие в жизни команды позволяет снизить влияние или даже полностью избавиться от некоторых неприятных моментов.

2 год

2 год
1 2 3 4

Архитектура программных систем

 

Автоматизация процессов разработки

 

Программная инженерия больших данных

 

Функциональное программирование-2

 

Clojure

 

Асинхронное программирование

 

Elixir

 

Веб-программирование

 

Программирование на .NET