[Перевод] Почему изучать программирование так сложно?

Что необходимо знать каждому новичку о предстоящем пути

Коля был простым «белым воротничком» в офисе и решил, что хочет научиться программировать, поэтому он поспрашивал вокруг с чего начать. Он начал с изучения Ruby, а затем пробежался по другим языкам, таким как Scala, Clojure и Go. Он изучал Emacs, затем Vim и даже раскладку клавиатуры Дворака. Он брался за Linux, баловался Lisp и кодировал на Python, живя в командной строке более полугода.

Советы, которые получал Коля, дёргали его сначала в одну сторону, потом в другую, и так далее, как лист в торнадо, пока он, наконец, не прошёл «каждый мыслимый и немыслимый онлайн-курс». В конце концов, несмотря на то, что в итоге он получил работу в разработке, Коля:

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

Ой. Звучит знакомо?

Этап I. Заботливый Медовый месяц

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

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

С другой стороны движение «Войти в АйТи» проделало фантастическую работу, разрушая барьеры и показывая людям, что код на самом деле совершенно нестрашен. Такие курсы как Яндекс.Практикум и Skillbox самым нежным прикосновением убеждают тебя, что ты тоже (кто угодно!) сможешь не только научиться программировать, но и стать полноценным разработчиком.

Внезапно проблемой стал не страх, а переизбыток надежд и завышенных ожиданий.

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

Растущая уверенность в Заботливый Медовый месяцРастущая уверенность в Заботливый Медовый месяц

Но вот в чём проблема — ты в том, что я называю этапом «Заботливый Медовый месяц». Хотя тебе может казаться, что конец уже за поворотом, ты всего лишь на небольшом участке пути туда. Это всего лишь начало…

Намечая путь к цели

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

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

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

Уверенность в программировании против СпособностейУверенность в программировании против Способностей

Это взаимосвязанные вещи, потому что твоя уверенность тесно связана с удачей, а тот момент, когда твоя уверенность и способности совпадают, является лучшим показателем той приятной точки, когда ты официально «готов к работе».

Мы рассмотрим особенности оставшихся трёх этапов, вот что они содержат вкратце:

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

  2. Скала Растерянности — это болезненное осознание того, что становится намного тяжелее, когда забота заканчивается, и кажется, что ты ещё ничего не можешь сделать самостоятельно. Твои основные проблемы — это постоянная отладка и смутное понимание, как задавать правильные вопросы, пробиваясь через очередную проблему.

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

  4. Взлёт Напуганного — это когда ты, наконец, нашёл путь через пустыню и собрал воедино понимание того, как создавать приложения. Но твой код по-прежнему разрознен и хрупок как карточный домик. Ты обретаешь уверенность, потому что кажется, что твои сайты работают, ты освоил несколько полезных паттернов, а твои друзья считают твои интерфейсы крутыми, но ты боишься заглянуть под капот и совершенно не знаешь как достичь «готового к использованию в работе» кода. Как преодолеть разрыв, отделяющий от реальной работы?

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

Давай вернёмся к Этапу II…

Этап II: Скала Растерянности

Итак, ты находишься на Этапе I — «Заботливый Медовый месяц» — смотря на свои достижения и выполняя задачки по программированию в то время как твоя уверенность и способности растут. Это не так уж плохо… в чём вообще проблема? Ты прибыл на «Вершину Неразумного Изобилия»…

Осторожнее! Ты вот-вот перешагнёшь в пропасть, разбившую много очень амбициозных учеников и отправила их в лагерь «программирование — это слишком сложно». Именно в тот момент, когда происходит этот скачок, ты впервые садишься за клавиатуру, открываешь текстовый редактор и пытаешься создать проект с нуля без каких-либо модных браузерных редакторов, шаблонов кода или полезных подсказок.

Ни фига.

Ты можешь немного растянуть этот этап, следуя инструкциям, но никто никогда не достигал неба, не покидая земли, и в какой-то момент тебе придётся создавать магию из пустого текстового файла. Ты только что перешёл на второй этап обучения, когда уверенность рушится об землю — «Скала Растерянности»:

