Как стать разработчиком с нуля и устроиться на работу истории

Опубликовано: 01.10.2024

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

Однако основные барьеры, как правило, социальные и моральные:

  1. Отсутствие веры в свои силы. В детстве хотел заниматься программированием, но не было компьютера, преподавателя информатики с высоким уровнем компетенций, понимания, как развивать навыки, бюджетных мест в университете. Сейчас все вокруг говорят, как войти в айти, но это звучит очень сложно.
  2. Жаль потраченного времени на полученное образование и опыт. 5 лет обучения в вузе и некоторое время работы в другой профессии жалко потерять. Особенно, если в предыдущее образование были вложены деньги.
  3. Придётся начать с нуля. Подкрепляет второй пункт. Достижения, полученные со стажем работы, придётся обнулить. Если ранее вы были менеджером среднего звена, юристом, экономистом с опытом работы в 5 лет и претензией на среднюю зарплату по рынку, то теперь придётся стартовать с позиции джуниора.
  4. Скачок зарплаты, чаще в меньшую сторону. Зарплата разработчика на сайтах с вакансиями выглядит привлекательно, но до неё нужно дорасти. Без опыта работы возьмут либо на стажировку, либо на начальную ступень, а это не всегда высокая зарплата.
  5. В провинциальных городах нет работы. В городах-миллионниках много ИТ-компаний и студий, а значит можно без проблем устроиться на работу. В провинции таких компаний мало, джуниоров они не берут.
  6. Семья меня не поддержит. Период переквалификации - сложный и эмоциональный. Придётся уйти с прошлой работы, искать работу с нуля и с изменением зарплаты, обучение может проходить нервно. Выдержать всё это, не развалить семью и обойтись без скандалов кажется невозможным.

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

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

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

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

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

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

Облазив множество специализированных форумов не поверил своим оппонентам и решил в одиночку претворить свою мечту в жизнь. Освоил CSS и HTML. Выполнил уже почти 70 процентов работы, основанной на этих языках.

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

Евгений: Прожив до 29 лет в режиме амёбы и став начальником отдела сисадминов в MVNO-компании с ипотекой и женой на сносях, пришло осознание, что я потребитель, я ничего не произвожу

В 10 классе родители собрали мне из обломков компьютера “комплюктер”, в котором была только одна игра - Windows 98. Времена были безденежные, поэтому мне приходилось играть в сломай\переустанови\пойми почему дурак\опять сломай, так я понял, что свяжу свою жизнь с информационными технологиями(я был очень тщедушным мальчиком, а компьютер сдачи не мог дать). И с этого момента моя жизнь покатилась по наклонной, я начал воровать диски из книг по программированию(да, мне стыдно), потом возвращаться на место преступления, потому, что хитрые издатели писали пароли от дисков на определенной странице книг. И заучивать паскаль, строить какие то жуткие десктопные приложения в Delphi. Поступил в институт на программиста, кстати, это было роковой ошибкой, тогда не очень знали как учить программированию, поэтому учили синтаксису, особо не объясняя такие нюансы как указатели и ссылки(собственно это меня и увело в сторону сисадминства).

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

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

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

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

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

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

Артём Лебедев: Поначалу работу выбирал из лучших компаний небольшого города (500 тыс. населения). Удивительно было не получать вообще никакого фидбека. Я немного впал в ступор

Исходные данные: 31 год, экономист, удаленная работа, никогда не занимался программированием (только втайне мечтал :) ).

Выходные данные: спустя ровно год (за минусом нескольких дней) завалил четвёртый проект по бэкенду, так как устроился работать фронтендером.

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

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

Mote Mere: Мотивы у каждого свои. Мне хотелось: а) денег, б) относительной географической и режимной свободы и в) как можно меньше людей

Мне 37. Деньги, которые есть в профессии программиста, в общем-то видны невооруженным взглядом - достаточно посмотреть в hh.ru. Там же можно заметить, что, помимо хорошей зарплаты, часто более важно присутствие программиста в конкретном рабочем процессе, нежели в каком-то условном офисе. С людьми же мне пришлось работать много и долго, и в этой новой для меня профессии, как мне казалось, контактов с кем попало должно быть существенно меньше. И, забегая вперед, скажу, что все мои надежды в той или иной мере оправдались.

