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

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

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

Почему опыт так важен?

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

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

Затем она объяснила, что для любого навыка, включая решение математических задач, наиболее важным шагом на пути к его созданию является время. Она объяснила нам, что может довольно быстро научить нас ЗНАНИЯМ, но, пока мы не потратим время, это не будет НАВЫК.

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

Как мне получить опыт, если у меня нет работы?

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

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

Менее полезный совет

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

Еще один совет, который я часто получал, заключался в том, чтобы найти проблему и решить ее. Другой, связанный с этим, - это пойти и создать свой «Passion Project». Звучит как отличный совет, не так ли? Оглядываясь назад на свой путь к разработке программного обеспечения, теперь у меня есть две проблемы с этим советом.

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

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

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

Более полезный совет

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

Во-первых, вам нужно создать веб-сайт личного портфолио с нуля, развернуть его и отправить исходный код на Github. Да, вы, вероятно, будете дублировать многое из того, что уже поддерживаете в LinkedIn или StackOverflow, но суть в том, чтобы доказать, что вы можете создать веб-сайт и развернуть его. Исходный код является доказательством того, что вы знаете, что делаете.

Затем начните создавать вещи из документов с требованиями пользователей, а не из руководств. Учебники покажут вам, как что-то построить, и помогут вам накапливать знания. Однако учебные пособия не помогают развить навыки. Документ с требованиями пользователя, с другой стороны, не говорит вам, как это сделать. Их беспокоит только то, что вы туда попали. Это означает, что вы должны выяснить «как» самостоятельно, и именно здесь вы сможете развить настоящий навык.

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

Моя любимая коллекция документов с требованиями пользователей находится на freecodecamp.org. У них есть программа по изучению технологий, но самое главное - заниматься проектами. Проекты предъявляют вам требования пользователей, а затем вы их просто создаете. В некоторых проектах лагерь бесплатного кода рекомендует использовать Codepen. Я бы порекомендовал вам не делать этого. Codepen не моделирует реальную среду кодирования, и вы получите более точный опыт, разработав его со своего компьютера, отправив код на GitHub и развернув его самостоятельно.

Последний совет, который я бы порекомендовал, - это писать код ежедневно. Это клише, но делать немного почаще полезнее, чем делать много нечасто. В некоторые дни у вас будет больше свободного времени, чтобы делать больше, но очень важно писать код и ежедневно выкладывать его на Github. Если вам не нравится Github, используйте Gitlabs, bitbucket или что-то еще. Неважно, где вы его разместите, важно то, что вы можете показать, что каждый день пишете код. Это не только поможет вам получать больше опыта от повседневного написания кода, но и доказать своему потенциальному новому работодателю, что вы потратили время. Это эквивалент вашего "полетного журнала", который доказывает, что вы ввели "полетное время", необходимое для данной позиции.

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