Привет, это Александр Нозик, и этот пост посвящен еще одной "интересной" магистерской программе (на этот раз на физтехе, совместно с JetBrains, Таврида Электрик и целым списком научных организаций). Про интересность вы решите сами, но программа в этот раз действительно уникальная (пока по крайней мере). Называется она Научное программирование (официальное название "Разработка и применение программного обеспечения в физических исследованиях") и расположена на ФПМИ и ЛФИ в МФТИ. Посвящена не отдельно физике, не отдельно программированию, не отдельно computer science, а стыку всего этого.
Если вы уже поняли, что это про вас, то можно бежать читать подробности и заполнять анкету на сайте программы.
Если нет, то читаем дальше.
Дело в том, что все аспекты нашей современной жизни так или иначе связаны с компьютерами и программированием, наука и инженерия не исключение. Ученые и инженеры существенную часть своего рабочего времени посвящают работе с компьютерами. Если мы говорим про науку, то все начинается со стадии проектирования эксперимента. Мы делаем большие объемы математического моделирования, чтобы понять, что вообще можно измерить и как это лучше сделать. В конце концов, мы не можем работать методом тыка. Современные эксперименты очень дороги, и делать их, не зная заранее, что там можно измерить, очень невыгодно. Дальше нам надо собрать данные, для этого используются разнообразные автоматизированные системы управления. Эти данные нужно хранить (а данных может быть очень много, петабайты). К данным нужно обеспечить удобный доступ, организовать резервное хранение, сервисы по индексации и визуализации. В конце концов данные нужно обработать. А тут уже нужно задействовать весь арсенал современных компьютерных методов работы с данными от параллельных и распределенных вычислений до машинного обучения.
В индустрии проблем не сильно меньше. То же самое математическое моделирование, тот же сбор данных, но также добавляется использование автоматических систем проектирования, инфраструктурные проекты и многое другое.
Во всех этих задачах нужно не только знать соответствующие алгоритмы, но и создавать и поддерживать программные инструменты. Практика показывает, что для этого нужно понимать не только прикладное программирование, но и ту область, в которой решения будут применяться (предметную область). В то же время физики и инженеры должны знать прикладное программирование, чтобы работать с современным программным обеспечением и совершенствовать его.
Как вы, наверное, уже догадались, тут как раз и включается наша магистерская программа. Она организована на стыке областей, и наша цель научить физиков (и вообще "предметников") программировать, а программистов понимать предметную область. Разумеется, невозможно знать все одинаково хорошо. Но тем не менее мы и наши партнеры верим в то, что в будущем профессия физик-программист (или химик-программист, или биолог-программист), то есть тот, кто не просто может написать скрипт на 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Список руководителей постоянно обновляется. Кроме того, если у вас есть задача по научному программированию, под которую у нас не нашлось руководителя, то пишите нам, мы поищем. Ну и разумеется, можно приходить со своим руководителем.
Для того, чтобы примерно понять, о каких задачах идет речь, можно заглянуть сюда и посмотреть тестовые/стартовые задачи, оставленные нашими руководителями с пометкой "Магистратура".
Для начала надо заполнить анкету. В ней укажите свою контактную информацию и тех руководителей, с которыми вы хотели бы работать. Подача анкеты ни к чему вас не обязывает. Вы можете зарегистрироваться, пройти собеседование с руководителем и решить, что вам хочется чего-то другого.
Более подробная и актуальная информация есть на сайте.
Задать вопросы и обсудить разные аспекты научного программирования можно в телеграм-группе нашей лаборатории
JetBrains поддерживает образовательные программы для разработчиков в лучших университетах страны. Мы предоставляем экспертную и финансовую помощь разным направлениям в НИУ ВШЭ, Университете ИТМО, СПбГУ, МФТИ, НГУ и ЛЭТИ. Но несколько программ особенные, они реализуются в тесном партнерстве с компанией. JetBrains участвует в формировании учебного плана, подбирает преподавателей, выплачивает студентам спонсорские стипендии, помогает с организацией практик и стажировок.
В преддверии приемной кампании в вузы рассказываем о наших самых ближайших партнерах бакалаврских программах Современное программирование в СПбГУ и Прикладная математика и информатика в петербургском кампусе НИУ ВШЭ.
Занятие у Александра ХраброваСовременное программирование появилось на рынке образования Петербурга в 2018 году. Прикладная математика и информатика формально открылась в Питерской Вышке также в 2018 году, но фактически переехала из Академического университета, где реализовывалась с 2014 года.
Программы имеют довольно много общего:
1. Тесное партнерство с индустрией
В реализации обеих программ принимают участие ведущие IT-компании. Учебные планы регулярно обновляются в соответствии с потребностями индустрии. Программистские курсы читают разработчики, а математические действующие ученые и заслуженные преподаватели: Денис Москвин, Александр Храбров, Даниил Березун, Богдан Бугаев и др.
2. Индивидуальный подход
Первые два курса студенты изучают базовые дисциплины по математике, программированию и алгоритмам. На старших курсах обязательных предметов значительно меньше, основную нагрузку составляют спецкурсы, которые студенты выбирают в зависимости от своих интересов. Эти спецкурсы складываются в индивидуальные образовательные траектории.
3. Проектная деятельность
Студенты обеих программ работают над семестровыми научно-исследовательскими или практическими проектами под руководством преподавателей или сотрудников компаний-партнеров. Так они получают опыт разработки в условиях, максимально приближенных к реальным.
4. Обратная связь
Четыре раза в год студенты участвуют в анонимных опросах, где высказывают свое мнение о прослушанных курсах и организации учебного процесса. Эти отзывы учитываются при выборе преподавателей и разработке программ.
5. Кураторы
У каждой учебной группы есть кураторы, которые помогают решать организационные вопросы, наладить тайм-менеджмент, расставить приоритеты и справиться со стрессом. Также они могут дать совет по выбору той или иной дисциплины для обучения.
6. Стипендии
JetBrains выплачивает студентам спонсорские стипендии до 15 тысяч рублей в месяц. Также с этого года будут введены дополнительные стипендии для студентов-участников школьных международных олимпиад IOI и IMO. Так, члены сборных получат по 10 тысяч рублей в месяц, а медалисты от 15 до 25 тысяч рублей в месяц в зависимости от уровня награды. Стипендия присуждается на два года первый и второй курсы университета.
Если обе программы такие классные, как же тогда выбрать, куда поступать? Расскажем про особенности каждой из программ.
Особенности программы: Несмотря на высокий конкурс, набор на программу по-прежнему небольшой всего 30 бюджетных и 5 платных мест. Делается это для того, чтобы, с одной стороны, уровень поступающих был равномерно высоким, а с другой чтобы уделять каждому студенту как можно больше внимания. Например, проводить студентам регулярные ревью кода, принимать лично решения математических задач, выезжать всем набором на природу. Всё это создаёт особую камерную атмосферу, в которой студенты всех курсов, преподаватели и организаторы свободно общаются и вместе формируют свою образовательную программу. Со многими студентами СП можно пообщаться в соцсетях.
Вторая особенность программы тесное слияние с практикой разработки и живой наукой. Преподаватели МКН не только преподают, они работают в той области, о которой рассказывают и ставят студентам актуальные задачи на практических занятиях и в семестровых проектах. Прямо на факультете проходит много научных событий, в которых можно участвовать по желанию: семинары, встречи со специалистами, воркшопы и конференции. Студенты участвуют ассистентами в проведении олимпиад (ММО 2020 и 2021), на программах МКН в Сириусе (зимняя научная школа и майская проектная смена), и при желании смогут оказаться в самом центре Всемирного конгресса математиков 2022.
Также МКН отличает свободная траектория обучения: начиная с пятого семестра факультет предлагает каждому выбрать из объединенного списка курсов то, что интересно и нужно студенту. Можно углубиться в смежные разделы математики, можно параллельно развивать свои знания алгоритмов или теории языков программирования, можно пробовать разное и выстроить свою специализацию. По ссылке рассмотрен пример образовательной траектории для желающих заниматься машинным обучением.
Программа СП делает акцент на преподавание различных языков и стилей программирования, что позволяет студентам свободно себя чувствовать в любой сфере ИТ и не бояться выйти за пределы традиционных подходов. В обязательных дисциплинах программы студенты изучают и используют такие языки программирования как Kotlin, Python, C/C++, Assembler, Haskell, Prolog, Go, а в рамках дисциплин по выбору также имеют возможность познакомиться с языками Java, Scala, C#, Rust, Javascript и PHP. Поближе познакомиться с учебным планом программы можно здесь.
Преподаватели: Александр Куликов, Виталий Брагилевский, Евгений Линский, Михаил Сенин и другие. Плейлист с представлениями всех курсов первого семестра от лекторов по ссылке.
Как поступить: Для абитуриентов доступны две траектории поступления:
По ЕГЭ. Нужно сдать математику на 76 и более баллов, информатику на 75 и более, русский язык на 55 и более баллов. Учитываются индивидуальные достижения, подробнее о правилах приема: joinmkn.ru/rules.
Без вступительных испытаний по результатам олимпиад: Всероссийской олимпиады школьников по математике, информатике, физике и астрономии, а также олимпиад РСОШ из списка, доступного по ссылке.
Количество мест: 30 бюджетных и 5 платных.
Где проходят занятия: Все пары проходят в центре Санкт-Петербурга на Васильевском острове. Общежитие квартирного типа (Дом студента) расположено там же, в двадцати минутах ходьбы.
Полезные ссылки:
Канал на YouTube кроме записей лекций и разбора задач, появляются ролики с преподавателями и студентами;
Студенты СП готовы ответить на любой вопрос в удобном мессенджере: контакты студентов.
Факультет математики и компьютерных наук СПбГУ объединяет три бакалаврские программы: кроме СП, это программа Математика, возникшая на базе исследовательской лаборатории им. П.Л. Чебышева, а также программа Науки о данных, поддерживаемая компанией Яндекс. Студенты разных направлений часто пересекаются за время учебы, помогая друг другу формировать широкий кругозор и изучать разные варианты карьеры.
Особенности программы: Первый принцип подготовки на ПМИ обучение только той математике, которая ориентирована на практику. Современному программисту прежде всего необходимы прикладные навыки для дальнейшей карьеры. Если преподаватель математики не может объяснить, зачем тот или иной раздел его курса нужен программистам, то лучше его не читать.Второй принцип обучение программированию с первого курса, причем
не в теории, а на практике. В первый же год студенты проходят двухсеместровый курс по C++, семестровый курс по Python и Unix, большую часть полуторагодового курса по алгоритмам и структурам данным. Также с самого начала обучения студентов погружают в проектную деятельность. На первом курсе все работают над учебными проектами на С++, на втором пишут на Java или Kotlin. О некоторых проектах можно почитать в блоге факультета на Хабре: анализатор C++, приложение для визуализации аттракторов, гексагональные шахматы, футболка с контролем осанки.
С третьего курса проекты становятся совсем серьезными. Студенты либо решают практические задачи от крупных IT-компаний, либо занимаются научными исследованиями, например для JetBrains Research.
Следующая особенность программы это специализации на старших курсах. Сейчас студенты могут выбрать одно из пяти направлений: машинное обучение, промышленное программирование, теоретическая информатика, теория языков программирования и биоинформатика. В каждой специализации есть обязательные дисциплины (например, для машинного обучения это Базы данных, Методы оптимизации, Численные методы, Deep learning, Обработка естественного языка, Анализ изображений и Глубокое обучение с подкреплением), но часть предметов студент выбирает самостоятельно или вместе с научным руководителем. Полный список дисциплин есть на странице.
Еще одна особенность, характерная для всей Высшей школы экономики майноры. Если кратко, это дополнительное направление обучения, которое не должно совпадать с мейджером основным направлением (в нашем случае, это прикладная математика и информатика). Майнор изучается на втором и третьем курсе бакалавриата, состоит из четырех последовательных дисциплин. Например, студенты могут изучать предпринимательство, UX-дизайн или бизнес-коммуникации. Со следующего года все майноры в Вышке станут общекампусными, т.е. студенты могут учиться у ведущих преподавателей из Москвы, Нижнего Новгорода или Перми. Многие майноры читаются на английском языке. Полный каталог майноров для 2020/2021 года.
И последняя, но одна из самых приятных особенностей: набор в Питерской Вышке больше, чем в СПбГУ, что делает программу более доступной для абитуриентов, поступающих по результатам ЕГЭ. Если же все бюджетные места займут абитуриенты с БВИ, Вышка традиционно добавляет 25% мест за счет собственных средств для поступающих по ЕГЭ.
Преподаватели: Александр Омельченко, Сергей Копелиович, Егор Суворов, Тимофей Брыксин, Алексей Шпильман, Иван Ямщиков и др.
Как поступить: Тут также две траектории поступления:
По ЕГЭ. Нужно сдать математику и информатику на 75 и более баллов, русский язык не менее, чем на 60 баллов. Проходной балл в 2020 году 297 за три экзамена.
Без вступительных испытаний по результатам олимпиад. Подробная информация о льготах, доступных олимпиадникам, есть на странице.
Количество мест: 60 бюджетных и 40 платных.
Где проходят занятия: Все занятия проходят в новом корпусе университета по адресу ул. Кантемировская, д.3А, в десяти минутах на транспорте от Петроградской. Студенческое общежитие расположено на улице Герасимовской, в получасе езды от корпуса университета.
Полезные ссылки:
YouTube-канал с записями лекций, видео с мероприятий программы и информацией для абитуриентов.
Тимоха, учеба и стажировки Telegram-канал студента первого курса ПМИ Тимофея Василевского, где он рассказывает о себе, учебе и стажировках =)
В этом году на факультете Санкт-Петербургская школа физико-математических и компьютерных наук открывается еще одна программа, поддерживаемая JetBrains Анализ данных в финансах. На ней будут готовить специалистов в области финансовой математики.
Существует много полезных инструментов, которые помогают автоматизировать рутинную работу и тем самым облегчить жизнь разработчика.
Выпускнику и преподавателю Computer Science Center, Равилю Галееву, пришла идея собрать такие инструменты и технологии в один курс и познакомить студентов с ними. За пример такого курса были взяты The Missing Semester of Your CS Education от MIT, Software Carpentry и cs50.
В этом посте мы собрали видеолекции курса Практический минимум и материалы к занятиям. Благодарим Равиля за подборку!
Набор в Computer Science Center 2021
Буквально пара слов о том, что такое ядро
Набор исторических фактов (от Unix к Linux)
Файловая система
Пользователи
Файлы
Процессы
Unix way
Статьи
Wikipedia History of Unix
Книги
Brian Kernighan and Rob Pike - The Unix Programming Environment
Peter Seibel - Coders at Work: Reflections on the Craft of Programming
Steve Parker - Shell Scripting: Expert Recipes for Linux, Bash, and More
David Griffiths and Dawn Griffiths - Head First C
Видео
Александр Смаль История Unix систем
Александр Смаль Пользователи, файлы и процессы
Курсы
UNИX ПО GNU/Linux
Stepik Введение в Linux
bash как REPL
Unix way
Шебанг
make
Статьи
The first web page, viewed by the first web browser, on a teletype, retrocomputing completeness
Software carpentry make
Книги
Ian Miell Learn Bash the Hard Way
Видео
Александр Смаль Bash скрипты
Виктор Ашик 008. Командная строка Unix
Виктор Ашик 004. Командная строка Unix
Brian Will Unix terminals and shells part1 part2 part3 part4 part5
Евгений Линский Основы C++. Лекция 2
Слайды/Презентации
Adrien Mahieux Bash for production systems
Bash-скрипты из реального мира
git
commit
branch
merge
git flow
github
Статьи
Евгений Артюхов Ежедневная работа с Git
Vincent Driessen A successful Git branching model
Chris Beams How to Write a Git Commit Message
Книги
Scott Chacon and Ben Straub Pro Git
Видео
Марат Мавлютов 002. Системы контроля версий
Марат Мавлютов 003. Системы контроля версий
missing semester mit Lecture 6: Version Control (git)
Потренироваться
groff
LaTex
XML, JSON, YAML
Markdown, AsciiDoc
GraphViz, PlantUML
Статьи
Дмитрий Переверза Зачем нам UML
Поташников Николай PlantUMLвсе, что нужно бизнес-аналитику для создания диаграмм в программной документации
Иван Пономарев Презентация как код
Иван Кочуркин Современный формат презентаций
Амет Умеров Как я диплом в LaTeX писал с GitHub, Docker и TravisCI
John Gruber Markdown
Matt Welsh Writing man Pages Using groff
Eddie Smith From boiling lead and black art: An essay on the history of mathematical typography
Книги
К. В. Воронцов LATEX в примерах
Видео
Александр Смаль LaTeX
Владислав Танков Terraforming Clouds Видео
Tony Ibbs A brief history of text markup languages Видео Слайды
Самарев Роман Языки веб-программирования. SGML, HTML, CSS | Технострим
Слайды и другие материалы
Tony Ibbs A brief history of text markup languages
Борис Демешев latex_examples
Markdown cheatsheets
Разное
Регулярки
grep
sed
awk
Статьи
Quantifiers (The Java Tutorials > Essential Classes > Regular Expressions)
Bash-скрипты, часть 7: sed и обработка текстов / Блог компании RUVDS.com / Хабр
Видео
Corey Schafer Regex Tutorial
Александр Смаль Регулярные выражения
Oliver Wegner sed basics
Михайло Иванкив Как я однажды верстал форму регистрации
Слайды и другие материалы
Debuggex: Online visual regex tester. JavaScript, Python, and PCRE.
regex - Greedy vs. Reluctant vs. Possessive Quantifiers - Stack Overflow
Разбираемся как работает посылка пакетов
Рассматриваем простейшие утилиты работы с сетью
Знакомимся с DNS, CDN, VPN и другими словами на три буквы
Пишем сервер на сокетах
Материалы
Julia Evans Networking!
HTTP
REST
Статьи
Видео
Разное
chroot
Docker
Docker compose
Статьи
hexlet docker
How to Run Multiple Linux Distros Without Virtualization - Make Tech Easier
docker - What is the difference between CMD and ENTRYPOINT in a Dockerfile? - Stack Overflow
Видео
Solomon Hykes Introduction to Docker
Jake Wright Docker Compose in 12 Minutes Learn Docker in 12 Minutes
Mumshad Mannambeth Kubernetes for the Absolute Beginners
Курсы
Разное
ООП
Паттерны
Многослойная архитектура
Статьи
Книги
Курсы
Видео
Greg Wilson What We Actually Know About Software Development, and Why We Believe Its True
John Ousterhout A Philosophy of Software Design
Jonathan Blow Preventing the Collapse of Civilization
Тестирование
Логгирование
Статьи
Brian Kernighan Code Testing and its Role in Teaching
Tracing microservices with Zipkin and Kibana - merapar - Medium
Видео
UNИX 08. Тестирование
Анатолий Островский Логирование и трассировка запросов. Best Practices
Антон Бевзюк Демонстрация TDD на Java
Jakub Nabrdalik Improving your Test Driven Development in 45 minutes
Хеширование, контрольные суммы
Авторизация vs Аутентификация; JWT
Обмен ключами Диффи-Хеллман
RSA
TLS
Двухфакторная аутентификация
Статьи
Encode/Decode text & files to Base64 in Browser with Base64 Converter
Введение в KDF на примере решения криптографического ребуса / Хабр
Как HTTPS обеспечивает безопасность соединения: что должен знать каждый Web-разработчик / Хабр
Diagrams And Movies Of All The OAuth 2.0 Flows - Takahiko Kawasaki - Medium
OAuth 2.0 простым и понятным языком / Блог компании Mail.ru Group / Хабр
Видео
Hubert Sablonnire 100% Stateless with JWT
Laurens Van Houtven Crypto 101
Diffie Hellman Key Exchange by khan academy (смотреть с середины)
Поздняков С.Н. НОД. Расширенный алгоритм Евклида.
Книги
С. Рыбин, С. Поздняков Дискретная математика
М. Бабенко М. Левин Введение в теорию алгоритмов и структур данных
от make
к TravisCI
dockerhub
Статьи
Database version control Liquibase versus Flyway - robloxro - Medium
5 Blue-Green Deployment Best Practices for a Smooth Release | BlazeMeter
Видео
Денис Чернилевский Инструменты непрерывной интеграции
Разное
Anatomy of a Continuous Integration and Delivery (CICD) Pipeline
Разбираемся, почему /dev/random
печатает
краказябры
Статьи
Что нужно знать каждому разработчику о кодировках и наборах символов для работы с текстом
Что нужно знать каждому разработчику о кодировках и наборах символов для работы с текстом, часть 2
An Implementation of Unicode Normalization - Concerning Pharo - Medium
Видео
Андрей Акиньшин Поговорим про арифметику
Computerphile Floating Point Numbers
Tomasz Nurkiewicz Charbuster: 10 mitw o Unicode Слайды
Tomasz Nurkiewicz Krtka historia czasu Слайды
Александр Смаль Кодировки
Adrian Furtuna Practical Exploitation of rounding vulnerabilities in banking applications
Исключения
Дебаг
Статьи
A Crash Course on the Depths of Win32 Structured Exception Handling
Trapflag-Tracing I: Observing the Execution of a Program from Within Itself
Книги
Brian Kernighan and Rob Pike - The Practice of Programming
Видео
Harvard CS50 Introduction to GDB a tutorial
Harvard CS50 GDB
Pawe Moll How do debuggers (really) work
Кирилл Кринкин Отладка в Linux. Краткие сведения о gdb
Курсы
Кирилл Кринкин Основы программирования для Linux
Разное
Делитесь в комментариях своими рекомендациями материалов, которые пригодились вам.
Помимо лекций и материалов студентам CS центра на курсе доступны домашние задания. Если вы хотите проходить ещё больше курсов по разным направлениям, приходите поступать.
CS центр это вечерние курсы по математике и программированию. Занятия проходят в Санкт-Петербурге и в Новосибирске. Жители других городов могут поступить на обучение в удалённом формате.
Чтобы поступить:
заполните анкету на сайте до 10 апреля,
решите задания онлайн-теста до 11 апреля,
участвуйте в онлайн-экзамене в конце апреля-начале мая,
пройдите собеседование в мае-июне.
Для тех, кто успешно справится со вступительными испытаниями, занятия начнутся в сентябре. Будьте готовы тратить на учёбу хотя бы 15 часов в неделю в течение двух или трёх лет. Если вы увлечены компьютерными науками или программированием, хотите развиваться в этих областях, любите учиться, то осваивать курсы и работать над проектами будет интересно и полезно.
Задать вопросы про набор можно в телеграм канале или по почте info@compscicenter.ru.
До 10 апреля продолжается набор на вечерние курсы по математике и программированию в CS центре. Computer Science Center это совместный проект Школы анализа данных Яндекса, JetBrains и Computer Science клуба при ПОМИ РАН. Курсы проходят очно в Санкт-Петербурге и Новосибирске, жители других городов могут заниматься дистанционно. Обучение в Computer Science Center бесплатное.
На какие направления открыт набор, как поступить, и зачем вообще оно вам надо, подробно рассказываем под катом.
Большинство наших студентов учатся в вузах или работают, поэтому расписание составлено так, чтобы занятия можно было совмещать с основной деятельностью. Однако будьте осторожны: на учёбу в Computer Science Center придется тратить не менее 15 часов в неделю. Если у вас недостаточно времени (или мотивации), советуем начать с онлайн-курсов на платформе Stepik.
Длительность обучения два или три года по выбору студента. За это время нужно пройти не менее 12 курсов: часть из них обязательная, часть вы выбираете сами. Обязательные курсы зависят от направления обучения. Для поступающих в 2021 году будут открыты три направления (позже вы сможете выбрать одно из них или даже несколько сразу):
Computer Science,
Data Science,
Software Engineering.
Подробнее обо всех направлениях на сайте. Для выпуска студенты проходят три семестра практики или научно-исследовательской работы (примеры есть на этой странице).
Чтобы стать студентом или студенткой CS центра, нужно справиться с вступительными испытаниями:
заполните анкету на сайте до 10 апреля,
решите задания онлайн-теста до 11 апреля,
участвуйте в онлайн-экзамене в конце апреля-начале мая,
пройдите собеседование в мае-июне.
Для кандидатов, которые успешно прошли отбор, занятия начнутся в сентябре 2021 года.
Если вы еще не решили, стоит ли ввязываться в эту авантюру, посмотрите на отзывы выпускников:
Станислав Гордеев, разработчик игрового движка в People Can Fly (Варшава), выпускник 2018 года направления Software Engineering:
Когда-то давно, в сентябре 2014, будучи ещё студентом-физиком, я случайно наткнулся на хабро-статью про онлайн-курсы на Stepik, заинтересовался и прошёл курсы по C++ и алгоритмам, кроме того, узнал о CSC. На тот момент у меня помимо интереса появилась довольно амбициозная цель попасть в большой gamedev. Поступление оказалось совсем не лёгким и до последнего дня с письмом о зачислении я не верил, что всё получится. Моё обучение началось в 2016, и с тех пор я семимильными шагами приближался к своей цели. А все из-за неповторимой атмосферы знаний, амбиций, дружелюбия, которая не позволяет сидеть на месте, которая заставляет поверить в себя. Сейчас я с уверенностью могу сказать, что моя цель осуществилась в первую очередь благодаря CS центру, потому что это больше, чем просто курсы. Старайтесь, и у вас всё получится.
Анна Атаманова, разработчица в Яндексе, выпускница 2016 года направления Data Science:
Почему СS центр это дико круто:
курсы! (всё новое и интересное по основным направлением центра тут-тут-тут);
увлечённые своим делом преподаватели (таких людей в любом случае приятно слушать);
мотивированные, заинтересованные студенты (да у них можно узнать чуть ли не больше, чем на паре);
проекты! стажировки! (опыт, реальные задачи);
кроме того, любящие кураторы успевают заботиться о дружественной атмосфере (постоянные плюшки в виде игротек, выгулок на праздники итп это здорово).
Артемий Пестрецов, разработчик в JetBrains, преподаватель CS центра, выпускник 2019 года направлений Data Science и Software Engineering:
Как я и ожидал, CSC стал важной поворотной точкой в моей карьере. Все три года я кайфовал от процесса обучения, сумел закрыть старые пробелы в знаниях и узнать много нового. Наверное, самое важное следствие гибкой системы выбора курсов и практик возможность пробовать разные дисциплины и в итоге найти себя. За время обучения в центре я разрабатывал распределенные системы, занимался машинным обучением и создавал инструменты для разработчиков. В итоге я нашел работу в интересующем меня направлении в крутой компании. А ещё в центре очень классная тусовка, с которой вы так или иначе будете пересекаться на протяжении всей карьеры.
Все отзывы можно посмотреть на этой странице.
Для тех, кто нашел в себе силы дочитать до этого места, бонус! Перед тестом вы можете потренироваться и порешать задачи прошлых лет. Но помните, что 10 апреля тренажёр превратится в тыкву, так что лучше не откладывать.
Ну и самое последнее: 31 марта состоится День открытых дверей для поступающих в CS центр. Кураторы подробно расскажут про направления и формат обучения и ответят на все ваши вопросы. Зарегистрироваться можно здесь.
Ждем будущих студентов Computer Science Center!
Два года назад Computer Science Center провел экспериментальный запуск курса по управлению продуктами, о результатах которого мы рассказывали ранее. Эксперимент удался, и в 2020-21 учебном году прошла уже полноценная годовая программа повышения квалификации с поправкой на новые идеи и вынужденный онлайн-формат. Сегодня выпускники нашей программы поделились своими историями: почему они решили развиваться в продакт-менеджменте, как совмещали учебу и работу и с какими результатами вышли с курса.
До 20 июня открыт набор на третий поток обучения по направлению Product Management с преподавателями и наставниками из ведущих мировых IT-компаний. Подробнее о школе смотрите в записи Дня открытых дверей онлайн и на нашем сайте.
Год назад я решила сменить сферу деятельности и попробовать сделать продукт в той предметной области, в которой работала уже много лет. У меня было много опыта, понимание проблем пользователей, идей по развитию продукта, но очень не хватало уверенности в своих силах хотелось научиться принимать решения не только на основе чутья, но и подкреплять их теорией и овладеть инструментами продакта.
Я дважды пытался запустить стартап и дважды спотыкался о собственную некомпетентность. Профессия Product Manager предполагает, что ты знаешь как из пункта А привести продукт в пункт Б. Когда я увидел, что на продакта будут учить в Computer Science Center, я сразу подал заявку: все мои знакомые, которые проходили курсы в CS центре, говорили о лучшем опыте обучения в своей жизни.
Меня не обманули. Я учился весь год, прошел путь от скачивания Figma до презентации прототипа, от робкого опроса в чатике до профессионального кастдева со скриптом. Преподаватели мотивировали, давали много домашки и жестко оценивали. В спикерах не было случайных людей: мы общались с фаундерами, продактами, маркетологами и дизайнерами. Не слушали, а на каждом занятии решали конкретные прикладные кейсы.
Будь у меня возможность, я бы прошел эту школу еще раз. Зная организаторов, могу гарантировать, что курс станет еще лучше.
Я хотел изменить карьерную траекторию это очень значимое для меня решение. Раньше я работал в сфере ядерной энергетики: занимался как инженерными задачами, так и развитием бизнеса. Понимал, что хочу качественных изменений: новых знаний и практики для старта в IT. Обучение в школе по управлению продуктами от CS центра было для меня этой возможностью. С одной стороны, что-то близкое и знакомое (менеджмент, инженерия и бизнес-анализ), с другой новая сфера инженерии (цифровые продукты).
Результат сейчас обучение завершено. Закрыв одну дверь, я открыл две новые: Business Аnalysis и Product Management. Сейчас я работаю в IT-компании и двигаюсь по треку управляющего цифровыми проектами, потому что мне нужен базовый опыт. После перейду в управление продуктами. Рассчитываю совершить карьерный маневр в течение этого года.
Во время отбора советую выложиться по полной, особенно при записи видео. Постарайтесь посмотреть и оценить, чем вас привлекает работа продакта, или что интересного и непонятного в этой профессии.
Собеседование с организаторами это челлендж, к которому невозможно подготовиться! Нужно не бояться, быстро думать, выдавать много идей, не мяться и не мямлить. Команда организаторов не звери: кусаться не будут, но точно попытаются испытать вас на прочность, так как работа продакта это всегда вызов.
Самое сложное в отборе ответить на три довольно глобальных вопроса в двухминутном видео. Съемка этого видео заняла у меня пару часов: хотелось сделать что-то задорное, но информативное о себе и моем опыте. В итоге все получилось: благодаря видео я попала на собеседование, а после него и на курс. Если у вас совсем нет знаний о работе IT-продуктов, для подготовки к интервью рекомендую послушать лекции из Школы менеджеров Яндекса.
Во время собеседования кураторы и преподаватели школы хотели оценить мой подход к созданию продуктов, софт-скилы и представления о том, как должен создаваться продукт. Поскольку курс рассчитан на начинающих, интервьюеров скорее интересовал ход рассуждения, а не наличие правильных ответов. От этого разговора у меня осталось очень приятное впечатление. Было интересно порассуждать над вопросами и проблемами из кейсов.
Совет: если вам кажется что вы не знаете правильного ответа не уходите в себя, а начинайте рассуждать вслух. Диалог с интервьюерами поможет вам избежать эффекта лестницы и, возможно, даже найти отличное решение уже в ходе интервью.
На задания уходило довольно много времени и сил, особенно в начале. Когда слишком много неопределенности, есть страх пойти не тем путем и оказаться в ситуации, что все сделанное нужно выбросить и начать сначала. В общем, как и в жизни, когда начинаешь делать продукт. В этом смысле курс стал отличным тренажером по прокачке не только знаний, но и собственного упорства, гибкости, умении довести начатое до результата.
Заметила, что в целом стала мыслить по-другому: мозг начал очень быстро генерировать идеи и так же быстро их критиковать и свои, и чужие. Очень полезным оказался навык посмотреть на любую идею с рациональной точки зрения и отойти от парадигмы я придумал крутую штуку, сейчас я завоюю мир. Я окончательно убедилась, что хочу заниматься продакт-менеджментом дальше. А еще за этот год сформировалась привычка все время учиться: теперь не могу остановиться и просто посмотреть в свободное время сериал, все время уходит на прокачку каких-то компетенций.
Учебы было очень много. Во-первых, тут нет лекций это оставьте для YouTube. Каждое занятие решение практической задачи с однокурсниками в ограниченное время, потом фидбэк от преподавателя. В первом семестре надо пройти путь от гипотезы до запуска продукта в составе команды тут можно работать бесконечно. Пару раз ловил себя в 6 утра, зарывшись в прототипирование или в оценку рынка. Самое важное в школе, что вы будете учиться работать в команде. Не в компании друзей, а с незнакомыми людьми короче говоря, все будет пугающе близко к действительности.
Во втором семестре будут нагружать не меньше: каждую неделю преподаватели задают массивные домашки, цель которых развить вас в сбалансированного продакт-менеджера. Мне понравились домашки по маркетингу, дизайну и архитектурным требованиям.
По окончании курса я получил три оффера на позицию продакт-менеджера. В конце учебного года пришло осознание, что я только в начале пути. Надо погружаться, углублять экспертизу во всех областях. Но места, где можно понять, что именно надо знать, в каком объеме, о чем мечтать и как этого достичь, лучше этого курса вы не найдете.
Ключевой вопрос во время учёбы грамотное планирование и организация. Первый семестр был непростым работа в удаленном режиме, в распределенной команде. Каждую неделю новые задачи, причем совершенно нетипичные для меня. Я справился с этим темпом благодаря тому, что мы в команде помогали друг другу, и той самой командной ответственности. Всем было тяжело совмещать учебу с работой, однако вечерний формат и удаленка помогли сделать это приятным событием. Я очень горд результатом первого семестра.
Второй семестр был менее динамичным, однако тут настало время прохождения индивидуальной практики в компаниях. Мне повезло попасть к хорошему ментору Матвею Брыксину, Product Lead в Arrival. Нагрузка была умеренной, в этот раз я успевал делать задачки хорошо, а не в режиме стартапера, которому нужно было вчера. Работая для корпорации, я получил совершенно другой опыт. Мне было интересно заниматься реальной проблемой бизнеса.
Когда я рефлексирую на тему школы, то слово, которое приходит на ум это живой. Люди на курсе живые и очень разные, как преподаватели/кураторы, так и студенты. Благодаря этому в рамках курса создается очень благоприятная и дружелюбная атмосфера получения новых знаний. Все готовы делиться друг с другом опытом, информацией, фидбэком. Даже сама программа школы специально подстраивается под поток.
Мне было комфортно общаться с организаторами и преподавателями, я быстро почувствовал, что все на курсе Свои. Сконнектиться с ребятами было чуть сложнее: нас много, общения друг с другом меньше, и только онлайн. В основном мы взаимодействовали на воркшопах, во время практических заданий, или уже в команде при работе над проектом.
Уже к концу первого семестра у нас сложилось настоящее дружеское общение с напарницей по проекту поддерживающее и внимательное. И продолжается до сих пор, за рамками школы, чему я отдельно рад! К концу второго семестра появилось чувство, что узнал многих ребят. Отдельно понравилось, как каждый из студентов приносил в обсуждение свой бэкграунд, а с ним часто и новый угол взгляда на вопрос.
Несмотря на то, что курс требовал много времени и усилий, общий настрой помогал не терять интерес. Преподаватели на лекциях заряжали энтузиазмом и любовью к своему делу. Мотивировала поддержка организаторов, кураторов и студентов. Мы вместе генерировали идеи, проводили друг с другом интервью для проверки гипотез, делились контактами и опытом.
Весь полученный багаж знаний и связей я буду максимально применять в карьерном росте. Искать возможность приложить свои знания на текущем месте работы. Стараться смотреть на принимаемые решения в компании новыми глазами. Думать, как я могу открывать свои проекты.
Моя позиция в компании не изменилась, я все также отвечаю за клиентский опыт в одном из сервисов Яндекса. Однако теперь я строю процессы в поддержке с учетом знаний о продукте, это оказалось супер полезно. В июне я немного передохну от учебы и буду искать работу продактом или брать больше продуктовых задач в рамках клиентской поддержки.
Знания, которые я получил в процессе обучения, помимо собственно понимания, какие процессы и фреймворки существуют в области создания продуктов, значительно расширили мой профессиональный и общий кругозор. Хоть я и не планирую в ближайшее время переходить на позицию продакт-менеджера, многое я смогу применить в роли Lead-engineer. Большая часть вопросов относительно ожиданий бизнеса и прогнозирования хода проекта стали разрешимы с меньшим объемом коммуникаций. Да и возможность видеть что-либо на большем уровне абстракции само по себе прекрасно и интересно.
Курс был однозначно полезен, и я рад, что смог дойти до конца и получить такие ценные знания!
Курс и общение в рамках него помогли мне взглянуть на уже имеющиеся знания под новым, продуктовым углом, что невероятно круто и полезно. Неважно, какая тема рассматривалась, занятия помогают заново переосмыслить ее, даже если тебе казалось, что это я уже знаю. А еще общение и обмен знаниями на курсе помогают подзарядиться внутренней мотивацией брать и пробовать.
Мне понравилась вроде бы простая мысль, что вся задача сделать хороший интерфейс вертится вокруг учитывания особенностей человека от строения тела до специфики восприятия и паттернов мышления. И как гармонично вокруг этого наслаивается всё остальное в теории дизайна.
У меня бэкграунд разработчика, и для меня оказалось важным обсудить ощущения продакта от сделанной работы, особенно на определенном этапе развития продукта. Например, у программистов после написания кода результат работы видно наглядно. А продакт при проработке идей часто ходит кругами, отбрасывая большую часть неработающего. И хорошо, если в сито останется немного золота, ведь на коротком интервале иногда просто ничего не срабатывает. В связи с этим мне понравился взгляд ментора практики Татьяны Васильевой на часть работы продакта, как на своеобразное разбрасывание семян идей в свою и чужие головы, с последующим бережным наблюдением за их прорастанием и метаморфозами, и своевременным подхватыванием удачных плодов, иногда падающих с веток коллективного разума.
Пришло понимание, что чтобы делать хорошие продукты, недостаточно знать разные фреймворки и инструменты и уметь работать с людьми. Не менее важны вера в продукт и команду, умение не сдаваться и не терять мотивацию, когда что-то не получается или твоя идея себя не оправдывает.
Здесь и сейчас мир меняется слишком быстро, чтобы работали готовые рецепты. Поэтому приходите учиться думать! Думать опережая изменения, которые с космической скоростью происходят в реальности. Видеть мир так, чтобы ни один аспект не ускользнул от вашего мышления. Формировать сеть профессиональных контактов, чтобы решать сверхсложные задачи. Создавать продукты, которые создают будущее.
Заявки принимаются до 20 июня на https://pmcsc.ru/ ;)
Computer Science клуб это открытые лекции по компьютерным наукам в Санкт-Петербургском отделении Математического института РАН. Филиалы CS клуба действуют в Новосибирске и Казани. В связи с эпидемией все лекции осеннего семестра проходили онлайн и были доступны всем желающим вне зависимости от их местонахождения. Видеозаписи этих курсов выложены на сайт клуба и в канал на ютубе.
В осеннем семестре читались следующие курсы:
Кроме курсов, состоящих из нескольких лекций, в клубе проходят доклады Computer Science семинара - это открытые лекции от действующих учёных, популярно рассказывающие о какой-то теме. В этом семестре у нас были следующие доклады:
Также на базе Computer Science клуба проходили семинаре по курсу "Алгоритмы: продвинутые главы" от Константина Макарычева. Константин записал видеолекции на русском для курса, который он читает в Northwestern University в США. На семинарах были очень подробные и интересные обсуждения. Семинары вели Александр Шень (LIRMM, Монпелье) и Илья Разенштейн (Microsoft Research). В качестве приглашённого лектора выступал Григорий Ярославцев (Indiana University).
Более того, на сайте вы можете найти материалы и видеозаписи большинства курсов, которые когда-либо читались в клубе. Список курсов.
Следующий семестр также будет проходить в режиме онлайн. Подписывайтесь на наши новости в соцсетях, чтобы ничего не пропустить. Ссылки вы найдёте в "подвале" на сайте клуба.
Привет, Хабр!
Недавно Егор Суворов, преподаватель курса по С++ в Питерской Вышке, прочитал лекцию о некоторых особенностях языка для участников Всероссийской олимпиады школьников по информатике. Егор рассказал о шаблонах в C++, а также где и зачем они возникают: обобщённое программирование структур данных и алгоритмов, функторы и лямбда-функции, как можно повысить уровень абстракций и упростить код.
Важное уточнение: эта лекция не попытка объять необъятное, а краткий экскурс по полезным возможностям C++ для членов олимпиадного сообщества: от извлечения кода в класс до внутренних механизмов работы лямбда-функций и щепотки ограничений (constraints) из C++20. Если интересно, приглашаем к просмотру.
Подробные таймкоды00:53 Что нужно знать перед просмотром лекции
02:00 Особенности С++
03:10 Хорошие источники знаний и практик в C++
04:45 Классы. Стек с минимумом
06:21 Создание своей структуры
09:03 Запрещаем прямой доступ
09:53 Упрощаем отладку
10:29 Шаблоны классов
11:24 Статический полиморфизм в разных языках
12:03 Оптимизация
12:27 Ошибки компиляции и инстанцирование
13:40 Ограничения (С++20)
15:01 Шаблоны функций
15:27 Автовывод параметров
16:21 Class Template Argument Deduction (CTAD, С++17)
16:56 Ошибки компиляции и инстанцирование
17:47 Обобщенное программирование
19:12 Вложенные типы
20:10 Продвинутые техники
20:33 Функторы
21:00 Функциональные объекты
21:56 Как параметр шаблона
22:30 Функторы с состоянием
23:26 Функторы с состоянием для контейнеров
24:42 Лямбда-выражения
25:38 Расшифровка лямбды
26:28 Сохранение в переменную
27:27 Рекурсия не поддерживается
27:56 Захваты по значению и ссылке
29:18 Захват с инициализатором
30:29 Комбинированные захваты
31:16 Применение функторов
32:15 IIFE
33:18 Вектор лямбд и стирание типов (type erasure)
34:36 Функтор как параметр функции
35:51 Функтор как поле класса
37:45 Более сложные структуры данных (декартово дерево, дерево отрезков)
38:34 За кадром: лямбды-компараторы
39:48 За кадром: более сложные шаблоны
41:23 Студенческие проекты на C++ (в прошлом году рассказывали о проектах наших первокурсниках)
Если у вас остались вопросы, смело задавайте их в комментариях или лично Егору.
Найдите уравнение касательной к кривой в точке . Ответ запишите в виде , где целые несократимые числа и (без пробелов и скобок), например, .
На плоскости нарисованы две кривые, заданные многочленами второй степени.
Найдите площадь замкнутой области, которая ограничена этими кривыми. Если такой области нет, то нужно вывести число 0.
Вход
На первой строке три целых числа , , , задающие первую кривую , на второй строке три целых числа , и , задающие кривую . Все числа по модулю не превосходят .
Выход
Площадь замкнутой области, ограниченная и .
Ответ должен быть вычислен с точностью 5 знаков после запятой.
# считываем коэффициенты f(x) и g(x)a1, b1, c1 = map(int, raw_input().split())a2, b2, c2 = map(int, raw_input().split())# вычисляем коэффициенты h(x)a = a1 - a2b = b1 - b2c = c1 - c2# проверяем наличие корнейd = b * b - 4 * a * cif a == 0 or d <= 0: print(0) exit(0)# вычисляем корниr1 = (-b - math.sqrt(d)) / (2.0 * a)r2 = (-b + math.sqrt(d)) / (2.0 * a)# первообразная для h(x)def H(x): return a*x*x*x/3.0 + b*x*x/2.0 + c*x# вычисляем определённый интеграл и выводим его модуль в требуемом форматеprint("{:.5f}".format(math.fabs(H(r2) - H(r1))))
В пространстве задано стандартное скалярное произведение, подпространство, заданное как линейная оболочка векторов , , . Найти ортогональную проекцию вектора на подпространство вектор и ортогональную составляющую этого же вектора ().
В ответ напишите сумму координат вектора (например, для вектора сумма координат будет 9).
Ответ укажите с точностью до двух знаков после точки. При необходимости округлите по правилам математики.
Обозначим за комлексный корень степени из единицы с минимальным положительным аргументом (аргумент = угол в полярной форме комплексного числа). Например, .
Найдите минимальное положительное целое , являющееся решением следующего уравнения.
Маленькому мальчику Ване на кружке по системам счисления задали следующую задачу: перевести число в системе счисления в систему счисления . Недолго думая, он позвал на помощь своего лучшего друга Петю, который славился тем, что замечательно умел считать до на пальцах. После нескольких бессонных ночей ребята общими усилиями справились с задачей.
Однако, на следующем занятии Ване задали похожую задачу, где , к сожалению, превышало . Тогда ребята решили обратиться к старшей сестре Пети с просьбой написать универсальную программу, которая решает задачу для любых , и . Ваша цель выполнить просьбу Вани и Пети.
Входные данные
Во входных данных вашей программе дается три числа: исходное число , основания систем счисления и (). Число в десятичной системе счисления не превышает .
Выходные данные
В выходных данных должно быть число , записанное в системе счисления , или , если входные данные некорректны (число во входных данных не является корректной записью числа в системе счисления ).
# считываем входные данныеxstr, b, c = raw_input().split()s1 = int(b)s2 = int(c)# проверяем входные данные и преобразуем в числоx = 0for c in xstr: if int(c) >= s1: print(-1) exit() x = x * s1 + int(c)# переводим в заданную систему счисленияres = ""if x == 0: res = "0"else: while x > 0: res = str(x % s2) + res x = x // s2 print(res)
Про студентов магистерской программы Software Engineering известно, что они дружат друг с другом так, что каждый студент дружит не более чем с 3 другими, и для любых двух студентов верно, что они либо дружат друг с другом, либо есть студент, который дружит с ними обоими.
Какое максимальное число студентов на магистерской программе Software Engineering?
Сколько различных решений имеет следующее уравнение
если известно, что , , , ?
count = 0for x1 in range(1,51): for x2 in range(2,51): for x3 in range(51): if x1 + x2 + x3 <= 50: count = count + 1print(count)
Сколько различных решений имеет следующее уравнение(Мы вычли из правой части и добились того, чтобы все переменные начинались с нуля.)
если известно, что ?
Найти длину кривой , заключённой в первой четверти.
Ответ укажите с точностью до двух знаков после точки. При необходимости округлите по правилам математики.
На вход программе подаётся строка, содержащая слова, разделённые пробелом. Слово это последовательность латинских символов, окружённая пробелами или границами строк.
Для всех слов, которые встречаются в тексте более одного раза, программа должна вычислить минимальное количество слов между повторениями.
Вход
Строка, содержащая последовательность строчных латинских символов, разделённых пробелами.
Выход
Выведите все слова, которые встречаются более одного раза, и минимальное количество слов между их повторениями, в формате
слово: число
Выведите эту информацию в том порядке, в котором слова встречаются в тексте в первый раз.
# считываем входную строку и разбиваем на словаwords = raw_input().split()# заводим необходимые словариidx = {} # хранит номер последнего вхождения словаdist = {} # хранит минимальное расстояние между повторениямиfirst = {} # хранит номер первого вхождения# проходим по словам и вычисляем минимальное расстояние для каждого словаfor i in range(len(words)): if words[i] in idx: if dist[words[i]] > i - idx[words[i]] - 1: dist[words[i]] = i - idx[words[i]] - 1 else: first[words[i]] = i dist[words[i]] = 2 * len(words) # замена +бесконечности idx[words[i]] = i # массив для хранения слов, которые встречаются более одного разаgood = []for k in dist: if dist[k] < len(words): good.append((k, dist[k], first[k])) # упорядочиваем массив по номеру первого вхожденияgood.sort(key=lambda t: t[2])# выводим результатfor t in good: print("{}: {}".format(t[0], t[1]))
В студенческом общежитии ИТМО очень сложно устроена локальная сеть местный администратор не любит роутеры, потому сетевые кабели протянуты напрямую между некоторыми компьютерами (для этого в некоторые компьютеры пришлось установить дополнительные сетевые карты).
Вам, как новичку в общежитии, хочется выяснить как все устроено. Поэтому вы можете выбрать любые два компьютера и получить ответ на вопрос проложен ли между ними провод?. Вам бы хотелось узнать можно ли в общежитии передать информацию с любого компьютера до любого другого по проводам.
Какое минимальное количество вопросов необходимо задать чтобы гарантированно получить ответ, если всего в общежитии установлено 32 компьютера?
Школьник Ваня приболел, и его мама решила вызвать врача домой. У врача есть статистика по району, где живет Ваня. У больных детей этого района грипп, у остальных ветрянка. Других болезней в этом районе не зафиксировано.
Один из основных симптомов ветрянки это сыпь, она появляется в случаях заболевания ветрянкой. Однако, во время гриппа она тоже возможна и появляется в случаях.
Осмотрев Ваню, врач обнаружил сыпь. Какова вероятность того, что у Вани ветрянка?
Ответ укажите с точностью до двух знаков после точки. При необходимости округлите по правилам математики.
Привет! Продолжаем разворачивать тему осмысленного подхода к началу своего профессионального пути. Про базовые настройки мы поговорили в предыдущем посте, а теперь перейдем от мышления к действиям, связанным с процессом собеседований: как готовиться, как себя вести, как проходить техническое интервью, а также формировать себе перспективу вне зависимости от исхода.
внимательно читайте инструкции в приглашении скорее всего вся необходимая информация там уже есть;
подтвердите, что будете участвовать, как можно скорее это важно для тех, кто координирует собеседования;
выбирайте из предложенных вариантов наиболее удобное для вас время, когда вы сможете лучше сосредоточиться на происходящем это важно для вас;
уточните часовой пояс тех, кто будет проводить интервью, и сообщите свой, если он отличается;
уточните место или способ видеосвязи; убедитесь, что вы понимаете, где найти нужную ссылку;
спросите, кто будет проводить собеседование и как вы можете к нему подготовиться; на каком языке будет общение (вдруг на английском? это лучше знать заранее).
Если в назначенный день что-то пошло не так, сообщите об этом координаторам и договоритесь о другом времени. Неожиданные события случаются, и это нормально. Вам пойдут навстречу, если вы заранее предупредите о своих изменениях. Если в приглашении был указан телефон для связи, то лучше позвонить по этому номеру письмо могут не успеть прочесть вовремя.
Ключевой момент всегда думайте о других людях. Пусть любое их взаимодействие с вами будет максимально комфортным. С вами начинают знакомиться задолго до самого собеседования: как вы пишете, как реагируете, как относитесь к приглашению, как проявляете свою заинтересованность в стажировке. И если вы ее не чувствуете и потому не можете сфокусироваться на целях людей из компании, об этом лучше сразу хорошенько подумать. Возможно, вам в другую сторону.
Хорошая подготовка влияет не только на первое производимое вами впечатление. Гораздо больше она помогает создать особый настрой для вас самих, чтобы максимально эффективно отвечать на вопросы. Особенно если при подготовке и по пути на собеседование вы будете мысленно обозначать каждое ваше действие как настройку на нужную волну. И не забывать обдумывать интересы тех, с кем вам предстоит общаться.
Что поможет вашим собеседникам как можно лучше разглядеть ваши сильные стороны сквозь естественное и здоровое волнение?
Во-первых, опрятный и свежий внешний вид плюс максимально нейтральный стиль одежды. Хорошо, когда ничто в вашем внешнем виде не отвлекает от сути того, что вы говорите.
Во-вторых, ваша пунктуальность. Это уважение не только к рабочему времени других людей, но и к своему собственному. Время для всех одинаково ценно.
В-третьих, дьявол в деталях ;)
заранее продумайте маршрут и заложите время на поиск офиса, пробки, непредвиденные задержки;
приезжайте за 10-15 минут до назначенного времени собеседования, чтобы успеть отдышаться и настроиться, и дать эту возможность встречающей стороне;
отключите телефон, когда вас уже встретили ничто не должно вас отвлекать и мешать общению.
подключайтесь по ссылке за 2-3 минуты до начала;
лучше звонить с компьютера собеседование может включать live-coding;
заранее установите или обновите приложение, которое компания использует для собеседований, убедитесь, что оно работает;
проверьте, что аккаунт приложения отображает ваши имя и фамилию, а не никнейм (в идеальном мире ваш адрес электронной почты также основан на ваших реальных имени и фамилии);
проверьте оплату интернета и стабильность сети;
камера обязательна проверьте, что с ней всё хорошо;
загрузите во все приложения свою портретную фотографию крупным планом (это очень помогает в процессах коммуникации, причем любых);
используйте наушники или гарнитуру, проверив что они заряжены и работают без помех;
убедитесь, что вам хватит зарядки; питание от сети пусть будет включено заранее;
проходите собеседование в тихом помещении без посторонних шумов и по возможности с нейтральным фоном это поможет и вам, и другим лучше сосредоточиться и слышать друг друга;
держите под рукой смартфон в режиме без звука для экстренного переподключения с заранее установленным приложением, работающей камерой и микрофоном (бывают ситуации, когда мобильный интернет очень выручает).
И главное. Приходите или подключайтесь выспавшимися, в хорошем настроении и с интересом к происходящему ведь это действительно интересно!
Заранее почитайте (если еще не) или вспомните прочитанное ранее:
про компанию;
про проект и продукт;
про руководителя и команду.
Освежите свои знания о технологиях, заявленных в требованиях. Если перед собеседованием вы отправляли тестовое задание, откройте его и восстановите в памяти, что в нем было.
Подготовьте уверенный рассказ:
о вашем интересе к этой стажировке и компании;
о релевантном опыте, пусть даже он только из учебных или личных проектов;
о том, какие идеи у вас есть в отношении предложенной для стажировки задачи (подумайте про это заранее; поищите похожие проекты и посмотрите на них);
Подготовьте встречные вопросы вашим собеседникам. Например:
Каковы ценности компании? Почему вам здесь нравится?
Как организована работа в команде?
Какая зона ответственности будет у стажера?
Каким будет обучение и цель стажировки?
Какие перспективы и возможности в этом проекте?
Каков идеальный кандидат на эту стажировку?
Вспомните про лайфхак с репетицией в первом эпизоде. А также про то, что собеседование это уникальная возможность узнать реальные факты о компании от людей, которые там работают. Вы ведь изучаете реальность, чтобы найти самое лучшее место для себя в ней. А потому смело проявляйте своё любопытство и наблюдайте за тем, как люди рассказывают о своей работе. Горят ли у них глаза?
Помните, что волнуетесь и вы, и ваши собеседники. Они также заинтересованы в том, чтобы ваша стажировка успешно состоялась.
Фокусируйтесь на смысле вопроса не на себе и не на том, какое впечатление производите. Внимательно слушайте вопросы: в них заложена ожидаемая формула ответа. Говорите только о том, что спрашивают.
Если вас поставили в тупик рассуждайте вслух. Задавайте встречные или уточняющие вопросы.
Признавайте свои ошибки. Спрашивайте, какое решение было бы правильным или наиболее оптимальным по мнению интервьюеров. Будьте честными и искренними в том, что вы чего-то не знаете.
Перед уходом поблагодарите всех за интересное общение и скажите, что будете благодарны за обратную связь вне зависимости от принятого решения. Через две недели можно написать письмо дублирующее эту просьбу, если не получите ответ.
Получив обратную связь, поблагодарите за нее и воспринимайте эту информацию как дверь к новым возможностям потому что так и есть.
Обычно сценарий собеседования включает представление участников, обсуждение вашего интереса к проекту, техническое интервью и финальную часть с организационными и вашими встречными вопросами. Порядок может меняться. Участвовать может разное количество людей. Пусть вас это не пугает, а наоборот вдохновляет.
Вопрос-размышление: как бы вы реализовали Х?
Вопросы по технологии: погуглите самые популярные вопросы на собеседованиях по вашему стеку - их, как правило, не больше ста ;)
Live coding:
проговаривайте свои шаги;
пишите тесты.
Код на листочке/доске: попробуйте это заранее дома.
Code review:
что этот код делает?
проверьте ошибки;
проверьте крайние случаи;
performance, примеры использования кода.
При наборах на стажировки тестовые задания обычно даются на самом первом этапе, и по их результатам кандидатов уже приглашают или не приглашают на собеседования. Но бывает и так, что его предлагают сделать после интервью (и это хороший знак!) Сразу подумайте о том, чтобы ваше тестовое задание было удобно смотреть спросите, в каком формате проверяющему удобно получить ваш результат.
На что стоит обратить внимание при подготовке тестового:
воспринимайте как реальный проект;
поймите, в чем задача (при необходимости уточните);
оцените время (если не установлен дедлайн) и уложитесь в него (max = 2 недели);
если что-то не успеваете к дедлайну опишите, что хотели бы улучшить;
будьте готовы к повторному собеседованию по результатам задания.
Ну, и ловите check-list для самопроверки:
тесты;
документация (описание проекта, как запустить);
внятные commit message / git rebase;
убрать мусор из репозитория;
запустить inspect code и добиться, чтобы ошибок не было;
протестировать на разных платформах/браузерах;
клонировать репозиторий и открыть с чистыми настройками;
UI: попросите кого-нибудь о конструктивном взгляде со стороны;
предполагаемые улучшения.
Не забывайте о благодарности за интересную задачу и запросе конструктивного фидбека в ваших письмах, также как и на собеседованиях. И всё также наблюдайте за своими ощущениями: вам действительно было интересно это делать? Этот процесс тоже источник информации.
Пользуясь контекстом сама скажу здесь Спасибо! Екатерине Смаль (Team Lead in Educational Products, JetBrains) за экспертизу по части технического интервью и тестового задания :)
Выдыхайте, но на самом деле всё только начинается!
А потому не забудьте быстро подтвердить свое участие или же сообщить о том, когда вы сможете принять это решение. Если по каким-то причинам вы отказываетесь от стажировки, то сообщите об этом как можно скорее. Это ответственное отношение к другим будет вам плюсом в карму на будущее а вдруг он вам еще пригодится?
С самого первого дня берите от своей стажировки максимум возможностей и вкладывайте максимум усилий навстречу тем, кто будет вкладываться в вас:
знакомьтесь с командой;
знакомьтесь с культурой компании;
задавайте вопросы;
погружайтесь в контекст;
активно вовлекайтесь во все процессы;
проявляйте интерес и инициативу;
будьте самостоятельны;
запрашивайте фидбек руководителя/ментора;
учитесь управлять своим временем;
развивайтесь!
Если вы не прошли отбор на стажировку, оберните это в новые возможности для себя. Запросите обратную связь и проанализируйте полученный опыт. Учитесь. Практикуйтесь на open source проектах. Попробуйте иные варианты стажировок. Если вам не хватает какого-то опыта получите его:
хакатоньте;
участвуйте в студенческих стартапах;
пробуйте фриланс;
создавайте свои проекты;
реализуйте интересные учебные и научные работы.
Получив новый опыт возвращайтесь. Пробовать снова после отказа можно и нужно! Но только действительно прокачав свои скиллы. Для любой компании такие возвращения очень ценны, поскольку подтверждают ваш искренний интерес, а это точно повышает ваши шансы.
И не ждите достижения какого-то уровня знаний, чтобы пробовать свои силы на стажировках. Если вам действительно интересно что-то сделать приходите и говорите об этом. Так у вас точно будет больше шансов получить классный опыт, а у проекта будет больше шансов реализоваться. А заодно и процесс обучения станет более осмысленным и целенаправленным, если ваши знания помогут вам сделать что-то нужное другим уже сейчас.
Всем драйва!
На протяжении тысячелетий человечество волновали вопросы функционирования нервной системы: предпринимались попытки понять, как происходит восприятие и обучение, что такое эмоции и сознание, какую роль они играют, как они появились в ходе эволюции, каково влияние различных внешних и внутренних факторов на развитие и становление нервной системы человека и других животных. Все эти захватывающие темы так или иначе затронуты в нейробиологии и смежных с ней дисциплинах.
Нейробиология это наука, изучающая структуру, функционирование и развитие нервной системы человека и животных. Brain science более узкая дисциплина, посвященная головному мозгу человека. Нейробиология охватывает разные уровни организации от молекулярного до системного, плавно переходя в молекулярную биологию и биохимию с одной стороны и в нейропсихологию (наука на стыке с психологией) с другой.
Некоторые люди, как и в незапамятные времена, продолжают утверждать, что понять работу мозга невозможно, или же отрицают, что мозг порождает наш разум и сознание и т. д. Несмотря на все это, в реальности науки, работающие в этой области, делают огромные успехи и быстро сокращают пробелы в нашем понимании существующих вопросов. За последние десятилетия человечество узнало о том, что нервные клетки все-таки восстанавливаются и научилось перепрограммировать стволовые клетки так, чтобы они формировали новые нейроны [1]. Мы также выяснили, что посредством электрической стимуляции нервов можно восстановить способность самостоятельно передвигаться у парализованных пациентов с повреждениями спинного мозга [2]. Многие заболевания нервной системы сейчас можно распознать на ранних стадиях и без использования инвазивных методов или долгого мучительного сканирования: относительно простой анализ генетической информации человека позволяет выявлять многие нейродегенеративные заболевания, эпилепсии и двигательные расстройства даже до начала проявления симптомов. Появилась возможность создавать подробные карты и общедоступные базы данных, содержащие информацию о том, как конкретные гены связаны с различными заболеваниями или определенными типами поведения и как взаимодействия продуктов этих генов вовлечены в процессинг огромного потока информации в мозге. Были открыты детальные (на уровне работы индивидуальных нейронов) механизмы обработки информации о пространственном местоположении организма своего рода внутренний GPS, обеспечивающий ориентирование (за эту работу была присуждена Нобелевская премия в 2014 году)[10].
Одним из относительно недавних событий в истории нейронауки стало применение компьютерных методов. Началось оно с простых математических моделей индивидуальных нейронов и небольших сетей, разработанных еще в 50-е годы, и на сегодняшний день невероятно расширилось. Сейчас вычислительная нейробиология включает в себя множество самых разнообразных подходов, позволяющих исследовать как элементарные низкоуровневые процессы, так и сложные когнитивные функции.
Вычислительная нейробиология, как и многие науки, в основном использует подход снизу-вверх" (bottom-up), анализируя, как динамические взаимодействия между биологическими нейронами могут реализовывать функции вычислительных компонентов мозга. Этот подход позволяет воссоздать и понять эмерджентные динамические процессы в небольших частях мозга (таких как кортикальные колонки и зоны), а также воспроизвести феномены, наблюдаемые в биологических нейронных сетях, как, например, осцилляции. В этой области были разработаны математические модели элементарных вычислительных компонентов и их реализации при помощи биологических нейронов. Сюда входят компоненты сенсорного кодирования, нормализации, кратковременной памяти, накопление информации, принятие решений и контроль движений. Большинство этих компонентов достаточно просты в вычислительном плане, но они и являются составляющими элементами когнитивной деятельности.
Подход сверху-вниз (top-down) стремится отобразить когнитивные функции на алгоритмическом уровне. Этот подход игнорирует биологическую реализацию и вместо этого пытается разложить процессы обработки информации, лежащие в основе функционирования нервной системы, на алгоритмические компоненты. Ученые уже начали тестировать сложные вычислительные модели, способные описать высокоуровневые сенсорные и когнитивные функции мозга. Недавние достижения в области машинного обучения, получившей мощный толчок за счет растущих вычислительных мощностей и крупномасштабных датасетов, на которых можно проводить обучение, позволили заметно продвинуться в решении проблем понимания процессов восприятия, когнитивной деятельности и контроля.
Рисунок 1. Подходы снизу-вверх vs сверху-вниз. Эти два подхода являются крайностями континуума различных путей к общей цели объяснению того, как именно наш мозг порождает наш разум. В целом, на данный момент существует отрицательная корреляция между когнитивной и биологической точностью моделей. Однако эта отрицательная корреляция может быть превращена в позитивную, когда когнитивные ограничения позволяют лучше понять биологические функции и когда биология служит вдохновением для создания моделей, объясняющих мыслительные процессы [3].Одной из важных тем, изучаемых в нейробиологии, является развитие нервной системы от самых ранних зародышевых стадий до взрослого организма. Помимо чисто фундаментального интереса, хорошее понимание этого процесса необходимо для расширения возможностей лечения множества заболеваний, связанных с дисфункциями нервной системы, вызванными нарушениями на разных этапах развития. Четкое понимание того, как происходит регуляция числа клеток различных типов в головном мозге поможет пролить свет на этиологию таких состояний, как микроцефалия, мегалэнцефалия, мальформации коры головного мозга, приводящие к фармакорезистентной эпилепсии и расстройствам когнитивных функций. Нарушения в процессах миграции предшественников нейронов и в процессах образования слоев внутри коры приводят к различным структурным нарушениям, среди которых Х-сцепленная перивентрикулярная узловая гетеротопия заболевание, характеризующееся высокой внутриутробной смертностью и судорогами. Дефекты механизмов образования корректных связей между нервными клетками внутри одной зоны НС или между различными зонами являются причиной формирования неверно функционирующих сетей в нервной системе, что может являться причиной патологических состояний вроде той же эпилепсии и таких нейропсихиатрических нарушений, как аутизм и шизофрения.
Исследования в области развития НС проводятся учеными из разных сфер по всему миру. Одни ищут ответы на поставленные вопросы при помощи простых клеточных культур, другие используют более сложные in vitro системы, известные как органоиды, третьи ставят эксперименты на грызунах. В нашей лаборатории JetBrains Research используется чисто вычислительный (in silico) подход: мы разрабатываем модельный фреймворк BCNNM (Biological Cellular Neural Network Modeling), который может быть использован исследователями для построения динамических пространственных моделей развития и функционирования нервной ткани.
Наш подход
Фреймворк BCNNM включает в себя полезные фичи, не представленные в других существующих моделях биологических нейронных сетей. Например, это возможность прослеживать все события, происходящие с каждой клеткой на протяжении всего времени симуляции, регистрировать изменения широкого набора биологически релевантных параметров (концентрации внутри- и внеклеточных ионов, сигнальных и других молекул, мембранный потенциал и т. д.). В то же время сохраняется способность модели описывать поведение клеточной популяции как единого целого. Такая возможность особенно полезна с учетом того, что наш фреймворк позволяет работать с миллионами клеток, что дает большое преимущество перед моделями, описывающими подробно работу лишь небольшого числа нейронов. При этом, описание тканевых и клеточных процессов в BCNNM достаточно подробно и биологично по сравнению со статистическими моделями, которые оперируют сотнями и миллионами клеток.
Наша дискретно-событийная модель позволяет снизить уровень сложности определения модели и вычислений, а также абстрагироваться от континуальности реальных событий. Для многих процессов возможно использование определяемой самим пользователем случайности величин, описывающих процесс, что делает моделирование более увлекательным, а его результаты менее предсказуемыми. В целом, BCNNM является модельным фреймворком широкого назначения, в отличие от большинства моделей, создаваемых в области нейромоделирования, которые нацелены на воссоздание лишь строго определенных экспериментальных сеттингов. В рамках нашей модели возможно подробное воспроизведение биологических механизмов, пользователи могут выбрать желаемый уровень детализации для описываемых процессов (от сдвигов внутриклеточных концентраций ферментов до взаимодействий групп клеток, образующих многоклеточные структуры высокого уровня). Пользователь может создавать структуры с большим количеством специфических связей, моделировать прохождение химических и электрических сигналов внутри них и раскрывать особенности их работы.
Модельный индивид это набор логических объектов, распределенных в пространстве. Состояние индивида определяется выполнением сигнальных путей каждого из этих логических объектов в данный момент времени. Логический объект в модели это абстракция, необходимая для того, чтобы объединить описания компонентов и их взаимодействий. Примерами логических объектов в данном контексте являются всевозможные клеточные компартменты. В конфигурации модели они заданы как наборы возможных механизмов, скомбинированных в сигнальные пути, куда также входят испускаемые и принимаемые сигналы. Процессы, ассоциированные с логическим объектом, могут модифицировать его состояние, пространственное расположение или активность. Набор сигнальных путей для каждого компартмента определяет, какие процессы могут с ним происходить и какие условия должны выполняться.
Результаты
В наших экспериментах мы используем модель для создания самых разных пространственных конфигураций клеточных структур. С использованием биологических данных о последовательности процессов дифференциации в клеточных линиях нервных и глиальных клеток, градиентов концентрации сигнальных молекул, заданных правил миграции и роста отростков мы получаем in silico аналоги органоидов головного мозга, которые ученые выращивают в лабораториях. Правильно продифференцировавшие клетки самоорганизуются в слоистые или ганглионарные структуры, свойственные таким органоидам. Ниже показан пример того, как может происходить пролиферация и дифференциация в модельном пространстве. Конфигурация пространства может быть любой, и выращиваемая структура может быть как сферической, так и слоистой.
Рисунок 2. Рост и дифференциация клеточной массы в ходе симуляции.Рост клеточной структурыПри моделировании в режиме нормального развития полученные структуры обладают количественными соотношениями различных типов клеток и их пространственным распределением, характерными для биологических структур [4,5]. Параметры внутренней связности также сравнимы с аналогичными параметрами моделируемых in vitro и in vivo систем в норме [6]. Моделируемый органоид из миллиона клеток может содержать миллионы отростков и синапсов, которые обеспечивают связность внутри слоев и между ними. Количество и соотношение входящих и исходящих связей для клеток внутри слоя коррелирует с таковым в живых системах. В слоистых модельных структурах паттерны связывания слоев между собой сходны с тем, что можно наблюдать в слоистых структурах мозга или в церебральных органоидах. Эти паттерны связывания не случайны они следуют из молекулярных правил аксонального наведения и связывания нужных целей. Ниже можно увидеть визуализацию процесса аксонального наведения в нашей модели.
Рост аксонаМоделирование в BCNNM возможно и в режиме отклонения от нормы за счет гибкости конфигурации. Это позволяет наблюдать за развитием дефектных структур, что может пролить свет на течение различных заболеваний нервной системы. Работая с моделью, мы показали, что, меняя концентрации сигнальных молекул или параметры ответов со стороны клеток (что может являться, к примеру, аналогом изменения чувствительности клеточных рецепторов) в области деления, дифференциации или создания связей, мы можем наблюдать отклонения в системе, которые напоминают изменения, свойственные нарушениям развития биологических нервных тканей.
Помимо моделирования нарушений процесса развития, в рамках нашего проекта проводились исследования по посттравматическому нейрогенезу [7]. Клеточная динамика после нанесения травмы продемонстрировала поведение соответствующее реальному [8, 9]: резко падает количество нервных клеток и повышается концентрация некротического фактора, что ведет к дифференциации мультипотентных стволовых клеток в нейрональные предшественники, которые мигрируют к месту травмы и в свою очередь дифференцируются в нейроны. Пример такой динамики показан на рисунке 5, а в таблице ниже приведено сравнение изменения числа пролиферирующих клеток при травме разной силы в модели и в экспериментальных данных из исследования на мышах [8].
Рисунок 3. Пример клеточной динамики после нанесения травмы в модели.Перспективы применения метода
Фреймворк BCNNM может быть использован для подробного in silico воспроизведения in vitro экспериментов, направленных на получение детальных наборов параметров, характеризующих все ключевые компоненты (клетки, их компартменты, синапсы и т. д.), предоставляя новые данные для нейробиологических исследований. Это могут быть как фундаментальные вопросы, касающиеся процессов развития, так и более прикладные, связанные с различными заболеваниями центральной нервной системы, а в перспективе и с разработкой подходов для лечения некоторых из этих заболеваний. Применение фреймворка для предварительного вычислительного тестирования биологических и медицинских гипотез позволит снизить стоимость постановки лабораторных экспериментов и ускорит процесс проведения исследований.
Курс Computational Neuroscience
Помимо исследовательской деятельности, наша лаборатория вовлечена в образовательный процесс. С 2019 года мы читаем курс Вычислительные нейронауки для студентов партнерских магистратур ВШЭ и ИТМО (и любых вольнослушателей!) в рамках образовательных программ JetBrains. В прошлом осеннем семестре лекции и семинары проходили в очном формате. В ходе курса студентам были предложены базовый материал для изучения и обсуждения в аудитории, материалы для самостоятельного, более глубокого погружения, интересные практические задания по моделированию нейронов и биологических нейронных сетей. В осеннем семестре 2020 курс проходит в удаленном формате, что позволило нам значительно расширить аудиторию. Видеоматериалы будут доступны всем желающим на YouTube-канале JetBrains Research.
В заключение: если вы нейробиолог и у вас есть экспериментальные данные, которые вы бы хотели использовать для моделирования, напишите нам. Мы будем очень рады сотрудничеству!
Список литературы
Takahashi, J. iPS cell-based therapy for Parkinson's disease: A Kyoto trial. Regenerative Therapy, 2020, ISSN 2352-3204. https://doi.org/10.1016/j.reth.2020.06.002.
Angeli, C. A., Boakye, M., Morton, R. A., Vogt, J., Benton, K., Chen, Y., Harkema, S. J. (2018). Recovery of Over-Ground Walking after Chronic Motor Complete Spinal Cord Injury. New England Journal of Medicine. doi:10.1056/NEJMoa1803588 (https://doi.org/10.1056/NEJMoa1803588)
Kriegeskorte, N., & Douglas, P. K. (2018). Cognitive computational neuroscience. Nature Neuroscience. doi:10.1038/s41593-018-0210-5
Caffrey, J. R., Hughes, B. D., Britto, J. M., and Landman, K. A. (2014). An in silico agent-based model demonstrates reelin function in directing lamination of neurons during cortical development. PLoS ONE 9. doi:10.1371/journal.pone.0110415
Dingle, Y.-T. L., Boutin, M. E., Chirila, A. M., Livi, L. L., Labriola, N. R., Jakubek, L. M., et al. (2015). Three-dimensional neural spheroid culture: An in vitro model for cortical studies. Tissue engineering. Part C, Methods 21, 12741283. doi:10.1089/ten.TEC.2015.0135. 26414693
Gerhard, F., Pipa, G., Lima, B., Neuenschwander, S., and Gerstner, W. (2011). Extraction of network topology from multi-electrode recordings: Is there a small-world effect? Frontiers in Computational Neuroscience 5. doi:10.3389/fncom.2011.00004
Мыров В.О. Вычислительное моделирование посттравматического нейрогенеза. Магистерская диссертация. СПбАУ РАН, Санкт-Петербург 2018
Wang, X., Gao, X., Michalski, S., Zhao, S., & Chen, J. (2016). Traumatic Brain Injury Severity Affects Neurogenesis in Adult Mouse Hippocampus. Journal of Neurotrauma, 33(8), 721733. doi:10.1089/neu.2015.4097 (https://doi.org/10.1089/neu.2015.4097)
Neuberger, E. J., Swietek, B., Corrubia, L., Prasanna, A., & Santhakumar, V. (2017). Enhanced Dentate Neurogenesis after Brain Injury Undermines Long-Term Neurogenic Potential and Promotes Seizure Susceptibility. Stem Cell Reports, 9(3), 972984. doi:10.1016/j.stemcr.2017.07.015 (https://doi.org/10.1016/j.stemcr.2017.07.015)
Преподавательский состав магистерской программы JetBrains и ИТМО Разработка программного обеспечения на четверть (!) состоит из выпускников этой же программы. Пожалуй, это хороший повод для гордости. Мы решили сделать большое интервью с ребятами. Возможно, их истории помогут кому-то решиться начать преподавательскую карьеру, а кому-то поступить к нам на программу.
В первой части наши выпускники и преподаватели Владислав Танков, Дмитрий Новожилов, Дмитрий Халанский, Алексей Зубаков, Артем Хорошев, Александр Садовников, Владислав Кораблинов и Роман Голышев рассказывают о выборе магистратуры, впечатлениях от обучения и отличиях от других программ.
Почему вы поступили на эту программу? Оправдались ли ожидания?
Влад Т.: Я поступал на программу, ориентируясь на качество обучения в Computer Science центре. Я знал некоторых преподавателей и представлял, что будет, безусловно, сложно, но интересно. Относительно ожиданий думаю, оправдались. Я узнал много нового, попробовал заняться неизвестными ранее вещами, а продукт, который мы сделали на хакатоне в магистратуре, в итоге стал моей основной работой. Тогда мы за два дня написали штуку, вокруг которой в итоге выросла команда из восьми человек, а продуктом воспользовались несколько миллионов человек.
Дима Х.: Во время учебы в бакалавриате я случайно повстречался с преподававшим у параллельных групп бывшим студентом этой магистратуры Игорем Жирковым. Он впечатлил меня казавшимся тогда недоступным уровнем всестороннего понимания программирования. Особенно меня поразило, как он оперировал математическими инструментами. А я, надо признаться, в то время был убежден, что математика это про решение уравнений и неадекватных головоломок в духе правда ли, что 10 в степени 1999, если от него отнять 1999, делится на 9 и совсем меня не касается.
Это меня так впечатлило, что я решил бросить все силы на обретение этой мощи. Самостоятельное чтение книжек давалось с трудом, и я решил, что надо получить полноценное образование, где меня бы научили математически мыслить, желательно с привязкой к программированию. Я спросил у Игоря, где можно найти что-то подобное, и был готов ехать куда угодно. Каково же было мое удивление, когда Игорь сказал, что никуда ехать не надо: в СПбАУ есть такая учебная программа. (Ранее программа реализовывалась в СПбАУ. Прим. ред.)
Я увлекаюсь довольно нишевыми вещами, и в этой магистратуре мне удалось найти для себя много познавательного. Здесь каждый найдет что-то по душе. Любите машинное обучение? Пожалуйста! Хотите просто зарабатывать программированием на Java? Для этого здесь тоже все есть, и в довольно интенсивной форме. Компьютерное зрение? Алгоритмы на графах? Интерфейсы для Android-приложений? Сколько хотите. Почти любые связанные с программированием интересы тут поощряются и, скорее всего, вы найдете себе ментора. А если ваши интересы настолько особенные, что связанных с ними специалистов тут нет есть смысл подумать, а не стать ли первым соответствующим экспертом-преподавателем в этой магистратуре. Некоторые предметы начинали преподаваться именно так.
Дима Н.: Про программу я узнал еще в школе. Я получил внушительный багаж знаний по специальности, а также, благодаря практикам и стажировкам, устроился на замечательную работу.
Леша: Я хотел закрыть пробелы в знаниях и укрепить базу, которую дали в бакалавриате. Искал какое-то хорошее место в области программирования, на тот момент это была чуть ли не единственная адекватная магистратура в Питере. Ожидания полностью оправдались. Я до сих пор иногда переслушиваю некоторые курсы и даже посещаю семинары.
Артем: В бакалавриате я учился на физическом факультете СПбГУ, но со 2-3 курса увлекся программированием. Ближе к выпуску я успел освоить основы разработки на C++ и поработать в одной компании, но у меня было чувство, что я многого не знаю в отличие от ребят, которые учились на программистских специальностях. Пришло время задуматься о магистратуре. Внимательно изучив сайт программы и поинтересовавшись у знакомых, я понял, что это именно то место, где могут дать всю необходимую базу в короткий срок. Я пришел сюда за знаниями и опытом и могу с уверенностью сказать, что получил и то и другое в полном объеме.
Влад К.: Я заканчивал 4-й курс в своем любимом УдГУ и раздумывал, чем заниматься дальше. Друг собрался поступать в физическую магистратуру СПбАУ и позвал меня туда же на информатику. Я справедливо возразил, что это невозможно, потому что туда поступают только минимум желтенькие на Codeforces. Он не менее справедливо возразил, что ну и пофиг. Я подумал месяцок и решил отправить заявку. Съездил на собеседование, и меня взяли.
Моим главным стремлением было добавить к теоретическим знаниям практические навыки. Мне это удалось, однако не совсем так, как я ожидал: чаще приходилось учиться чему-то самостоятельно, но у меня появилось понимание, как именно это делать. В итоге, как мне кажется, я все равно отстаю в прикладном плане от многих моих одногруппников. Так я понял, что мне гораздо более интересны теоретические аспекты и что суровая разработка это не мое.
Какие впечатления у вас остались от обучения на программе? Стоит ли что-то в ней изменить?
Влад Т.: С одной стороны, было довольно сложно, особенно первый и второй семестр. С другой стороны крайне увлекательно. Я нашел новых друзей настоящих единомышленников, увлеченных своим делом, познакомился с новыми областями и просто попробовал что-то новое.
Артем: Только положительные впечатления, особенно запомнился первый семестр. Дело ведь даже не в том, что у студентов данной программы огромное количество заданий и практики (хотя это немаловажная черта программы), а в том, что они получают постоянный фидбек от преподавателей, могут почти в любой момент получить ответ на любой вопрос. В свое время для меня было шоком, что можно просто взять и написать вопрос по теме (и не только) в чат курса с преподавателем и максимально быстро получить ответ.
Саша: Впечатлений много! Наверное, большинство из них связаны с первым курсом. Было очень сложно. Пятичасовой сон, отмененные поездки за границу с друзьями, отсутствие свободного времени типичные атрибуты жизни студента первого семестра нашей магистратуры! Сейчас, конечно, понимаешь, что это было не зря. Но повторять, если честно, не очень хочется. А вот что хотелось бы повторить это второй семестр. Там ты уже научился балансировать между учебой и личной жизнью. И прямо ощущаешь себя сверхразумом, который успевает получать от жизни все и знания, и эмоции.
Иногда казалось, что учеба настолько сложная, потому что есть какие-то организационные затыки: то преподаватель не выложил/не проверил домашку вовремя, то сообщил о контрольной накануне ее проведения. Такие моменты, естественно, хотелось исправить! Как мне кажется, это одна из главных причин, почему так много ребят с моего курса в итоге вызвались стать преподавателями в нашей магистратуре.
Влад К.: За два года впечатления самые разнообразные, но скажу, что такая же крутая учеба в моей жизни была до этого только в ЛМШ. Здесь невероятная атмосфера и люди, после обычного университета ты просто испытываешь эйфорию: а что, так можно было?!.. Но конечно, ничто не бывает идеальным, и изменить можно много чего как глобально, так и по каждому курсу в отдельности. Но это больше вопрос для обсуждения с кураторами, мне кажется.
Рома: Сложность прохождения программы целиком зависит от подготовленности студента. У меня были проблемы с теорией (алгоритмы, дискретка), но при этом сравнительно большой практический опыт программирования, что сильно упрощало прохождение практических курсов (Bash, Python, C++, Java). Думаю, тем, у кого не было предварительной подготовки ни в теории, ни в практике, программа дается значительно труднее. Кажется, это важно учитывать при составлении заданий, чтобы не создавать порочный круг я не могу даже понять текущее задание (потому что этот материал совершенно новый для меня) <-> я пропущу его и наверстаю потом.
В последнее время я все чаще вспоминаю курс Software Design, на котором нас учили архитектуре, проектированию, шаблонам и так далее. На мой взгляд, этот курс должен занимать чуть более важное место в учебной программе, особенно с точки зрения практики. Студенты должны не только прослушать, какие бывают архитектуры приложений, но и попробовать их использовать, а в идеале ощутить последствия их неправильного использования (например, за счет работы с легаси-кодом). На текущей работе я осознаю, что самый большой пробел в моих навыках именно в проектировании программ. Возможно, я не одинок, и студентам не помешает более интенсивный курс на эту тему.
Что, по-вашему, отличает эту программу от других магистратур? Как вы пытаетесь реализовать эти отличия в преподавании?
Дима Х.: На мой взгляд, самое ценное в этой магистратуре то, что здесь многие преподают в качестве хобби, а сами работают непосредственно с тем, чему учат. Сам я тоже работаю, да и программирую для души, так что рассказываю студентам о том, с чем сталкиваюсь постоянно, и стараюсь регулярно привязывать происходящее на занятиях к тому, что можно ожидать при попытках задействовать эти знания в реальности. В конце концов какие-то теоретические изыски забудутся после экзамена, а вот реальный опыт, если его удастся донести, осядет надолго.
Дима Н.: Я бы отметил углубленное изучение сложных тем, отсутствие воды в материале. В этой магистратуре действительно учат понимать, что за код ты пишешь, как он работает и зачем это нужно. Я и сам стараюсь следовать этим принципам и, например, при рассказе про какую-нибудь возможность языка не просто показываю, как ею пользоваться, но и объясняю, как она работает под капотом, какие ограничения и возможности имеет. Благодаря этому студенты гораздо лучше понимают суть программ и языковых конструкций, а не просто относятся к ним, как к какой-то магии.
Леша: Я думаю, основное отличие в соучастии и компетентности. У нас есть специальные люди кураторы, которые сопровождают студентов в процессе обучения: помогают решать проблемы, готовят к защите диплома, по многу раз выслушивая докладчиков, регулярно встречаются со студентами (сейчас через Zoom), чтобы собрать обратную связь, и делают еще много всего, что сильно упрощает жизнь студентам и преподавателям все могут сосредоточиться на процессе обучения и не думать о лишнем.
Саша: Нашу программу отличает системность. Ты знаешь, что каждую неделю почти по каждому предмету у тебя будет домашка. Ее надо сделать вовремя, чтобы преподаватель проверил все к следующей паре. Не сделал домашку вовремя недополучил баллы и знания. И так домашка за домашкой! Такой подход хорош тем, что знания с лекций подкрепляются достаточным количеством практического материала и, соответственно, лучше усваиваются. По себе могу сказать: если не потрогать материал с лекции руками, в голове он не отложится.
Я как преподаватель стараюсь сделать так, чтобы студенты не выбивались из ритма домашка-лекция-домашка и им ничего не мешало эти домашки делать: проверяю работы в срок, объективно их оцениваю и оперативно отвечаю на вопросы студентов по условиям задач.
Влад К.: В нашей магистратуре довольно молодые преподаватели! Учиться здесь очень сложно, поэтому я стараюсь создавать для студентов максимально комфортную обстановку, чтобы они не чувствовали себя беспомощно и не боялись активно участвовать в процессе. Я довольно много общаюсь с ребятами, пытаюсь им помогать и направлять в нужную сторону, когда им это необходимо. Ну и сам стиль общения у нас довольно неформальный, что тоже должно помогать. Правда, до обмена мемами конкретно с этими ребятами еще не дошло.
Одним из существенных отличий в нашей учебе мне видится стремление преподавателей действительно научить студентов своему предмету (абсурдно, конечно, что мало где так). Наверное, ребята меня недолюбливают за то, что я часто придираюсь к их решениям и прошу многие моменты подробно прописывать. Но эти придирки служат вполне конкретной цели. Так, в курсе дискретной математики мне важно, чтобы студенты научились грамотно использовать логические рассуждения, не принимали на веру кажущиеся очевидными факты, а выводили их из определений/аксиом.
В случае с алгоритмами ситуация даже более жизненная: на работе нам почти всегда приходится трудиться в командах, поэтому при решении задачи необходимо не просто придумать идею, а объяснить ее товарищам и уметь доказать корректность. Если вы не сможете этого сделать, то здоровый скепсис заставит ваших коллег просто отбросить эту идею, даже если она на самом деле золотая. Поэтому я требую доводить решения до состояния, когда мне точно все в нем понятно. Если я его не понимаю даже зная правильное, другой человек тем более ничего не поймет.
Рома: Мне кажется, что в этой программе принципиально другой уровень отношений между студентами и преподавателем. Когда я учился в бакалавриате, многие преподаватели были в каком-то смысле недосягаемы для меня я никогда не рассчитывал оказаться с ними на одном уровне. Между нами были строго деловые учебные отношения: преподавателю нужно закрыть ведомость, студенту нужно закрыть сессию.
В нашей магистратуре эта граница сильно размыта. Большинство преподавателей работают в продакшене, т.е. когда они не учат программировать, они сами программируют. Это значит, что студенты через несколько лет могут оказаться с ними в одной команде. Это, на мой взгляд, сильно повышает ставки с обеих сторон.
Студент понимает, что его учитель не просто теоретик, который за всю жизнь не написал ни строчки кода, а реальный программист, который пишет код каждый день и зарабатывает этим на жизнь. Поэтому такого человека имеет смысл слушать. А преподаватель понимает, что перед ним его потенциальные сокомандники. И если есть место, в котором он может повысить базовую квалификацию программистов-джуниоров, то оно здесь.
Поэтому я старался взаимодействовать со своими студентами так, будто они мои сокомандники. Мы общались на ты, я не пытался выстроить образ непогрешимого авторитета в их глазах, поскольку на работе это скорее будет минусом, чем плюсом. Я просил их не стесняться задавать вопросы, но при этом стараться как можно больше искать самостоятельно ведь именно таких коллег я хотел бы иметь в своей команде.
В общем, тот факт, что однажды твой студент может прийти к тебе на стажировку или на собеседование и потом будет с тобой работать (а может, и руководить тобой), заставляет взглянуть на ситуацию иначе. Вряд ли преподаватель математики в вузе, натягивающий тройку ленивому студенту, переживает, что этот студент через пару лет вернется в университет и начнет плохо учить других студентов. А в нашей магистратуре это вполне реалистичный сценарий. :)
В осеннем семестре 2020 года командалаборатории Нейробиологии и физиологии развития прочитала курс Вычислительные Нейронауки для студентов партнерских магистратур ВШЭ и ИТМО, а также для заинтересованных вольнослушателей. Курс проводится в рамках образовательных программ JetBrains c 2019 года. В этом году, в отличие от прошлого, формат обучения был, естественно, дистанционный лекции и семинары проводились в виде видеоконференций. В ходе курса студентам был предложен базовый материал для изучения и обсуждения в аудитории, материалы для самостоятельного, более глубокого погружения, интересные практические задания по моделированию нейронов и биологических нейронных сетей.
Цель курса дать студентам представление о том, что и какими способами можно моделировать в нейробиологии и дать им возможность немного попрактиковаться в этом на нескольких относительно простых задачах. Пререквизитами для полноценного усвоения материала являются умение программировать и интерес к биологии, однако, если даже вы не умеете программировать, но интересуетесь вопросами, касающимися работы нервной системы и ее моделирования вам все равно будет интересно послушать эти лекции!
В первой части курса освещены ключевые темы из нейробиологии, которые слушателям необходимо в той или иной степени представлять для того, чтобы пытаться что-то моделировать: рассказывается о структуре и функционировании нервной системы на организменном, тканевом, клеточном и молекулярном уровнях, о биофизических явлениях, лежащих в основе процессов, происходящих при возникновении и передаче сигналов итд. Также рассматриваются модели тех самых биофизических явлений, а также модели генерации и проведения потенциала действия на уровне единичных и на уровне многих нейронов. Еще одна, несколько отдельно стоящая и чуть более приближенная к медицине глава в этой части курса это обработка данных электроэнцефалографии (ЭЭГ). Параллельно с лекциями первой части, студентам предлагаются практические задания реализация классической модели Ходжкина Хаксли, описывающей характеристики возбудимых клеток, работа с реальными данными ЭЭГ и создание модели химического синапса.
Во второй части курса мы рассказываем про то, как информация кодируется и декодируется в нервной системе, что такое пластичность и что ее обуславливает, чем спайкинговые нейронные сети отличаются от классических ИНС и как их можно использовать в биологических исследованиях, как осуществляется биохимическая регуляция работы нейронов и как происходит развитие нервной системы от оплодотворенного яйца до взрослого организма. В заключительной лекции мы говорим о том, как связаны между собой машинное обучение, искусственный интеллект и нейронауки, какие процессы и явления в биологии послужили вдохновением для развития новых подходов в области машинного обучения и как машинное обучение используется в исследованиях работы мозга.
Если вас заинтересовал наш курс или какие-то отдельные темы, которых мы коснулись приглашаем вас в следующем осеннем семестре: будет еще интереснее, поскольку мы постоянно расширяем и дорабатываем контент. Прослушать курс могут все желающие. Вы также можете посмотреть все лекции 2020 года в любое удобное для вас время видеоматериалы доступны наYouTube-каналеJetBrains Research.
Слайд из лекции о кодировании и декодировании информации в НС.
1: #include <thread> 2: #include <iostream> 3: 4: using namespace std; 5: 6: int x, y, a, b; 7: 8: void thread1() { 9: cout.flush();10: x = 1;11: a = y;12: }13: 14: void thread2() {15: y = 1;16: b = x;17: }18: 19: int main() {20: int cnt = 0;21: do {22: a = 0; b = 0;23: x = 0; y = 0;24: 25: thread first(thread1);26: thread second(thread2);27: 28: first.join();29: second.join();30: cnt++;31: } while (a != 0 || b != 0);32: cout << cnt << endl;33: return 0;34: }
g++ -O2 -pthread sb.cpp -o sb && ./sb
thread1
:
g++ -O2 -c -S sb.cpp
1: ...2: call _ZNSo5flushEv@PLT3: movl y(%rip), %eax4: movl $1, x(%rip)5: movl %eax, a(%rip)6: ...
eax
, на строке 3 происходит
запись в переменную x значения 1, а на строке 5 значение из
регистра eax
записывается в переменную a.cout.flush()
. Как было упомянуто
ранее, поскольку запись в x и чтение из y независимы,
то компилятор, в нашем случае GCC, может принять решение их
переставить. Тем не менее, он не обязан этого делать: например, GCC
не проводит перестановку для функции thread2
. Для того
чтобы сделать перестановку, компилятор должен предположить, что код
после перестановки станет более эффективным. И, как показала
практика, вызов функции cout.flush()
заставляет GCC
считать, что инструкции стоит переставить. При этом необязательно
использовать именно эту функцию достаточно функции, вызов которой
GCC не уберет как бесполезный. Так, печать не пустой строки
cout << " "
подойдет, а вызов арифметических
функций sqrt()
и abs()
без использования
их результата не подойдет.cout.flush()
не делает ничего в в
программе SB-impl, хотя GCC и не может это вывести
самостоятельно: cout.flush()
сбрасывает буфер вывода в
консоль, однако на каждом вызове cout.flush()
буфер
пуст, поскольку программа пишет в консоль только в конце (строка
34).thread1
и
thread2
. Для этого достаточно вставить компиляторный
барьер памяти asm volatile("" ::: "memory")
между
инструкциями (в данном случае добавление инструкции
cout.flush()
не меняет ничего):
void thread1() { x = 1; asm volatile("" ::: "memory"); a = y;}void thread2() { y = 1; asm volatile("" ::: "memory"); b = x;}
void thread1() { x = 1; asm volatile("mfence" ::: "memory"); a = y;}void thread2() { y = 1; asm volatile("mfence" ::: "memory"); b = x;}
Привет! Недавно я в соавторстве с Ириной Резняковой из Yandex провела несколько экспериментальных мастер-классов IT Career Mind Map для студентов CS центра, а также СП и МААД в СПбГУ. Предыстория у него была долгая, уходящая корнями в опыт организации стажировок, экспертизу коллег из JetBrains & Yandex, а также переплетающаяся с проектами, которыми я занимаюсь сейчас в JetBrains Learning Research Lab и PM-школе в CS центре. Есть ощущение, что эксперимент удался, а потому хочется поделиться некоторыми мыслями в помощь тем, кто стоит на пороге получения первого опыта в профессии. Поскольку мыслей много, то будет несколько постов, и первый про базовые настройки.
С самопознание. Если вам предстоит первая стажировка, начните с определения того, что вам ближе. Если на этом этапе вы чувствуете затруднения, посмотрите вокруг: какие программы стажировок предлагает ваш вуз? Не знаете? Спросите у ваших кураторов или поищите информацию на Ярмарках вакансий. Не нашли ничего интересного в своем вузе посмотрите, что происходит в других, или погуглите рейтинги IT-работодателей в вашем городе. Из них можно выделить ключевые компании и поискать, есть ли у них программы стажировок. Читайте! Читайте и наблюдайте, что вам откликается.
Если у вас уже есть опыт стажировок или даже работы, попробуйте осмыслить его и ответить на вопрос, хотите ли вы вернуться в ту же компанию. Да, было классно! возвращайтесь. Это увеличит ваши шансы получить потом приглашение на работу. Не уверены, что это так? смело пробуйте что-то новое, чтобы лучше разобраться, что вам действительно интересно и приносит радость. Чем больше разных стажировок вы пройдете, тем больше узнаете и о себе, и о мире вокруг.
Поняв, какие варианты вам подходят здесь и сейчас, определите приоритеты. Только вдумчивая целенаправленная подготовка к конкретной стажировке увеличивает шансы успешно пройти отбор. Есть ли у вас ресурсы участвовать в нескольких конкурсах, и какой из них всё-таки важнее?
Иногда бывает так, что для приоритезации нужно начать, наоборот, с целенаправленной подготовки. Искать и загружать в голову всю доступную информацию о компаниях, особенностях продуктов, которые они разрабатывают, их культурах и командных процессах. Это в любом случае полезно и имеет ключевое значение при подготовке к отбору и собеседованиям, но то, что вы будете узнавать, может повлиять и на ваши приоритеты. Они могут меняться с каждой новой порцией информации, и это хорошо. Важно, что вы всё лучше и лучше будете ориентироваться в том, что происходит, и всё яснее ощущать, что вам больше подходит.
Наборы на стажировки это классная возможность узнать реальное положение дел: реальные потребности компании и реальные требования к кандидатам. Потому что крайне редко существуют четкие критерии для отбора, это всегда взвешивание большого количества разных факторов при принятии решений. А потому идите на собеседования, знакомьтесь с людьми и узнавайте про их работу как можно больше, ведь каждая ситуация уникальна. Даже если вы не попадете на стажировку, у вас будет возможность получить конструктивный фидбек, который поможет сфокусироваться на том, куда лучше направлять энергию в своем обучении. Ведь научиться всему и сразу невозможно, а потому лучше тратить время на перспективную для вас область знаний.
Кроме того проходя отборочные испытания, вы получаете опыт, который делает такую ситуацию для вас более знакомой и привычной, а значит всё менее волнительной и стрессовой. Каждый эксперимент в любом случае даёт вам новую фактическую информацию, а значит открывает новые возможности для развития.
Составляя резюме или заполняя заявку на стажировку, думайте о том, какая информация о вас действительно важна для этого проекта, этого продукта, в этой компании. Это отразит вашу заинтересованность в стажировке, что очень ценно для любого работодателя. Уделите особое внимание тому, чтобы рассказать, в чём ваш интерес
Это действительно важно, причем одинаково и для компании, и для вас. Ведь код к успеху находится там, где вы действительно сможете решить задачи, стоящие перед командой, а команда сможет дать вам ощущение отдачи и вовлеченности в классное дело. А значит, работа должна быть по-настоящему увлекательной и вызывать желание вкладываться и развиваться.
Прежде чем заполнять заявку на стажировку, почитайте, как пишет компания: описания вакансий, пресс-релизы продуктов, блоги и интервью с ключевыми спикерами. Загрузите в себя этот словарный запас. Для эффективности можно собрать в список фразы из статей компании и потом их по-своему комбинировать, формулируя описание своего опыта и интересов. Только честно! Таким образом вы станете гораздо ближе к тому, чтобы разговаривать с профессионалами из индустрии на одном языке. Это важно и для взаимопонимания, и для вашего развития.
А чтобы не волноваться перед собеседованиями репетируйте! Проговаривайте вслух рассказ о себе, своих интересах и опыте, формулируйте и задавайте встречные вопросы, которые помогут вам лучше понять, что и как предстоит делать на стажировке. Наедине с собой перед зеркалом, глядя себе в глаза (я не шучу!) раз. Наедине с собой в Zoom, включив запись, и потом, посмотрев на себя со стороны, и еще раз с кем-то из друзей два. Офлайн с кем-то из тех, кто может дать вам полезную обратную связь и доброжелательно поддержать три. Главное говорите! Проговаривайте свои мысли вслух как можно больше в реальности они звучат совсем не так, как мы слышим их у себя в голове. И чем лучше вы разговоритесь в домашних условиях, тем легче будет преодолеть волнение в реальности.
Но вообще, волноваться это нормально. И те, кто вас собеседует, тоже волнуются и знают, что волнуетесь вы. Потому что всем одинаково не всё равно то, что происходит. Потому что всем важно, чтобы вы хорошо справились с проверкой и пришли на стажировку сделать вместе классный проект. Поэтому важно перевести фокус своего внимания с волнения о производимом впечатлении на мышление о проекте, продукте, задаче или сути вопроса, который вам задают. Для этого у вас в голове должно быть как можно больше информации обо всём, что связано с этой стажировкой, компанией и технологиями. Но как?
Целенаправленная подготовка к наборам на стажировки требует и времени, и ресурсов вашего мозга. Чтобы он работал эффективно, важно равномерно распределить нагрузку. Откройте свой календарь и занесите в него все дедлайны по интересным для вас программам не забыв про лекции, зачёты и экзамены (если вы учитесь) и другие важные дела. Посмотрите, где образовались наслоения и подумайте, как эти периоды можно разгрузить и что можно сделать заранее. Запланируйте конкретные дни и часы для подготовки к конкурсам так, как если бы это были спортивные тренировки. И (барабанная дробь) just do it!
Наша реальность это сложная открытая система в движении. Изменения в ней происходят сейчас на космических скоростях. Успешность зависит от того, как быстро вы адаптируетесь к меняющимся условиям. А для этого важно уметь быстро разбираться в том, что происходит здесь и сейчас. Поэтому будьте внимательны к себе и к миру вокруг вас, отправляйтесь в каждый эксперимент как на поиск сокровищ с любопытством и азартом действовать без промедлений и без оглядки на сомнения в себе. Учитесь новому и у вас всё получится. Главное не останавливайтесь.
вас ждет в следующих сериях ;)
Поговорим о том, как готовиться к собеседованиям, вести себя во время интервью и что делать, когда всё это наконец закончится (спойлер на самом деле, нет). Не переключайтесь!