По словам автора Майкл Симмонс,

Обучение - это единственное лучшее вложение нашего времени, которое мы можем сделать.

Или, как сказал Бенджамин Франклин,

Инвестиции в знания приносят наибольший доход.

Сегодня среда, 4 октября 2017 года, и я собираюсь отправиться в путешествие по познанию и личным открытиям, которое без моего ведома продлится ровно 513 дней. За это время я потрачу около 700 часов на самообучение, а также около 500 часов на учебный курс по программированию, с общей целью - перейти к карьере разработчика программного обеспечения.

Перенесемся в настоящее, и мне повезло, что я рассматриваю различные предложения о работе, с любопытством ожидая начала своего следующего путешествия.

Эта история - размышление о прошедших семнадцати месяцах, отчасти из-за того, что это кажется одновременно катарсическим и своевременным, но в основном в надежде, что я смогу поделиться некоторыми полезными мыслями для любого, кто только начинает свое собственное путешествие в мир программирования.

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

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

Обучение №1 - Остерегайтесь учебного чистилища

Одна из основных причин, по которой мне удалось достичь своей цели, связана с широким спектром качественного образовательного контента, который сегодня доступен через Интернет; часто бесплатно или по относительно невысокой цене. От платформ, таких как Udemy, Pluralsight и Frontend Masters, до отдельных участников, таких как Тайлер МакГиннис, Андрей Нэгой, Скотт Толинский и Уэс Бос, действительно никогда не было лучшего времени для быть начинающим разработчиком программного обеспечения.

Однако в этом огромном количестве легкого обучения есть неотъемлемая проблема. Во-первых, это может стимулировать пассивное потребление и, в свою очередь, создать иллюзию обучения без особых преимуществ. Во-вторых, он защищает вас от реальных уроков, которые приходят с усердным обучением. Вы можете спросить, что такое тяжелое обучение. Что ж, согласно Will Sentence от CodeSmith,

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

Мне потребовалось чуть больше года, прежде чем я полностью осознал, что именно здесь имеет в виду Уилл, но когда я это сделал, это оказало большое влияние на мое решение подать заявку на Northcoders Developer Pathway. Подробнее об этом учебном курсе по программированию позже, но главный вывод здесь заключается в том, что учебные пособия часто являются отличной отправной точкой для нового языка / фреймворка / библиотеки. Однако не позволяйте себе становиться зависимым от того, что вы ими руководствуетесь. Чем раньше вы выйдете за пределы своей зоны комфорта и запачкаете руки, создавая настоящие продукты, тем скорее вы обнаружите, что ваши возможности и уверенность в себе как разработчика растут.

Урок №2 - Будьте очень избирательны

Второе обучение связано с тем, что я считаю своим следом кодирования. Это больше касается что и меньше как.

Что касается меня, я хотел создавать веб-приложения и мобильные приложения, поэтому я сосредоточился на изучении краеугольных камней стека MERN; MongoDB, Express, React и Node.js на прочном фундаменте из HTML, CSS и JavaScript. Ваши устремления могут быть разными, но не менее важной будет необходимость найти здоровый баланс между широтой навыков и глубиной знаний.

Один из самых сложных аспектов обучения программированию - это длительный процесс. Вам потребуются сотни часов осознанной практики, прежде чем вы достигнете разумного уровня компетентности.

Если бы у меня снова было время, я бы смирился с тем фактом, что это марафон, а не спринт. Например, я бы попытался глубже понять JavaScript, прежде чем изучать популярные библиотеки и среды выполнения, такие как React и Node.js. Слишком легко перепрыгивать от одной горячей темы к другой, при этом лишь поверхностно бегая по поверхности.

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

Урок №3 - Повторение - мать всего обучения

Часто на протяжении своего путешествия я сталкивался с внутренней дилеммой, какой курс выбрать дальше (я знаю, см. Обучение №1 🙄). Например, скажем, я был заинтересован в изучении React, прохожу ли я официальный учебник / документацию, или я расстаюсь с небольшими деньгами и пройду курс Эндрю Мида, Стивена Грайдера, Тайлера. МакГиннес », Скотт Толински или Уэс Бос , и это лишь некоторые из них.

Я понял, что нет никакой серебряной пули, никакого курса магии или даже педагогики, которые могли бы ускорить мое обучение. Итак, я сделал их все.

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

Учение №4 - Избегайте работы в вакууме

Одним из основных мотивов моего участия в учебном лагере по программированию в Northcoders было то, что в течение тринадцати месяцев я практически ни с кем не разговаривал по техническим вопросам, и при этом я не был знаком с другими фундаментальными аспектами работы в качестве разработчика программного обеспечения, такими как принципы гибкости , контроль версий , парное программирование и разработка через тестирование . По мере того, как мои способности росли, некогда сильный эффект эндорфина, который я получал из уроков, начал ослабевать.

Это также удачно контрастировало с растущим желанием проверить мои недавно приобретенные навыки с другими людьми в реальных проектах. Это не только очень полезное занятие, оно также оказывает значительное влияние на ваше обучение, поскольку дает вам уверенность в коллективной работе над более сложными проблемами (см. Урок №1).