Несколько лет назад один преподаватель математики сказал на лекции: "Я могу с высокой долей вероятности определить, сколько студентов останется в аудитории до конца пары; также я, скорее всего, смогу предсказать, как в итоге будут сидеть оставшиеся." Я был заинтригован - математикой, хотя и изучал в университете гуманитарные дисциплины. Тот первый импульс оказался слабоват, чтобы изменить мою жизнь, но идея осталась и зрела, пока ИТ-отрасль, в которой я в основном был занят, окончательно не подешевела в моем регионе.

Владимир Ильин: В 2014 году я перегорел

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

Я с завистью смотрел на ребят из IT-отдела, которых ценили не за вовремя придуманный отчёт, а конкретно за то, что они умеют делать. Мысль о том, что кроме красивых презенташек и графиков в Excel я больше ничего не умею, приводила меня в уныние. Да, я был опытным пользователям ПК, знал, где находится у компьютера процессор, а где материнская плата, чем отличается оперативная память от жёсткого диска, легко мог переустановить операционную систему или собрать комплектующие в ПК. Но мое очень гуманитарное высшее образование (по первому высшему я учитель) не оставляло мне шансов попасть сразу из продажников в айтишники.

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

Сергей Ампилов: Это был восторг! Всего каких-то 3 месяца, и я с нуля выхожу на новую работу почти моей мечты.

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

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

Как это сделать, да побыстрее? Ну конечно же надо пойти куда-то учиться. Начал искать инфу в интернете. Рекламы куча, а достоверной информации почти нет.

Евгений Кочетов: В одно прекрасное утро на работе нам сообщают, что мы всем отделом попадаем под сокращение этим же числом.

Расскажу вам историю про очередного 30+ летнего чувака, который решил сменить сферу деятельности и войти в айти. Хочу сказать, что о разработке я не имел вообще никакого представления, я не задумывался откуда берутся сайты и приложения. На hh.ru часто замечал дорогие вакансии, которые были вроде бы на русском или на английском, но требования на каком то аяпапенском. Что это за "фантастические твари", которые в это могут, я не представлял.

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

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

Роман Макаров: Жаль оставлять клиентов, с которыми сложились многолетние отношения.

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

Мне очень повезло с преподавателем английского, и вдобавок полгода я практиковался в Англии. По окончании вуза поработал пару лет в местных фирмах по специальности, а затем устроился менеджером по продажам в крупную международную компанию. Там я проработал 12 лет, и это место стало моей последней работой, не связанной с IT.

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

dexer: Сказать, что было трудно — не сказать ничего.

Проработав 8 лет на одном месте, к 30 годам я настолько увяз в своей зоне комфорта, что уже почти смирился с постоянным чувством неудовлетворенности от жизни, что работа — это неизбежная плата за своё комфортное существование. Желания что то менять становилось все меньше. Специфика работы не подразумевала какой-то серьёзный карьерный рост, и в целом работу головой. Я стал замечать, что банально начал тупеть. Даже уже простые математические операции делать в уме было некомфортно. Заставить себя думать было тяжело.

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

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

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

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

29 мая в 12:00, Онлайн, Беcплатно

Подробности — в видео и текстовой расшифровке под ним.

Востребованность на рынке труда

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

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


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


Что нужно знать, чтобы стать разработчиком

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

