Введение в научное программирование на языке 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).
Всем желающим участвовать желательно заполнить форму.
Содержание курса
-
От жесткого к мягкому
- Программа как набор инструкций. Эволюция программ.
- Структура памяти. Segmentation fault.
- Парадигмы программирования. Генеалогия языков.
- Виртуальные машины, байт-код.
- Компиляция и оптимизации.
- Статическая и динамическая линковка. Библиотеки.
- Структура программы. Точки входа.
-
Инструменты современного программиста
- Системы автоматической сборки.
- Системы контроля версий.
- Интегрированные среды разработки.
-
Язык Kotlin
- Переменные, классы и объекты.
- Control flow. Процедурный и функциональный подход.
- Замыкания.
- Структуры данных и операции над ними.
- Свойства и делегаты.
- Параметрические типы.
- Расширения.
- Боксинг.
- Мультиплатформные проекты
-
Архитектура программы
- Абстракции и интерфейсы.
- Основы коллективной разработки при помощи современных инструментов.
- Идеология объектного программирования. Разделение поведений.
- Идеология функционального программирования.
-
Научное программирование
- Основы численных методов. Понятие о численной точности. Сложность алгоритмов.
- Численное дифференцирование и интегрирование.
- Генераторы случайных чисел и Монте-Карло моделирование.
- Высокопроизводительные параллельные и конкурентные вычисления.
- Проблема ввода-вывода и основные методы ее решения.
- Системы сбора данных. Протоколы обмена данными.
- Основы работы с большими данными.
- Поточная обработка данных.
Отчетность
Зачет проходит в форме презентации по материалам индивидуального проекта. Также предусмотрена промеждуточная отчетность в виде сдачи заданий.