Профессия разработчика программного обеспечения сегодня является одной из самых высокооплачиваемых. Однако чтобы стать классным специалистом, необходимо самосовершенствоваться и обучаться. К вершинам программирования можно прийти по-разному.
Кто-то разбирается во всем самостоятельно, благо в интернете встречается множество полезной литературы и бесплатных курсов (такие курсы ведут и преподаватели ИТМО — часть из них мы публиковали в наших предыдущих материалах: здесь и тут). Другой вариант — пойти в университет и получить диплом в области информационных технологий.
В сегодняшнем материале мы поговорим о том, какие особенности и сложности имеет процесс обучения в ИТ-сфере, и как с ними справляются на обоих «маршрутах».
hackNY.org / Flickr / CC
Ни один процесс обучения не дается легко, в том числе и изучение языков программирования и информационных технологий в целом. Компьютерные науки, как и технологии, постоянно развиваются. С учетом этого, разработчикам ПО приходится постоянно следить за последними обновлениями систем и фреймворков. При этом в процессе обучения приходится удерживать в голове множество нюансов, которые нужно грамотно совмещать в единую картину.
И хотя программирование считается креативной областью, для него характерны и «механические» аспекты, такие как написание чистого кода и комментариев к нему, а также документирование проекта. Это такие вещи, которые не дают немедленного прогресса в обучении (но пригождаются в будущем), поэтому работа над ними зачастую откладывается в долгий ящик. Чтобы с первых дней совершенствовать технику требуется высокий уровень дисциплины и мотивации.
Домашнее обучение: к чему надо быть готовым
Казалось бы, все вышеперечисленное говорит явно не в пользу домашнего обучения — изучать любую новую для себя область непросто, а уж если она требует особенного усердия, самодисциплины, а новые знания не всегда обеспечивают немедленный прогресс, то учиться самостоятельно становится очень тяжело. Тем не менее, в программирование нередко приходят именно этим путем – придется только уделять больше внимания следующим моментам:
Читать больше книг по теме, чем студенты-программисты
Грег Нойштеттер (Greg Neustaetter), старший управляющий в Egnyte (американская компания-разработчик ПО), говорит, что в случае самообучения придется действительно много читать, дабы заполнить те пробелы, которым обычно уделяют внимание на студенческой скамье.
Действительно, далеко не все студенты прочитывают рекомендованную к изучению литературу по каждому курсу – и все равно приобретают необходимые знания за счет лекций, повторения материала на практических занятиях и общения с сокурсниками. У новичка-одиночки такой возможности часто нет, поэтому придется обращаться к книгам. В частности, Грег Нойштеттер рекомендует в первую очередь прочесть книги по дискретной математике, шаблонам проектирования и проектированию алгоритмов.
Активно искать коллег и собратьев для обмена знаниями
Книги — это хороший источник информации, однако люди – все же существа социальные, поэтому мы хорошо усваиваем информацию, полученную от другого человека. В случае университета этим человеком выступает преподаватель. При обучении «на дому» ментора приходится искать самостоятельно. При этом он, скорее всего, не будет объяснять все темы и читать лекции (если только это не преподаватель онлайн-курса), но поможет составить «план обучения» и посоветует, на что стоит обратить особое внимание.
Такое общение важно не только для того, чтобы получить новые знания, но и чтобы не забросить обучение в целом. Новичок-одиночка, столкнувшись со сложностями, имеет гораздо больше шансов забросить обучение, чем его коллега-студент. Поддержку других программистов, а иногда и желание не подвести их не стоит сбрасывать со счетов при самообучении – они бывают крайне важны. На помощь в данном случае может прийти Хабр и его сообщество разработчиков, а также другие ресурсы и форумы, на которых у новичка есть возможность найти ответ на вопрос и поделиться своим мнением.
Самостоятельно продумывать практическую работу: и серьезную, и игровую
Больше усилий придется вкладывать и в практику. Здесь программисты советуют сразу начинать работу над осмысленным проектом и не придавать серьезного значения «упражнениям ради упражнений» (к сожалению, еще не во всех университетах студентов ориентируют на интересные практические проекты – этого программист, обучающийся сам, может избежать). Плюс – это положительно скажется на мотивации: возможность видеть, как развивается ваше собственное приложение, не даст заскучать.
Новичкам (всех возрастов) удержать внимание поможет также самообучение в игровом формате. Хорошими представителями своего жанра являются CodinGame и Code Combat, в которых игрок управляет персонажами, прописывая строки кода с командами. Несколько других интересных ресурсов можно найти по ссылке.
Что может дать обучение в университете
Обучение в университете тоже имеет свои особенности – разумеется, оно отнимает больше времени и сил. Какую бы форму вузовского обучения вы ни выбрали, для начала придется выдержать конкурс, пройти вступительные испытания и (в случае очного обучения) практически ежедневно посещать университет, что не всегда удобно, в особенности тем, кто хочет сменить профессию и параллельно работает.
Прибавьте к этому жесткий график, сессии, не всегда интересные предметы и множество других обязательных к выполнению задач – казалось бы, игра не стоит свеч. Однако в университетах с сильным ИТ-профилем есть немало возможностей, недоступных тем, кто учится самостоятельно:
Информация подается более структурированно
В вузах студентам с первых дней начинают давать фундаментальные знания в выбранной области и «прививают» понимание структуры дисциплины (например, будущим программистам в Университете ИТМО преподают дисциплину «Парадигмы программирования»). Такой подход практикуют во многих мировых университетах, в том числе в американском MIT.
Далеко не каждый новичок в программировании способен самостоятельно выстроить программу обучения подобным образом – в итоге некоторые важные разделы упускаются из-за того, что оказываются слишком скучными или (на данном этапе обучения) неприменимыми на практике. Четкая и структурированная подача материала, в том числе и не ориентированного на практику, может показаться недостаточно интересной, но она дает «кумулятивный эффект» – фундаментальные знания в комплексе помогают впоследствии быстрее осваивать новые практические дисциплины.
Разумеется, подобного эффекта можно добиться и обучаясь дома. Однако в этом случае программисту-новичку придется постоянно делать непростой выбор между тем, что можно использовать сразу же на практике, и «фундаментом» – в условиях, когда мотивировать себя приходится самостоятельно, вторая категория часто остается без внимания.
Можно быстрее наладить контакт с практикующими специалистами
Далее, когда базис усвоен, со студентами начинают работу преподаватели, приглашенные из различных компаний. Они ведут практические занятия, разбирая проблемы, с которыми сталкиваются в своей профессиональной ежедневной деятельности. В частности, Университет ИТМО сотрудничает с такими компаниями как Mail.ru, Яндекс, JetBrains, VisualSVN и другими. Начиная с определенного этапа обучения, студенты могут проходить практику в этих компаниях, где выполняют реальные «боевые задачи».
Это помогает получить наиболее полное представление о специфике работы и современных технологиях, используемых «на производстве». Согласно проведённым исследованиям, студенты, посещающие только классические лекционные курсы, в полтора раза чаще проваливают экзамены. Стратегии же активного обучения оказываются очень эффективными, поскольку подход направлен на постоянное взаимодействие обучаемых и преподавателей посредством прямых и обратных связей и повышение степени мотивации и эмоциональности обучаемых.
Доступны сложные коллективные модели обучения
Еще одна популярная методика, использующаяся в университетах — это сетевое обучение, основанное на идеях децентрализованной учебной деятельности. В этом случае речь идёт об управляемой коммуникации посредством использования методик, требующих активной самостоятельной работы и взаимодействия учащихся.
Примером подобного подхода может быть методика изучения физики, используемая Эриком Мазуром. Она называется «преподавание учащимися» (Peer Instruction) и предполагает вовлечение студентов в активную деятельность по изучению концепций и теорий с последующим объяснением их своим сверстникам.
Практика и теория эффективно дополняют друг друга
Как было сказано выше, компьютерные науки являются постоянно развивающейся областью, причем областью больше практической, чем теоретической. В связи с этим простого чтения лекционных материалов оказывается недостаточно. И если при домашнем обучении новичку приходится придумывать задачи самостоятельно, чтобы не потерять мотивацию и не скатиться к копированию готовых упражнений, то в университете эта работа (формирование не только полезной, но и интересной практической части) лежит на плечах преподавателя.
Конечно, многое в этом случае зависит от того, кто ведет курс, однако у профессионалов достаточно преимуществ – при необходимости, они могут изменить часть практической работы по просьбе студента (чтобы тот мог реализовать интересный именно ему проект), не упустив важных деталей. Кстати, оценить возможности подобного обучения с преподавателем может сейчас любой желающий – примером такой ориентированной на практическую работу учебной программы является курс Университета ИТМО «Программирование и разработка веб-приложений», который доступен онлайн.
Студенты в рамках этого курса занимаются созданием веб-ресурса на Django — небольшой информационной системы и приложения к ней. Дмитрий Штенников, автор и доцент кафедры Компьютерных образовательных технологий Университета ИТМО, рассказывает слушателям, как его делать, а студенты стараются его повторить. При этом, чтобы не возникало бездумного копирования, слушатели постепенно получают новую информацию в течение всего курса, а затем улучшают свой проект с помощью ранее полученных знаний.
Конечно, с развитием открытого онлайн-образования, подобные курсы и проекты все чаще становятся доступны всем желающим. Но пока число MOOC относительно невелико, и они покрывают не все дисциплины, доступные в вузах, полностью перейти на MOOC-обучение вряд ли получится – скорее это возможность освежить какие-то знания или приобрести новые навыки «поверх» имеющегося фундаментального образования.
Что в итоге
Итак, получить необходимые для программиста знания и навыки возможно и «на дому» – однако придется проявить твердость духа и иметь серьезную мотивацию, кроме того, необходимо будет самостоятельно формировать учебный план и балансировать между сугубо практическими навыками, которые помогут прямо сейчас, и фундаментальными знаниями, полезными при обучении в целом.
Студентам вузов с сильной ИТ-составляющей проще: им придется пожертвовать свободой учиться «когда удобно и где удобно», но взамен они приобретают больше структурированных фундаментальных знаний, могут заручиться поддержкой профессионалов и с университетской скамьи перейти в штат крупной ИТ-компании.
Есть определённые задачи, при решении которых университетские знания приходятся весьма кстати. «Пару раз за свою карьеру я сталкивался с проблемами, которые не смог бы разрешить без полученных в университете знаний, — рассказывает программист Натан Марц (Nathan Marz). — Одна из таких ситуаций — составление алгоритмов для работы распределённых систем. Мне требовалось прописать формальное доказательство, чтобы подтвердить их работоспособность». Сами алгоритмы, о которых говорит Натан, легли в основу системы Storm.
Однако не стоит полагать, что, даже поступив в университет, можно оставить в стороне самообразование. Эти навыки невероятно важны для будущих программистов хотя бы в силу того, что информационные технологии сейчас развиваются очень быстро.
При этом, несмотря на то, что современные представления об образовании меняются, многие работодатели и специалисты (в том числе в ИТ-сфере) все еще обращают внимание на диплом – в той или иной мере. Например, Марк Цукерберг недавно решил все-таки получить степень. А в IT-компаниях (в частности, в Google) проще попасть на собеседование с дипломом о высшем образовании в области компьютерных наук. Однако на самом собеседовании все же придется показывать свои знания наравне с остальными соискателями — здесь поблажек не будет.
P.S. Большое интервью: как поступить в Университет ИТМО.
Автор: Университет ИТМО