23 августа 2013 года я покинул ВМС США после выполнения 6-летнего контракта.

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

Ничего не зная о программировании, я подал заявку на участие в программе, и меня приняли.

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

Мы выполнили несколько проектов и работали 6 дней в неделю. В результате обучения и последующего поиска работы почти каждый выпускник нашел работу в сфере высоких технологий.

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

Первая работа

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

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

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

Мои инструкторы верили в нас. Они много раз заверяли меня, что мы все сможем найти работу. Я даже помню, как один из инструкторов смотрел, какие требования были перечислены на моем первом собеседовании, и обучал меня некоторым темам на основе списка вакансий.

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

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

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

Чувство невозможности

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

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

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

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

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

Когда вы тратите 10–12 часов в день, 6 дней в неделю, изучая что-то совершенно новое, вы насыщаете свой мозг большим количеством знаний, чем вы можете выучить. У вас нет времени на восстановление мозга, и вы в конечном итоге узнаете лишь часть того, что можете узнать. Знания из шланга не пить.

Подвержение стрессу в течение длительного периода времени снижает качество вашего обучения и начинает убивать вашу страсть к ремеслу.

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

Учителя могут вдохновлять

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

Они действительно хотят построить лучший мир.

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

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

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

Питание Learn Drive

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

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

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

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

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

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

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

Писать плохие программы - нормально

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

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

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

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

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

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

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

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

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

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

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

Вам не нужно быть специалистом по CS, чтобы добиться успеха

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

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

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

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

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

Некоторые из первых могут приписывать свои навыки и знания своим программам на получение степени. Все они потратили непомерное количество времени вне уроков, совершенствуя свое ремесло.

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

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

Учись на всем пути вниз

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

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

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

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

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

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

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

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

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

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

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

Вещи, которые я бы изменил

Описав уроки, которые я усвоил выше, я вспомнил ошибки, которые сделал на этом пути. Я собрал эти ошибки в список. Наслаждайся ими! Смеяться над ними! Учитесь у них! Делайте все возможное, чтобы избежать их.

Делайте перерывы между работой

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

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

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

Стоит стоять на месте

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

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

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

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

Расскажите свою историю как можно скорее

Во время учебы в Devleague я познакомился с защитником разработчиков большой компании в Кремниевой долине. Он сказал нам начать вести блог как можно раньше. Я вспомнил его совет и принял его близко к сердцу. Но я начал заниматься разработкой контента гораздо позже.

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

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

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

Ваша история такая же. Скучно для вас и ценно для других.

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

Посмотреть эту статью в моем блоге