![](https://habrastorage.org/getpro/habr/upload_files/ac3/ad3/817/ac3ad381761e398b4ca1ba662f2ee4cc.jpg)
Обучающие курсы — это то, с чего сегодня начинает путь почти любой разработчик. Существует много учебных программ, которые часто имеют одни и те же проблемы. В этом посте мы рассмотрим типичные ловушки, связанные с освоением программирования через курсы. А также дадим ряд советов, как развиваться дальше, освоив этот минимум.
Различия курсов и реальности
Когда вы открываете новый курс, то не имеете понятия, что ожидают от вас его создатели. Предположим, курс направлен на то, чтобы вы сделали как можно больше проектов с помощью определенных технологий. Можно ли будет сразу применить эти знания на работе? Едва ли, ведь в жизни кодингу предшествует большой пласт работы, связанной с концептуализацией, планированием проекта. Это важный и непростой этап, о котором тоже нужно знать хотя бы на базовом уровне.
Но курсы обычно бросают вас сразу в окно IDE, без предварительного разбора проекта и обоснования его выбора. В лучшем случае в начале курса вам покажут доску Jira или другого менеджера задач, где будет отражено, как проект разделен на более мелкие части. Но этого недостаточно для понимания общей картины, без которого невозможно развиваться в своей области.
Скучно, долго, бесполезно
Ещё одна проблема онлайн‑курсов — плохая адаптация к реалиям современного веба и особенностям человеческого внимания. Описанный выше этап погружения в проект может быть полностью проигнорирован, но какие‑то очевидные мелочи могут повторяться снова и снова: «установите Linux», «установите IDE» и т. п. Каждую минуту мотивация зрителя снижается. А после всех вступлений некоторые ведущие имеют привычку полировать свой код после каждой строчки и только потом рассказывают общий смысл происходящего.
Представим, что, посмотрев курс, вы вдохновляетесь и решаете написать свое приложение, которое будет делать то же самое или примерно то же самое, что и приложение из курса. Это нужно, чтобы закрепить материал. Вы повторяете действия за ведущим и полируете до блеска те же участки кода. Потом кое‑как дописываете остальное, но итоговое приложение не работает. Вы закапываетесь еще глубже в этот несчастный кусок кода, просматриваете его снова и снова, ищете в других туториалах… но оказывается, что дело вообще не в этом, а вы недосмотрели что‑то элементарное в другом месте. Забыли npm install или что‑нибудь вроде того.
!["Непрерывно смотреть курсы Udemy более 15 минут. — Непрерывно смотреть тупые сериалы на Netflix более 15 часов." Источник "Непрерывно смотреть курсы Udemy более 15 минут. — Непрерывно смотреть тупые сериалы на Netflix более 15 часов." Источник](https://habrastorage.org/getpro/habr/upload_files/f64/650/253/f646502538af1a9bd75b0cb245712aed.jpeg)
Обучающим курсам стоит стремиться к максимальной лаконичности — то есть краткости и понятности одновременно, чтобы они как можно больше зрителей смогли пройти курс целиком, получив тем самым максимум пользы от него. Сегодня же, несмотря на свою многословность, очень мало курсов охватывают полный путь разработки — от настройки ОС до релиза продукта. Когда вы проходите курс и, согласно инструкции, у вас получается то, что задумали создатели курса, при создании нового, уже собственного проекта возникает вопрос: а что делать‑то? Поэтому очень важно как можно быстрее научиться ориентироваться в мире разработки самостоятельно.
Keep it simple, not stupid
Другая проблема курсов: они обычно рассматривают самые простые реализации чего бы то ни было, которые не очень‑то применимы в жизни. Если это система авторизации, то наверняка в курсе ей будет уделено минимум времени — просто логин и пароль с проверкой по базе SQL в самом приложении. Но в реальном мире авторизацию давно уже делают через SSO и подключение внешних баз данных. Во втором случае вам открывается целый пласт задач по подключению, проработке сценариев, когда внешняя база недоступна и т. д. Всё это, вероятно, придётся осваивать самостоятельно; вряд ли кто‑то сделает исчерпывающий курс по специфической теме.
Курсы обычно не дают решение реальных проблем, сопутствующих описываемым проектам. Например, в англоязычной среде в качестве учебного проекта часто берут клоны социальных сетей типа Twitter или Instagram. Но про реальную инфраструктуру подобных сервисов говорят едва ли: «в целях демонстрации» фотографии грузят, например, на GitHub. Даже если «твиттер за 20 часов» и выглядит как настоящий твиттер, но по сути, это очень и очень далеко от твиттера, со всей его оптимизацией, синхронизацией и масштабированием. Так что не стоит обольщаться: учебные клоны — это не настоящие проекты, а максимум, подобие их малой части.
Зона максимального комфорта
Ещё одна проблема с курсами: они не развивают критическое мышление и не учат решать проблемы. Проект у ведущего получается с первого раза. В лучшем случае он подсветит несколько распространенных ошибок, чтобы вы их в дальнейшем тоже предусмотрели. Но в реальности путь к таким проектам лежит через поломанные стенды, бессонные ночи, непонимание, штудирование мануалов… в общем, всё не так ровно, как в туториале.
Не бойтесь этого. Почувствовав некоторую уверенность, отложите «инструкции к лего» и разработайте что‑нибудь классное самостоятельно. Есть мнение, что разработчику вообще не стоит браться за те проекты, где ему заранее известно, как всё нужно делать. Профессиональный рост происходит тогда, когда мы узнаем новое. Оценивания новый проект, иногда придерживаются отношения 60/40: «я примерно знаю, как делать 60% проекта, а насчет остальных 40% вообще без понятия». Хорошо, когда оставшиеся 40% имеют четкую доступную документацию; если ее нет или ее недостаточно, постарайтесь найти тех, кто владеет нужной информацией.
Не откладывайте практику
Для новичка велик риск увязнуть в различных туториалах и никогда не начать что‑то делать самому. Чтобы извлечь максимум пользы из курсов, сфокусируйтесь на тех из них, что предполагают практическую часть — желательно проект, близкий к тем, которыми вы бы хотели заниматься сами. Делать проект по инструкции лучше, чем изучать исключительно теорию. Подумайте, как развить проект, попробуйте предложить эту идею одногруппникам или другим знакомым разработчикам: заодно и скил командной работы прокачаете.
Начинать собственный проект можно, как только вы получили базовые знания по предмету. На практике вы будете прогрессировать гораздо быстрее. Соберите информацию о своем окружении и проведите мозговой штурм: что вы можете сделать для этих людей. Организовать систему мониторинга для бизнеса родителей. Написать приложение, о котором давно мечтает ваша подруга, но не может найти его в магазинах приложений. Варианты с большой вероятностью найдутся: останется лишь собрать требования с «заказчиков» и приступать. Спланируйте его разработку в соответствии с одним из принятых в индустрии подходов. И обязательно сделайте законченный продукт, хотя бы с простым UX, чтобы его могли оценить «заказчики»; это сможет подкрепить вашу мотивацию.
![Когда задачу можно сделать вручную за 10 минут, но вы находите, как автоматизировать ее за 10 дней. — Сейчас я применю то, что называется «подходом программиста». Источник Когда задачу можно сделать вручную за 10 минут, но вы находите, как автоматизировать ее за 10 дней. — Сейчас я применю то, что называется «подходом программиста». Источник](https://habrastorage.org/getpro/habr/upload_files/3f3/3cd/43a/3f33cd43a302fabe86c9b6738a416446.jpeg)
Выкладывайте свой код в открытый доступ; так вы сможете освоить организационные процессы для развития проекта. Оснастите его системой мониторинга ошибок, чтобы получать логи ошибок, возникших при использовании вашего приложения. Это очень поможет вам при доработке MVP для упомянутых выше «заказчиков», обычно далеких от разработки. О подобных проектах стоит рассказывать на первых собеседованиях; все любят слушать увлеченных людей (как минимум оценивают их лучше при принятии на работу). И да, вас обязательно спросят: «Были какие-то проблемы с проектом?». Если проблем не было, это звучит очень подозрительно: вы точно делали свой собственный проект?
Прелесть хакатонов
Следующий важный пункт — хакатоны. Не стоит их недооценивать, поскольку они предлагают весьма реалистичный сценарий: вам нужно сделать готовый продукт за ограниченное время. Часто вам придётся работать в команде с едва знакомыми людьми, и это отлично развивает социальные скилы. Попросите провести ревью вашего кода, «прожарить» вас. Именно «прожарить» — если вы попросите оценить код, например, друзей, они скажут лучше чем есть, потому что не захотят вас обидеть. Проводите сами ревью чужого кода, как только появляется возможность — так вы учитесь этому важному процессу и открываете что‑то для себя.
Насмотренность — не только для дизайнеров
Присоединяйтесь к тематическим группам, следите за инфлюенсерами, слушайте тематические подкасты — это поможет вам оставаться на волне, быть в курсе новых инструментов, хороших практик. Чем шире вы знаете свою и смежные области, тем больше вероятность, что в нужный момент вам придет в голову подходящее решение, что вы поймете, в какую сторону можно попробовать двигаться. Насмотренность особенно важна, если вы планируете полностью сменить профессию; придется находить личное время, чтобы «нахвататься» в привлекательной области. Но если она действительно вам нравится, это не должно стать проблемой.
Пора на работу
Переход к оплачиваемой практике становится сложным шагом для многих. Устроиться на первую работу или хотя бы начать фрилансить — это выход из зоны комфорта, в страхе переступить границу начинающие разработчики углубляются в очередные туториалы, вебинары, гайды и прочее.
Набравшись смелости, начните откликаться на вакансии. В некоторых компаниях джунам почти ничего не дают делать самостоятельно, просто потому, что они джуны. Их встраивают в жесткую должностную вертикаль, выбиться за пределы которой весьма непросто. Там сложно развиваться, но после испытательного срока можно спокойно плыть по течению.
При лучшем раскладе — и это также часто бывает в крупных компаниях — джунам даётся большая свобода. Они вполне могут показать все имеющиеся навыки и развить новые, пусть даже и на низкоприоритетных проектах. Так они сталкиваются с проблемами, которые прокачивают скилы и требуют инициативы, а не одного лишь умения «читать инструкцию». На таких позициях вы сможете лучше понять, что у вас лучше получается: писать код, концептуализировать решения, менеджерить процессы или что‑нибудь ещё. Это поможет вам сразу взять более верный карьерный вектор.
Постарайтесь сразу на собеседовании прощупать, к какому из двух вышеупомянутых сценариев ближе ваша новая карьера. Желаем, чтобы он совпал с вашими ожиданиями! Расскажите, какие учебные курсы проходили вы сами, с какими проблемами сталкивались, какие впечатления остались от учебы — нам очень интересен ваш опыт:)