Русский
Русский
English
Статистика
Реклама

Образование в россии

Из студентов в преподаватели интервью с выпускниками магистерской программы JetBrains ИТМО. Часть 2

01.03.2021 18:19:29 | Автор: admin
Продолжаем знакомить вас с выпускниками магистратуры JetBrains и ИТМО Разработка программного обеспечения, которые по завершении обучения пополнили преподавательский состав программы. Во второй части интервью ребята рассказывают подробнее о своих задачах, подходах к преподаванию и дают советы абитуриентам. Первая часть интервью.



Есть ли что-нибудь, что вас раздражает в работе преподавателя?

Дима Х.: Конечно, в любой деятельности есть что-то неприятное. Я вот, вообще говоря, ярко выраженный интроверт: может, на занятии у меня и получается сиять энтузиазмом и будить зомбированных безжалостной нагрузкой студентов, но когда занятие окончено и можно расслабиться, вся энергия иссякает и хочется всю оставшуюся вечность безжизненно смотреть в потолок.

В проверке домашних заданий есть свои радости: когда кто-то придумывает новое решение задачи, которую, как казалось, ты понимаешь от и до, это очень познавательный опыт; когда удалось выявить какой-то огрех, дать хорошую подсказку и увидеть, как в последующих работах студент эффективно ее применяет, это такой момент, ради которого и хочется заниматься преподаванием. Однако не все всегда так радужно, и часто оказываешься перед моральным выбором. Если видно, что студент ничего не понимает и не поймет, стоит его пожалеть и закрыть глаза на мелкие огрехи, за которые других ругаешь, или поддерживать стандарты? Если выпрашивает баллы и искренне верит, что все сделано хорошо, попытаться прийти к общему мнению или наотрез пресечь? Если явно халтурит, делает на минимум, просто хочет получить зачет и забыть про предмет смириться, или все-таки попытаться объяснить в каких-то новых терминах, в чем польза этой дисциплины? Может, просто пустить все на конвейер и упростить процесс сдачи или же досконально проверять и требовать хорошего понимания изучаемых тем? Часто не очевидно, какое решение правильное, а неудачный выбор влияет не только на тебя самого, но и на других людей, которых можно ненароком оттолкнуть от твоей дисциплины.

Леша: Как-то так сложилось, что всеми вещами, которые меня раздражают, я быстро перестаю заниматься. У людей бывает обостренное чувство справедливости, у меня же скорее сильное желание быть в согласии с самим собой. Поэтому я бы ответил так: если бы меня что-то раздражало, я бы точно не занимался преподаванием.

Саша: Немного раздражает, когда студенты не соблюдают формальные договоренности, о которых было сказано заранее. Например, неправильно называют пул-реквесты.

Влад К.: Меня по-настоящему раздражает выкладывать файлики на вики. Да, очень. Любая опечатка или неточность, которую надо поправить, и понеслось правишь TeX, компилируешь, скачиваешь, находишь нужный файл на вики (самое сложное!) и кидаешь туда новую версию. Наверно, это можно как-то автоматизировать, но у нас такого курса не было!

Рома: Пожалуй, отчетность была самым раздражающим фактором. Заполнение табличек редко приносит радость. Еще мне тяжело давалось составление задач, это было для меня своеобразным творческим стрессом.

Очень раздражает списывание. Когда ты студент, ты иначе к этому относишься. Когда я стал преподавателем, я каждый акт списывания расценивал как проявление неуважения ко всем остальным студентам. Возможно, это слишком жестко, но эмоционально у меня именно такая реакция.

Не нравятся студенты, которые не стараются (по моим субъективным ощущениям). Это не вызывает раздражения, скорее просто отбивает охоту с ними взаимодействовать. Не стараться значит не проявлять активность на занятиях, не сдавать задачи или сдавать в последний момент, делать абы как, не исправлять замечаний.

Не нравятся студенты, которые очень много умничают. Я имею в виду тех, кто, обладая глубокими знаниями по теме, не понимают, когда уместно эти знания демонстрировать, и делают это при любом удобном случае. Часто при этом они мешают ходу занятия, а также своим менее опытным и знающим однокурсникам, отвлекая и запутывая их.

А что радует и мотивирует больше всего?

Влад Т.: Возможность познакомиться с новыми людьми, узнать что-то новое. Например, на оценке научно-исследовательских работ. Иногда можно найти людей, которые занимаются теми же вещами, что и ты, но под другим углом.

Дима Х.: Часто бывает понятно, что если бы не твои слова, то студент, может, так бы и не осознал ту или иную мысль. Мой опыт чтения математических книг в одиночку без малейшего понимания, с чего начинать, напомнил мне, как беспомощно себя ощущаешь, когда тебе представлено какое-то последовательное изложение, которое вызывает иллюзию того, что ты его понял, но любые попытки применить только что полученные знания заканчиваются неудачей. Это может вызывать такое отчаяние, что пропадает всякое желание заниматься чем-то новым. Наличие рядом человека, который выслушает твою дурацкую интерпретацию прочитанного и возразит, что нет, все совершенно не так, увеличивает эффективность учебы даже не в разы, а на порядки.
Помимо этого, мне интересно подходить к преподаванию с эдакой научной точки зрения: проверять, что получается, а что нет, что вызывает энтузиазм и понимание, а что проходит мимо ушей.

Леша: Радует, когда я недооцениваю студентов. Я в целом против разного рода ярлыков и простых оценочных суждений о людях, но в работе требуется индивидуальный подход, который я строю на собственных ожиданиях от студентов: вот этот студент очень сильный, ему можно что-то дополнительное рассказать или подискутировать с ним; вот этот послабее, его лучше лишний раз не нагружать, ему и без того сложно. Всегда приятно ошибаться в несправедливо заниженных ожиданиях.

Влад К.: Как и любого человека, которому нравится то, о чем он рассказывает, меня радует, когда кто-нибудь из студентов говорит, что решение задачи красивое.

Расскажите, как именно вы участвуете в преподавании?

Влад Т.: Я проверяю работы на нескольких практических курсах и веду практику на курсе Software Engineering. Раньше я участвовал в собеседованиях приемной комиссии и в оценке научно-исследовательских работ.

Дима Х.: Третий год я веду практические занятия и проверяю домашние задания по функциональному программированию и математической логике. В прошлом году вел практики по курсу Unix и скриптовые языки, но оказалось, что мне больше по душе связанная с языками программирования эзотерика. С текущего весеннего семестра провожу практики по формальным языкам.

Дима Н.: Веду семинары и проверяю домашние задания в курсе по программированию на Java и других JVM-языках.

Леша: Основная моя деятельность в магистратуре лекции и практики по Python, практики по Java и домашние задания по Software Engineering. Еще я периодически читаю аналогичные курсы, но на других, обычно непрофильных программах.

Артем: Помогаю с курсом по С++, который преподается у ребят в магистратуре и CS центре. В основном я занимаюсь всем, что связано с домашними заданиями (проверка, помощь в подготовке условий, автотесты). У нас на курсе процесс проверки решения состоит из двух этапов: автоматические тесты и код-ревью. Студенты далеко не с первого раза успешно проходят второй этап. Преподаватель оставляет комментарии, задает вопросы, а студенты должны исправить решения. Таким образом происходит непрерывный диалог, что, на мой взгляд, очень круто!

Саша: Проверяю у ребят домашние задания по Python. Но если мне наконец предложат прочитать курс лекций по Haskell, я с радостью переключусь на эту деятельность.

Влад К.: Я принимаю участие в проведении двух курсов Алгоритмы и структуры данных и Дискретная математика. И там и там веду практические занятия и проверяю домашние задания. Дополнительно я отвечаю за информационное взаимодействие со студентами и стараюсь отвечать на все возникающие вопросы.

