Как стать программистом без профильного образования

Социально-психологический портрет свитчера.

Кто хочет в ИТ? Студенты профильных вузов и свитчеры из других специальностей. У тех и других проблема — нет коммерческого опыта. Без опыта на работу не берут, без работы опыта не получить. Тем не менее, образование даёт много преимуществ, поэтому проблемы, стоящие перед теми, у кого его нет, заслуживают отдельного разговора.Жил-был человек, работал на далёкой от ай-ти работе, возможно добился успеха, но вот случился кризис, жить стало тяжелей. И вдруг наш герой вспоминает, что в институте (школе/детском саду) он неплохо программировал на Паскале (получил пять на экзамене/успешно ответил на вопрос/умел включать компьютер). «Эврика, пойду я в ай-ти, там много платят и работа интересная».Если студент-программист не имеет опыта и стоит задача всего лишь (!) его получить, свитчеру до этого семь вёрст и всё лесом: нужно определить, чем заниматься, и получить знания. Дело нелёгкое, поэтому людей справедливо одолевают сомнения: получится ли у меня? С этого и начнём.

Получится ли у меня?

Когда-то давно тренд «войти в ай-ти» отсутствовал. Но мало-помалу в страну пришёл аутсорсинг. Заработки у основателей ай-ти компаний были запредельными: низкие зарплаты сочетались с бросовым, но всё же внешним рейтом. К примеру, в 2004-м году программисту за час работы платили 2 доллара, а продавали этот час за 15. Поэтому в программисты стали брать всех, кто в состоянии написать программу «привет мир», в тестеры — умеющих включить компьютер. Более чем шестикратная разница внутреннего и внешнего рейтов покрывала любые издержки. Желающих войти в ай-ти из других специальностей было мало, потому что заработок программиста хоть и вырос, до установщика кондиционеров, увы, не дотягивал.Грянул кризис, увольняли всех, в том числе программистов, но меньше других и брали на другую работу. Кто-то после сокращения устроился практически сразу. Кто-то через месяц-два, но и в кризис работники клавиатуры были сыты и даже довольно упитаны. Плюс ко всему курс подрос и наконец-то программисты стали зарабатывать достаточно хорошо. Соответственно поток желающих и как следствие требования к ним тоже стали расти, и рост этот продолжается до сегодняшнего дня. Причём, если в 2008-м году для успешного трудоустройства надо было иметь теоретические знания, сейчас от начинающего требуют наличия какого-никакого опыта. То есть, чтобы попасть на работу программисту надо иметь опыт написания реальных программ, хотя бы небольших и некоммерческих. Тестеру — подтвержденный опыт тестирования приложений.Так что видим: требования возросли на порядок. Что из этого следует: учиться, учиться и ещё раз учиться! Каждый день, по три-четыре часа, минимум год. После этого нужно нарабатывать опыт, бесплатно писать программы. Так что от начала обучения до трудоустройства пройдёт в лучшем случае два года. Есть у вас возможность и мотивация два года после работы упорно трудиться (фактически, по полдня)? Если есть, хорошо, но у меня для вас сюрприз: никто не гарантирует, что на первой работе вы продержитесь больше недели! Джуниор, тем более стажёр, — самые уязвимые позиции.Ещё одна важная штука — английский. Заказчики в странах СНГ сплошь иностранные, внутренний рынок не самый развитый. Как вы думаете, будут они учить русский ради талантливого, но пока мало чего умеющего стажёра? У кого английский есть, тому, конечно, легче. У кого нет — учимся. А как вы хотели?Отсюда следует настораживающий вывод: для устройства на первую работу нужно быть готовым к годам упорного труда и финансовой нестабильности в первое время. Хорошо взвесьте, можете ли вы себе это позволить?Чтобы не сойти с ума, учёба должна стать вашим хобби. Поверьте, заниматься каждый день тем, от чего тебя тошнит, — дорога в дурку, а там уж конечно никаких денег не заработаешь. С другой стороны, финансовую мотивацию никто не отменял, и если она у вас преобладает, в этом нет ничего криминального. Хороший приём — записать ваши цели на листке бумаги, повесить перед глазами и читать каждый день. 

Мотивация.

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

С чего начать, или выбор пути.

