site/ru/pages/kotlin/index.html

107 lines
282 KiB
HTML
Raw Normal View History

2020-03-21 20:12:32 +03:00
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="ie=edge"/><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/><style data-href="/styles.7446e9d804e9a098f7f8.css">.timeline--wrapper{width:calc(100% - 24px);padding:12px}.timeline{width:100%;max-width:800px;padding:15px 0 0;position:relative;margin:50px auto}.timeline:before{content:"";position:absolute;top:0;left:calc(33% + 6px);bottom:0;width:0;border:2px solid}.timeline:after{content:"";display:table;clear:both}@media only screen and (max-width:768px){.timeline:before{left:calc(1% + 6px)}}.body-container{position:relative;margin-left:30px}.timeline-item--no-children .body-container{background:transparent;box-shadow:none}.body-container:after{content:"";display:table;clear:both}.timeline-item-date{position:absolute;top:-12px;left:0;background:#ddd;padding:1px;height:52px;box-sizing:border-box;width:90%}.timeline-item-date,.timeline-item-dateinner{-webkit-clip-path:polygon(0 0,95% 0,100% 50%,95% 100%,0 100%);clip-path:polygon(0 0,95% 0,100% 50%,95% 100%,0 100%)}.timeline-item-dateinner{background:#e86971;color:#fff;padding:0;font-size:16px;font-weight:700;margin:0;border-right-color:transparent;height:50px;width:100%;display:block;line-height:52px;text-indent:15px}.timeline-item--no-children .body-container:before{display:none}.entry{clear:both;text-align:left;position:relative}.timeline--animate .entry .is-hidden{visibility:hidden}.timeline--animate .entry .bounce-in{visibility:visible;-webkit-animation:bounce-in .4s;animation:bounce-in .4s}.entry .title{margin-bottom:.5em;float:left;width:34%;position:relative;height:32px}.entry .title:before{content:"";position:absolute;width:8px;height:8px;border:4px solid;background-color:#fff;border-radius:100%;top:15%;right:-8px;z-index:99;box-sizing:content-box}.entry .body{margin:0 0 3em;float:right;width:66%;color:#333}.entry .body p{line-height:1.4em}.entry .body h1,.entry .body h2,.entry .body h3,.entry .body h4,.entry .body h5,.entry .body h6{margin:0}.entry .body p:first-child{margin-top:0;font-weight:400}@-webkit-keyframes bounce-in{0%{opacity:0;-webkit-transform:scale(.5)}to{-webkit-transform:scale(1)}}@keyframes bounce-in{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}to{-webkit-transform:scale(1);transform:scale(1)}}@media only screen and (max-width:768px){.entry .title{float:left;width:70%}.timeline-item-date{margin-left:30px}.entry .title:before{top:15%;left:3px;right:auto;z-index:99}.entry .body{margin:20px 0 3em;float:right;width:99%}}
/*!
* Bootstrap v4.4.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/html{-webkit-tap-highlight-color:rgba(0,0,0,0)}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}a:not([href]),a:not([href]):hover{color:inherit;text-decoration:none}code{word-wrap:break-word}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.666667%;max-width:16.666667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.or
/*!
* Bootstrap v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-sear
<p>Запись лекций 2019 года доступна <a href="https://www.youtube.com/playlist?list=PL4_hYwCyhAvZzRpbK4iTy9S6_OWZNEiVk">тут</a>.</p>
<h2>Цель курса</h2>
<p>По мере развития физики (и науки вообще), компьютерные методы с каждым годом занимают все большее важное место в повседневной работе ученого. При проведении эксперимента компьютерные методы и инструменты используются на всех стадия работы: планировании эксперимента, подготовке установке, сборе данных, их обработке и публикации. В такой ситуации оказывается, что качество используемых программ начинает играть важную роль. Кроме того, возникает потребность в специалистах, которые разбираются и в науке и в программировании и занимаются разработкой и совершенствованием программных инструментов. </p>
<p>Большинство студентов (и ученых) в той или иной мере знакомы с базовым инструментарием программиста, например с написанием простейших программ на языке Python. Для серьезной научной разработки этого не достаточно, поэтому курс нацелен на более продвинутое понимание аппаратной базы, структуры программы и современных инструментов разработки.</p>
<p>В качестве основного будет использовать язык программирования <code>Kotlin</code>, появившийся совсем недавно и успевший завоевать большую долю рынка. Kotlin обладает рядом существенных преимуществ в качестве начального языка для продвинутого научного программирования:</p>
<ul>
<li>Строгая типизация, четко построенная система типов.</li>
<li>Высокая производительность.</li>
<li>Автоматическое управление памятью.</li>
<li>Полная совместимость с огромным количеством библиотек на Java.</li>
<li>Лучший инструментарий.</li>
<li>Обширное сообщество.</li>
<li>Возможность коммерческого применения.</li>
</ul>
<h2>Лектор</h2>
<p><a href="https://www.researchgate.net/profile/Alexander_Nozik">Александр Нозик</a> - физик-экспериментатор, специалист по анализу данных в
физическом эксперименте и научному программному обеспечению. Старший научный сотрудник ИЯИ РАН, заместитель заведующего
лабораторией методов ядерно-физических экспериментов МФТИ.</p>
<p>Опыт разработки научного программного обеспечения (главным образом на Java) - 8 лет. Опыт работы на Kotlin - больше двух лет.</p>
<h2>Формат курса</h2>
<p>В 2020 году курс проходит при участии JetBrains и при поддержке JetBrains Research. Наиболее активные студенты получат возможность участвовать в летних стажировках в JetBrains. Также для студентов старших курсов есть возможность проходить НИР в Лаборатории методов ядерно-физических экспериментов МФТИ (участник JetBrains Research) и в московском офисе JetBrains.</p>
<p>В этом курсе мы будем учиться работать на языке Котлин и применять его для решения научных задач. Сделаем упор на практические аспекты и примеры, так что для его понимания не нужны никакие дополнительные знания. Для практических примеров будет использоваться среда разработки <a href="https://www.jetbrains.com/idea/">IntelliJ IDEA Community Edition</a>.</p>
<p>Обсуждение всех вопросов, связанных с курсом, будет происходить в телеграм группах <a href="https://t.me/mipt_npm">@mipt-npm</a> (научная составляющая)
и <a href="https://t.me/joinchat/EpV1201A_i0rTOCxHHnxXQ">Kotlin на физтехе</a> (вопросы, касающиеся языка Kotlin).</p>
<p>Всем желающим участвовать желательно заполнить <a href="https://docs.google.com/forms/d/e/1FAIpQLSeNZT8B90pT6fM9oABHFbrtv6pKfoYKfO-ANAjLlgWynMnh_g/viewform">форму</a>.</p>
<h2>Содержание курса</h2>
<ol>
<li>
<p><strong>От жесткого к мягкому</strong></p>
<ol>
<li>Программа как набор инструкций. Эволюция программ.</li>
<li>Структура памяти. Segmentation fault.</li>
<li>Парадигмы программирования. Генеалогия языков.</li>
<li>Виртуальные машины, байт-код.</li>
<li>Компиляция и оптимизации.</li>
<li>Статическая и динамическая линковка. Библиотеки.</li>
<li>Структура программы. Точки входа.</li>
</ol>
</li>
<li>
<p><strong>Инструменты современного программиста</strong></p>
<ol>
<li>Системы автоматической сборки.</li>
<li>Системы контроля версий.</li>
<li>Интегрированные среды разработки.</li>
</ol>
</li>
<li>
<p><strong>Язык Kotlin</strong></p>
<ol>
<li>Переменные, классы и объекты.</li>
<li>Control flow. Процедурный и функциональный подход.</li>
<li>Замыкания.</li>
<li>Структуры данных и операции над ними.</li>
<li>Свойства и делегаты.</li>
<li>Параметрические типы.</li>
<li>Расширения.</li>
<li>Боксинг.</li>
<li>Мультиплатформные проекты</li>
</ol>
</li>
<li>
<p><strong>Архитектура программы</strong></p>
<ol>
<li>Абстракции и интерфейсы.</li>
<li>Основы коллективной разработки при помощи современных инструментов.</li>
<li>Идеология объектного программирования. Разделение поведений.</li>
<li>Идеология функционального программирования.</li>
</ol>
</li>
<li>
<p><strong>Научное программирование</strong></p>
<ol>
<li>Основы численных методов. Понятие о численной точности. Сложность алгоритмов.</li>
<li>Численное дифференцирование и интегрирование.</li>
<li>Генераторы случайных чисел и Монте-Карло моделирование.</li>
<li>Высокопроизводительные параллельные и конкурентные вычисления.</li>
<li>Проблема ввода-вывода и основные методы ее решения.</li>
<li>Системы сбора данных. Протоколы обмена данными.</li>
<li>Основы работы с большими данными.</li>
<li>Поточная обработка данных.</li>
</ol>
</li>
</ol>
<h2>Отчетность</h2>
<p>Зачет проходит в форме презентации по материалам индивидуального проекта. Также предусмотрена промеждуточная отчетность в виде сдачи заданий.</p>
<h2>Рекомендуемая литература</h2>
<ul>
<li><a href="https://kotlinlang.org/docs/reference/">Официальная документация на английском языке</a></li>
<li><a href="https://kotlinlang.ru/">Перевод на русский</a></li>
<li><a href="https://dmkpress.com/catalog/computer/programming/java/978-5-97060-497-7/">Kotlin в действии</a></li>
</ul></div></main></div><footer><div class="container" style="text-align:left"><p>© 2016 mipt-npm group | Built with<!-- --> <a href="https://www.gatsbyjs.org">Gatsby framework</a> <!-- -->and<!-- --> <a href="https://getbootstrap.com/">Bootstrap styles</a></p></div></footer></div></div><script id="gatsby-script-loader">/*<![CDATA[*/window.pagePath="/ru/pages/kotlin";/*]]>*/</script><script id="gatsby-chunk-mapping">/*<![CDATA[*/window.___chunkMapping={"app":["/app-f9188a50aa17f7792b84.js"],"component---src-components-templates-course-template-js":["/component---src-components-templates-course-template-js-3c9a701a382d0aae6105.js"],"component---src-components-templates-news-js":["/component---src-components-templates-news-js-f2aef0f2eca64f98cca7.js"],"component---src-pages-404-js":["/component---src-pages-404-js-489bf91278e95de3284c.js"],"component---src-pages-about-js":["/component---src-pages-about-js-fce19fd638c6131ce6d7.js"],"component---src-pages-index-js":["/component---src-pages-index-js-4d472eec4a55ad51ad92.js"],"component---src-pages-partners-js":["/component---src-pages-partners-js-7a2eb5dc2b6e6979c95b.js"],"component---src-pages-projects-education-js":["/component---src-pages-projects-education-js-fc41d41deb3aafafc7a5.js"],"component---src-pages-projects-math-js":["/component---src-pages-projects-math-js-b08a43f1869b732ea1f7.js"],"component---src-pages-projects-physics-js":["/component---src-pages-projects-physics-js-d1fd75d95e007f45f005.js"],"component---src-pages-projects-software-js":["/component---src-pages-projects-software-js-1f22b82bf03a34cd1067.js"],"component---src-pages-publications-js":["/component---src-pages-publications-js-4372be03b9fbdb7fb438.js"],"component---src-pages-quarks-js":["/component---src-pages-quarks-js-83a9a3e909df4a142823.js"]};/*]]>*/</script><script src="/component---src-components-templates-course-template-js-3c9a701a382d0aae6105.js" async=""></script><script src="/commons-a0c9ce51829ed87cd3ff.js" async=""></script><script src="/styles-48c95eba11f5da2bc388.js" async=""></script><script src="/app-f9188a50aa17f7792b84.js" async=""></script><script src="/netlify-identity-widget-574fe3ad0c6473c0e58f.js" async=""></script><script src="/webpack-runtime-d51c9d4ef6b2ca0c0a40.js" async=""></script></body></html>