site/src/content/ru/pages/kotlin.md

101 lines
8.8 KiB
Markdown
Raw Normal View History

---
2021-03-28 21:32:20 +03:00
content_type: course
title: Введение в научное программирование на языке Kotlin
shortTitle: Научное программирование
parent: education
path: /pages/kotlin
slug: /ru/pages/kotlin
published: true
language: ru
---
2021-02-05 13:41:12 +03:00
[Форма регистрации 2021](https://forms.gle/KfU6ZNo7DwYeLWdCA)
Запись лекций 2019 года доступна [тут](https://www.youtube.com/playlist?list=PL4_hYwCyhAvZzRpbK4iTy9S6_OWZNEiVk).
## Цель курса
По мере развития физики (и науки вообще), компьютерные методы с каждым годом занимают все большее важное место в повседневной работе ученого. При проведении эксперимента компьютерные методы и инструменты используются на всех стадия работы: планировании эксперимента, подготовке установке, сборе данных, их обработке и публикации. В такой ситуации оказывается, что качество используемых программ начинает играть важную роль. Кроме того, возникает потребность в специалистах, которые разбираются и в науке и в программировании и занимаются разработкой и совершенствованием программных инструментов.
Большинство студентов (и ученых) в той или иной мере знакомы с базовым инструментарием программиста, например с написанием простейших программ на языке Python. Для серьезной научной разработки этого не достаточно, поэтому курс нацелен на более продвинутое понимание аппаратной базы, структуры программы и современных инструментов разработки.
В качестве основного будет использовать язык программирования `Kotlin`, появившийся совсем недавно и успевший завоевать большую долю рынка. Kotlin обладает рядом существенных преимуществ в качестве начального языка для продвинутого научного программирования:
* Строгая типизация, четко построенная система типов.
* Высокая производительность.
* Автоматическое управление памятью.
* Полная совместимость с огромным количеством библиотек на Java.
* Лучший инструментарий.
* Обширное сообщество.
* Возможность коммерческого применения.
2021-02-05 11:13:04 +03:00
## Лектора
[Александр Нозик](https://www.researchgate.net/profile/Alexander_Nozik) - физик-экспериментатор, специалист по анализу данных в
физическом эксперименте и научному программному обеспечению. Старший научный сотрудник ИЯИ РАН, заместитель заведующего
2021-02-05 11:13:04 +03:00
лабораторией методов ядерно-физических экспериментов МФТИ. Руководитель направляения в [JetBrains Research](https://research.jetbrains.org/groups/npm/).
[Андрей Щеглов](https://www.linkedin.com/in/andreyshcheglov/?locale=ru_RU) - старшый инженер по разработке в компании JetBrains
## Формат курса
2021-02-05 13:41:12 +03:00
C 2020 года курс проходит при участии JetBrains и при поддержке JetBrains Research. Наиболее активные студенты получат возможность участвовать в летних стажировках в JetBrains.
2021-02-05 11:13:04 +03:00
Также для студентов старших курсов есть возможность проходить НИР в Лаборатории методов ядерно-физических экспериментов МФТИ (участник JetBrains Research) и в московском офисе JetBrains.
2021-02-05 11:13:04 +03:00
В этом курсе мы будем учиться работать на языке Котлин и применять его для решения научных задач. Сделаем упор на практические аспекты и примеры,
так что для его понимания не нужны никакие дополнительные знания. Для практических примеров будет использоваться среда
разработки [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/)