Подпишитесь на рассылку
Компьютерной школы Hillel

Вы получите:

  1. Информацию о полезных отраслевых мероприятиях
  2. Интересные статьи IT-сферы
  3. Новости Компьютерной школы Hillel
Спасибо!
Нет, спасибо
На нашу рассылку уже подписалось 2241 человека.

Как стать программистом

Автор: Максим Фарсиков

56 голосов
3677

Как стать программистом

Предисловие

В данной статье я попытался наметить план для человека, который решил стать программистом, но не знает, с чего начать, либо начал, но не уверен, что движется в правильном направлении. Все изложенное я взял в первую очередь из своего опыта и из опыта моих знакомых. В статье описан сложный и долгий путь, который можно пройти, только обладая хорошей мотивацией и настойчивостью. Эта статья НЕ из серии «Пять важных принципов…», «Три простых совета….», «Один главный секрет...» или «Как быстро пройти собеседование».

Вступление

Зона комфорта… Жизнь в ней идет тихо и размеренно, есть масса свободного времени, которое можно тратить на семью, на хобби, на спорт — на что угодно. В ней все идет своим чередом, завтра будет то же самое, что и вчера, почти нет резких и непредсказуемых поворотов.

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

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

Решившимся на этот шаг — мое глубокое уважение и пожелание успехов и огромной удачи!

Этот путь состоит из следующих этапов:

  • приобретение базовых знаний;
  • получение начального опыта;
  • составление резюме;
  • прохождение собеседования.

Эти этапы мы и разберем в данной статье.

Приобретение базовых знаний

Без базовых знаний, без основ нет никаких шансов на успех. Абсолютно! Даже не пытайтесь. IT — это не госструктура, здесь не устраиваются по знакомству или за взятку.

Выбор языка программирования

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

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

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

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

Принять решение поможет информация о популярности различных языков программирования: http://www.tiobe.com/tiobe_index.

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

Моя статья о выборе первого языка программирования — обзор Java

С чего начинать обучение

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

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

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

Курсы

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

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

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

В книгах зачастую написано, ЧТО и КАК нужно делать, но почти никогда не сказано, ЗАЧЕМ это делать. Хороший преподаватель способен ответить и на этот вопрос.

Английский язык

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

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

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

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

Теоретическая подготовка

Теория важна.

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

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

Что включать в теоретическую подготовку? Сначала это будет синтаксис и конструкции языка. Далее — алгоритмы (сортировка, поиск...), структуры данных (списки, очереди, графы…), шаблоны проектирования (общепринятые решения распространенных проблем). Такой набор теоретических знаний позволит с легкостью решать большинство задач, стоящих перед программистом.

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

Особое внимание нужно уделить лучшим практикам и техникам программирования, таким как разработка через тестирование (Test Driven Development), рефакторинг, парное программирование. Все это в сумме называется экстремальным программированием (XP).

Даже после овладения всеми вышеописанными знаниями останется еще пруд пруди теории для изучения. Дальше можно попробовать другие парадигмы программирования: объектно-ориентированное сменить на функциональное, императивное — на декларативное.

Получение начального опыта

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

Собственный проект

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

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

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

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

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

Напарник

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

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

Парное программирование

С напарником можно практиковать парное программирование, сидя за одним компьютером вдвоем, либо используя программу для демонстрации своего экрана удаленно. Вдвоем TDD (Test Driven Development) можно использовать следующим образом: первый пишет тест, второй — код, который сделает тест зеленым. Дальше напарники меняются местами: второй пишет тест, а первый — имплементацию.

Как понять, что я уже готов?

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

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

Наверное, самым объективным критерием будет следующее: вы правильно отвечаете на две трети вопросов, которые находите в интернете в различных опросниках, плюс к этому умеете на бумажке написать ОЧЕНЬ простую программу.

Составление резюме

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

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

Соблюдайте баланс

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

Английский язык

Резюме должно быть на английском.

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

Никто от вас не ожидает владения языком на уровне fluent. От начинающего программиста требуется уметь понять написанный текст — письмо, книгу, техническую документацию — со словарем. Приблизительно понимать устную речь, примитивно изъясняться на уровне «Yes, it will be done today».

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

​Места работы

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

Информация о каждом месте работы должна содержать указание на то, чем занимались именно вы. Лучше всего указывать сферы ответственности, максимально приближенные к той должности, на которую вы претендуете. То есть если претендуете на должность программиста, а раньше работали в банке, то никого не интересует, что вы открывали и закрывали счета, банковский день, устанавливали обновления. Гораздо более важно знать о том, что вы писали скрипты для автоматизации, запросы к БД, внутреннее ПО.

Часто те свои места работы, которые не относятся к программированию, люди не указывают. Это неправильно. Если человек ничего не указал, значит, он нигде не работал. Значит, он бездельник. А никто не хочет брать к себе в команду лентяя.

Опыт программирования

Даже если вам кажется, что у вас нет опыта и писать не о чем, нужно постараться максимально описать весь тот минимальный опыт, что у вас есть.

Расскажите о своем домашнем проекте (pet-project): какова его цель, для чего он был предназначен, какие технологии применяли; опишите структуру проекта. Обязательно укажите, что весь функционал покрыт тестами. Если над проектом работали с напарником, укажите и это. Опишите, как взаимодействовали, как были распределены роли, как делились опытом, как решали спорные моменты, применяли ли парное программирование.

Образование, курсы, сертификаты, спортивные достижения

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

Курсы и сертификаты бонусов не дают, но в целом говорят о том, что человек развивается и не сидит на месте.

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

Ничего лишнего

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

Собеседование

Если вас пригласили на собеседование — это уже успех!

Собеседований не нужно бояться. И нужно смириться с тем, что с первого раза вас не возьмут.

Собеседований придется пройти множество. Люди на них будут встречаться разные: и адекватные тим-лидеры, набирающие себе команду; и закомплексованные ребята, боящиеся, что вы составите им конкуренцию, если вас возьмут на работу. Ваша цель при прохождении первых собеседований — глубокий самоанализ после каждого из них. КАЖДЫЙ вопрос собеседника нужно проработать, почитать статьи на соответствующую тему, даже если вам КАЖЕТСЯ, что вы правильно ответили. Почти наверняка в этом вопросе крылся подвох. После некоторого количества собеседований вы увидите, что вопросы начинают повторяться и все спрашивают примерно одно и то же с небольшими вариациями.

Не стесняйтесь говорить, что вы чего-то НЕ знаете

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

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

Не молчите

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

Проявляйте активность

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

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

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

Английский

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

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

Заключение

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

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

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

05.07.2016 3677
Максим Фарсиков
Senior Developer,
Opower
Оцените этот материал
comments powered by HyperComments