Разработка приложений

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

  • Серверная часть или backend состоит из приложений, хранилища данных и API для доступа к функциональности системы. Количество приложений и их взаимосвязи определяются архитектурой системы. Например, микросервисная архитектура — это набор слабосвязанных приложений.
  • API системы может быть построен на таких технологиях, как REST API, RPC, gRPC, GraphQL. Для первых проектов можно использовать REST API, который построен на протоколе HTTP. Впоследствии же выбор технологии организации API будет зависеть от конкретной системы и ее функционала.
  • Приложения бэкенда разрабатываются на различных языках программирования: Java, C++, Python, Golang, NodeJS, Ruby, PHP. Хотя сейчас идёт активное продвижение языка Golang, он не так хорош для создания сложной бизнес-логики. Советуем выбрать Java или Python, по ним много книг плюс есть большие сообщества.
  • Система практически не имеет смысла без хранения данных. Хранилища бывают SQL, NoSQL, документоориентированные, графовые и распределённые. Разработчик должен уметь спроектировать схему данных хранилища самостоятельно, исходя из предметной области системы.
  • Кроме написания кода для разработки бэкенда необходимы дополнительные знания работы серверных операционных систем Linux. Готовое приложение необходимо развернуть и запустить на сервере. Чтобы оно было доступно для клиентских приложений из интернета, необходимо ещё знать про веб-серверы. Например, уметь работать с NGINX. Это самый популярный веб-сервер.
  • Самыми популярными ОС являются CentOS, Debian и Ubuntu. Но недавно компания Red Hat выкупила CentOS. Жизненный цикл этой операционной системы закончится в конце 2021 года, так что выбирайте Debian или Ubuntu. Советуем начать с Ubuntu, так как по ней самое большое сообщество и очень много информации.
  • API системы должен быть доступен из интернета, чтобы клиентские приложения могли к нему обратиться. Поэтому необходимо понимать, как работает интернет, и иметь базовое представление о работе сетей. Вас интересуют такие технологии, как DNS, стек протоколов TCP/IP, HTTP и WebSocket. Также необходимо понимать, как работает браузер.

Разработчик, который занимается серверной частью, называется Backend-разработчиком. Обычно их ищут в связке с языком программирования, который используется в той или иной компании. Например Python Backend-разработчик.

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


Так как фронтенд делает запросы в бэкэнд, разработчику необходимо уметь работать со всеми способами организации API, а также иметь представление о сетевых технологиях. Это то же, что требуется от Backend-разработчика, но в меньшей детализации. Специалист, который создаёт приложение под браузер, называется Frontend-разработчиком. А человек, который способен сам спроектировать систему, разработать и бэкенд, и фронтенд, называется Fullstack-разработчиком.

Machine Learning (ML) и Data Science

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

R и Python — основные языки программирования, которые используются для работы с большими массивами данных. В 2013 году в США провели опрос среди специалистов в области Big Data для определения самого популярного языка. R победил, набрав 61 %. Второе место занял Python. Также недавно появился язык Julia. Он удобен, как Python, и эффективен, как R, но ещё молодой, поэтому для него не создано так много библиотек и инструментов.

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

Обработка больших данных появилась вместе с трендом Big Data. Например, в Яндексе есть отдельная вакансия аналитика. Это человек, который пишет скрипты на языке Python, делая выборки и обрабатывая миллиарды данных. На основе этих выборок строится аналитика и делаются выводы, которые влияют на принятие решений. В Яндексе даже создали специальное хранилище ClickHouse для хранения такого объёма данных.

Инфраструктура

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

Софтверный инженер — это разработчик, который может написать небольшое приложение, скрипты, облегчающие его задачи по конфигурированию продуктов и ОС. Обычно он использует bash, Python, реже Perl. Он умеет пользоваться инструментами автоматизации конфигурации, такими как Ansible, Chef, Puppet, разворачивает системы оркестрации — например, Nomad, Apache Mesos, Kubernetes, Docker Swarm. По-хорошему ему необходимо иметь базовое представление обо всех продуктах и комплексных системах различных применений, например, мониторинга, сбора логов и метрик, серверов приложений, обработки очередей, системы Complex Event Processing и Stream Event Processing и так далее.

Как стать разработчиком: общий план развития

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

Например, вы решили стать Python Backend-разработчиком и хотите создать свой собственный сервис заметок, чтобы ваши записи хранились не у сторонней компании, а под вашим контролем у вас на сервере. Вы определились, что у вас будет бэкенд с базой MongoDB и REST API. Теперь пришло время открыть туториалы по Python и перепечатать оттуда код, который поднимет у вас веб-сервер, создаст endpoint вашего REST API и будет отдавать текст Hello World. Потом открыть другой туториал по работе с MongoDB и понять, как из Python работать с базой данных.

Редактируйте код и смотрите на результат, делая выводы о внутреннем устройстве языка и кода. Через 10-20-100 итераций вы сможете создавать свои endpointы, которые будут записывать данные в БД. Попутно вы узнаете, что такое и из чего состоит HTTP-запрос. Повторяйте процесс до тех пор, пока не реализуете весь функционал своего приложения. Всегда задавайте себе вопросы: почему не работает, как сделать. Не забывайте читать профильную литературу и статьи, которые помогут узнать о новых возможностях языка или инструмента.

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

Итак, приложение создано, вы разворачиваете и запускаете его на удалённом сервере, оно работает. Но в какой-то момент на сервере проводятся технические работы, он перезагружается. Ваше приложение уже не работает, необходимо запускать его заново. Вы размышляете, как сделать так, чтобы приложение стартовало при запуске сервера. Гуглите, находите ответ в виде утилит systemd и supervisord, читаете описание и порядок использования, пытаетесь их внедрить, ловите кучу ошибок, опять читаете книги, статьи и в итоге всё успешно настраиваете. Вот первый опыт работы с ОС и первый решенный кейс. А теперь вы хотите, чтобы ваше приложение работало в Docker-контейнере, а потом хотите сделать асинхронный API. Теперь вы знаете, как этого добиться.

Советы для тех, кто только начинает свой путь разработчика

  1. Сразу скачивайте лучшую IDE для вашего языка. Правильное использование IDE ускоряет написание кода многократно за счёт использования горячих клавиш. Не убирайте руки от клавиатуры. Под большинство языков программирования есть IDE от компании JetBrains. В большинстве случаев у них есть бесплатная версия с ограниченным функционалом.
  2. Заведите записную книжку и записывайте туда все идеи, проблемы, чтобы потом проводить ретроспективу.
  3. Изучайте инструменты и технологии, которые вы используете, от А до Я.
  4. Идея первого домашнего проекта должна быть простой в реализации, потому что ничто так не мотивирует, как быстрый результат с минимальными усилиями — это закон Парето. Мотивация — это единственное, что вам нужно на начальном этапе.
  5. Найдите профильные чаты в телеграме или в социальной сети, общайтесь, задавайте вопросы.

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

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

Будьте уверены, что будете честны с собой прежде, чем отвечать на следующие вопросы: являетесь вы хорошей кандидатурой на данную должность? Как вы можете оценить свой профессионализм? В скольких компаниях вы проходили интервью? Сколько предложений о работе вы получили?

Вы можете попробовать следующую формулу. Я придумал её смеха ради и, по сути, она ничего не значит, но если интересно:

x = количество компаний, в которых вы проходили интервью

y = количество полученных предложений

Значение = 100 * ln(x) * y / x

Если значение <90, вы должны прочитать эту статью. Если >120, возможно, ничего нового отсюда вы и не почерпнёте, но прочитать всё-таки не помешает.

У меня нет высшего образования. Я начал профессионально программировать в 19 лет, после того, как переехал из Чикаго в Южную Калифорнию. Все, что у меня было, влезло в машину. У меня было всего 400 долларов в кармане и предложение работы за 40000 долларов в год. Это было 12 лет назад. Но это уже другая история.

С тех пор я работал в Double Helix, Namco Bandai, Google, Obvious и Square. Также я получал предложения от других компаний, например, Naughty Dog, Activision, Riot Games, Blizzard, Pinterest, Goldman Sachs и т.д. Таким образом, мой результат согласно формуле — 132.

Я интервьюировал как минимум 500 кандидатов. Грубо говоря, только 10% из них получили предложение работать в компании. Менее 3% я посчитал действительно достойными кандидатами, и я помню каждого из них.

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

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

1. Продолжайте программировать.

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

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

Есть главный вопрос, который интервьюеры C++ любят задавать кандидатам: “По шкале от 1 до 10, где 10 — это самая высокая отметка, насколько вы оцените свои знания C++?”. Я ненавижу этот вопрос. И Бог в помощь тем, кто ответит 9-10, потому что интервьюеры выпустят когти. Сам Бьёрн Страуструп ответил бы 8 или меньше. Язык слишком сложный и богатый, и постоянно развивается.

