98 lines
8.9 KiB
Markdown
98 lines
8.9 KiB
Markdown
|
---
|
|||
|
content_type: page_education
|
|||
|
title: Введение в научное программирование на языке Kotlin
|
|||
|
shortTitle: Научное программирование
|
|||
|
parent: education
|
|||
|
path: /pages/kotlin
|
|||
|
slug: /ru/pages/kotlin
|
|||
|
published: true
|
|||
|
language: ru
|
|||
|
---
|
|||
|
**По четвергам, в 17.05 в 432ГК. Первое занятие 20 февраля.**
|
|||
|
|
|||
|
Запись лекций 2019 года доступна [тут](https://www.youtube.com/playlist?list=PL4_hYwCyhAvZzRpbK4iTy9S6_OWZNEiVk).
|
|||
|
|
|||
|
## Цель курса
|
|||
|
|
|||
|
По мере развития физики (и науки вообще), компьютерные методы с каждым годом занимают все большее важное место в повседневной работе ученого. При проведении эксперимента компьютерные методы и инструменты используются на всех стадия работы: планировании эксперимента, подготовке установке, сборе данных, их обработке и публикации. В такой ситуации оказывается, что качество используемых программ начинает играть важную роль. Кроме того, возникает потребность в специалистах, которые разбираются и в науке и в программировании и занимаются разработкой и совершенствованием программных инструментов.
|
|||
|
|
|||
|
Большинство студентов (и ученых) в той или иной мере знакомы с базовым инструментарием программиста, например с написанием простейших программ на языке Python. Для серьезной научной разработки этого не достаточно, поэтому курс нацелен на более продвинутое понимание аппаратной базы, структуры программы и современных инструментов разработки.
|
|||
|
|
|||
|
В качестве основного будет использовать язык программирования `Kotlin`, появившийся совсем недавно и успевший завоевать большую долю рынка. Kotlin обладает рядом существенных преимуществ в качестве начального языка для продвинутого научного программирования:
|
|||
|
|
|||
|
* Строгая типизация, четко построенная система типов.
|
|||
|
* Высокая производительность.
|
|||
|
* Автоматическое управление памятью.
|
|||
|
* Полная совместимость с огромным количеством библиотек на Java.
|
|||
|
* Лучший инструментарий.
|
|||
|
* Обширное сообщество.
|
|||
|
* Возможность коммерческого применения.
|
|||
|
|
|||
|
## Лектор
|
|||
|
|
|||
|
[Александр Нозик](https://www.researchgate.net/profile/Alexander_Nozik) - физик-экспериментатор, специалист по анализу данных в
|
|||
|
физическом эксперименте и научному программному обеспечению. Старший научный сотрудник ИЯИ РАН, заместитель заведующего
|
|||
|
лабораторией методов ядерно-физических экспериментов МФТИ.
|
|||
|
|
|||
|
Опыт разработки научного программного обеспечения (главным образом на Java) - 8 лет. Опыт работы на Kotlin - больше двух лет.
|
|||
|
|
|||
|
## Формат курса
|
|||
|
|
|||
|
В 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).
|
|||
|
|
|||
|
Всем желающим участвовать желательно заполнить [форму](https://docs.google.com/forms/d/e/1FAIpQLSeNZT8B90pT6fM9oABHFbrtv6pKfoYKfO-ANAjLlgWynMnh_g/viewform).
|
|||
|
|
|||
|
## Содержание курса
|
|||
|
|
|||
|
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/)
|