Привет, Хабр. На связи Денис Былинин, системный архитектор из финансового маркетплейса Сравни. Сегодня хочу поделиться подробностями запуска курса по практической разработке для студентов мехмата Новосибирского Государственного Университета, где я выступал в роли составителя программы и основного лектора. 

Курс охватывает широкий спектр тем от продуктового мышления и софт-скиллов до сравнения типов архитектур и DevOps-инструментария и призван познакомить студентов с принципами разработки на реальных (или приближенных к реальности) кейсах. Записи лекций лежат здесь в открытом доступе. 

Как всё начиналось

Одна из задач любой IT компании – это создание и развитие HR бренда, и Сравни здесь не исключение. В этом направлении у нас уже велись попытки что-то сделать, в частности, была идея преподавать в вузе в рамках партнерства. Коллеги мне тоже закидывали удочку, чтобы в этом как-то поучаствовать, и я предложил формат лекций или семинаров для студентов. И так как территориально я, кажется, нахожусь ближе остальных коллег к НГУ, то эта замечательная роль выпала мне. 

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

Например, были мысли рассмотреть современный фуллстек, но... рассматривать современный фуллстек в рамках 12-13 занятий — это либо полная профанация, либо мы бы затронули только самое начало. Еще был вариант сконцентрироваться на какой-нибудь одной теме вроде Domain Driven Design, но тут получается, что это было бы интересно и полезно достаточно узкой прослойке студентов. Про разработку конкретно бэкэнда, например, с живыми примерами, тоже было бы сложно для начинающих в рамках короткого курса. 

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

В чем состоит концепция курса 

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

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

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

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

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

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

Что должны уметь студенты по окончании курса

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

В принципе, при подборе тем и материалов курса я отталкивался от классического набора молодого бойца, принятого у нас в компании. Я взял типичный список скиллов для мидла и раскидал всё это по темам для лекций. Потом я немного разбавил это какими-то интересностями, например, event driving design. Чтобы это была не просто скучная база, а еще несколько интересных подходов, которые достаточно на слуху, чтобы можно было что-то сравнить, отвлечься и даже где-то разговор поддержать среди маститых разрабов.

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

В итоге, список тем выглядел так:

  1. Практическая сторона современной ИТ-разработки: путь от кодера до инженера

  2. Погружение в архитектуру приложений 

  3. SOLID, KISS, DRY и другие странные слова (разбор паттернов проектирования архитектуры)

  4. Domain Driven Design на примерах

  5. Общение клиента и сервера (разбор принципов взаимодействия между компонентами внутри архитектуры)

  6. Продуктовая разработка

  7. Event-Driven Architecture и ее компоненты

  8. Основы работы с базами данных

  9. Hard & Soft Skills: как развивать непонятные навыки

  10.  Docker и Kubernetes (обзор DevOps-инструментария)

  11. Как пройти интервью по проектированию систем

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

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

Впечатления и результаты 

В целом, ощущения от курса у меня положительные.

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

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

Для меня работа над курсом была новым опытом. Честно говоря, до этого я слабо представлял, насколько это объемная и тяжелая работа. Конечно, у меня был уже опыт публичных выступлений на конференциях, но по сложности подготовки получасовой доклад ни в какое сравнение не идет с полуторачасовой лекцией. 

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

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

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

Для меня лично это довольно высокая планка, потому что я всегда считал, что для получения знаний именно в области IT инициатива должна исходить от самого человека. И если он чего-то не хочет, не может, или ему скучно, то просто это «не его». А тут надо было совершенно переключиться, так как задача состояла в том, чтобы сделать материал доступным для студентов разных уровней. Всё-таки аудитория моих коллег на работе и аудитория студентов — это две совершенно разные аудитории, и диалог с ними нужно строить совершенно по-разному. 

Вообще, всем, кто хочет убедиться, что поколение тик-тока не потеряно, могу посоветовать попреподавать.

А что бы вы рассказали самому себе на втором курсе, если бы у вас было всего несколько лекций (рекомендовать инвестировать в биткойн нельзя)?

Комментарии (4)


  1. idamir
    30.12.2023 13:11

    В семестре 17 недель, т. е. 16 лекций/семинаров. Плюс курс нужно делать годовым.

    Сам запустил новую серию курсов по проектированию интегральных микросхем на ФФ НГУ.


  1. ftpgg
    30.12.2023 13:11

    Привет с мехмата НГУ~


  1. Verieth
    30.12.2023 13:11

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


    1. idamir
      30.12.2023 13:11

      АФТИ ФФ НГУ.

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