3. Знайте свои слабости.

Прочитайте этот список. Затем, убедитесь, что вы понимаете, как все это работает. Затем, выполните базовые вычислительные алгоритмы, такие как алгоритм Дейкстры, алгоритм Флойда — Уоршелла, задача коммивояжёра, алгоритм A*, фильтр Блума, итеративный поиск в ширину, бинарный поиск, k-way merge, сортировка пузырьком, вставками, выбором, in-place quick sort, блочная/поразрядочная сортировка, алгоритм двух ближайших точек и т.д. И снова — продолжайте программировать. Вот еще одна хорошая статья.

4. Изобретайте колесо.

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

5. Решайте задачи.

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

Это, полагаю, одна из главных причин, почему меня взяли в Google. Я провел, грубо говоря, две недели на TopCoder. После этого, я мог писать алгоритм Дейкстры с закрытыми глазами. Я мог решить почти все задачи с графами. Все это благодаря повторению решения задач. А как говорит Эрик Шмидт: “Повторение не портит молитву”.

6. Смотрите на программирование проще.

Как минимум, сделайте так, чтобы оно выглядело просто. Через некоторое время я понял, что программирование является самым простым этапом в профессии разработчика. Я часто использую фразу “простейший этап программирования”, потому что верю, что самые сложные этапы в профессии разработчика — до и после написания кода. Например, разработка того, что вы собираетесь программировать и проверка того, что ваш код работает и выполняет все задачи. Дайте вашему интервьюеру понять, что вы знаете, что программирование является лишь инструментом для достижения цели.

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

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

1. Осознайте, зачем вы здесь.

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

2. Будьте увлечены чем-то.

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

3. Не делайте предположений.

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

4. Улыбайтесь.

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

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

Инструкция для тех, кто хочет стать программистом с нуля

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

С чего начать

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

Если с вами ничего из вышеперечисленного не произошло, значит, у вас есть выбор из четырёх вариантов:

  • Самообразование. Этот вариант можно использовать как самостоятельно, так и в паре с другими методами. В интернете полно сайтов, книг и приложений, которые помогают изучать различные языки программирования и технологии. Но это самый тяжёлый путь для начинающих.
  • Университет. Если вы оканчиваете школу и хотите быть программистом, тогда идите в университет. Если не за знаниями, тогда за корочкой. Она может послужить бонусом при устройстве на работу. Хотя и какие-то знания вы тоже получите. Но не забывайте заниматься и самообучением. К выбору вуза стоит подойти очень ответственно. Внимательно изучите программы обучения и выбирайте лучшие технические вузы.
  • Ментор. Будет очень неплохо, если вы найдёте человека, который согласится помочь вам и направит вас в правильную сторону. Он подскажет подходящие книги и ресурсы, проверит ваш код, даст полезные советы. Кстати, мы уже писали о полезном ресурсе, где вы сможете найти ментора. Наставника можно искать среди знакомых программистов, на IT-тусовках и конференциях, на онлайн-форумах и так далее.
  • Специализированные практические курсы. Попробуйте поискать в своём городе курсы, где вас обучат какому-нибудь языку программирования или технологии. Я был приятно удивлён количеством таких курсов в Киеве, в том числе бесплатных и с последующим трудоустройством.

Какой язык, технологию и направление выбрать

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

  • Наличие на рынке вакансий. Конечная цель этого пути — найти работу программистом. А это будет трудно сделать, если на рынке вакансий никто не будет искать разработчиков на вашем языке программирования. Проверьте сайты с вакансиями, посмотрите, кого больше ищут, выпишите десяток языков. И переходите к следующему критерию.
  • Низкий уровень вхождения. Если вам придётся потратить длительное время на изучение языка, это может отбить у вас охоту к программированию вообще. Почитайте о тех языках, которые вы выбрали выше. Просмотрите литературу, которую нужно будет прочитать, чтобы изучить эти языки. И выберите те, о которых пишут, что они лёгкие, или которые вам показались лёгкими. Такими языками могут оказаться PHP, Ruby, Python.
  • Кайф от процесса. Если вам не нравится писать код на выбранном языке, вы не будете получать удовольствия от этого процесса, от работы и от жизни. А оно вам надо? Делайте правильный выбор.

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

В любом случае изучите веб-технологии. Это язык разметки HTML, стили CSS и JavaScript, который позволит сделать вашу страницу динамической. На следующем этапе изучите серверный язык (Python, PHP, Ruby и другие) и подходящие для него веб-фреймворки. Изучите базы данных: практически в каждой вакансии программиста это упоминается.

Как получить начальный опыт

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

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

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

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

Ещё одним неплохим вариантом для получения реального опыта является open source. Таким проектам всегда нужны новые люди, пусть даже и новички. Вы можете поискать в проекте баги или посмотреть в баг-трекере и предложить методы их решения. Найти такие проекты легко на GitHub или других сервисах для хостинга кода. Не стесняйтесь задавать там вопросы.

Четвёртый вариант получения опыта — помощь знакомым программистам. Попросите их передать вам маленькие и несложные задания. Если что-то не будет получаться, у вас всегда будет к кому обратиться. И при этом вы будете участвовать в реальном проекте.

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

Почему стоит выбрать Python

Давайте немного подробнее поговорим о выборе первого языка программирования. Первый язык должен быть простым и популярным на рынке. Таким языком является Python. Я очень советую выбрать именно его в качестве первого языка программирования.

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

Справедливости ради стоит упомянуть и о других языках программирования. Java может стать неплохим выбором для новичка. Этот язык популярнее, чем Python, но и немного сложнее. Зато инструменты для разработки гораздо лучше проработаны. Стоит только сравнить Eclipse и IDLE. После Java вам будет проще перейти к работе с низкоуровневыми языками программирования.

PHP — ещё один очень популярный язык. И, мне кажется, он даже проще, чем Python. Очень легко найти себе ментора или решение какой-нибудь проблемы на форуме. Всё потому, что в мире существует огромное количество PHP-программистов разного уровня. В PHP нет нормального импорта, есть множество вариантов решения одной и той же задачи. А это усложняет обучение. И PHP заточен исключительно под веб.

Важен ли английский язык

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

Что нужно знать, кроме языка программирования

Конечно же, кроме языка программирования и английского, нужно знать что-то ещё. А вот что — зависит от направления, которое вы выберете. Веб-программист обязан знать HTML, CSS, JavaScript. Десктоп-программист учит API операционной системы и различные фреймворки. Разработчик мобильных приложений учит фреймворки Android, iOS или Windows Phone.

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

Последние шаги

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

Как я стал разработчиком с нуля. И вы сможете

В нашей стране люди воспитаны так, что профессию надо выбрать раз и навсегда, причем уже к 18 годам. А что, если ошибся, либо надоело, либо дошел до стадии, когда карьерный рост по каким-то причинам невозможен? В юности смена рода деятельности воспринимается более-менее нормально, но когда тебе 30, а то и больше, тут уж не до маневров… Или это не так?

Короче, мне за 30, я состоявшийся профессионал, и я решил освоить фронтенд-разработку. Захотелось двух вещей:

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

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

С чего начать?

Главная проблема новичка-кодера. Технологий море, языков океан, терминов – безграничная вселенная. Фреймворки, библиотеки, методологии, метаязыки… Неясно вообще ничего, а знакомые программисты и вовсе советуют не лезть. А если очень хочется?

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

Как учиться?

В общем есть два пути:

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

Подход кажется хорошим, но он требует невыносимого самоконтроля. Вы можете безвылазно смотреть YouTube в течение первой недели, а на второй «что-то пойдет не так», и вы просто бросите. Просто потому, что вдруг отдали приоритет чему-то другому. Сериалу, играм, девушке – неважно. К тому же, вы ничего не платили, а стало быть ничего не теряете – и легко сливаетесь.

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

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

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

  • Систематизированные видеоуроки. С самых-самых основ. Я гуманитарий, и мне нужно все разжевать и положить в рот без лишней технической терминологии.
  • Качественная профессиональная подача. Мой учитель по ту сторону экрану должен говорить уверенно и по делу. И таких, как оказалось, очень и очень мало – большинство «преподов» можно смело слушать на удвоенной скорости, в то и не слушать вовсе.
  • Интересная практика. Без этого никуда. Нужно решать задачки, и важно, чтобы они соприкасались с реальной жизнью, а не только с математикой. Согласитесь, что одно дело тасовать абстрактные цифры в массивах, и совсем другое – написать какой-нибудь планировкщик или хотя бы базу девушек, с которыми ты одновременно встречаешься.


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