Теряющаяся уверенность на Скале РастерянностиТеряющаяся уверенность на Скале Растерянности

Итак, ты программируешь. Ты отвоёвываешь и выцарапываешь дорогу к едва рабочему решению, но чего-то не хватает. Ты оказываешься на войне с такими багами (от англ. «жуками»), на фоне которых Звёздный Десант выглядит безобидным. Кажется, что каждая победа была достигнута лишь благодаря удачному гуглению, а твоя уверенность в том, что ты вообще когда-то разберёшься в этом резко падает.

Бааааааааг!Бааааааааг!

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

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

Ужас в том, что ты даже не добрался до основной части. Второй этап, Скала Растерянности, только начинается. Лишь только после того, как ты, наконец, устранил достаточно багов, чтобы положить конец восьмой казни в Египте, и реально завершил пару проектов — тем самым отметив конец Этапу II — ты всё ещё начинаешь.

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

Два ключевых фактора

Так что же на самом деле отличает один этап от другого? Почему Этап II (Скала Растерянности) была такой ужасной по сравнению с Этапом I (Заботливый Медовый месяц)? Понимание этого поможет тебе осознать, что это вообще не твоя вина, что твой путь выглядит как мы только что описали.

По сути, на каждом этапе действуют две ключевые силы — Плотность Источников и Сфера Знаний. Давай разберёмся, что это перед тем как смотреть как они определяют Этап III.

Фактор 1. Плотность Источников

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

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

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

Эта проблема усугубляется по мере того, как количество знаний быстро увеличивается в переходе на Этап III, и это одна из причин, по которой мы называем этот этап «Пустыней Отчаяния». Как только ты преодолеешь это и начнёшь привыкать к тому, что именно нужно искать, источники вернутся и ты сможешь работать с более техничными инструментами, такими как отраслевые блоги и видео. Частью этого является просто понимание, какие вопросы задавать.

Вот как выглядит Плотность Источников на каждом этапе (большая плотность линий указывает на большее количество источников):

Плотность Источников на каждом ЭтапеПлотность Источников на каждом Этапе

Фактор 2: Сфера Знаний

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

Сфера Знаний необходимых на каждом ЭтапеСфера Знаний необходимых на каждом Этапе

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

Как только ты отходишь от основ, ты видишь быстрое расширение Сферы Знаний, поскольку тебе нужно начать разбираться в более сложных вещах, таких как понимание ошибок и когда использовать код, который ты знаешь как использовать. Это разные вещи, поскольку нет «правильного» ответа на конкретный вопрос… всё становится размытым.

Когда ты переходишь на третий этап, сфера знаний расширяется. Теперь тебе нужно понять, какие инструменты использовать, какие языки изучать, что лежит в основе компьютерных систем, как писать модульный код, объектно-ориентированный, в хорошем стиле и как попросить о помощи (и это только часть). Каждое посещение Google или Хабр заводит тебя в очередной набор кроличьих нор заваливает новыми вещами, о которых ты не знаешь, но чувствуешь, что должен.

Ты не знаешь о том, что ты чего-то не знаешь.

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

Этап III: Пустыня Отчаяния

Понимая эти факторы, ты сможешь увидеть, что Скала Растерянности является просто поворотной точкой. Боль, вызванная ядовитой смесью быстро растущей Сферы Знаний и падающей Плотности Источников, приводит к тому, что я называю «Пустыней Отчаяния».

По сути, это пустыня, в которой ты знаешь, что где-то есть конец, но не знаешь, как до него добраться:

Пустыня Отчаяния. Несосредоточен, рессеян и потерян...Пустыня Отчаяния. Несосредоточен, рессеян и потерян…

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

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

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

Тебе предстоит узнать НАМНОГО больше, чем ты, возможно, ожидал. Даже если ты можешь запустить некоторые приложения, тяжело не чувствовать себя потерянным в великом плане становления настоящим профессионалом. Сложно измерить свой прогресс. Откуда ты знаешь, что нужно изучить и изучаешь ли вообще нужное?

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