Оба курса схожи по структуре: на практиках студенты получают список задач по теме прошедшей лекции, и мы их вместе обсуждаем. Обычно я даю студентам время подумать и предложить идеи. Если не получается, подсказываю правильное направление и в итоге всегда рассказываю, как должно выглядеть корректное решение. Полученные знания и умения студенты должны применить при выполнении домашних заданий. Решения присылаются в письменном виде, причем у студентов, приславших работы до определенного времени, гарантированно есть возможность исправить мои замечания. Так как замечаний всегда хватает, обычно больше баллов получают те, кто действует превентивно.

Рома: Два учебных года я вел практические занятия на курсе по C++. В мои обязанности входила подготовка материалов для семинаров, их проведение, работа со студентами, проверка заданий, помощь в проведении экзамена. Практически все время я работал в паре с еще одним коллегой, поэтому составлением и проверкой задач я занимался не в одиночку.

Сколько времени в неделю у тебя уходит на преподавание?

Влад Т.: Сейчас где-то 5 часов. Вероятно, будет больше.

Дима Н.: Полтора часа непосредственно на пару, часов пять-восемь на проверки, еще пара часов на подготовку к занятиям.

Леша: В этом семестре занимаюсь преподаванием фултайм, т. к. веду разные курсы и на других программах тоже, иногда с перегибами за 40 часов, но стараюсь не допускать переработок.

Саша: На проверку домашек у половины группы уходит примерно один рабочий день.

Осенний семестр в магистратуре проходил полностью онлайн. Как вы относитесь к этому формату?

Влад Т.: Вполне хорошо. На мой взгляд, это очень подходящий формат для IT-программ. Возможно, даже более подходящий, чем очное обучение.

Дима Х.: Я считаю это совершенно ужасным. Когда четко не видишь лица, невозможно понять, следят ли слушатели за происходящим и понимают ли материал. Опираться в таких делах на инициативу студентов перспектива ненадежная, потому что те, кто действительно ничего не понял, будут винить себя и постесняются задавать вопросы. Так что в основном обсуждение идет с теми, кто уже ощущает себя комфортно и хочет разобраться в происходящем поглубже. Такие разговоры только усугубляют положение совсем потерявшихся студентов. Кроме того, нет возможности вызвать кого-то к доске или самому парой движений руки сотворить какой-то иллюстративный материал.

Дима Н.: С одной стороны, это удобно, с другой я скучаю по личному общению со студентами и по завтракам с коллегами. На эффективность проведения пар смена формата, с моей точки зрения, особо не повлияла.

Артем: На мой процесс взаимодействия со студентами это никак не повлияло, но я думаю, что ребятам сейчас тяжелее. Мне сильно помогали походы в университет тем, что можно было отвлечься от горы заданий, лично пообщаться с ребятами. Остается лишь пожелать нынешним студентам терпения и сил. Ребята, не забывайте отвлекаться от учебы и отдыхать это важно!

Что бы вы посоветовали ребятам, которые планируют поступать на программу?

Влад Т.: Заранее оценить свои силы, не бояться нового и быть готовыми погрузиться в учебу с первых дней. Ну и удачи!

Дима Х.: Откладывайте работу и все свои дела. Если не можете себе этого позволить, то поступайте не сейчас, а тогда, когда сможете. Интенсивность обучения здесь требует полного погружения в процесс.

Дима Н.: Нужно хорошо разобраться, что это за программа, и три раза подумать, прежде чем поступать. Учеба здесь невероятно жесткая, хоть и очень эффективная, и до выпуска добираются только те, кто готов превозмогать себя в течение двух лет.

Леша: Лучше начинать готовиться сильно заранее: регулярно программировать, решать задачи на алгоритмы и повторять базовую математику. И учиться грамотно распределять свое время когда начнется учеба, у вас не будет времени дополнительно осваивать тайм-менеджмент.

Артем: Прежде всего, важно быть уверенными в себе. Подготовиться к вступительным экзаменам достаточно просто, но немаловажно показать свою искреннюю заинтересованность.

Саша: Я бы посоветовал четко решить для себя, готовы ли вы еще два года целиком и полностью посвятить учебе. Если ответ положительный клево, ждем вас на собеседованиях! Если отрицательный, тоже хорошо: в ближайшие пару лет проблем со сном по причине горящих дедлайнов по домашкам у вас не предвидится. :)

Рома: Постарайтесь понять, что является слабым местом, и подтяните его. Если есть проблемы и с практикой, и с теорией, советую подтянуть практику это сильно поможет почти во всех курсах. А еще стоит отучиться делать все в последний момент.

Влад К.: Самое главное быть готовым к тому, что будет очень-очень сложно. Надо морально настраиваться на то, что свободного времени в привычном смысле практически нет: ты либо на паре, либо делаешь домашку, либо ешь/спишь/перемещаешься. Кстати, времени на сон в среднем остается совсем немного. И это, конечно, сказывается на физическом и эмоциональном состоянии. Поэтому внутренняя мотивация учиться должна быть очень сильной.

Еще одна важная вещь, которая существенно может помочь, особенно в первое время постараться освоить необходимый технический минимум для прохождения курсов.

Ну и дерзкий совет: не планируйте поступать просто берите и поступайте!
Подробнее..

Научное программирование в МФТИ

13.05.2021 16:14:30 | Автор: admin

Привет, это Александр Нозик, и этот пост посвящен еще одной "интересной" магистерской программе (на этот раз на физтехе, совместно с JetBrains, Таврида Электрик и целым списком научных организаций). Про интересность вы решите сами, но программа в этот раз действительно уникальная (пока по крайней мере). Называется она Научное программирование (официальное название "Разработка и применение программного обеспечения в физических исследованиях") и расположена на ФПМИ и ЛФИ в МФТИ. Посвящена не отдельно физике, не отдельно программированию, не отдельно computer science, а стыку всего этого.

Если вы уже поняли, что это про вас, то можно бежать читать подробности и заполнять анкету на сайте программы.

Если нет, то читаем дальше.

Зачем это?

Комната в CERN, где был изобретен интернетКомната в CERN, где был изобретен интернет

Дело в том, что все аспекты нашей современной жизни так или иначе связаны с компьютерами и программированием, наука и инженерия не исключение. Ученые и инженеры существенную часть своего рабочего времени посвящают работе с компьютерами. Если мы говорим про науку, то все начинается со стадии проектирования эксперимента. Мы делаем большие объемы математического моделирования, чтобы понять, что вообще можно измерить и как это лучше сделать. В конце концов, мы не можем работать методом тыка. Современные эксперименты очень дороги, и делать их, не зная заранее, что там можно измерить, очень невыгодно. Дальше нам надо собрать данные, для этого используются разнообразные автоматизированные системы управления. Эти данные нужно хранить (а данных может быть очень много, петабайты). К данным нужно обеспечить удобный доступ, организовать резервное хранение, сервисы по индексации и визуализации. В конце концов данные нужно обработать. А тут уже нужно задействовать весь арсенал современных компьютерных методов работы с данными от параллельных и распределенных вычислений до машинного обучения.

В индустрии проблем не сильно меньше. То же самое математическое моделирование, тот же сбор данных, но также добавляется использование автоматических систем проектирования, инфраструктурные проекты и многое другое.

Во всех этих задачах нужно не только знать соответствующие алгоритмы, но и создавать и поддерживать программные инструменты. Практика показывает, что для этого нужно понимать не только прикладное программирование, но и ту область, в которой решения будут применяться (предметную область). В то же время физики и инженеры должны знать прикладное программирование, чтобы работать с современным программным обеспечением и совершенствовать его.

Как это?

