Как готовить программистов?

Шесть важных направлений образовательной программы бакалавриата

АВТОР:
Александр Куликов
Forbes Education Contributor
Профессор и руководитель программы «Современное программирование» факультета математики и компьютерных наук СПбГУ, старший научный сотрудник Санкт-Петербургского отделения Математического института им. В. А. Стеклова РАН, координатор проектов в JetBrains, доктор физико-математических наук
Сегодня есть много разных курсов и программ, которые обещают научить чему-то с нуля и даже гарантируют трудоустройство после краткосрочного обучения. Некоторые технологии, действительно, можно освоить за несколько месяцев, но вот научиться создавать новые технологии и продукты так быстро не получится.

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

Программирование

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

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

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

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

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

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

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

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

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

    Эти навыки не менее важны в работе, чем знания по конкретным дисциплинам. Сегодня совершенно очевидно, что обучение soft skills должно быть встроено в учебный процесс, поэтому студенты обязательно должны учиться работать в командах. Умение отстаивать свою точку зрения, продуктивно спорить и приходить к общему решению становится крайне важным для эффективной работы. Для презентации своих идей надо уметь готовить доклады и выступать не только на русском, но и на английском языках.
    Итак, если вы готовите будущих программистов, убедитесь, что:
    1) вы учите не синтаксису языков программирования, а парадигмам;
    2) учите не только технологиям, но и стоящей за ними математике;
    3) обучение проводят профессионалы из индустрии;
    4) у обучающихся есть возможность углубляться в интересные им темы;
    5) студенты закрепляют полученные знания не только на маленьких лабораторных задачах, но и на серьёзных проектах;
    6) внимание уделяется также и навыкам общения и работы в команде.

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

    3 июня / 2021

    МАТЕРИАЛЫ ПО ТЕМЕ