Конечно, до сих пор было трудно, но, может быть эти ваши веб-разработки не так уж плохи… Всё налаживается!

Этап IV: Взлёт Напуганного

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

Это «Взлёт напуганного»:

Взлёт НапуганногоВзлёт Напуганного

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

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

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

Ты чувствуешь, что уже должен быть разработчиком, но расстояние между кодом, который ты пишешь и «профессиональным» кажется огромным как никогда…

В конце концов, однако, ты справишься. Слишком много причин сдаться! Пустыня Отчаяния позади тебя и Скала Растерянности осталась в далёком воспоминании. Ты в итоге, действительно, на взлёте. Ты учишься быстрее и эффективнее, чем когда-либо прежде и, в конце концов, усвоишь достаточно лучших практик, чтобы твои рыхлые знания срослись в набор навыков производственного уровня.

Взлёт Напуганного всегда занимает больше времени, чем ожидаешь и кажется бесконечным, потому что ты всегда так близко…, но ты доберёшься до цели. Если ты достаточно настойчив в правильных направлениях, то убедишь кого-нибудь заплатить тебе за то, чтобы ты продолжал учиться. Работа твоя.

Как всё это выглядит

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

Одно дело знать путь, а другое — пройти по нему. Давай начнём с правильной ноги.

Как Справиться и Выжить

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

В этом разделе, я познакомлю тебя с ключевыми тактиками, которые ты можешь использовать, чтобы держать себя в правильном направлении.

I: Выживание в Заботливый Медовый месяц

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

  1. Начинай пробуя различные источники, чтобы определить, как ты учишься лучше и какие проекты тебе больше всего интересны. Возможно, это короткие задачки, упражнения в браузере или индивидуальное наставничество. Будь открытым ко всему в начале и не обращай внимания на всё, что тебе следовало бы изучить… на этом этапе весь код одинаков.

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

II: Выживание на Скале Растерянности

Почти каждый столкнётся со Скалой Растерянности, потому что единственный путь стать разработчиком — это, что уж там, разрабатывать. Ты можешь притворяться, что программируешь, регистрируясь на курсах (или уроках, которые выдают себя за «полные» курсы), но ты просто откладываешь неизбежное. Курсы — хороший способ уйти от более сложных вводных предложений, но в какой-то момент тебе придётся отучать себя от успокоительного и встретиться с реальным миром.

Три совета, как перейти к самостоятельному программированию:

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

  2. Читай код других людей, чтобы привыкать к хорошим шаблонам. Пытайся понять, почему автор сделал так, как сделал. Ты бы не пытался стать писателем, не читая книг, не так ли? Не спускай глаз с любых задачек или проектов, для которых другие люди написали решения.

  3. Начинай с малого и постоянно развивайся. Хорошо иметь интересные большие проекты в уме на будущее, но сначала привыкни к отладке и поиску источников для небольших задач. Здесь опыт ничем не заменишь.

III: Выживание в Пустыне Отчаяния

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

Итак, ключи к выходу из Пустыни Отчаяния:

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

  2. Найди чёткий путь, ведущий прямо к поставленной цели и убедись, что он действительно приведёт тебя к ней. Здесь тебе нужно копнуть глубже, чем маркетинговые слоганы и улыбающиеся лица на сайтах курсов или обложках книг, чтобы спросить: «Поможет ли это мне достичь цели, которую я поставил, или нет?»

  3. Фокусируйся и избегай отвлекающих факторов, потому что если ты относишься к тому типу людей, которые заинтересованы в обучении программированию, ты также относишься к тому типу людей, которым интересно изучать множество других замечательных вещей. Когда программирование становится трудным, ты должен быть в состоянии двигаться вперёд, а не просто пробовать следующую крутую вещь.

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

IV: Выживание при Взлёте Напуганного

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

  1. Ищи и следуй лучшим практикам программирования. Ты должен понимать разницу между решением и лучшим решением. Лучшие практики — основное различие между самостоятельным хакерством и созданием качественного кода в реальной работе.

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

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

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

Итак…. Можно ли это сделать?

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

© Habrahabr.ru