5 советов начинающим программистам: как выбрать специализацию
Недавно я уже рассказывал о себе в статье об универсальных и узкопрофильных программистах. Напомню только, что в IT я 35 лет, занимался разработкой, формировал и управлял командами, преподавал компьютерные науки и информационную безопасность. Теперь в DataArt помогаю коллегам профессионально развиваться — отлаживаю процессы, с помощью которых можно построить карьерный план, повысить квалификацию или сменить технологию на более перспективную.
В этой статье хочу поделиться рекомендациями с теми, кто собирается стать программистом и пока думает, каким именно. На что обращать внимание при выборе самой первой специализации, стоит ли идти на поводу у собственных чувств, можно ли угадать перспективную технологию и зачем все-таки учить английский? Надеюсь, эти советы пригодятся студентам и школьникам, а также всем, кто решил сменить свою сегодняшнюю работу на IT.
Иллюстрация Ульяны Патоки
Совет первый: подумать о теоретической науке и пробовать знания на практике
Если вы решили идти по классическому пути, то есть начали с обучения в вузе, обратите внимание на Computer Science как на академическую дисциплину. Не уверен, что достаточный процент студентов, кто мог бы развивать это направление именно в университетах, задумывается о такой возможности. Между тем некоторые мои однокурсники и однокурсницы делают в науке по-настоящему интересные вещи. Правда, в основном за пределами Украины. Впрочем, карьера ученого подойдет не всем: например, мне всегда было трудно понять, какое практическое применение мы сможем найти чисто теоретической информации, только что полученной на лекции. Но если для вас такая связь между вполне абстрактными выкладками и реальной разработкой чаще всего очевидна — возможно, склад вашего ума позволяет рассчитывать на серьезные успехи в теоретической кибернетике.
Тем же, кому (как и мне) неинтересно долго разбираться, каким образом построения теоретиков кибернетики воплощаются на практике, стоит поскорее включаться в реальные проекты. Например, я на первом курсе все еще не очень хорошо понимал, чему учусь и кем стану в будущем. Но поскольку мы с однокурсниками в основном были ребятами взрослыми, к тому же после армии вернулись в совершенно другую страну, то нам была необходима работа. Параллельно учебе кто-то умудрялся устроиться проводником, вагоновожатым, шофером. Мне же повезло попасть в вычислительный центр Академии ПВО: военные разработки тогда были нереально крутыми, и я быстро разобрался, что делают программисты на практике. Коллеги занимались виртуализацией, моделировали налеты авиации и проектировали радиолокационные станции. Все это было невероятно интересно, поэтому я практически жил на работе.
Наверное, самый правильный способ понять, насколько нравится то или иное дело, потрогать его руками. Вне зависимости от того, какой из двух сценариев вы выбрали: курсы/самообразование или классику с пятью годами университета, окончания учебы дожидаться не нужно. Сейчас есть возможность попасть в продуктивную среду раньше, искать практикантские вакансии или пробовать писать что-то свое с друзьями. Главное — убедиться, что такая работа приносит удовольствие.
Совет второй: доверять себе и анализировать эмоции
Есть профессии, представители которых в любой стране мира всегда немного на своей волне. У них особый стиль общения, специфический язык и своеобразные шутки. На первое место в этом списке я бы поставил медиков, сразу за ними программистов и потом уже военных, пожарных и сотрудников правоохранительных органов. Уверен, что профессиональная специфика, заметная в их поведении, связана с образом мышления, которого требует специальность.
Язык программирования — прежде всего язык общения, причем не только с машиной, но и друг с другом. С одной стороны, это первый повод задуматься, близка ли вам выбранная профессия. С другой (и это очень хорошая новость) — если с удовольствием принимаете эти принципы мышления, вы на правильном пути. Прочувствовав основы разработки, гораздо легче овладеть любой из используемых технологий. Это значит, что входом в профессию может стать любой язык. Если сейчас таким часто оказывается, например, Python, почему бы и нет?
На одной из моих первых работ говорили, что программистам вообще платить не нужно, потому что они «и так от работы тащатся». Чувства, ощущение, насколько тебя «прет» при написании программы — это очень важно. К тому же можете действительно найти специализацию, к которой у вас склонность. Например, специфический интерес к устройству систем может стать отличным фундаментом для карьеры в информационной безопасности или тестировании.
Вот как описывает процесс своей работы одна моя знакомая, начинающая программистка: «Сначала приходит идея — ты в восторге — пишешь код — оно не работает — ты проверяешь — перепроверяешь — вот оно, нашлось! — ан нет, показалось... — тебе хочется сдохнуть — и тут — бац! прозрение! — кайф». По-моему, идеально!
Кстати, я слышал, что многие из тех, у кого пока немного опыта в реальных проектах, думают, будто в QA попадают люди, неспособные писать программы. Мол, если хочешь в IT, но вовремя не выучился на разработчика — иди в тестировщики. На самом деле, классными специалистами в тестировании становятся те, кому по-настоящему нравится доводить приложения до идеала.
У меня перед глазами до сих пор стоит картина: ребята два месяца вылизывали новый интерфейс платежной системы. Пригласили всех посмотреть на него, вывели на большой экран и начали сеанс восхваления себя любимых. Но тут кого-то угораздило показать программу тестировщику, который проходил мимо. Тот только спросил: «А если так?». И демонстрацию пришлось закончить — Stack Overflow, конечная, выходим...
Совет третий: не бояться ошибок и перемен
Если ты научился кодить, еще и кодить хорошо и с удовольствием, остается только сохранять готовность осваивать новые технологии. Делать это нужно, причем исключить, что вам, например, не придется сменить язык программирования, нельзя. Никто не гарантирует и того, что однажды не посетит мысль, будто вы вообще ошиблись в выборе профессии. В этот момент главное твердо оценить, что именно не нравится. Скорее всего, причиной дискомфорта окажется неинтересный проект, неприятный начальник или даже то, что ребята вокруг оказались не такими классными, как показалось вначале.
Но, если вам доставляет удовольствие сам процесс создания программы, ее тестирования или, скажем, организации разработки — весь прочий антураж поменять относительно несложно. Рынок IT динамичен, быстро оправляется после кризисов, компании на нем всегда конкурируют за специалистов, особенно увлеченных своим делом. Если вы открыты новому, подходящее предложение вас наверняка найдет.
В мире технологий при нынешнем доступе к информации и образованию главное — не лениться и не бояться нового. Сейчас достаточно списков популярных, высокооплачиваемых или любимых программистами технологий. Думаю, заглядывать в них стоит — любая информация может оказаться полезной. Но рассчитывать раз и навсегда угадать с платформой не приходится. Недавно многие говорили, что через год все будут программировать на Golang, но пока программируют на нем почему-то не все.
В то же время стартовать с явно устаревшей технологией потому, что сейчас тем, кто согласен ее использовать, платят немного больше, никому не посоветую. Понятно, что в будущем это грозит потерей работы, хотя мы с вами договорились: изменить направление вы при необходимости сможете. Но учтите, айтишники — люди чувствительные (даже если вы пока за собой этого не заметили). Поэтому не обрекайте себя на взаимодействие с ненавистным инструментом ради лишней пары долларов. Читайте совет номер два и учтите, что лучше всего в конечном оплачивается любимое дело — в нем проще достигнуть мастерства.
Совет четвертый: смотреть по сторонам и учить английский
Программирование не похоже на классические инженерные дисциплины, на мой взгляд, у него куда больше общего с филологией. Чтобы не быть голословным, проиллюстрирую на простом примере. Возьмите математическую задачу и попросите любую группу людей решить ее всеми возможными методами. В зависимости от уровня подготовки таких решений будет два, три, пять, но вряд ли намного больше. В общем, «несколькими способами».
А теперь дайте группе программистов задание создать приложение для определенного проекта: вы получите ровно столько разных программ, сколько людей будет их писать. Процесс создания программы больше похож на написание сочинения, чем на решение примера. Если в школе класс пишет сочинение о коте, не только тексты, но и сами коты получаются непохожими друг на друга. Такой простор дает широкие возможности для поиска в будущем.
Пожалуй, тем, кто начинал обучение с двумя экземплярами книги на всю команду из 120 человек, которые две недели распечатывали с дискеты в два прохода на матричном принтере, а затем их выдавали на руки под честное слово и запись в журнале, остается только завидовать сегодняшним студентам. Необходимости самостоятельно дрессировать компьютер, действуя по наитию, теперь нет. Для поиска информации есть множество ІТ-сообществ и Google, жизнь без которого вообще сложно представить.
Однако нам необходимо быть готовыми к восприятию новых знаний, вплоть до терминологии. Я, например, совсем недавно на брейнсторме по искусственному интеллекту познакомился с двумя совершенно новыми для меня темами, о которых никогда раньше не слышал. За три с лишним десятка лет в IT. Не скажу, что я теперь в них прямо уж эксперт, но поддержать разговор с заказчиком в будущем смогу. Хотя мне пришлось немного разобраться в матчасти и опять-таки погуглить.
Это подводит нас еще к одному очень важному вопросу — английскому языку. Думаю, для программиста сейчас его знание оказалось даже важнее математики. И не только потому, что знание языка позволяет общаться с иностранными заказчиками, упрощает поиск работы и построение карьеры. Способность понимать английский на порядок расширяет возможности дообучения в любой области, ведь многие публикации (думаю, едва ли не 80%) никто не собирается переводить на национальные языки.
Совет пятый: пробовать силы и быть азартным
Начнем с того, что значение сильного школьного бэкграунда для программиста, по моему мнению, переоценивают. Я, например, о компьютерных науках узнал в далеком 1985 году от репетитора, готовившего меня к вступительным экзаменам: он принес почитать книгу, которая, кстати, была учебником по дискретной математике. Я ничего не понял, но все равно решил поступать именно на эту специальность просто потому, что сдавать на вступительных нужно было только математику, хотя и дважды — устно и письменно.
В СССР школы четко делились на специализированные, куда достаточно рано отбирали талантливых детей — их готовили для последующей работы на стратегически важных направлениях, и все остальные, где думать почти совсем не учили, во всяком случае в рамках стандартной программы. Разумеется, вместе со мной на курсе в основном оказались ребята из первой категории. В отличие от них я вначале справлялся примерно с одним процентом полученных заданий и то наполовину. Но именно это не позволяло расслабиться и даже привносило в процесс обучения спортивный азарт. В итоге я, несмотря на отсутствие специальной школьной подготовки, догнал большинство однокурсников по тем предметам, которые касались непосредственно программирования и интересовали меня в первую очередь.
В свое время я писал (или хотя бы пытался писать) на всем, на чем писалось и что воспринимал компьютер. Assembler, PL, FORTRAN, REXX, LISP, FoxBase, FoxPro, C, C++, .NET. Все было интересно и при этом расширяло кругозор, позволяло понять, что вот это — моё, а это как-то не очень. Например, попробовав силы в программировании на языке LISP, я быстро понял, что этот уровень мне сходу недоступен и требует длительного и глубокого погружения. Круто, конечно, написать программу, которая умеет, к примеру, модифицировать саму себя во время выполнения в зависимости от внешних условий, однако здесь я решил остановиться на уровне знакомства с теорией и глубокого восхищения.
Но, может быть, как раз вам это не покажется таким уж сложным? В любом случае не узнаете, пока не попробуете.
Наконец, если азарт погружения непосредственно в технологии в какой-то момент перестанет быть таким острым, всегда есть возможность сконцентрироваться на командной работе. Вообще-то далеко не все хотят быть менеджерами, и толкать себя в эту сторону хорошему техническому специалисту искусственно не стоит. Однако если вы ощущаете в себе потенциал лидера — упускать этот шанс попросту жаль.
При этом, чтобы стать хорошим менеджером вовсе не обязательно быть лучшим программистом в мире. С другой стороны, если вы уже стали профессионалом в разработке программного обеспечения, вас намного легче примут коллеги, которыми вы пришли руководить (по крайней мере поначалу). В любом случае умение говорить с командой на одном языке очень важно.
В заключение скажу, что с выбором специализации тянуть не стоит. Пробуйте интересное направление на практике, наслаждайтесь профессией и меняйте сферу, если она показалась вам скучной. В случае если статья была вам интересной, посмотрите мой вебинар, посвященный этой же теме. Но я уверен, что вы определите собственный путь: прислушайтесь к себе и всё получится!