Введение в научное программирование на языке Kotlin

По субботам, в 17.05 в 432ГК. Первое занятие 16 февраля.

Цель курса

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

Большинство студентов (и ученых) в той или иной мере знакомы с базовым инструментарием программиста, например с написанием простейших программ на языке Python. Для серьезной научной разработки этого не достаточно, поэтому курс нацелен на более продвинутое понимание аппаратной базы, структуры программы и современных инструментов разработки.

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

Лектор

Александр Нозик - физик-экспериментатор, специалист по анализу данных в физическом эксперименте и научному программному обеспечению. Старший научный сотрудник ИЯИ РАН, заместитель заведующего лабораторией методов ядерно-физических экспериментов МФТИ.

Опыт разработки научного программного обеспечения (главным образом на Java) - 8 лет. Опыт работы на Kotlin - больше двух лет.

Формат курса

В 2019 году курс читается в первый раз, так что порядок изложения и местами содержание будет меняться по ходу. Какие-то пункты содержания могут быть раскрыты более подробно, на какие-то не хватит времени. Также порядок изложения не будет прямо соответствовать порядку в содержании. В этом курсе мы сделаем упор на практические аспекты и примеры, так что для его понимания не нужны никакие дополнительные знания. Для практических примеров будет использоваться среда разработки IntelliJ IDEA Community edition.

Курс будет читаться со второй половины февраля (дата уточняется) в МФТИ (аудитория уточняется) по субботам в 17.05 приблизительно до конца апреля. Трансляция на данный момент не предусмотрена (если только ни у кого нет желания помочь с ее организацией).

Обсуждение всех вопросов, связанных с курсом будет происходить в телеграм группах @mipt-npm (научная составляющая) и Kotlin на физтехе (вопросы, касающиеся языка Kotlin). Для получения своевременной информации можно подписаться на рассылку.

Всем желающим участвовать желательно заполнить форму.

Содержание курса

  1. От жесткого к мягкому
    1. Программа как набор инструкций. Эволюция программ.
    2. Структура памяти. Segmentation fault.
    3. Парадигмы программирования. Генеалогия языков.
    4. Виртуальные машины, байт-код.
    5. Компиляция и оптимизации.
    6. Статическая и динамическая линковка. Библиотеки.
    7. Структура программы. Точки входа.
  2. Инструменты современного программиста
    1. Системы автоматической сборки.
    2. Системы контроля версий.
    3. Интегрированные среды разработки.
  3. Язык Kotlin
    1. Переменные, классы и объекты.
    2. Control flow. Процедурный и функциональный подход.
    3. Замыкания.
    4. Структуры данных и операции над ними.
    5. Свойства и делегаты.
    6. Параметрические типы.
    7. Расширения.
    8. Боксинг.
    9. Мультиплатформные проекты
  4. Архитектура программы
    1. Абстракции и интерфейсы.
    2. Основы коллективной разработки при помощи современных инструментов.
    3. Идеология объектного программирования. Разделение поведений.
    4. Идеология функционального программирования.
  5. Научное программирование
    1. Основы численных методов. Понятие о численной точности. Сложность алгоритмов.
    2. Численное дифференцирование и интегрирование.
    3. Генераторы случайных чисел и Монте-Карло моделирование.
    4. Высокопроизводительные параллельные и конкурентные вычисления.
    5. Проблема ввода-вывода и основные методы ее решения.
    6. Системы сбора данных. Протоколы обмена данными.
    7. Основы работы с большими данными.
    8. Поточная обработка данных.

Отчетность

Зачет проходит в форме презентации по материалам индивидуального проекта.

Рекомендуемая литература