Хотя опыт Northcoders был для меня очень положительным, я понимаю, что не у всех есть доступ к учебному лагерю по кодированию, будь то из-за временных, финансовых или даже географических ограничений. В свете этого, думаю, стоит упомянуть freeCodeCamp.

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

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

Еще одно неотъемлемое преимущество freeCodeCamp заключается в том, что у вас будет доступ к живому сообществу единомышленников, с которыми вы сможете разделить борьбу и удовольствие. Я не могу сказать, исходя из личного опыта, но если бы я начинал заново, я бы, вероятно, начал свой путь здесь.

Урок № 5 - Документируйте свой прогресс

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

Что касается отслеживания, я настоятельно рекомендую как можно раньше ознакомиться с работой Git / GitHub. Если вы работаете с руководством, относитесь к нему как к мини-проекту и вносите изменения понемногу и часто. Вы не только разовьете мышечную память, которая будет хорошо служить вам в профессиональной среде, но и потенциальные работодатели часто смотрят на вашу историю GitHub, поэтому оставление значимого следа того, над чем вы работали, может быть только хорошей вещью с точки зрения трудоустройства. .

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

Имея это в виду, поддержание вашей мотивации на протяжении всего этого длительного процесса является абсолютно ключом к вашему успеху. Джо Ди Маджио, один из величайших нападающих в истории бейсбола, использовал кусок мела, чтобы отслеживать каждый тренировочный замах на стене своего подвала. Коби Брайант, один из самых успешных баскетболистов всех времен, считал каждый бросок в прыжке во время тренировки, чтобы убедиться, что он сделал 800. Что касается меня, я вёл честный и подробный учет каждого затраченного качественного часа, поскольку, наблюдая за ростом этого числа с течением времени, мне было легче сосредоточить внимание на низком боевом духе.

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

В конце концов, на самом абстрактном уровне в этом и заключается суть разработки программного обеспечения.

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

TL;DR

  • Онлайн-уроки - отличный способ эффективно изучить основы нового языка / фреймворка / библиотеки, но избавьтесь от них как можно скорее.
  • Не бойтесь бороться или даже не достичь чего-то технического, поскольку именно в этой борьбе происходит лучшее обучение.
  • Поймите ценность декомпозиции сложной проблемы на более мелкие и простые, а затем перекомпоновки своих решений для них.
  • Окружите себя единомышленниками, посещая встречи, записываясь на буткемп или просто общаясь в чате.
  • Поймите разницу между регулярной практикой и осознанной практикой. Стремитесь к последнему.
  • Учебный курс по кодированию - отличный способ ускорить процесс получения работы в качестве разработчика программного обеспечения. Качественная программа не только даст вам необходимую техническую основу, но и поможет подтвердить эти возможности в глазах потенциальных работодателей.
  • Если вы все же выберете курс для начинающих по программированию, постарайтесь заранее потратить как минимум 150 часов на качественное самообучение. Это не только даст вам уверенность в том, что кодирование подходит вам, но и поможет вам в этом интенсивном процессе.
  • Документируйте свой прогресс. Как разработчик программного обеспечения, каждый день дает возможность учиться, но процесс никогда не бывает полным. Научитесь получать удовольствие от путешествия и меньше беспокоиться о прибытии в конкретный пункт назначения.

И наконец…

  • Написание качественного кода неизбежно предполагает встать на плечи гигантов. Это принимает разные формы, будь то работа коллеги, популярный фреймворк / библиотека или сам язык. Это замечательный и неотъемлемый аспект программирования, но помните, что протянуть руку помощи тоже окупается. Будьте как участником, так и потребителем.

Полезные ресурсы

  • Для HTML и CSS я рекомендую Курс Йонаса Шмедтманна по Udemy.
  • Для JavaScript я настоятельно рекомендую Три курса Will Sentence на Frontend Masters. Это средний уровень, поэтому я возьмусь за них после завершения вводного курса JavaScript, такого как этот.
  • Для React рекомендую Курсы Тайлера МакГинниса. Тайлер прекрасно понимает опасность пассивного обучения и предлагает очень увлекательные материалы, включающие чтение, просмотр и практическое развитие. Насколько я понимаю, святая троица.
  • Для Node.js я рекомендую Курс Эндрю Мида на Udemy. Этот Моша Хамедани тоже очень хорош; особенно если вы заинтересованы в создании RESTful API. Я бы сделал и то, и другое 🤓 (см. Урок №3 выше).
  • Для MongoDB я рекомендую Курс Стивена Грайдерса на Udemy. У него много хороших курсов, но из-за их большого количества они могут немного устареть. Стоит проверить, когда он последний раз обновлял контент. Фактически то же самое можно сказать о любом курсе.
  • Для всего остального есть MasterCard. Шучу, попробуйте freeCodeCamp 😋

Удачи в предстоящем путешествии, куда бы оно ни привело! Пожалуйста, не стесняйтесь задавать любые вопросы в разделе комментариев ниже.

Удачного кодирования!

Если вам понравилась эта история, то оставайтесь на связи. Вы можете подписаться на меня в Medium / LinkedIn / Twitter, где я буду делиться другими советами по обучению программированию в будущем.