Как вы, наверное, уже догадались, тут как раз и включается наша магистерская программа. Она организована на стыке областей, и наша цель научить физиков (и вообще "предметников") программировать, а программистов понимать предметную область. Разумеется, невозможно знать все одинаково хорошо. Но тем не менее мы и наши партнеры верим в то, что в будущем профессия физик-программист (или химик-программист, или биолог-программист), то есть тот, кто не просто может написать скрипт на Python, а умеет создавать и поддерживать прикладное программное обеспечение в предметной области, будет весьма востребована.

Разумеется, тут есть некоторая техническая сложность. Дело в том, что за последние 30 лет пути IT и естественных наук сильно разошлись, и оказывается, что физики плохо владеют IT-инструментами, а IT-шники не знают предметной области. Нам нужны и те и другие, но обучать их нужно по-разному. Поэтому нужно сделать так, чтобы программа была максимально гибкая и могла быть подстроена и под тех, и под других. Решение это минимальный набор общих предметов:

  • Вычислительные методы

  • Анализ данных

  • Научная этика

  • Научный семинар

Остальные предметы выбираются студентом совместно с научным руководителем. Научный руководитель в нашей программе играет ключевую роль, потому что мы пытаемся охватить очень широкую область со множеством узких специализаций, и именно научный руководитель (и компания или институт, стоящие за ним) являются "направляющей", по которой студент будет двигаться. По этой причине руководителя нужно выбрать заранее и убедиться в том, что он (или она) вам подходит и вы подходите ему (или ей). В качестве бонуса от такой процедуры вы можете получить гарантированное поступление в магистратуру МФТИ. Наши промышленные партнеры (JetBrains и Таврида Электрик) готовы оплатить обучение для ограниченного количества студентов, которые прошли собеседования с руководителями, но по какой-то причине не прошли по конкурсу.

Направления работы

Давайте теперь кратко подробно никакого поста не хватит остановимся на темах тех научных руководителей, которые участвуют в программе.

Математическое моделирование в физике частиц

Это направление представлено очень широко, поскольку создатели программы выходцы из этой области.

Максим Долгоносов из ИКИ РАН и ВШЭ представляет широкое направление, связанное с моделированием космических детекторов и высокоэнергетических процессов в атмосфере (с заходом в физику плазмы). Над этой проблемой сейчас также работает очень активная группа в МФТИ под руководством Егора Стадничука и Екатерины Свечниковой из ИПФ РАН.

Художественное видение реакторной модели возникновения наземных гамма-всплесков. Автор: Екатерина СвечниковаХудожественное видение реакторной модели возникновения наземных гамма-всплесков. Автор: Екатерина Свечникова

Игорь Анатольевич Пшеничнов из ИЯИ РАН является ведущим мировым специалистом по фотоядерным реакциям, физике ядер-спектаторов и моделированию на платформе Geant4 как для экспериментов в физике частиц, так и для прикладных исследований, например медицинской физики. Ученики Игоря Анатольевича работают в МФТИ.

Кроме того существует широкий спектр задач в физике частиц (в основном в международных коллаборациях), требующих навыков работы с Geant4 (С++).

