Найти тему
116,5K подписчиков

Как перестать быть джуниором и начать жить

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

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

Текст основан на материалах вебинара «Как подняться с программистского „дна“», который провел Даниил Пилипенко из компании SimbioWay.

Кaк определить профессионализм программиста

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

По оценкам компании SimbioWay, всего от 10 до 30% тех, кто называет себя программистом, действительно им являются.

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

Качество кода, написанного разработчиком, можно оценить всего по двум параметрам:

  • Работоспособность (не просто выполнение абстрактных действий, а соответствие продукта тем задачам, которые были поставлены перед разработчиком).
  • «Поддерживаемость» кода (возможность прочитать код, доработать, подправить, доступная даже программисту, который его в первый раз видит).

Вопрос работоспособности даже не подлежит обсуждению. Если программа не работает — нет результата, следовательно, и речи не идет о ее качестве.

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

Отличие хорошего кода от плохого. Источник
Отличие хорошего кода от плохого. Источник

Кроме умения написания «чистого» и понятного кода, профессионал должен обладать еще рядом качеств. Давайте обратимся к гуру программирования и посмотрим, что они считают ключевым для высококлассного программиста.

По Стиву Макконеллу:

  • Скромность
  • Любопытство
  • Профессиональная честность
  • Удобочитаемостькода
  • Баланс творчества и дисциплины
  • Эффективное использование лени

По Роберту Мартину:

  • Знание области
  • Непрерывное обучение
  • Соблюдение правила «Не навреди»
  • Умение работать в команде
  • Понимание интересов заказчика
  • Наставничество

По Джоэлу Спольски:

  • Страсть, интерес, энтузиазм
  • Привычка доводить начатое до конца
  • Умение справляться с проблемами
  • Ответственность за свою работу
Почитать об этом подробнее вы можете тут:
Стив Макконнелл, «Совершенный код. Мастер-класс». 2012.
Роберт Мартин, «Идеальный программист». 2012.
Дж. Спольски, «Руководство по подбору программистов и управлению ими». 2008.

Опрос, проведенный командой SimbioWay среди руководителей и программистов, показывает схожие результаты.

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

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

Программист: компоненты профессионализма

Основные факторы, которые повлияют на ваше развитие в профессии программиста:

  • интерес;
  • опыт;
  • личностная зрелость;
  • востребованность.

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

Интерес

Интерес первичен на пути развития любых человеческих качеств.

Единственный способ делать великие дела — любить то, что вы делаете.
Стив Джобс
Американский предприниматель, один из основателей Apple

Активный глубокий интерес — это основа профессионализма. Спросите себя, что именно вам интересно, что вас вдохновляет. Программирование в современном мире дает достаточно большую свободу выбора. Если вам нравится работать с числами и математическими моделями — выбирайте Data Science. Хотите создавать системы и видеть, как они работают, — займитесь разработкой приложений. Любите делать что-то красивое — возможно, стоит попробовать себя в 3D-программировании.

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

Маргарет Гамильтон, ведущий инженер-программист проекта Apollo, со стопкой кода бортового программного обеспечения. Источник
Маргарет Гамильтон, ведущий инженер-программист проекта Apollo, со стопкой кода бортового программного обеспечения. Источник

Интерес — это в том числе вовлеченность, то есть показатель того, в какой мере человек погружается в те или иные проблемы. Увлеченный своей работой специалист всегда в поиске, всегда ставит себе задачи чуть выше, чем поставил ему руководитель. Как можно реализовать алгоритм быстрее? Как сделать код еще более эффективным? Какие тенденции развития в моем направлении деятельности?

Главное — не прекращать задавать вопросы… Никогда не теряйте священной любознательности!
Альберт Эйнштейн
один из основателей современной теоретической физики

Опыт

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

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

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

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

Личностная зрелость

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

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

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

Востребованность

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

Чтобы определить это, можно, например, посмотреть доли вакансий по тем или иным языкам программирования, которые есть на HeadHunter и на «Моем круге». На сегодня четверть всех программистских вакансий в России — это Java, и еще четверть — это PHP. Меньшая доля — C#, Python. И совсем малая доля — Ruby, на сегодня это меньше одного процента, и его востребованность падает.

Востребованность языков программирования по данным HH и «Моего круга»
Востребованность языков программирования по данным HH и «Моего круга»

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

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

Типичные ошибки развивающихся программистов

Синдром Сизифа

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

Путь в обход

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

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

Практика — критерий истины.
Карл Маркс
немецкий философ, социолог и экономист

Уход в менеджмент

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

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

Попытка «объять необъятное»

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

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

Путь программиста: рекомендации по профессиональному росту

Мы разобрались с направлением движения на пути от программиста-любителя к программисту-профессионалу и теперь можем перейти к конкретным этапам этого пути.

1. Научиться программировать

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

  • Формализация задачи — это умение разложить ее на составляющие и сформулировать так, чтобы ее можно было написать в виде программного кода.
  • Проектирование — способность представить архитектуру решения, понимание того, чего вы хотите достичь и каким образом это можно сделать.
  • Написание кода.
  • Понимание кода — умение читать и понимать написанное кем-то другим.
  • Рефакторинг кода — умение увидеть ошибки и недостатки кода и переписать его так, чтобы он работал лучше и был более поддерживаемым. Это высшая форма деятельности программиста, потому что это умеет делать только тот, кто программирует по-настоящему хорошо.
Техника разработки программного обеспечения TDD. Источник
Техника разработки программного обеспечения TDD. Источник

2. Научиться учиться и разбираться

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

Любой набор знаний за пару лет технологически устареет. Поэтому лучше нанимать тех, кто способен изучить любую новую технологию.
Джоэл Спольски
Автор блога «Джоэл о программном обеспечении»

3. Научиться зарабатывать деньги

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

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

4. Найти себя: понять, что интересно и что действительно получается

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

Важно помнить, что у каждого свои таланты
Важно помнить, что у каждого свои таланты

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

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

5. Развивать свои сильные стороны

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

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

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

Заключение

Путь от программиста-любителя до программиста-профессионала способен пройти практический каждый. Как говорит психолог Михаил Литвак: «Счастье заключается в том, чтобы „хочу“, „могу“ и „должен“ имели одно и то же содержание».

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

Объединить желание и стремление стать программистом с возможностью развить свои знания и навыки в этой сфере вам сможет помочь курс «Веб разработчик» от Skillbox.

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