Ну вот, с мотивацией разобрались: что делаем дальше? Во-первых, учим английский, прямо сейчас! Как писали ранее, без него в ай-ти, увы, делать нечего!Во-вторых, давайте выберем, за что нам будут платить приятные взгляду зелёные бумажки. Нужно что-то такое, чтобы освоить достаточно быстро, но и платили за это хорошо. Первое, что приходит на ум — ручное тестирование. Специальных знаний для начала вроде бы не надо, из общих качеств только внимательность да усидчивость. Специфике тестируемых программ обучусь по ходу. Пойду на курсы, закончу и буду работу искать. Увы, не с одним новичком сыграл злую шутку чрезмерно низкий порог вхождения. Дело в том, что на одну вакансию джуниор тестера до недавнего времени приходило до тысячи (!) резюме. Почему до недавнего? Да потому, что появляться в свободном доступе такие вакансии перестали. Компании предпочитают брать тестеров с профильным образованием и после собственных курсов. Да и просто вакансий QA начального уровня на два порядка меньше количества соискателей. И вот ещё один совет: не ломитесь в ручные тестеры!При этом становиться программистом вовсе не обязательно. Некоторым достаточно просто сменить отрасль, опираясь на предыдущие навыки. Например, вместо бухгалтера в фирме по производству колбасы стать таким же в программерской конторе. Если умеете работать с людьми (официанты, бортпроводники, хостессы) — прямая дорога в офис-менеджеры. Были начальником — идите в менеджеры, психологом — в рекрутеры и эйчары. Но что делать, если вы таки да хотите стать программистом? Становиться, что же ещё! Но что изучать, вот вопрос? Ответ на него в следующем пункте.

Что и как учить, чтобы стать программистом?

Что же изучать, чтобы быстрее получить долгожданную работу: Java, C#, а может С++? Да, эти языки, конечно, востребованы и хорошо оплачиваются, но есть две проблемы.Проблема первая: любой язык существует не сам по себе, но вместе с инструментальными средствами: компиляторами или интерпретаторами, которых может быть несколько, библиотеками и каркасами (по-английски framework) и типичными подходами, применяемыми в рамках предметной области. Так вот, дело в том, что для указанных языков любая из возможных специализаций (возможно, кроме android) предполагает высокий порог вхождения. Другими словами, учиться вам придется особенно долго. Именно поэтому для переквалифицирующихся я рекомендую специализации с низким временем входа: это прежде всего программирование фронтенда с помощью языка JavaScript и родственных, потом разработка сайтов на языке PHP или Python, далее разработка мобильных приложений под Android или iOS. А вот в разработку энтерпрайз приложений на платформе JavaEE или .NET, тем более в системное программирование, бигдату или анализ данных свитчерам лучше не лезть. Слишком долго придётся учиться.Проблема вторая: программирование не сводится к изучению инструментальных средств, прежде всего это алгоритмы. Пусть достаточно простые, но если человек не может перевернуть строку или написать сортировку пузырьком, работать на реальном проекте ему будет сложно. Отсюда ещё один совет: технике программирования нужно обучаться — задачки решать.

Как же учиться?

Первым делом нужно выучить сам язык, его синтаксис. Для этого берём книжку по любому из выбранных языков, читаем её и обязательно делаем упражнения. Потом приступаем к изучению общеупотребительных библиотек, параллельно решаем алгоритмические задачки: массивы, строки и так далее. После того, как язык и минимальный объём алгоритмов более-менее освоен, приступаем к изучению общеупотребительных для данного языка библиотек и каркасов (фреймворков). Дело в том, что начальные познания о сокетах, вебсервисах, библиотеках для юнит-тестирования, HTTP запросах являются обязательными для любого программиста, вне зависимости от специализации. Следующим шагом будет изучение шаблонов проектирования. После этого переходим к освоению систем контроля версий и баз данных, например MySQL. И наконец переходим к освоению желаемой специализации. Но и это ещё не всё: по окончанию обучения необходимо создать несколько работающих проектов и выложить их на github и обязательно куда-нибудь на стор или сервер, чтобы люди могли лицезреть не только код, но и результаты вашего труда.Только после этого можно начинать поиск работы.

Ментор, как найти и не надоесть

Часто у новичка возникают вопросы, которые он сам разрешить не в состоянии. Хорошо бы спросить у кого-то, кто понимает, но где его взять? Обращайтесь к тем, кто пишет статьи, ведёт блоги. Почему к ним? Просто, если человек даёт советы по собственной инициативе, скорее всего, он согласится помочь, когда его просят. Кроме того, ментор должен обладать навыками учителя, в какой-то степени гуру, не все даже супер-пупер-дупер синьоры их имеют.

Задавать вопросы нужно в таком порядке:

  1. В начале пытаемся найти решение сами.
  2. Если не получается, идём гуглить.
  3. Если и после этого не получается, задаём вопрос на Stackowerflow или на другом форуме, но лучше на нескольких сразу.
  4. Задав вопрос, читаем его, возможно, прочитав, поймёте, как решить проблему.
  5. И только, если пункты 1-3 не дали эффекта, обращаемся к ментору.

При этом надо помнить: вам ничем не обязаны за исключением случаев, когда за помощь вы платите. То есть, если вам не ответили или ответили недостаточно подробно, или ментор не знает ответа, максимум, что вы можете сделать — очень вежливо спросить, мол, не нашлось ли у тебя случайно времени на мой вопрос? Это вовсе не от того, что ментор считает себя пупом земли. Он такой же человек, как и вы, с семьёй, хобби, своими проблемами. К ментору вообще лучше обращаться для решения фундаментальных вопросов: что из литературы читать, какие фреймворки осваивать, что плохо в моём коде, и как его улучшить, какую задачу взять для тренировки и т.п. Что ещё надо? Если ты спрашиваешь ментора, и он даёт совет, воспользуйся им!

Курсы, могут ли они помочь?

Это, смотря, чего вы от них ждёте. Если введения в специальность, однозначно — да. Хорошие курсы вам в этом помогут. Но ваш успех зависит от вас, а не от курсов, которые вы посещали н-месяцев. Это как с изучением английского, если положиться только на 3 урока в неделю по часу - результат будет минимальный, нужно погружение. Курсы - это 50%, остальные 50 - ваше упорство и желание: ходить на тем. мероприятия, смотреть всевозможные вебинары, регулярно смотреть вакансии (а главное, требования), проходить стажировки и тд. 

Преимущества свитчера

Окончивший вуз по специальности «программное обеспечение» или «системный анализ» в течении полного рабочего дня пять лет изучал то, что вы осваивали в течении года по вечерам, урывками. Изучал под руководством опытных наставников, делал лабораторные работы, проходил практику. Конечно, теорию он знает лучше! Можно конечно сказать, мол, знаем мы эти постсоветские вузы, но уверяю вас: студент университета, который хочет получить знания, таки да, имеет эту возможность. Но есть преимущества и у вас. Дело в том, что выпускник вуза «молодой ишшо», часто-густо (но не у всех) в голове у него ветер. Это не потому что он плохой, просто жизненный опыт приходит с возрастом. Вы же, как взрослый сформировавшийся человек, по идее должны уметь договариваться с другими людьми, трезво оценивать сроки любой работы, уметь сказать слово «нет», признаваться в своих ошибках, прагматично подходить к любой жизненной ситуации. Не умеете, ну... как же вы дожили до своего возраста?К примеру там, где выпускник назовёт приятные уху менеджера сроки, вы, как взрослый человек, вежливо, но твёрдо скажете: сделать эту работу быстрее нельзя, никак нельзя. Пусть лучше начальник испытает несколько неприятных минут сейчас, но узнает о проблеме заранее, чем будет пребывать в ложной уверенности, что всё хорошо до самого дедлайна.

Что делать, если оффер получен?

Стоит ли говорить, что сумма зарплаты на первом месте работы — не самое главное? Да, она должна обеспечивать хотя бы минимальные потребности, но не вздумайте торговаться! Джуниоров на рынке очень много, есть и с профильным образованием. И я писал выше, что у них преимущества есть. Поэтому принимаем подходящий оффер, нам нужен опыт. И главное, продержаться исп. срок. Для джуниора-стажера увольнение не редкость, даже если для своего уровня он идеален. Просто толку от такого человека сравнительно мало, делает он самую простую работу. Закончилась такая или просто заказчик решил сократить штат: «спасибо, дорогой друг, мы будем о тебе вспоминать». Что же делать? Готовиться к финансовой нестабильности и не унывать — быстренько искать другую работу. Ещё хороший способ: брать на текущей работе отпуск и идти на стажировку/испытательный срок. И только если он успешно пройден, увольняться со старой. Это сложно, согласен, но на ваших руках, возможно, семья, другие близкие люди — рисковать их будущим вы не можете.Но может ли возникнуть ситуация, когда с первой работы нужно уволиться? Да, если оскорбляют или не платят зарплату. Ваша пока небольшая ценность для работодателя вовсе не означает, что вы не человек!Ещё на первой работе не нужно лезть в бутылку. Как сказал один мой знакомый тимлид: «Проблема студентов не столько в том, что они не знают библиотек, сколько в том, что не умеют работать в команде». К примеру, если твою работу критикуют, на самом деле это одолжение. Оправдываться, тем более ругаться, не нужно — максимум очень корректно попросить пояснить, что именно не так. Ну и бегом исправлять ошибки. С другой стороны, бояться их тоже не следует. В конце-концов вы начинающий, право на ошибку у вас есть.Бывает так, что в работе вы сталкиваетесь с затруднениями. Допустимо ли спрашивать? Конечно, да! Но вести себя нужно точно так же, как с ментором: в начале сам, потом гуглить, потом на форум и только потом задавать вопросы.Сколько же нужно проработать на первой работе? Если с работодателем нет других договорённостей, то хотя бы полгода, но лучше год. Всё это время усиленно учиться: осваивать шаблоны, паттерны, фреймворки, метрики. И после этого уже посматривать по сторонам и пробовать говорить об увеличении зарплаты. Человек, проработавший год, превращается нет, не в миддла, но в уверенного джуниора — его уже хантят эйчары, он доказал, что может!При этом, договорённости надо выполнять. Договорился, что проработаешь минимум два года — сделай это. Условились закончить проект? Заканчивай! Карма, она ведь такая: какой мерой вы отмеряете, такой и вам будут мерить.

Если в ай-ти компанию не берут, или альтернативное место работы

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

Вам за 40, или борьба с дискриминацией

Постсоветское общество, к сожалению, очень косное и приверженное предрассудкам. К примеру, считается, что подчинённый обязательно должен быть младше начальника, дескать по-другому руководителя не будут уважать. Тем более, стажёр не может быть сорокалетним солидным дядькой. Ещё бытует мнение, что по достижении зрелости работать на рядовой должности вообще стыдно, вне зависимости от оплаты. Существуют и другие стереотипы. Ну там программист обязательно должен быть трудоголиком, живущим только работой, красивая женщина обязательно глупа (а значит не может выполнять обязанностей сложнее приготовления кофе). В итоге это выливается в раздражающую фразу: «технические навыки у вас хороши, но, к сожалению, вы не впишетесь в коллектив». Поскольку рецепта вечной молодости нет, нужно что-то делать.Во-первых, можно поискать работу с западным руководством. Как правило, в Европе и США подход к гендерным и возрастным различиям проще: если человек обладает знаниями и может работать по состоянию здоровья, он подходит. Вообще на западе, насколько мне известно, другие традиции происходящие с одной стороны из-за законодательной борьбы с дискриминацией (попробуй только отказать из-за возраста, национальности или пола — штрафы будут «освежающей» величины), с другой — ориентации преимущественно на зарабатывание денег. Напротив, в некоторых отечественных конторах девизом до сих пор является: «мы не пашем, не сеем, не строим, мы гордимся общественным строем» и всякий, кто не разделяет политических, социальных или иных убеждений — враг, брать на работу его не стоит. Во-вторых, спасением для возрастных или по ряду причин не могущих работать в офисе остаётся фриланс. Это сложно и подходит не каждому, но у свитчера есть ряд вышеуказанных преимуществ. Во всяком случае, если не пробовать, не получится точно! Заказчику фрилансера вообще всё равно, как выглядит человек на другом конце, важно, чтобы работа была выполнена в срок и с приемлемым качеством. Так что, если не берут совсем никуда, об этом виде заработка можно подумать.

Ресурс DOU, DEV.by,