Я был просто парнем в костюме в офисе с неопределенной идеей стартапа. Тогда я решил научиться программировать.

Я подслушал, как в счастливый час какой-то парень хвастался тем, как легко он смог автоматизировать свои офисные рабочие процессы с помощью языка под названием Ruby. Я подумал: «Ага, Руби». Я пошел домой, погуглил и через 15 секунд уже работал над случайным учебником по Ruby.

Через неделю я пошел на свою первую встречу в хакерском пространстве. Все говорили о таких языках, как Scala, Clojure и Go. Нужно было так многому научиться. Я взял три книги О'рейли и вложил в каждую по 50 страниц.

Один друг сказал мне, что я должен хорошо разбираться в Emacs, и дал мне свои файлы конфигурации. Я потратил несколько часов на изучение базового синтаксиса Лиспа, чтобы потом его настроить.

Затем какой-то парень прошел мимо и увидел, что я использую Emacs. «Почему вы используете Emacs?» он спросил меня. «Разве ты не знаешь, что Вим лучше?» «Хм. Vim. " Итак, я начал запоминать десятки сочетаний клавиш Vim.

В то время казалось разумным думать, что чем быстрее я набираю текст, тем быстрее я могу писать код. Я переключился на раскладку клавиатуры программиста Дворжака, потому что, эй, это была объективно самая эффективная клавиатура, которую мог использовать программист.

В те дни, когда я действительно мог заставить свой нетбук успешно загружать Linux - и когда я мог печатать более 10 слов в минуту, - я изучал Python, работая с книгами и курсами Udacity.

После 7 месяцев изнурительного самообучения и участия в мероприятиях по программированию я получил свою первую работу инженера-программиста.

Во время интервью с техническим директором я рассказал ему обо всех инструментах, которые я изучил, и об эзотерических конфигурациях, которые я использовал. Технический директор кивнул и вежливо выслушал. И как только я закончил хвастаться широтой своих знаний, он поставил меня на место одним вежливым замечанием. Он сказал: «Есть много способов сделать большинство вещей, но только несколько из них имеют смысл». С этими словами он вручил мне потрепанный MacBook и отпустил меня в КПЗ для разработчиков.

Четыре года назад компания решила создать свой продукт с использованием Ruby on Rails. Они полностью согласились с этим решением, и большая часть их исходного кода осталась нетронутой. Все инженеры использовали MacBook, которые были одновременно надежными и похожими на серверы Ubuntu Linux, которые они использовали в производстве.

Вместо того чтобы спорить о Vim или Emacs, все просто использовали RubyMine, мощную интегрированную среду разработки (IDE) с разумной конфигурацией по умолчанию. Это означало, что любой инженер мог сесть рядом с любым другим инженером и немедленно приступить к парному программированию задачи без необходимости ориентироваться в среде разработки своего коллеги. Уже сам по себе этот факт решил большую часть неловкости и бессознательного сопротивления, которые испытывали два разработчика, когда они пытались сотрудничать.

Компания не возражала против того, что я не знал Ruby on Rails. Поскольку я достаточно сконцентрировался на своих исследованиях, чтобы изучить Python и Django и выиграть хакатон, они восприняли это как знак того, что я со временем смогу изучить Rails.

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

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

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

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

Сравните это с моими коллегами, которые редко даже сталкивались с синтаксическими ошибками, потому что их IDE первыми отлавливали их. MacBook моих коллег просто работал. Если они получали сообщение об ошибке и не могли решить ее за несколько минут чтения и поиска в Google, они просто отправляли друг другу мгновенные сообщения для помощи в отладке. Они переходили друг к другу за парты и небрежно сочетали программу.

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

Команда была привержена своим инструментам. Помимо дней Passion Project и хакатонов, где разработчики могли экспериментировать с новыми фреймворками JavaScript, такими как Angular.js, они в основном сосредоточились на улучшении своих текущих технологий. Они консервативно относились к тому, что разрешили в свою кодовую базу.

Вы видите тот же дух в таких местах, как ThoughtBot, где все придерживаются небольшой, но эффективной цепочки инструментов (в их случае, Rails, Vim, Postgres и Redis). Сосредоточив внимание на нескольких ключевых инструментах, их инженеры становятся экспертами, которые могут легко взаимодействовать друг с другом.

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

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

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

Вам нужно сосредоточиться

Без лишних слов, вот большие ошибки, которые, как я вижу, все время делают новые программисты:

  • Часто меняют языки или фреймворки или обманывают себя, думая, что они могут овладеть всеми из них.
  • Персонализация среды разработки с помощью экзотических инструментов, а не более традиционных инструментов, которые можно надежно использовать при совместной работе с другими.
  • Пытаться изучить такие инструменты, как Docker и Famo.us, потому что они новые и интересные, хотя они еще не освоили более фундаментальные технологии.

Если бы мне пришлось резюмировать мой совет «делай как я говорю, а не как делал» одним словом, это было бы: сосредоточься.

Мой вопрос к вам: не могли бы вы охарактеризовать свои планы по обучению программированию как целенаправленные? Если вы чувствуете, что ваши планы сфокусированы, вам следует прекратить читать сейчас и вернуться к учебе, потому что я не хочу говорить что-то, что может привести к потере концентрации. Если вы еще не сформулировали свои планы по обучению программированию, у меня хорошие новости - вы можете сделать это прямо сейчас. Но это займет несколько минут и потребует принятия трудных решений. Ждать! Не уезжай… Ой, хорошо. Вы по-прежнему здесь. Хорошо, вот решения, которые вам нужно принять:

  1. Выберите один тип разработки программного обеспечения, который вас достаточно интересует, чтобы определить вашу карьеру: веб, мобильный, игровой или встроенный. Я рекомендую Интернет, потому что он гибкий. Есть тонна рабочих мест и тонна учебных ресурсов. Если вы увлечены чем-то другим, кроме веб-разработки, оставьте этот пост в блоге и введите в поисковой строке Google «начало работы в _____ разработке» и сделайте все возможное!
  2. Выберите один язык для изучения: JavaScript, Ruby или Python. У каждого свои сильные стороны. У каждого есть инструменты, которые можно использовать для создания веб-приложений (Node.js, Rails и Django соответственно). Если у вас еще нет сильных предпочтений, я рекомендую JavaScript, потому что это самый популярный язык.
  3. Выберите одну онлайн-программу для изучения. Если вы изучаете JavaScript, на freeCodeCamp.org есть всеобъемлющий вариант. Доверьтесь мудрости учителей, которые разработали выбранную вами учебную программу, и работайте с ней в рекомендованном порядке, не пропуская лишних слов.

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

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

Я пишу только о программировании и технологиях. Если вы следите за мной в Твиттере, я не буду тратить ваше время зря. 👍