В лаборатории Nuclear Physics Methods JetBrains Research мы Александр Нозик и Roland Grinis также занимаемся разработкой новых экспериментальных инструментов для моделирования процессов (в основном на Kotlin и с использованием разных новых технологий.

Моделирование на сетках

Айно Константиновна Скасырская является уникальным специалистом по сеточным расчетам разного рода (гидродинамика, термодинамика, расчет механических напряжений, электромагнитные поля). Для таких расчетов нужно не только хорошо разбираться в решении дифференциальных уравнений на сетках, но и владеть современными коммерческими пакетами, такими как ANSYS и COMSOL. Ученики Айно Константиновны чрезвычайно востребованы в промышленности.

Анализ данных в астрофизике и физике космических лучей

На данный момент этой задачей занимаются сразу две не связанные между собой группы, сотрудничающие с нашей магистерской программой: Олег Евгеньевич Калашев из ИЯИ РАН и Дмитрий Костюнин из DESY (Германия). Обе группы занимаются анализом данных с крупных международных экспериментов, таких как Telescope Array, Tunka-rex и HESS, с использованием современных компьютерных методов, включая машинное обучение.

Иллюстрация из сборника "Физики шутят"Иллюстрация из сборника "Физики шутят"

Программное обеспечение для крупных проектов

Лев Шагалов курирует широкий спектр задач от крупной коммерческой компании Таврида Электрик одного из наших основных партнеров. Среди этих задач есть как разработка высоконагруженных распределенных систем последнего поколения для управления электросетями, так и разработка и внедрение "умных" алгоритмов в энергетической отрасли.

Константин Герценбергер является главой группы программного обеспечения в эксперименте BM@N на коллайдере NICA и занимается разработкой и поддержкой всех программных систем эксперимента. Петр Климай в рамках этой же коллаборации занимается системами хранения, индексации и визуализации больших объемов данных.

Игорь Хохряков входит в коллаборацию TANGO-controls и вместе со мной занимается разработкой распределенных гетерогенных систем сбора данных нового поколения и системами визуализации для них (кому интересно, пойдите посмотрите тут и тут.

Разработка инструментов для научных вычислений

Ильмир Усманов из JetBrains (отделение в Мюнхене) входит в команду Kotlin language research и занимается проектированием и оптимизацией элементов компилятора Kotlin, нужных в том числе для высокопроизводительных вычислений.

Roland Grinis в плотном сотрудничестве с лабораториями JetBrains Research и Kotlin scientific community занимается разработкой и интеграцией инструментов для высокопроизводительных тензорных вычислений и их использованием для реализации прикладного моделирования.

Еще?

Разумеется, тут описано далеко не все, чем планируется заниматься в рамках магистратуры. В одной только нашей лаборатории еще много работы по визуализации данных, распределенным вычислениям и куче всего.

Демонстрация библиотеки VisionForge. Визуализация трэков мюонов в подземном эксперименте Muon MonitorДемонстрация библиотеки VisionForge. Визуализация трэков мюонов в подземном эксперименте Muon Monitor

Список руководителей постоянно обновляется. Кроме того, если у вас есть задача по научному программированию, под которую у нас не нашлось руководителя, то пишите нам, мы поищем. Ну и разумеется, можно приходить со своим руководителем.

Для того, чтобы примерно понять, о каких задачах идет речь, можно заглянуть сюда и посмотреть тестовые/стартовые задачи, оставленные нашими руководителями с пометкой "Магистратура".

Как к нам попасть?

Для начала надо заполнить анкету. В ней укажите свою контактную информацию и тех руководителей, с которыми вы хотели бы работать. Подача анкеты ни к чему вас не обязывает. Вы можете зарегистрироваться, пройти собеседование с руководителем и решить, что вам хочется чего-то другого.

Более подробная и актуальная информация есть на сайте.

Задать вопросы и обсудить разные аспекты научного программирования можно в телеграм-группе нашей лаборатории

Подробнее..

Всё-таки я не зря учился! Как клёвые алгоритмы и школьные формулы помогают создавать инновационные лекарства

21.07.2020 18:12:25 | Автор: admin

image


Введение


Меня зовут Александр Садовников, я выпускник корпоративной магистерской программы ИТМО и JetBrains Разработка программного обеспечения и по совместительству старший разработчик биоинформатического ПО в департаменте вычислительной биологии компании BIOCAD.


В этом посте я в доступной форме и без чрезмерного жонглирования нудными биоинформатическими терминами опишу один из ключевых этапов создания лекарственного средства этап предсказания места взаимодействия лекарства с целевой молекулой в организме человека. Данная тема выбрана мной не случайно: в рамках своей дипломной работы я занимался именно этой проблемой.


Понять, как взаимодействуют две молекулы, можно, если предсказать структуру комплекса, который они формируют в природе. Предсказание структуры молекулярного комплекса по-научному называется задачей докинга. Частого использования этого термина я, к сожалению, избежать не смогу. Главная новость заключается в том, что задачу докинга человечество уже умеет с переменным успехом решать с помощью компьютерного моделирования. Это стало возможным, в частности, за счёт использования довольно известных за пределами биоинформатики алгоритмов и математических подходов. На их примере я покажу, как очень частные знания, которые мы получаем на протяжении многих лет учёбы в школе и вузе, оказываются полезными на практике, причём зачастую не самым очевидным образом.


Хочется верить, что данный материал будет интересен и полезен любому читателю, однако, чтобы понять всю техническую сторону вопроса, потребуются некоторые знания в области математики и алгоритмов.


Зачем нужно предсказывать структуру молекулярного комплекса


В современной фармацевтической промышленности всё большую популярность набирают лекарственные средства, основанные на взаимодействии антител с другими молекулами. Вообще антитела представляют собой молекулы иммунной системы, но люди научились создавать их и в лабораторных условиях, причём созданные искусственным образом антитела могут выполнять абсолютно разные терапевтические функции. Например, мы можем создать антитело, которое свяжется с раковой клеткой и привлечёт другие молекулы иммунной системы для её уничтожения. Или мы можем создать антитело, которое соединит друг с другом два белка, отсутствие взаимодействия между которыми вызывает несвёртываемость крови у больных гемофилией. В общем, антителам можно найти массу применений!


image
Структура антитела


Антитело состоит из нескольких частей. Наиболее значимыми частями в контексте способности антитела взаимодействовать с другими молекулами являются его петли (на рисунке петли помечены как L1, L2, L3 и H1, H2, H3). Название этих частей антитела обусловлено их формой: посмотрите на рисунок действительно же петли какие-то! От структуры петель антитела зависит сила его связывания с поверхностью целевой молекулы и геометрические свойства данного взаимодействия. Поэтому при разработке лекарственных средств на основе антител наибольшее внимание уделяется именно петлям.


image
Пример взаимодействия антитела с мишенью. Зелёным цветом показана молекула антитела, жёлтым молекула мишени. Красным цветом обозначены петли антитела.


С терапевтической точки зрения очень важно, как именно антитело взаимодействует с целевой молекулой. Известны случаи, когда от места взаимодействия антитела с молекулой зависел характер побочных явлений, вызываемых лекарственным средством. Согласитесь, что когда у вас есть два лекарства, одно из которых точно безопасно для жизни пациентов, а второе нет, вы будете использовать первое. Зачастую в результате анализа литературы мы имеем представление о том, взаимодействие с какой частью целевой молекулы приведёт к наибольшему терапевтическому эффекту и снижению вероятности возникновения побочных явлений. Поэтому при создании лекарственного средства необходимо убедиться, что оно взаимодействует с целевой молекулой ожидаемым образом.


Тут мы незаметно подходим к уже озвученной выше задаче докинга, заключающейся в предсказании структуры комплекса двух молекул. В нашем случае одной из молекул является лекарство, представляющее собой антитело, а второй молекулой мишень, с которой антитело должно взаимодействовать в организме человека. Предсказав структуру комплекса антитела и целевой молекулы, мы получим представление о том, с какой частью данной молекулы взаимодействует наше лекарство. На основе этой информации можно будет сделать предварительный вывод о его эффективности. Естественно, реальную эффективность препарата можно оценить только по результатам клинических исследований, но процесс это очень дорогой. Поэтому на такие исследования целесообразно выходить с лекарством, в эффективности которого есть некоторая уверенность.


Принцип работы алгоритмов решения задачи докинга


Как уже было отмечено, задачу докинга можно решить с помощью компьютерного моделирования, и существует множество алгоритмов для её решения вычислительными методами. Мы рассмотрим класс алгоритмов докинга, работающих за счёт перебора положений, в которых одна молекула может находиться относительно другой. Данный класс представляет для нас наибольший интерес не только потому, что принцип работы его представителей прост для понимания, но и потому, что лучший на данный момент алгоритм для автоматического докинга, Piper, принадлежит как раз к рассматриваемому классу алгоритмов.


На вход алгоритм докинга принимает трёхмерные структуры молекул. Вообще говоря, в природе две молекулы могут образовывать разные по структурам комплексы. Поэтому в результате своей работы алгоритм должен предсказать множество структур комплексов, которые могут формировать данные молекулы. Структура молекулы или комплекса представляет собой набор атомов, каждому из которых приписана координата, соответствующая положению этого атома в трёхмерном пространстве.


image
Схема работы алгоритма докинга


Алгоритмы докинга, работающие по принципу перебора положений одной молекулы относительно другой, обычно состоят из трёх последовательных этапов: этапа докинга на сетках, этапа кластеризации и этапа минимизации. Структуры, полученные в результате работы очередного этапа, являются входными данными для следующего этапа. Далее мы рассмотрим каждый из перечисленных этапов подробнее.


Докинг на сетках


Этот этап является основным для алгоритма докинга. В ходе его работы происходит поиск некоторого количества положений молекул относительно друг друга, похожих на природные. В основе данного этапа лежит алгоритм 1992 года за авторством Эфраима Качальского-Кацира (который, помимо того, что был выдающимся учёным, также был четвёртым президентом Израиля).


Положение одной из молекул фиксируется в пространстве. Для второй молекулы с фиксированным шагом перебираются все возможные вращения относительно первой молекулы. Для каждого вращения второй молекулы перебираются все её смещения относительно первой, которая остается неподвижной. В итоге отбирается некоторое количество комплексов, наиболее похожих на природные и состоящих из фиксированной первой молекулы и повёрнутой и смещённой второй.


Если высокоуровнево описать принцип работы алгоритма докинга на сетках, то получается совсем простой код:


complexes = []# перебираем все возможные вращения второй молекулы относительно первойfor rotation in rotations:     # перебираем все возможные смещения второй молекулы относительно первой    for shift in shifts:         # поворачиваем и сдвигаем вторую молекулы         # с учётом заданных вращения и смещения        moved_mol2 = rotate_and_shift(mol2, rotation, shift)         # создаём из молекул комплекс, в котором вторая         # молекула повёрнута и сдвинута        new_complex = (mol1, moved_mol2)         complexes.append(new_complex)# сортируем все полученные комплексы по их правдоподобиюcomplexes.sort(lambda candidate_complex: score_complex(candidate_complex)) 

Однако тут важны детали. А именно, нас интересует способ оценки правдоподобия молекулярного комплекса, то есть того, насколько вероятно существование этого комплекса в природе. Точное определение правдоподобия даже одного молекулярного комплекса задача достаточно трудоёмкая. Всего у нас получается $R \cdot S$ комплексов, где R число вращений второй молекулы, а S число её смещений. На практике $R \cdot S$ имеет порядок $10^5$. Определить правдоподобие такого большого числа комплексов за разумное с практической точки зрения время и в условиях ограниченности вычислительных ресурсов просто не представляется возможным.


В 1992 году, когда был изобретён алгоритм докинга на сетках, проблема производительности была ещё более актуальна. Поэтому его авторами был предложен следующий подход.


Основная идея алгоритма заключалась в том, чтобы поместить обе молекулы, структуру комплекса которых мы хотим предсказать, в дискретные трёхмерные сетки. В оригинальной статье предлагалось заполнять ячейки сетки по следующей формуле:


$\text{cell}_{ijk} = \begin{cases} 1, & \text{если на поверхности} \\ p, & \text{если внутри} \\ 0, & \text{в другом случае}. \end{cases}$


Значение 1 присваивается ячейкам сетки, которые содержат атомы, находящиеся на поверхности молекулы. Значение $p$, которое находится в промежутке от 0 до 1, присваивается ячейкам, которые содержат только атомы молекулы, не имеющие доступа к её поверхности. Значение 0 присваивается всем остальным ячейкам сетки. Пример построения сеток для двух молекул приведён ниже.


image
Пример построения двумерных корреляционных сеток для двух молекул


Теперь давайте введём понятие корреляции двух сеток. Фактически, корреляция сеток представляет собой их поэлементное перемножение и последующее суммирование результатов перемножения. Давайте посмотрим, как ведёт себя корреляция двух сеток, построенных по описанной выше формуле. Наибольший вклад в корреляцию даёт перемножение ячеек, значения которых равны 1. Это соответствует ситуации, когда и в первой, и во второй сетках в ячейках находятся атомы, принадлежащие поверхностям молекул. Получается, что чем больше корреляция двух сеток, тем более подходящими друг другу с точки зрения геометрии поверхностей являются молекулы.


Можно предположить, что наиболее правдоподобные молекулярные комплексы имеют высокую геометрическую совместимость. Тогда получается, что мы можем описать правдоподобие комплекса, образуемого двумя молекулами, через корреляцию сеток молекул, входящих в его состав.


Однако в таком виде данная идея не даёт нам прироста производительности: корреляция двух сеток вычисляется за время $O(N^3)$, где N размер одного измерения сетки, и время работы алгоритма всё ещё будет составлять $O(R \cdot S \cdot N^3)$. Это много. Заметим, что теперь нам не надо искать смещение второй молекулы относительно первой. Смещение молекул мы описываем исключительно в терминах сеток и их корреляции, поэтому достаточно найти смещение сетки второй молекулы относительно сетки первой молекулы. По найденному смещению можно однозначно восстановить сдвиг второй молекулы относительно первой. Теперь можно более точно оценить время работы текущего алгоритма: оно получилось $O(R \cdot N^6)$. Но это очень много, учитывая, что приемлемая точность работы алгоритма достигается при N, имеющем порядок $10^2$.


Тут нам наконец-то приходит на помощь университетская программа курса по алгоритмам. Оттуда мы знаем (или ещё только узнаем), что корреляция двух трёхмерных сеток может быть вычислена за время $O(N^3 \log N)$ для всех циклических сдвигов одной сетки относительно другой. Делается это с помощью алгоритма быстрого преобразования Фурье, более известного как FFT. При таком подходе время работы алгоритма докинга на сетках составляет $O(R \cdot N^3 \cdot \log N)$, что является намного более приемлемым результатом, чем время работы первоначального подхода.


Наконец-то мы можем записать финальную эффективную версию алгоритма докинга на сетках:


complexes = []# строим корреляционную сетку для первой молекулыgrid_for_mol1 = build_grid(mol1) # прямое преобразование Фурье для первой молекулыfft_mol1 = fft_3d(grid_for_mol1) # перебираем все возможные вращения второй молекулы относительно первойfor rotation in rotations:     # поворачиваем вторую молекулу с учётом заданного вращения    rotated_mol2 = rotate(mol2, rotation)     # строим корреляционную сетку для повёрнутой второй молекулы    grid_for_mol2 = build_grid(rotated_mol2)     # прямое преобразование Фурье для второй молекулы    fft_mol2 = fft_3d(rotated_mol2)     # поэлементно перемножаем преобразованные сетки. После этого     # применяем к результату перемножения обратное преобразование     # Фурье. И, казалось бы, магическим образом получаем корреляции     # для всех циклических сдвигов второй сетки относительно первой    correlations = ifft_3d(fft_mol1 * fft_mol2)     # создаём из молекул комплексы, в которых вторая     # молекула повёрнута и сдвинута    rotation_complexes = map(lambda shift_: (mol1, shift(rotated_mol2, shift_)))     # для каждого комплекса мы уже посчитали его правдоподобие     # с помощью быстрого преобразования Фурье    complexes += list(zip(rotation_complexes, correlations)) # сортируем все полученные комплексы по их правдоподобиюcomplexes.sort(lambda (candidate_complex, score): score) 

Тут интересно то, что именно в таком виде алгоритм докинга на сетках используется и по сей день. Все улучшения, которые делаются для повышения точности его работы, затрагивают исключительно способы построения корреляционных сеток, а высокоуровневая структура алгоритма остаётся неизменной.


Улучшение докинга на сетках за счёт статистического потенциала


Алгоритм докинга на сетках бесконечно крут своей простотой и красотой, однако в том виде, в котором он описан выше, алгоритм имеет низкую точность. Дело в том, что на практике одной лишь геометрической совместимости поверхностей молекул не достаточно для того, чтобы делать выводы о правдоподобии формируемого ими комплекса.


Исследователи быстро это заметили и предложили способы учёта дополнительной информации при формировании корреляционных сеток молекул. Так, современные алгоритмы докинга на сетках учитывают информацию об энергии вандерваальсовых и электростатических взаимодействий между атомами и, если речь идёт о докинге антител, информацию о том, где у молекулы расположены петли.


Однако лучший на сегодняшний день алгоритм докинга, Piper, пошёл дальше своих аналогов и предложил способ учёта в процессе докинга на сетках информации о статистическом потенциале. Статистический потенциал это набор чисел, который описывает энергии взаимодействия конкретных пар атомов, рассчитанные на основе экспериментальных данных. Энергия молекулярного комплекса в заданном потенциале вычисляется по следующей формуле:


$E_{SP} = \sum_{I \in N} \sum_{j \in M} SP_{ij},$


где $N$ и $M$ множества атомов молекул данного комплекса, а $SP_{ij}$ энергия взаимодействия атомов типов $i$ и $j$ в статистическом потенциале $SP$.


Это выражение можно представить в виде корреляции двух сеток, что позволяет повысить точность работы алгоритма докинга на сетках. Я был бы рад поделиться теоретическими выкладками о том, как это сделать, но хочется успеть рассказать вам о более интересных вещах. Просто поверьте (или проверьте), что для понимания этих выкладок не нужно ничего, кроме пары фактов из курса линейной алгебры.


Создание статистических потенциалов с разными свойствами представляет большой простор для исследований. Например, один только Piper использует два разных потенциала: DARS (Decoys as Reference State) и aADARS (asymmetric Antibody DARS). aADARS используется для докинга антител, а DARS для докинга остальных видов молекул.


В рамках своей магистерской работы я занимался созданием нового статистического потенциала, предназначенного именно для докинга антител. Изначально предполагалось просто обновить aADARS, пересчитав его на новых экспериментальных данных. Однако в ходе работы выяснилось, что сам подход к созданию потенциала может быть существенно улучшен за счёт учёта информации про электростатические взаимодействия атомов и петли антител. Это привело к созданию нового статистического потенциала WAASP (Widely Applicable Antibody Statistical Potential). Использование WAASP существенно увеличило точность алгоритма докинга HEDGE, разрабатываемого в департаменте, в котором я работаю:


image
Сравнение версий алгоритма докинга HEDGE, использующих разные статистические потенциалы


Что важно, прирост точности является существенным не только относительно версии алгоритма, не использующей статистические потенциалы, но и относительно версий, использующих DARS и aADARS.


Если вам интересно узнать побольше про применение статистических потенциалов в контексте задачи докинга, то на сайте нашей магистратуры есть запись моей защиты (вообще говоря, не только моей). Всего 7 минут, и ваш кругозор расширится необратимым образом!


Кластеризация


Напомню, что кластеризация является следующим этапом работы алгоритма докинга после докинга на сетках. Наличие этого этапа обусловлено тем, что точность докинга на сетках, пусть даже использующего все возможные улучшения, всё ещё оставляет желать лучшего. Зачастую необходимо рассмотреть топ-10000 комплексов, полученных в результате работы докинга на сетках, чтобы найти правильный ответ. А просто отдать пользователю все 10000 комплексов как результат работы алгоритма докинга нельзя, потому что без дополнительного анализа никакой содержательной информации из этого объёма данных получить не удастся.


Основной задачей этапа кластеризации является уменьшение количества кандидатов на правильный ответ. В основе данного этапа лежит достаточно сильное, но необходимое предположение: комплексы, похожие на природные, появляются в результатах работы докинга на сетках чаще остальных. Из этого предположения следует, что результаты работы докинга на сетках разбиваются на несколько больших групп и некоторое количество групп поменьше. Каждая большая группа комплексов соответствует результатам, похожим на определённый природный комплекс, который данные молекулы могут формировать. Маленькие группы соответствуют комплексам, которые попали в результаты работы докинга на сетках по причине его низкой точности и никакие природные комплексы не представляют.


Разбиение множества элементов на группы по принципу сходства элементов называется кластеризацией. Каждая полученная группа называется кластером. В нашем случае в качестве разбиваемого на группы множества выступает множество результатов работы алгоритма докинга на сетках. В качестве метрики сходства элементов множества выбирается классическая для задач структурной биоинформатики метрика RMSD (Root-Mean-Square Deviation). RMSD между двумя молекулярными комплексами вычисляется как среднеквадратичное отклонение координат атомов одного комплекса от координат атомов другого.


Определив множество, которое мы хотим разбить на группы, и метрику похожести его элементов, мы можем воспользоваться любым существующим алгоритмом кластеризации, чтобы решить поставленную задачу. Опять же, чему нас учили в вузе: если не знаешь, какой алгоритм кластеризации взять, возьми иерархическую кластеризацию точно не прогадаешь. Действительно, данный алгоритм очень прост для понимания и гибок в плане настройки своих параметров. Правильную комбинацию параметров можно подобрать при условии наличия выборки, на которой можно произвести настройку алгоритма. На практике оказывается, что алгоритм иерархической кластеризации действительно хорошо подходит для разбиения на группы множества молекулярных комплексов.


После кластеризации отбирается порядка 250 кластеров, имеющих наибольший размер. Для каждого полученного таким образом кластера вычисляется центроид представитель кластера, наименее удалённый от остальных его элементов. Таким образом, мы смогли уменьшить количество кандидатов на правильный ответ с 10000 до 250, однако это всё ещё довольно много. Улучшить данный результат нам поможет следующий этап работы алгоритма докинга.


Минимизация


image
Минимизация структуры молекулярного комплекса


Заключительным этапом работы алгоритма докинга является этап минимизации. Давайте разбираться, почему он так называется и как он работает!


Сначала давайте поймём, что такое энергия комплекса с точки зрения структурной биоинформатики. Возьмём две молекулы, которые формируют данный комплекс, и разведём их на бесконечное расстояние друг от друга. После этого давайте отпустим эти молекулы и понаблюдаем за нашей системой. Если молекулы слиплись в комплекс сами собой, то это значит, что его образование им выгодно. Если молекулы так и остались болтаться, никак друг с другом не взаимодействуя, то можно прицепить их друг к другу, используя внешнее воздействие (например, наши руки, которыми мы уже умудрились раздвинуть молекулы на бесконечное расстояние друг от друга!). Однако это означает, что в природных условиях данные молекулы в комплекс не объединятся.


В итоге энергией комплекса называется количество работы, которую нужно совершить над системой для того, чтобы привести её из состояния, когда две молекулы находятся на бесконечном расстоянии друг от друга, к виду, когда две молекулы сцеплены и формируют данный комплекс. Ситуация, когда две молекулы слипаются в комплекс сами собой, соответствует случаю отрицательного значения энергии: нам не то что не потребовалось двигать молекулы они сами могли бы подвигать что-нибудь, например, маленькую турбину! Ситуация, когда нам всё-таки нужно прикладывать к системе внешние силы, чтобы сцепить молекулы, соответствует случаю положительной энергии.


Отсюда следует вывод, что чем меньше значение энергии комплекса, тем наиболее вероятно его существование в природе: мы так определили энергию. Из этого вывода мы можем почерпнуть две простые, но важные идеи.


Во-первых, если мы сможем уменьшить величину значения энергии какого-то комплекса, то тем самым повысим вероятность его существования в природе. Во-вторых, целесообразно отдавать в качестве результата работы алгоритма докинга комплексы, имеющие наименьшие значения энергии, так как их существование, опять же, наиболее вероятно.


Существуют подходы, позволяющие приближённо оценивать энергии молекулярных комплексов. Одним из таких подходов является использование силовых полей. Фактически, силовое поле есть функция от атомов комплекса, значение которой соответствует энергии данного комплекса, вычисленной с некоторой погрешностью.


У функции энергии есть минимальное значение, которое достигается при определённом расположении атомов комплекса относительно друг друга. Так как энергия комплекса при данном положении атомов является минимальной, то с большой вероятностью структура такого комплекса близка к природной. Таким образом, чтобы приблизить структуру комплекса-кандидата, полученного в результате докинга на сетках и кластеризации, к её природному виду, нам надо найти положение атомов комплекса, при котором энергетическая функция достигает своего минимума.


Процесс поиска минимума функции называется минимизацией. Отсюда и название данного этапа работы докинга!


Минимум функции нас с вами научили искать ещё в школе: ну что там, посчитай производную, найди точки, в которых она обращается в ноль, посмотри на значения функции в окрестностях этих точек победа! В общих чертах идея поиска минимума энергетической функции остаётся такой же. Однако сложностей тут добавляет то, что у нашей функции не одна переменная (как, например, в случае со школьной параболой), а очень много: фактически, каждая координата каждого атома является параметром функции.


Для решения задачи минимизации многопараметрической функции энергии в биоинформатике принято применять градиентные методы. Если совсем просто, то градиент функции многомерный аналог производной. Градиент представляет из себя вектор, направление которого показывает направление наискорейшего роста функции. В точке минимума функции модуль вектора градиента близок к нулю аналогично тому, когда в точке минимума однопараметрической функции её производная равняется нулю.


Однако аналитически найти такой набор параметров функции, при котором её градиент обращается в ноль, невозможно: параметров очень много. Поэтому минимум функции ищется численно. На протяжении некоторого количества итераций параметры функции смещаются в направлении, обратном направлению градиента: градиент показывает, в какую сторону растёт функция, соответственно, убывает она в обратном направлении. В конце концов мы придём к такому набору параметров, при котором функция достигает своего минимума.


image
Пример ситуации, когда локальный минимум функции энергии не является глобальным


Нюанс тут заключается в том, что данный минимум является локальным. В некоторой окрестности данной точки действительно нет набора параметров, при котором значение функции было бы меньше. Но это верно лишь для данной окрестности: где-нибудь подальше очень легко может найтись значение функции, которое меньше данного (пример такой ситуации изображён на соответствующем рисунке). И это, несомненно, проблема. Обычно её решают за счёт добавления в процесс минимизации функции некоторой случайности, которая помогает выйти из локального минимума и продолжить поиск минимума глобального.


В итоге в процессе этапа минимизации мы делаем следующее. Для каждого комплекса, полученного в результате кластеризации, мы изменяем положение координат его атомов таким образом, чтобы энергия комплекса достигла своего минимума. После этого мы ранжируем полученных кандидатов по величине значения энергии и отдаём пользователю 30 комплексов, образование которых является наиболее выгодным с энергетической точки зрения.


Всё, процесс работы всего алгоритма докинга завершён!


Заключение


В этой статье мы с вами разобрали, зачем нужно уметь решать задачу предсказания структуры молекулярного комплекса и как её решают сейчас.


Сама по себе задача докинга очень важна потому, что её точное и быстрое решение обеспечит серьёзное увеличение скорости создания новых лекарственных средств. Существующие подходы к решению задачи на регулярной основе помогают биоинформатикам и структурным биологам создавать инновационные лекарства. Однако текущие алгоритмы докинга всё ещё далеки от идеала, так как требуют большого объёма ручной работы при обработке результатов. Тем не менее это не повод опускать руки: область по-прежнему таит в себе уйму интересных задач и ждёт новых прорывных открытий!


Но даже текущий прогресс в области алгоритмов докинга не был бы возможен, если бы у людей, работающих над решением этой задачи, не было широкого математического (да и жизненного, чего уж там) кругозора. Использование быстрого преобразования Фурье для поиска оптимальных смещений одной сетки относительно другой, кластеризация трёхмерных структур, минимизация функции с помощью градиентных методов все эти идеи достаточно абстрактны. Нужно уверенно владеть соответствующими методиками, чтобы увидеть возможность их использования в практической задаче, а затем корректно (это очень важно!) их применить.


Идеальное высшее образование действительно должно давать студенту и широкий кругозор, и уверенность в полученных знаниях, и умение корректно применять эти знания на практике. Увы, как и любой другой, данный идеал не достижим. Однако это не мешает некоторым образовательным программам к нему стремиться. У нас как раз такая программа. Поэтому если вы хотите стать классным специалистом в области прикладной математики и в будущем заниматься решением сложных, интересных и актуальных задач, то наша программа понятный и серьёзный шаг на пути к достижению этой цели.

Подробнее..

Из студентов в преподаватели интервью с выпускниками магистерской программы JetBrains ИТМО. Часть первая

23.11.2020 18:14:08 | Автор: admin

Преподавательский состав магистерской программы JetBrains и ИТМО Разработка программного обеспечения на четверть (!) состоит из выпускников этой же программы. Пожалуй, это хороший повод для гордости. Мы решили сделать большое интервью с ребятами. Возможно, их истории помогут кому-то решиться начать преподавательскую карьеру, а кому-то поступить к нам на программу.

В первой части наши выпускники и преподаватели Владислав Танков, Дмитрий Новожилов, Дмитрий Халанский, Алексей Зубаков, Артем Хорошев, Александр Садовников, Владислав Кораблинов и Роман Голышев рассказывают о выборе магистратуры, впечатлениях от обучения и отличиях от других программ.

Почему вы поступили на эту программу? Оправдались ли ожидания?

Влад Т.: Я поступал на программу, ориентируясь на качество обучения в Computer Science центре. Я знал некоторых преподавателей и представлял, что будет, безусловно, сложно, но интересно. Относительно ожиданий думаю, оправдались. Я узнал много нового, попробовал заняться неизвестными ранее вещами, а продукт, который мы сделали на хакатоне в магистратуре, в итоге стал моей основной работой. Тогда мы за два дня написали штуку, вокруг которой в итоге выросла команда из восьми человек, а продуктом воспользовались несколько миллионов человек.

Дима Х.: Во время учебы в бакалавриате я случайно повстречался с преподававшим у параллельных групп бывшим студентом этой магистратуры Игорем Жирковым. Он впечатлил меня казавшимся тогда недоступным уровнем всестороннего понимания программирования. Особенно меня поразило, как он оперировал математическими инструментами. А я, надо признаться, в то время был убежден, что математика это про решение уравнений и неадекватных головоломок в духе правда ли, что 10 в степени 1999, если от него отнять 1999, делится на 9 и совсем меня не касается.

Это меня так впечатлило, что я решил бросить все силы на обретение этой мощи. Самостоятельное чтение книжек давалось с трудом, и я решил, что надо получить полноценное образование, где меня бы научили математически мыслить, желательно с привязкой к программированию. Я спросил у Игоря, где можно найти что-то подобное, и был готов ехать куда угодно. Каково же было мое удивление, когда Игорь сказал, что никуда ехать не надо: в СПбАУ есть такая учебная программа. (Ранее программа реализовывалась в СПбАУ. Прим. ред.)

Я увлекаюсь довольно нишевыми вещами, и в этой магистратуре мне удалось найти для себя много познавательного. Здесь каждый найдет что-то по душе. Любите машинное обучение? Пожалуйста! Хотите просто зарабатывать программированием на Java? Для этого здесь тоже все есть, и в довольно интенсивной форме. Компьютерное зрение? Алгоритмы на графах? Интерфейсы для Android-приложений? Сколько хотите. Почти любые связанные с программированием интересы тут поощряются и, скорее всего, вы найдете себе ментора. А если ваши интересы настолько особенные, что связанных с ними специалистов тут нет есть смысл подумать, а не стать ли первым соответствующим экспертом-преподавателем в этой магистратуре. Некоторые предметы начинали преподаваться именно так.

Дима Н.: Про программу я узнал еще в школе. Я получил внушительный багаж знаний по специальности, а также, благодаря практикам и стажировкам, устроился на замечательную работу.

Леша: Я хотел закрыть пробелы в знаниях и укрепить базу, которую дали в бакалавриате. Искал какое-то хорошее место в области программирования, на тот момент это была чуть ли не единственная адекватная магистратура в Питере. Ожидания полностью оправдались. Я до сих пор иногда переслушиваю некоторые курсы и даже посещаю семинары.

Артем: В бакалавриате я учился на физическом факультете СПбГУ, но со 2-3 курса увлекся программированием. Ближе к выпуску я успел освоить основы разработки на C++ и поработать в одной компании, но у меня было чувство, что я многого не знаю в отличие от ребят, которые учились на программистских специальностях. Пришло время задуматься о магистратуре. Внимательно изучив сайт программы и поинтересовавшись у знакомых, я понял, что это именно то место, где могут дать всю необходимую базу в короткий срок. Я пришел сюда за знаниями и опытом и могу с уверенностью сказать, что получил и то и другое в полном объеме.

Влад К.: Я заканчивал 4-й курс в своем любимом УдГУ и раздумывал, чем заниматься дальше. Друг собрался поступать в физическую магистратуру СПбАУ и позвал меня туда же на информатику. Я справедливо возразил, что это невозможно, потому что туда поступают только минимум желтенькие на Codeforces. Он не менее справедливо возразил, что ну и пофиг. Я подумал месяцок и решил отправить заявку. Съездил на собеседование, и меня взяли.

Моим главным стремлением было добавить к теоретическим знаниям практические навыки. Мне это удалось, однако не совсем так, как я ожидал: чаще приходилось учиться чему-то самостоятельно, но у меня появилось понимание, как именно это делать. В итоге, как мне кажется, я все равно отстаю в прикладном плане от многих моих одногруппников. Так я понял, что мне гораздо более интересны теоретические аспекты и что суровая разработка это не мое.

Какие впечатления у вас остались от обучения на программе? Стоит ли что-то в ней изменить?

Влад Т.: С одной стороны, было довольно сложно, особенно первый и второй семестр. С другой стороны крайне увлекательно. Я нашел новых друзей настоящих единомышленников, увлеченных своим делом, познакомился с новыми областями и просто попробовал что-то новое.

Артем: Только положительные впечатления, особенно запомнился первый семестр. Дело ведь даже не в том, что у студентов данной программы огромное количество заданий и практики (хотя это немаловажная черта программы), а в том, что они получают постоянный фидбек от преподавателей, могут почти в любой момент получить ответ на любой вопрос. В свое время для меня было шоком, что можно просто взять и написать вопрос по теме (и не только) в чат курса с преподавателем и максимально быстро получить ответ.

Саша: Впечатлений много! Наверное, большинство из них связаны с первым курсом. Было очень сложно. Пятичасовой сон, отмененные поездки за границу с друзьями, отсутствие свободного времени типичные атрибуты жизни студента первого семестра нашей магистратуры! Сейчас, конечно, понимаешь, что это было не зря. Но повторять, если честно, не очень хочется. А вот что хотелось бы повторить это второй семестр. Там ты уже научился балансировать между учебой и личной жизнью. И прямо ощущаешь себя сверхразумом, который успевает получать от жизни все и знания, и эмоции.

Иногда казалось, что учеба настолько сложная, потому что есть какие-то организационные затыки: то преподаватель не выложил/не проверил домашку вовремя, то сообщил о контрольной накануне ее проведения. Такие моменты, естественно, хотелось исправить! Как мне кажется, это одна из главных причин, почему так много ребят с моего курса в итоге вызвались стать преподавателями в нашей магистратуре.

Влад К.: За два года впечатления самые разнообразные, но скажу, что такая же крутая учеба в моей жизни была до этого только в ЛМШ. Здесь невероятная атмосфера и люди, после обычного университета ты просто испытываешь эйфорию: а что, так можно было?!.. Но конечно, ничто не бывает идеальным, и изменить можно много чего как глобально, так и по каждому курсу в отдельности. Но это больше вопрос для обсуждения с кураторами, мне кажется.

Рома: Сложность прохождения программы целиком зависит от подготовленности студента. У меня были проблемы с теорией (алгоритмы, дискретка), но при этом сравнительно большой практический опыт программирования, что сильно упрощало прохождение практических курсов (Bash, Python, C++, Java). Думаю, тем, у кого не было предварительной подготовки ни в теории, ни в практике, программа дается значительно труднее. Кажется, это важно учитывать при составлении заданий, чтобы не создавать порочный круг я не могу даже понять текущее задание (потому что этот материал совершенно новый для меня) <-> я пропущу его и наверстаю потом.

В последнее время я все чаще вспоминаю курс Software Design, на котором нас учили архитектуре, проектированию, шаблонам и так далее. На мой взгляд, этот курс должен занимать чуть более важное место в учебной программе, особенно с точки зрения практики. Студенты должны не только прослушать, какие бывают архитектуры приложений, но и попробовать их использовать, а в идеале ощутить последствия их неправильного использования (например, за счет работы с легаси-кодом). На текущей работе я осознаю, что самый большой пробел в моих навыках именно в проектировании программ. Возможно, я не одинок, и студентам не помешает более интенсивный курс на эту тему.

Что, по-вашему, отличает эту программу от других магистратур? Как вы пытаетесь реализовать эти отличия в преподавании?

Дима Х.: На мой взгляд, самое ценное в этой магистратуре то, что здесь многие преподают в качестве хобби, а сами работают непосредственно с тем, чему учат. Сам я тоже работаю, да и программирую для души, так что рассказываю студентам о том, с чем сталкиваюсь постоянно, и стараюсь регулярно привязывать происходящее на занятиях к тому, что можно ожидать при попытках задействовать эти знания в реальности. В конце концов какие-то теоретические изыски забудутся после экзамена, а вот реальный опыт, если его удастся донести, осядет надолго.

Дима Н.: Я бы отметил углубленное изучение сложных тем, отсутствие воды в материале. В этой магистратуре действительно учат понимать, что за код ты пишешь, как он работает и зачем это нужно. Я и сам стараюсь следовать этим принципам и, например, при рассказе про какую-нибудь возможность языка не просто показываю, как ею пользоваться, но и объясняю, как она работает под капотом, какие ограничения и возможности имеет. Благодаря этому студенты гораздо лучше понимают суть программ и языковых конструкций, а не просто относятся к ним, как к какой-то магии.

Леша: Я думаю, основное отличие в соучастии и компетентности. У нас есть специальные люди кураторы, которые сопровождают студентов в процессе обучения: помогают решать проблемы, готовят к защите диплома, по многу раз выслушивая докладчиков, регулярно встречаются со студентами (сейчас через Zoom), чтобы собрать обратную связь, и делают еще много всего, что сильно упрощает жизнь студентам и преподавателям все могут сосредоточиться на процессе обучения и не думать о лишнем.

Саша: Нашу программу отличает системность. Ты знаешь, что каждую неделю почти по каждому предмету у тебя будет домашка. Ее надо сделать вовремя, чтобы преподаватель проверил все к следующей паре. Не сделал домашку вовремя недополучил баллы и знания. И так домашка за домашкой! Такой подход хорош тем, что знания с лекций подкрепляются достаточным количеством практического материала и, соответственно, лучше усваиваются. По себе могу сказать: если не потрогать материал с лекции руками, в голове он не отложится.

Я как преподаватель стараюсь сделать так, чтобы студенты не выбивались из ритма домашка-лекция-домашка и им ничего не мешало эти домашки делать: проверяю работы в срок, объективно их оцениваю и оперативно отвечаю на вопросы студентов по условиям задач.

Влад К.: В нашей магистратуре довольно молодые преподаватели! Учиться здесь очень сложно, поэтому я стараюсь создавать для студентов максимально комфортную обстановку, чтобы они не чувствовали себя беспомощно и не боялись активно участвовать в процессе. Я довольно много общаюсь с ребятами, пытаюсь им помогать и направлять в нужную сторону, когда им это необходимо. Ну и сам стиль общения у нас довольно неформальный, что тоже должно помогать. Правда, до обмена мемами конкретно с этими ребятами еще не дошло.

Одним из существенных отличий в нашей учебе мне видится стремление преподавателей действительно научить студентов своему предмету (абсурдно, конечно, что мало где так). Наверное, ребята меня недолюбливают за то, что я часто придираюсь к их решениям и прошу многие моменты подробно прописывать. Но эти придирки служат вполне конкретной цели. Так, в курсе дискретной математики мне важно, чтобы студенты научились грамотно использовать логические рассуждения, не принимали на веру кажущиеся очевидными факты, а выводили их из определений/аксиом.

В случае с алгоритмами ситуация даже более жизненная: на работе нам почти всегда приходится трудиться в командах, поэтому при решении задачи необходимо не просто придумать идею, а объяснить ее товарищам и уметь доказать корректность. Если вы не сможете этого сделать, то здоровый скепсис заставит ваших коллег просто отбросить эту идею, даже если она на самом деле золотая. Поэтому я требую доводить решения до состояния, когда мне точно все в нем понятно. Если я его не понимаю даже зная правильное, другой человек тем более ничего не поймет.

Рома: Мне кажется, что в этой программе принципиально другой уровень отношений между студентами и преподавателем. Когда я учился в бакалавриате, многие преподаватели были в каком-то смысле недосягаемы для меня я никогда не рассчитывал оказаться с ними на одном уровне. Между нами были строго деловые учебные отношения: преподавателю нужно закрыть ведомость, студенту нужно закрыть сессию.

В нашей магистратуре эта граница сильно размыта. Большинство преподавателей работают в продакшене, т.е. когда они не учат программировать, они сами программируют. Это значит, что студенты через несколько лет могут оказаться с ними в одной команде. Это, на мой взгляд, сильно повышает ставки с обеих сторон.

Студент понимает, что его учитель не просто теоретик, который за всю жизнь не написал ни строчки кода, а реальный программист, который пишет код каждый день и зарабатывает этим на жизнь. Поэтому такого человека имеет смысл слушать. А преподаватель понимает, что перед ним его потенциальные сокомандники. И если есть место, в котором он может повысить базовую квалификацию программистов-джуниоров, то оно здесь.

Поэтому я старался взаимодействовать со своими студентами так, будто они мои сокомандники. Мы общались на ты, я не пытался выстроить образ непогрешимого авторитета в их глазах, поскольку на работе это скорее будет минусом, чем плюсом. Я просил их не стесняться задавать вопросы, но при этом стараться как можно больше искать самостоятельно ведь именно таких коллег я хотел бы иметь в своей команде.

В общем, тот факт, что однажды твой студент может прийти к тебе на стажировку или на собеседование и потом будет с тобой работать (а может, и руководить тобой), заставляет взглянуть на ситуацию иначе. Вряд ли преподаватель математики в вузе, натягивающий тройку ленивому студенту, переживает, что этот студент через пару лет вернется в университет и начнет плохо учить других студентов. А в нашей магистратуре это вполне реалистичный сценарий. :)

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru