Предпосылки стать программистом
В течение последних пяти лет предоставление услуг по разработке программного обеспечения для западных компаний стало единственным скоростным социальным лифтом в Украине. Безусловно, имеется еще архитектура, медицинская практика (но тут есть некоторые нюансы), возможность открыть собственный бизнес (но тут есть очень много нюансов) и т. д.
Фото: chronosmedia.net
У данного явления существует целый ряд причин. Ниже приведены некоторые из них:
- украинский менталитет хорошо подходит для индивидуальной творческой работы (см. “Хуторянсво победило кастовость”);
- программист, как и коллектив программистов, сам является собственником орудий труда (своих знаний), рейдерский захват которых осуществить невозможно в силу их неотъемлемости;
- написание программного кода не требует развитой мышечной памяти, как у хирургов или ювелиров, поэтому ему можно научиться гораздо быстрее;
- дефицит программистов на глобальном рынке труда.
Стать программистом можно различными способами. В данной статье описываются пути, наиболее оптимальные для людей старше 25 лет, обладающих техническим средним профессиональным или высшим образованием, готовые изыскать полтора года для полноценного самообразования.
Подходы в изучении программирования
Программирование – это ремесло, предусматривающее работу головой и руками. Программист составляет композицию из некоторых абстракций, подчиняющихся четким техническим законам, и описывает ее в виде текста, состоящего из стандартного набора программных инструкций. Поэтому данная работа является чем-то средним между ремонтом автомобиля и написанием журналистских очерков.
Суть любого ремесла в том, что его трудно освоить, исключительно посещая лекции. Нужно хорошо владеть всеми его инструментами и, желательно, чтобы за качеством работы следил кто-то еще более опытный, обладающий при этом педагогическими навыками.
Если обобщить, то стандартный путь обучения IT-специальности выглядит следующим образом:
- базовая подготовка;
- практикум программирования;
- специализация по языку программирования и технологиям.
В Украине на работу в компаниях, разрабатывающих ПО, берут по результатам устного собеседования, на котором иногда необходимо решить несколько небольших задач письменно. Поэтому для получения первого рабочего места можно не следовать в точности по указанному пути, а целенаправленно готовиться именно к собеседованию, а точнее:
- участвовать в подготовительных программах для представителей других специальностей, организованных компаниями, входящими в первую десятку украинской IT-индустрии (подробную информацию можно получить, обратившись непосредственно в представительства данных компаний, также см. Samsung Fresh Graduate Recruitment);
- проходить альтернативные on-line-курсы для начинающих, составленные некоторыми программистами по собственной инициативе (см. www.javarush.ru);
- пользоваться on-line-курсами, предлагаемыми популярными Интернет-ресурсами (см. www.intuit.ru, www.academicearth.org, www.coursera.org и т. д.);
- читать книги по программированию, однако следует помнить, что издания “для чайников”, как правило, поверхностны, а полноценные учебники трудно воспринимаются даже опытными программистами, поэтому их следует просто учить близко к тексту и уметь пересказать каждую главу (см. пример списка таких книг);
- читать образовательные блоги, посвященные языкам программирования (см. Блог Алены С++);
- искать в Интернете вопросы с собеседований по конкретному языку программирования и находить статьи, раскрывающие каждый вопрос в отдельности (см. вопросы по С++);
- участвовать в on-line-соревнованиях по написанию программного кода, что позволит эффективно решать простые задачки и технически обосновать выбранные пути решения (см. пример on-line-арены для соревнований по написанию кода);
- браться за выполнение небольших заказов за минимальную цену на freelance-сайтах с целью приобретения базового опыта (см. www.freelance.ru, www.guru.com и т. д.);
- в случае возникновения трудностей не стесняться задавать вопросы на программистских форумах - там менее чем за час можно получить бесплатный квалифицированный ответ на интересующий вопрос (см. www.rsdn.ru, www.stackoverflow.com и т. д.).
Многие делают ошибку, считая, что для того, чтобы стать программистом достаточно поступить в ВУЗ или записываться на коммерческие курсы. Дело в том, что украинские ВУЗы не готовят специалистов, удовлетворяющих потребностям рынка (хотя после обучения в них и нескольких лет практики действительно можно стать хорошим специалистом). А большинство платных курсов стараются быть похожими на государственные ВУЗы, чтобы их стиль преподавания был понятен родителям, которые платят за обучение своих детей. Хотя подобные курсы, в качестве дополнения ко всему вышесказанному придутся весьма кстати.
Крупные украинские IT-компании в связи с нехваткой кадров создали собственные образовательные программы, некоторые из которых бесплатные. Часть из них накладывает ограничения на возраст участников или набор допускаемых специальностей. Но в некоторых из предлагаемых программ может принять участие каждый при условии прохождения вступительного теста, который обычно состоит из заданий на логику и задач на знание основ программирования. Подобные образовательные программы могут включать прохождение курсов и стажировку в отделениях компании, при успешном завершении которой участник получает предложение о трудоустройстве. В среднем четверть от подавших заявку на участие (приславших свои анкеты) становятся полноценными работниками.
В случае обращения в центральные офисы украинских разработчиков ПО с целью получить информацию об их подготовительных программах для представителей других специальностей следует помнить, что не все сотрудники компаний знают, что их работодатель предоставляет такие возможности, поэтому желательно поинтересоваться телефонами отдела, организовывающего курсы и тренинги, и затем там уточнить.
Фото: Виталий Власенко. Фотография публикуется как участник конкурса “Повседневная жизнь моего региона". Копирование разрешается только при согласии автора
Участие в подобных программах является наиболее эффективным способом стать программистом. Но чтобы на них попасть, нужно самостоятельно приобрести некоторые базовые знания. Поэтому наиболее короткий путь получения IT-профессии в отличие от описанного выше стандартного выглядит так:
- самостоятельно пройти несколько теоретических on-line-курсов по алгоритмам и структурам данных на сайте www.coursera.org (как правило, большинство не доходит до конца этого этапа в силу угасания собственной мотивации);
- получить первый опыт написания программного кода и изучить определенный язык программирования с помощью коммерческих или бесплатных практических on-line-курсов (например, www.javarush.ru);
- стать участником образовательных программ крупных IT-компании с последующим прохождением неоплачиваемой стажировки и трудоустройством.
Если нет возможности следовать данному пути по каким-либо причинам (например, из-за отсутствия необходимых образовательных курсов по месту жительства), то рекомендуется сначала воспользоваться несколькими on-line-тренингами, а затем участвовать в сетевых соревнованиях по программированию и одновременно заниматься freelance-разработкой, не выходя из дома. Однако данный подход гораздо более сложный и длительный.
Низкий уровень английского не является помехой в изучении программирования. Техническую документацию или переписку с заказчиками можно переводить с помощью Google Translate. В случае необходимости устного общения достаточно заучить несколько фраз приветствия и просьбу направлять все вопросы на email. К тому же в Украине во многих программистских командах общение с клиентами ведет руководитель или специальный менеджер, поэтому требования хорошего владения английским для соискателя могут быть чисто формальными.
Перспектива трудоустройства
Многие относятся скептически к идее переподготовки программистов из представителей других специальностей, потому что считают, что спрос на разработку программного обеспечения в Украине недостаточно велик. На самом деле количество сотрудников, задействованных в отрасли, растет на 20 – 30 % ежегодно и будет продолжать расти в течение следующих нескольких лет. Причины у этого явления следующие:
- крупные украинские IT-компании заслужили доверие у крупных западных корпораций благодаря своей эффективной работе, поэтому каждый год у них появляются новые заказчики уровня General Electric или Shell;
- мировой кризис вынуждает западные компании искать более дешевую рабочую силу, в том числе высококвалифицированную (на зарплате наших программистов они экономят миллиарды долларов в год);
- большинство экспертов считают, что украинские и российские программисты выигрывают за счет качества (но не за счет объема продукции) у своих основных индусских конкурентов;
- за последние несколько лет в Украине “созрело” достаточное количество специалистов, способных возглавить команды, создаваемые из новичков, поступающих в отрасль;
- руководители некоторых крупных украинских компаний, разрабатывающих ПО, высказывают намерения в будущем обогнать Индию по количеству программистов, т. е. увеличить их численность в Украине в 10 раз.
Особенности изучения программирования
Для тех, кто решил попробовать свои силы в разработке ПО, следует знать, что востребованные языки программирования рассчитаны для применения в больших коммерческих системах, поэтому их невозможно глубоко освоить без обширной практики.
Многие новички допускают типичные ошибки, неверно используя часть конструкций языков, на которых пишутся программы, или отказываясь от стандартных решений в пользу самостоятельно изобретаемых “велосипедов”. Ниже приводятся рекомендации, которые позволяют на начальном этапе избежать основных ошибок при изучении алгоритмов и конструкций языков программирования:
- следует запоминать названия большинства алгоритмов или языковых конструкций, а также их синтаксис или структуру (последнее желательно, но не обязательно);
- необходимо иметь понятие об их альтернативах и всех случаях использования, даже самых редких;
- нужно уметь написать без обращения к справочнику (пусть даже с ошибками синтаксиса) несколько небольших примеров с применением данных конструкций;
- требуется знать, как они будут вести себя при разных наборах входных данных или при очень большом потоке данных.
Возникает логичный вопрос, какой язык программирования выбрать? Рациональнее всего сначала ознакомиться с Java или C#, как с самыми оплачиваемыми и относительно несложными в обучении языками написания кода. Если не получается, тогда следует попробовать изучить Python. Данный язык предназначается для быстрой и одновременно эффективной разработки программ.
Через полтора года интенсивных занятий можно будет составить резюме, указав там базовой опыт и/или перечень написанных учебных программ, и подать заявку на стажировку либо начать проходить собеседования в компаниях, которым нужны Junior-программисты.
Опрошенные руководители команд разработчиков ПО согласились с тем, что за несколько месяцев можно стать программистом при условии усердия и выделения на обучение минимум четырех часов в день. Пусть это будет непросто, но это возможно, особенно, когда есть мотивация и вера то, что ты на правильном пути.