Все противоречия обучения и реальной работы можно выразить в двух тезисах: учат не так и не тому. Кроме того, сами студенты имеют весьма специфическое отношение к обучению и будущей работе. И есть извечная проблема — устаревание любых знаний.
Как я уже говорил, есть несколько проблем: учат не так и не тому. Это не значит, что вся система образования ни на что не способна, скорее перед ней стоят другие задачи, которые она пытается решить имеющимися возможностями.
Как вы понимаете, далеко не все преподаватели являются действующими IT-специалистами в области программирования. Более того, мало кто из них когда-то работали по специальности, т.е. были ПМ-мами, тимлидами, или хотя бы middle-программистами.
Для студентов это означает, что нет смысла у преподавателей спрашивать и уточнять что-то, выходящее за учебный курс, а также о будущей профессии и ситуации на рынке. Совет действующего middle-разработчика в этом плане будет куда полезнее и точнее, нежели преподавателя информатики, даже с 20-ти летним стажем.
Как показывает практика, формат обучения очень сильно отличается от требований будущей работы. Так лекции, семинары, практические работы, курсовые и дипломные проекты — это совсем не то же самое, что и работа в команде над проектом. На работе предстоит думать о сроках и других разработчиках, которые вынуждены будут читать ваш код и учитывать его при решении собственных задач. Разработка проекта захватывает интересы менеджеров проектов, системных администраторов, заказчиков и т.п. А это значит, что результаты вашего труда будет оценивать не преподаватель, а “комиссия” весьма заинтересованных в результате людей.
А вот тезис «учат не тому» весьма холиварный и состоит из двух частей. Первое — это языки программирования. Для большинства студентов результат их освоения весьма плачевен, т.к. до сих пор изучают умершие языки программирования (типа Pascal-я), весьма низкоуровневые и нишевые языки (например, с/с++) или старые версии современных языков (например, java, python, php, …).
Второе — это библиотеки и фреймворки. В современной коммерческой разработке уже давно люди не пишут с нуля, это слишком дорого и ненадежно. Для каждого языка программирования написаны свои стеки технологий (например, для php есть пакетный менеджер packagist.org с десятком тысяч готовых библиотек, и с десяток фреймворков, таких как: Symfony, Laravel, Yii, и т.п.).
Это все означает, что по окончании учебы, вам предстоит заново выбирать язык программирования и учить его современный синтаксис, а также узнавать стек используемых технологий и осваивать их самостоятельно.
Устаревание знаний
Век живи, век учись (с)
С этой поговоркой знакомы все. Информация меняется очень стремительно, и учиться действительно стоит всю жизнь, иначе безнадежно устареете и не сможете быть конкурентоспособными. Постоянно выпускаются новые версии языков программирования, например, 5 лет назад была версия php5.6, затем несколько релизов 7-ки, сейчас вышла 8-ая версия php, они значительно отличаются друг от друга. Версии фреймворков выпускаются достаточно регулярно, с 2019 года Symfony (который позиционирует себя как enterprise-фреймворк), совершил несколько скачков с версии 3.4 до 5.2. Laravel и того больше — с 5.8 версии в феврале 2019 до 8-ой в сентябре 2020. Также они планируют выпустить по одной мажорной версии за 2021 и 2022 год. Про количество выпускаемых библиотек или их новых версий я вообще молчу.
Таким образом, образовательная программа, стандарты для которой пишутся годами, физически не сможет никогда успеть за текущими обновлениями, как бы она не старалась. Да и выучить, и запомнить все тоже не получится, можете даже не пытаться.
Советы студентам
Давайте попробуем описанные выше реалии превратить в практические советы для тех, кто хочет получить максимум пользы от обучения.
- Ищите ментора (наставника) из практикующих разработчиков, лучше уровня middle или senior, а лучше team-leader-а. На YouTube очень много видео с различных конференций, как правило, весьма квалифицированных людей.
- Учитесь самостоятельно. Вам все равно придется это делать, так начните уже сейчас.
- Обучение должно быть приближено к реальной работе, а значит самый лучший способ чему-то научиться — работать! Пишите проекты для себя, пишите с друзьями, присоединитесь к open-source проектам, проходите практику в реальной IT-компании, устройтесь на работу, в конце концов. Junior-ы много где нужны.
- Запишитесь на менторинг (не путать с курсами!). Менторинг — это форма обучения с наставником, в ходе которого вы выполняете задачи, приближенные к реальным. Это очень похоже на то, что у вас будет после устройства на работу (обычно вас будет менторить более старший сотрудник или team-lead).
- Если будете делать свой проект — находите stake holder-ов (заинтересованных в проекте людей) и, желательно, чтобы это были не вы. Сделайте проект для мамы, брата, друга — для кого угодно. Так вы получите незабываемый опыт работы с заказчиком: выяснение требований, согласование сроков, приемка проекта и т.п.
- Выберите первый язык программирования, который будете изучать. Посмотрите топ 10 языков и обзоры на них, сравнения, области применения и т.п. Немаловажным фактором будет наличие junior-вакансий в вашем регионе (впрочем, при удаленной работе это менее критично). Изучите его.
- Узнайте о стеке технологий и типовых проектах на выбранном языке. Для большинства современных фреймворков есть большие гайды для начинающих, есть официальные видео-уроки от разработчиков и куча пользовательского контента.
- Сделайте несколько pet-проектов (учебные проекты для себя). Лучше, если ваш проект будет отражать некую потребность — вместо того, чтобы делать “блог, todo-лист и т.п.”, сделайте что-то, что вам может пригодиться. Например: собираете марки — классификатор марок, смотрите сериалы — парсер сайта и оповещение о выходе новой серии и т.п.
- Не тратьте много времени на изучение фреймворков и библиотек. Чаще всего у работодателя будет свой перечень используемых технологий, и вы можете просто не угадать. Даже изучение требований на рынке вакансий мало чем поможет. Освойте вводные обучающие материалы по фреймворку и делайте pet-проекты. А лучше познакомьтесь с несколькими фреймворками, ведь на реальной работе все равно придется учить что-то новое.
- Не стоит заучивать. Т.к. все быстро меняется — вам постоянно придется что-то переучивать. Знания должны “работать”, т.е. “учите” что-то только тогда, когда можете это применить в работе (решить задачу, реализовать проект).
- Почитайте литературу по менеджменту программиста. “Идеальный программист. Как стать профессионалом разработки ПО” Мартин Роберт, и аналогичные книги помогут понять, как устроена работа программиста изнутри.
- Изучайте стандарты вашего языка и clean code. В php существуют актуальные правила написания кода — PSR. Советую: “Чистый код. Создание, анализ и рефакторинг” Мартин Роберт К., “Совершенный код. Мастер-класс” Макконнелл Стив, и т.п. литература — это бессмертная классика, которая никогда не устаревает.
- Изучайте принципы программирования (ООП, DRY, KISS, SOLID и т.п.). Они универсальны и очень помогут улучшить ваши профессиональные навыки.
- Изучайте шаблоны проектирования (GRASP, GoF). Это тоже, своего рода, бессмертная классика. Но не советовал бы читать такие вещи начинающим.
Если снять розовые очки и посмотреть на мир с точки зрения возможностей, то время можно потратить с пользой и, закончив обучение, пройти собеседование и стать программистом. Удачи в обучении! И добро пожаловать в мир программистов-профессионалов!