Чему учат в магистратуре Software Engineering в Питерской Вышке

    Многие не понимают, чему могут научить в магистратуре по направлению Software Engineering, и считают, что после бакалавриата нужно идти работать и учиться всему прямо там. Стоит ли идти в магистратуру по SE — вопрос сложный, и в этой статье мы отвечать на него не будем, но расскажем, чему выпускников сильных бакалавриатов учат в нашей.



    Меня зовут Оля Кунявская, я учусь на первом курсе магистерской программы «Программирование и анализ данных» в НИУ ВШЭ — Санкт-Петербург на треке Software Engineering. В предыдущей серии я уже рассказала про мой путь до магистратуры ВШЭ и про мотивацию, с которой я сюда пришла.

    Как устроена наша учеба


    Чему концептуально учат


    На нашу магистерскую программу берут только выпускников сильных бакалавриатов в области IT, поэтому считается, что мы уже получили все необходимые базовые знания по математике, алгоритмам и программированию в бакалавриате. Цель трека Software Engineering — дать студентам представление о разных фундаментальных направлениях в разработке. Поэтому курсы для нас подбирают из разных областей знаний, так или иначе связанных с разработкой.

    Возможность повлиять на свое обучение


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

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

    Особенности обучения


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

    Некоторые предметы длятся семестр, некоторые один модуль. Часть предметов читается только для нас и для студентов 2-го курса нашего поднаправления (тогда на занятиях присутствует от четырех до шести человек). Некоторые предметы мы проходим в Школе анализа данных «Яндекса», а еще часть курсов — вместе с ребятами из других направлений. 

    У нас были как теоретические, так и достаточно прикладные курсы, и курсы, связанные с развитием soft skills. 

    Чему нас учат


    Цель трека Software Engineering — дать нам некоторый опыт из разных сфер, связанных с разработкой. Я не уверена, что могу описать общую картину, поэтому просто расскажу про те курсы, которые нам читали в этом году: что происходило на каждом из них и какие у меня остались впечатления.

    Data Management Algorithms


    Теоретический курс про алгоритмы, связанные с базами данных. Курс длился один модуль, по три пары в неделю. Нам рассказывали про алгоритмы обработки транзакций в распределенных базах данных. Например, про критерии корректности расписаний исполнения транзакций, concurrency control protocols, восстановление базы после падения.

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

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

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

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

    Компьютерная графика


    Курс был рассчитан на один семестр и в основном был посвящен рендерингу в Unity. Его читал Михаил Панин, техлид в Playneta.gg. Было много практических заданий, в основном посвященных написанию шейдеров и генерации мешей. 

    Пока я проходила этот курс, у меня произошло расширение сознания с точки зрения визуального восприятия объектов. Последним заданием была генерация облаков. И пока я его выполняла, я поняла, что вообще-то никогда толком не смотрела на облака и не задумывалась, как они выглядят. Я не могла отвалидировать, получилось ли у меня сгенерировать красивое небо, поэтому задание заняло у меня много времени и в итоге я так и не сдала его на максимальную оценку. Я генерирую какое-то облако, мне кажется — нормальное облако, присылаю преподавателю — и мне сразу приходит ответ: «Ну, вот тут у тебя темно, темно должно быть не тут, а внизу, а вот это место вообще на облако не похоже». Мне кажется, я прислала штук 20 разных версий облаков.


    Теперь иду я на работу, смотрю на небо, вижу облако, сразу залипаю и думаю: «Хм… А почему, интересно, облако темное наверху, а внизу, наоборот, светлое?» Потом понимаю, что сейчас рассвет и источник света находится внизу. 


    Домашнее задание, в котором нужно было реализовать диффузную, отражающую модели и что-то посередине.

    После курса по компьютерной графике я теперь много смотрю на облака. А еще на кирпичные стены и на объекты разной зеркальности. 

    Защита от сетевых атак


    Курс читали только для нашего поднаправления, всего на нем было шесть студентов. Мы учились поднимать сеть, настраивать и нагружать Apache и nginx, детектировать уязвимости и защищаться от атак.

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

    На предмете было просто, когда все шло как надо, и становилось очень сложно, если вдруг что-то пошло не так.

    Алгебра конечных полей и теория кодирования


    Курс построен очень интерактивно. Лекции и практики проводились всего для пяти человек, и общения было очень много. На лекции переход к следующей мысли происходил только тогда, когда все присутствующие разбирались в предыдущей. Мы скорее обсуждали реальные объекты, а не идеи и абстрактные понятия, как это, по моим воспоминаниям, происходило на математических курсах в бакалавриате. На лекциях нам сначала приводили примеры каких-то новых объектов, мы их рассматривали, крутили в руках, понимали, как с ними можно работать, и находили какие-то закономерности. И только после того, как мы проникались новым объектом, преподаватель начинал формулировать и доказывать теоремы. 

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

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

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

    Разработка игр


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


    Курс был разделен на части, посвященные разным аспектам разработки игр: анимация, физика, AI, продвинутые аспекты рендеринга и оптимизации, сеть. Кроме того, были обзорные лекции по смежным областям (игровой дизайн, аналитика в играх, пользовательское взаимодействие и арт). Про каждую область рассказывал тот человек, который ею занимается. Например, серию лекций про Unity читал Антон Яковлев. Он работает тех лидом по физике в Unity, делает игры от лица своей команды PointOmega Games и выступает с разнообразными лекциями. Нам рассказывали, как в Unity делать анимацию, добавлять управление над игроками или создавать ботов.

    Это тот самый случай, когда преподавателей на курсе больше, чем студентов. Нас всего пятеро, и в качестве задания за весь курс мы впятером делаем небольшую игру с сетевым взаимодействием, физикой и несколькими ботами. Посмотрим, что у нас в итоге получится :) 

    С++


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

    Этот курс — вторая часть курса по C++, идет совместно для нас и для студентов Computer Science Center. Он длится один семестр, читает его Валера Лесин и приглашенные лекторы, которые хорошо разбираются в специфических областях. Нам рассказывают про всякие прикольные фишки, которые появились в 20-м стандарте, то есть за несколько месяцев до начала курса. Например, про модули, концепты или корутины. После этого на практиках мы решаем задачки на каждую тему, и у нас есть возможность поиграться с новой концепцией языка. 

    Теория игр


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

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

    Слишком нетребовательный курс, по-моему.

    IT management


    Курс по IT management длился один модуль и читал его Илья Андреевич Пшеничный: действующий директор по развитию бизнеса в компании Playkot. На курс ходили магистранты двух программ: нашей и программы «Информационные системы и взаимодействие человек — компьютер».   

    Занятия были в основном лекционными, и на курсе нам по чуть-чуть рассказывали про разные аспекты управления, специфичные для IT-индустрии. Например, какие есть подходы к разработке, этапы разработки, и на каких этапах что можно использовать, как управлять рисками, каковы основные функции руководителя, как мотивировать команду, как нанимать и увольнять сотрудников, а в самом конце курса были некоторые рекомендации для саморазвития.

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

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

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

    В связи с этим хочу рассказать историю, как Илья Андреевич давал мне feedback по моему итоговому заданию. Изначально за задание я получила 7 из 10 (по пятибалльной шкале это 4). В целом это так себе, но не катастрофа. Я сомневалась, стоит ли мне исправлять: есть и другие дела. Во время созвона Илья Андреевич, естественно, рассказал мне, что было не так в работе: зарплаты у сотрудников не рыночные, налоги не учтены, а тестирование приложения вообще куда-то потерялось из плана. В конце он добавил, что от меня-то он точно ждет, что я исправлю это задание. Я удивилась, откуда такая уверенность. Он ответил: «Потому что ты обязательная, усидчивая и стремишься к совершенству». А я хочу соответствовать этим характеристикам, поэтому пошла исправлять, уже не сомневаясь! 

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

    Theory and Practice of Concurrency


    Этот курс мы проходим дистанционно в Школе анализа данных «Яндекса», ведет Роман Липовский. Курс посвящен конкурентным системам. На нем нам рассказывают, как устроена модель памяти, как работают корутины, fibers, а еще про устройство разных примитивов синхронизации и про работу с асинхронными системами. 

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

    Домашние работы проверяются автоматически на вашем компьютере внутри Docker-контейнера. Можно проодбросить изменения из Clion в Docker, после чего простой командой запустить тестирование. Тестирование при этом сделано достаточно хорошо, а это весьма непросто для курса про конкурентное программирование. Если я правильно понимаю, дело в том, что вместо стандартных примитивов мы используем собственные реализации от преподавателей, которые могут проверить корректность работы. Например, переключить потоки определенным образом или сделать spurious wakeup.

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

    МАГОЛЕГО


    Помимо курсов по специальности за время обучения в магистратуре мы должны пройти один небольшой курс размером в модуль, не связанный с выбранным нами направлением. В Питерской Вышке такой курс скрывается под кодовым названием МАГОЛЕГО. Нам предоставили выбор примерно из 20 дисциплин, относящихся к разным направлениям: экономика, право, психология, управление и так далее. Вместо этого можно было пройти онлайн-курс на наш выбор, если предварительно его согласовать. 

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

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

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

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

    Резюме


    Здесь — полный список тех курсов, которые мы успели прослушать на первом году обучения на магистерской программе «Программирование и анализ данных» в НИУ ВШЭ — Санкт-Петербург по направлению Software Engineering. 

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

    *****

    30 апреля в 18:00 на факультете будет День открытых дверей online про магистерские программы. Приходите! А если читаете это позже (надеюсь, в прекрасной России будущего, победившей коронавирус), запись ДОДа доступна в группе в VK.
    Питерская Вышка
    Компания

    Комментарии 5

      0

      "Мы учились поднимать сеть на Apache и nginx" — это как вообще?

        +1
        Пропустили эту формулировку при вычитке, поправили.

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

        Или настроить honeypot и потыкать в него чем-нибудь.
        0

        Ольга, прочитал с интересом и предыдущую статью. Спасибо!


        1. Отлично, что у вас есть возможность учиться у действующих гуру на реальных примерах! Порой, именно этого и не хватает: вначале понять практическую проблему и лишь за тем методы ее решения. Или хотя бы пример, лайфхак из жизни. Не скучно о скучном :)
        2. Такой разброс предметов, от сетей до компьютерной графики. Зачем? Что преследуется? Учиться ради учиться? Понять, насколько многогранна наука и как много существует разных направлений в работе? Найти себе применение? О некоторых дисциплинах и не слышал, но представляю что в каждой дисциплине можно углубляться до бесконечности, применяя математический аппарат. Узкий специалист — тот, кто знает всё о ни о чем :)
        3. Из предыдущего поста, интересна тема Управление IT-проектами и сам Project management.
        4. В вашем посте увидел страсть к знаниям. Это вдохновляет. Задумался, что кроме оттачивания мастерства в своей работе можно расширить кругозор и другими дисциплинами. Здесь как ваш комментарий: искать и пробовать курс или пойти на что-то готовое. Но сейчас больше стоит вопрос о применимости в жизни чем владение знаниями о высших материях.
          +1
          Спасибо за комментарий и за внимание к статьям :)

          1. :)
          2. Да, вы правы, что каждый из этих курсов при желании можно развернуть на отдельную магистерскую программу, если не больше. Как поступать более разумно, если честно, я не знаю. С одной стороны, здорово быть крутым специалистом в какой-то конкретной области. Так можно круто выполнять какую-то конкретную работу. При этом знать кучу всего из смежных областей тоже может быть интересно. Попробую пояснить почему. Если работаешь в какой-то одной сфере и из неё не вылезаешь, то взгляд на задачи может быть достаточно замылен. В случае если слушаешь и пробуешь практики из совершенно разных научных областей, то генерируются идеи, как вещи из одной области можно перетащить в другую.
          3. Не очень поняла, что имеется в виду.
          4. Рада, что вдохновляю. Хм… в целом, очень многие курсы у нас достаточно прикладные. Вероятно, у меня работа достаточно специфичная. Многое из того, что я прохожу в магистратуре и что проходила в бакалавриате, я использую в своей работе. Особенность в том, что я работаю на стыке наук, причем в достаточно небольшой лаборатории. Как следствие, часто я участвую в разработке проекта с очень разных сторон: выявление требований, разработка алгоритма, back-end разработка, настройка сервера, веб-разработка, тестирование, анализ данных, составление датасета, интерпретация результатов с биологической точки зрения, написание статьи, распределенная разработка. И если посмотреть на всю эту солянку, которой я занимаюсь на работе, то очень многие курсы становятся прям в тему.
          +1

          Я прочитал это с большим, неутолимым интересом, спасибо, успехов тебе!)

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

          Самое читаемое