Это правдивая история обо мне. Как разумное живое существо постепенно погрузилось в безумие?

Я сидел в своём офисе в костюме, а в голове у меня витала смутная идея стартапа. Затем я решил научиться программировать. Однажды я случайно услышал, как несколько человек хвастались, что использовали язык под названием Ruby, чтобы легко автоматизировать офисную работу. Я подумал: «Ха, Ruby». Я пошёл домой и загуглил Ruby. Спустя пятнадцать секунд я случайно выбрал учебник по Ruby и начал учиться.

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

Что? Ты спрашиваешь, почему я не дочитал ни одной книги? Всё потому, что каждая книга начинается просто и понятно, а затем начинает делать предположения — предполагает, что у тебя есть определённые знания, предполагает, что ты умеешь пользоваться определёнными инструментами, — но я ничего этого не знал, ладно?

Один мой друг сказал, что мне стоит изучить Emacs, и дал мне свой файл конфигурации. Я потратил ещё несколько часов на изучение базового синтаксиса Lisp, чтобы настроить собственный файл конфигурации.

Потом кто-то прошёл мимо меня, увидел, что я использую Emacs, и спросил: «Почему ты всё ещё пользуешься Emacs (представь выражение его лица), разве ты не знаешь, что Vim лучше?» Я подумал: «Ха, Vim», и поэтому начал заучивать бесконечные сочетания клавиш Vim.

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

Тогда я считал, что чем быстрее я смогу печатать, тем быстрее смогу. Поэтому я отказался от традиционной клавиатуры и перешёл на обязательную для программиста раскладку Dvorak (точно как на картинке ниже). Объективно говоря, для программистов это самая эффективная раскладка клавиатуры.

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

К тому времени, когда я смог успешно загрузить Linux и печатать десять слов в минуту, я начал изучать Python по книгам и курсам Udacity.

После семи месяцев тяжёлой борьбы я получил свою первую работу в качестве инженера-программиста.

Когда CTO проводил со мной собеседование, я рассказал ему обо всех инструментах, которые изучил, и о навороченных конфигурационных файлах, которые использовал. CTO вежливо слушал, время от времени кивая. После того как я закончил хвастаться своими обширными знаниями, он посмотрел на меня и сказал: «На самом деле, большинство проблем можно решить множеством способов, но лишь крошечная часть из них имеет смысл».

Четыре года назад компания, в которой я работал, решила разрабатывать свой продукт на Ruby on Rails. Ни у кого из инженеров не было возражений против выбора языка, и по сей день большая часть их исходного кода всё ещё работает. Все инженеры используют MacBook, не только потому, что MacBook надёжны, но и потому, что они очень похожи на серверы Ubuntu Linux, используемые в их продукте. Инженеры здесь не спорят о том, что лучше — Vim или Emacs, — все используют RubyMine, мощную интегрированную среду разработки с отличными настройками по умолчанию. Каждый инженер здесь использует ровно одни и те же инструменты, а значит, любой может сесть на любое место и сразу начать парное программирование с коллегой слева или справа, не беспокоясь о настройке окружения. Использование одинаковых конфигураций значительно облегчает сотрудничество между двумя разработчиками.

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

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

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

5474239b87b81

В первые выходные после увольнения с предыдущей работы я выложил это селфи. В тот день я встал рано и надел приличный костюм. Я надел костюм, чтобы напомнить себе: я человек, который вот-вот начнёт учиться программированию. Подпись в Facebook гласила: «Мой новый офис — обеденный стол. Я живу по графику с 8 до 6 каждый день и отдыхаю только тогда, когда это абсолютно необходимо». В жизни я говорил как программист и думал как программист. К настоящему моменту я привык к этому слову.

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

Инструменты, используемые членами команды, отличаются высокой согласованностью. В проектах для души и на хакатонах разработчики могут использовать более новые JavaScript-фреймворки, такие как Angular.js. Но в настоящей команде участники сосредотачивают энергию на улучшении продукта с помощью существующих технологий. С этой точки зрения они консервативны.

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

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

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

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

Вам нужно сосредоточиться на меньшем числе вещей

Без лишних слов, вот несколько крупных ошибок, которые склонны совершать новички:

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

Если бы мне нужно было выразить мой совет одним словом, я бы сказал: сосредоточьтесь.

Позвольте спросить — стали бы вы использовать слово «фокус» для описания своего плана изучения программирования? Если вы считаете, что ваш план достаточно сфокусирован, хорошо. Можете прекратить чтение сейчас и вернуться к своему плану, чтобы начать учиться, потому что я не хочу говорить ничего, что может заставить вас потерять фокус.

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

Итак, вы всё ещё здесь. Вот трудные решения, которые вам нужно принять.

  1. Выберите один тип программного обеспечения: это может быть веб-приложение, мобильное приложение, игра или встраиваемые системы. Я рекомендую веб-приложения, потому что они гибкие. Есть множество учебных ресурсов и бесчисленное количество возможностей трудоустройства. Если вам не интересны веб-приложения, закройте эту страницу, введите "getting started in _____ development" в поисковую строку Google и просмотрите результаты один за другим.
  2. Выберите один язык программирования: JavaScript, Ruby или Python. У каждого языка есть свои сильные стороны, и каждому соответствует свой инструмент для создания веб-приложений (Node.js, Rails и Django соответственно). Если вы точно не знаете, какой язык вам следует учить, я рекомендую JavaScript, потому что он наиболее широко используется.
  3. Выберите один онлайн-курс. Вот несколько вариантов: если вам интересен JavaScript, посмотрите FreeCodeCamp.com или NodeSchool.io; если вам интересен Ruby, посмотрите TheOdinProject.com или TeamTreehouse.com; если вам интересен Python, посмотрите Udacity.com. Доверьтесь мудрости инструкторов, разработавших эти курсы, проходите курс в предложенном порядке и не перескакивайте.
  4. Купите новый или подержанный MacBook или установите Ubuntu Linux на свой текущий компьютер. Что касается любых других инструментов, которые могут вам понадобиться, просто установите то, что рекомендует онлайн-курс.

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

Источник: http://code.csdn.net/news/2822796