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

По четвергам, в 17.05 в 432ГК. Первое занятие 20 февраля.

Запись лекций 2019 года доступна тут.

Цель курса

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

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

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

  • Строгая типизация, четко построенная система типов.
  • Высокая производительность.
  • Автоматическое управление памятью.
  • Полная совместимость с огромным количеством библиотек на Java.
  • Лучший инструментарий.
  • Обширное сообщество.
  • Возможность коммерческого применения.

Лектор

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

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

Формат курса

В 2020 году курс проходит при участии JetBrains и при поддержке JetBrains Research. Наиболее активные студенты получат возможность участвовать в летних стажировках в JetBrains. Также для студентов старших курсов есть возможность проходить НИР в Лаборатории методов ядерно-физических экспериментов МФТИ (участник JetBrains Research) и в московском офисе JetBrains.

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

Обсуждение всех вопросов, связанных с курсом, будет происходить в телеграм группах @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. Поточная обработка данных.

Отчетность

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

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