--- content_type: course title: Введение в научное программирование на языке Kotlin shortTitle: Научное программирование parent: education path: /pages/kotlin slug: /ru/pages/kotlin published: true language: ru --- [Форма регистрации 2021](https://forms.gle/KfU6ZNo7DwYeLWdCA) Запись лекций 2019 года доступна [тут](https://www.youtube.com/playlist?list=PL4_hYwCyhAvZzRpbK4iTy9S6_OWZNEiVk). ## Цель курса По мере развития физики (и науки вообще), компьютерные методы с каждым годом занимают все большее важное место в повседневной работе ученого. При проведении эксперимента компьютерные методы и инструменты используются на всех стадия работы: планировании эксперимента, подготовке установке, сборе данных, их обработке и публикации. В такой ситуации оказывается, что качество используемых программ начинает играть важную роль. Кроме того, возникает потребность в специалистах, которые разбираются и в науке и в программировании и занимаются разработкой и совершенствованием программных инструментов. Большинство студентов (и ученых) в той или иной мере знакомы с базовым инструментарием программиста, например с написанием простейших программ на языке Python. Для серьезной научной разработки этого не достаточно, поэтому курс нацелен на более продвинутое понимание аппаратной базы, структуры программы и современных инструментов разработки. В качестве основного будет использовать язык программирования `Kotlin`, появившийся совсем недавно и успевший завоевать большую долю рынка. Kotlin обладает рядом существенных преимуществ в качестве начального языка для продвинутого научного программирования: * Строгая типизация, четко построенная система типов. * Высокая производительность. * Автоматическое управление памятью. * Полная совместимость с огромным количеством библиотек на Java. * Лучший инструментарий. * Обширное сообщество. * Возможность коммерческого применения. ## Лектора [Александр Нозик](https://www.researchgate.net/profile/Alexander_Nozik) - физик-экспериментатор, специалист по анализу данных в физическом эксперименте и научному программному обеспечению. Старший научный сотрудник ИЯИ РАН, заместитель заведующего лабораторией методов ядерно-физических экспериментов МФТИ. Руководитель направляения в [JetBrains Research](https://research.jetbrains.org/groups/npm/). [Андрей Щеглов](https://www.linkedin.com/in/andreyshcheglov/?locale=ru_RU) - старшый инженер по разработке в компании JetBrains ## Формат курса C 2020 года курс проходит при участии JetBrains и при поддержке JetBrains Research. Наиболее активные студенты получат возможность участвовать в летних стажировках в JetBrains. Также для студентов старших курсов есть возможность проходить НИР в Лаборатории методов ядерно-физических экспериментов МФТИ (участник JetBrains Research) и в московском офисе JetBrains. В этом курсе мы будем учиться работать на языке Котлин и применять его для решения научных задач. Сделаем упор на практические аспекты и примеры, так что для его понимания не нужны никакие дополнительные знания. Для практических примеров будет использоваться среда разработки [IntelliJ IDEA Community Edition](https://www.jetbrains.com/idea/). Обсуждение всех вопросов, связанных с курсом, будет происходить в телеграм группах [@mipt-npm](https://t.me/mipt_npm) (научная составляющая) и [Kotlin на физтехе](https://t.me/joinchat/EpV1201A_i0rTOCxHHnxXQ) (вопросы, касающиеся языка 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. Поточная обработка данных. ## Отчетность Зачет проходит в форме презентации по материалам индивидуального проекта. Также предусмотрена промеждуточная отчетность в виде сдачи заданий. ## Рекомендуемая литература * [Официальная документация на английском языке](https://kotlinlang.org/docs/reference/) * [Перевод на русский](https://kotlinlang.ru/) * [Kotlin в действии](https://dmkpress.com/catalog/computer/programming/java/978-5-97060-497-7/)