Очень долго я боялся начинать собственные проекты из-за нехватки знаний.
В любом проекте, за какой бы я не взялся, всегда находилось что-то, в чем я совершенно не разбирался. Поэтому я постоянно задавался вопросом: «Как вообще решиться на создание проекта, если я не знаю и половины из основ его реализации». Я свято верил, что до начала собственных разработок необходимо еще чему-то подучиться.
Добро пожаловать в капкан зубрежки
И вот вместо того, чтобы создавать новые проекты, я застревал в так называемом «капкане зубрежки». А поскольку лучше всего, на мой взгляд, информация запоминалась из обучающих роликов, то я находил, читал и просматривал каждый из более-менее интересных мне уроков с потенциалом применения их на практике.
Месяц за месяцем я проводил бессонные ночи за просмотром нескончаемой череды роликов на YouTube, Udemy и других обучающих ресурсов, какие только мог найти. Я многому научился, но и забыл не меньше.
Не поймите меня неправильно. Мне очень нравятся обучающие ролики, и я верю в то, что они идеально подходят для изучения основ чего-либо. Но если вы не подходите к выбору информации вдумчиво и осмотрительно, то оказываетесь в ситуации, когда начинаете читать/смотреть еще больше уроков, чем требуется.
Например, когда я только-только начинал свои шаги в разработке, то купил и просмотрел The Web Developer Bootcamp от Udemy. Это было 43-часовое видео, посвященное HTML, CSS, Bootstrap, JavaScript и jQuery. Курс мне показался действительно полезным, однако после просмотра у меня не возникло ощущения готовности к работе над собственными проектами.
Тогда я взял и купил еще The Complete Web Developer Course 2.0. Там меня ждало еще 30 часов уроков, которые мало чем отличались от первого курса!
Почему же я совершил эту ошибку? Честно говоря, наверное, потому, что подобные уроки дают нам чувство уверенности. В обучающих видео всегда есть кто-то, кто говорит нам, что и как нужно делать. И у нас возникает чувство, будто мы узнаем много нового и полезного.
На деле выходит так, что если вы смотрите уроки один за одним с абстрактной целью «научиться», а не для реализации отдельно взятого проекта, то узнаете куда меньше, чем вам кажется.
Нет инструкций — нет проблем
Однажды я пришел к выводу о том, что настало время отказаться от видео-уроков, выйти из зоны комфорта и взяться за собственные проекты, не полагаясь на инструкции, которые кто-то принесет мне на блюдечке.
Я решил создать сайт Stack Overflow, на котором пользователи могли регистрироваться, задавать вопросы, отвечать на них, размещать комментарии и даже вставлять видео в сообщения.
Проект казался весьма амбициозным, но это меня не смущало. Я хотел создать нечто действительно стоящее и трудоемкое. Не так давно я начал изучать Ruby on Rails, и он мне действительно понравился. Поэтому фреймворком для своего проекта я выбрал именно Rails.
Поначалу было столько всего неизвестного (да и сейчас в каждом моем проекте всегда есть что-то, чего я не знаю). Я не знал, как создать систему авторизации, как реализовать верстку или задействовать AJAX в приложении на Rails. Не знал я и то, как используется рекурсия в системе комментирования. Да что уж там, я даже не знал, что такое эта самая рекурсия!
Начинайте с того, что знаете
Все это было неважно. Я перестал концентрироваться на том, чего не знаю. Вместо этого начал с известных мне вещей, а остальные проблемы решал по ходу дела.
Google стал моим лучшим другом. Он познакомил меня с gem-ами Devise и oAuth Rails, сочетание которых помогло мне с системой авторизации. Devise позволяет пользователям создавать аккаунты и логиниться, а благодаря oAuth можно авторизоваться через профили Google или Facebook.
Знакомство с каждым из gem-ов я начинал с их документации, а потом гуглил варианты для совместного применения. В процессе поиска натолкнулся на отличную статью, в которой пошагово описывался весь процесс… и вот за пару часов моя проблема с авторизацией была решена.
Каждый раз при возникновении каких-либо трудностей, я обращался к разделу с вопросами и ответами на Stack Overflow и искал там нужные статьи или уроки. Конечно же, я и сейчас постоянно просматриваю обучающие уроки, но теперь они нужны мне для строго определенных знаний. Я стараюсь сразу же применять их на практике.
Нет ничего зазорного в просьбе о помощи
Довольно редко возникают ситуации, когда я не могу найти нужные ответы ни на одном канале. Тогда я прошу о помощи на Stack Overflow. Люди даже отвечают на некоторые из моих вопросов. Вот на этот, к примеру, когда я просил о помощи после нескончаемых часов борьбы с вложенными комментариями.
И пускай ни один из ответов не решил мою проблему целиком, но зато в них были полезные советы, которые действительно подтолкнули меня в нужном направлении и помогли найти правильное решение. Я понял, что Stack Overflow — это совсем не так страшно, как казалось, и что всем нам периодически необходима помощь.
Мой код в том первом проекте был далек от идеальности: он не подчинялся принципу DRY, ему не помешал бы рефакторинг, и, скорее всего, некоторые функции можно было реализовать иначе. Еще там были некоторые вещи, которые я так до конца и не понял. Но все это не имеет значения. Я смог создать нечто незаурядное и действительно работающее. И все это без каких-либо детальных инструкций.
Из своего первого проекта я почерпнул больше полезной информации, чем за весь предыдущий год обучения по видеокурсам. Самое главное: я научился тем навыкам, которые действительно необходимы для успешной разработки. Я понял, как можно одновременно решать проблему и ломать код, я прочувствовал ту самую эйфорию, которая возникает при успешной реализации чего-либо впервые. Мне было не важно отсутствие пользователей на сайте или косяки по дизайну. Для меня имело значение лишь одно: я смог что-то сделать сам.
Вы никогда не научитесь всему (никто не сможет), и всегда придется искать ответы в интернете (все так делают). Пусть это не останавливает вас от того, чтобы погрузиться с головой в реализацию своих задумок.
Перевод статьи Tony Mastrorio: How to escape tutorial purgatory as a new developer — or at any time in your career