Где учиться?

Для желающего освоить новую профессию в интернете есть куча платных и бесплатных материалов. В моем случае начинающего веб-разработчика я обнаружил:

  • Неиссякаемый YouTube. Вроде бы все есть, но с чего начать, а тем более, куда продолжить, – непонятно. Знания не систематизированны. Блогеры любят фокусироваться на частностях, упуская общую картину. Однако YouTube хорош, когда нужно углубить какую-то тему.
  • Русскоязычные платные курсы «Нетология», GeekBrains, HTML Academy и подобные. Дороговато, если не решил крепко-накрепко менять профессию и не уверен, что в будущем отобьешь затраты. К тому же бесплатные вебинары некоторых школ не блистали качеством, а среди преподавателей по другим специальностям я обнаружил коллег, чей профессионализм оставляет желать лучшего. Хм.

По ценам. Первый уровень месячного интенсива HTML + CSS в HTML Academy стоит 24 500 рублей. Профессия frontend-разработчик в «Нетологии» без скидки 54 900 рублей, правда, за 8-месячные курсы плюс обещают стажировку и трудоустройство. В GeekBrains берутся учить за 7855 руб/мес на протяжение семи месяцев, в комплекте стажировка на реальном проекте GeekBrains или Mail.Ru, а то и у партнеров вплоть до Сбербанка.

И это лишь немногое из того, где можно поучиться.


Меня спасла реклама в Facebook. Предложили англоязычную школу Treehouse, и я повелся. Кликнул на бесплатный курс Introduction to HTML and CSS, прошел его.

Обучение было как раз таким, какое я искал: на видео профессиональный наставник с чувством, с толком, с расстановкой объяснял азы фронтенда. Иногда на экране появлялась доходчивая инфографика. В ходе разбора темы нужно было выполнять задания, а то и пройти целый челлендж, либо ответить на вопросы.В конце – контрольная работа. Есть «песочница», где писать код и ссылки на допматериалы – документации на Mozilla Developer Network и др.

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

И что было дальше?

По мере прохождения курсов я работал над учебными проектами. Это были простенькие одностраничные сайтики. Как только происходил затык, и мне хотелось углубиться в тему, я направлялся на YouTube и в Telegram-чаты. Почувствовав силы, присоединился к тематическим сообществам на Facebook и время от времени отвечал на вопросы новичков.


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

Мне помогало абстрагироваться от суровой реальности среднестатистического российского кодера. Вдохновение и поддержку я находил в зарубежных фрилансерских тусовках Digital Nomads. Как правило, это заряженные ребята, которые точно знают, чего хотят от жизни, и многие из них – программисты самоучки. А многие из самоучек – написали книги о своем пути к новой профессии.

Первые деньги

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


В случае с фронтендом это проще простого:

  1. Если вы хорошо учитесь, то у вас по ходу дела будут появляться готовые учебные проекты.
  2. В интернете есть базы готовых макетов. Загружаете – и верстаете. Чтобы не ковыряться слишком долго, поставьте себе цель: сверстать 5 макетов в неделю. Ну или хотя бы парочку.
  3. Наверняка у вас есть друзья, которым нужна сайт. Возьмите и сделайте им подарок.
  4. Если таковых друзей нет, то предложите свои услуги в каком-нибудь профессиональном сообществе. Бесплатно.

Как только почувствовали, что ваш кодинг-скилл достиг 80 lvl, и вы способны на раз-два решать актуальные задачи, можно искать работу. Тут прямой путь как минимум на HeadHunter, а если хотите фрилансить – добро пожаловать на Upwork.

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

Читайте также: