# Профессиональные компетенции разработки программного обеспечения

Дмитрий Николаевич Черемнов

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

## Введение

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

Я фанат разработки программного обеспечения…

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

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

Я поделюсь своими мыслями, знаниями и опытом в разработке программного обеспечения.

### Почему…?

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

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

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

### Злосчастный круг

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

А без работы невозможно (а точнее очень трудно) получить необходимый опыт.

Злосчастный круг замыкается и его сложно разорвать.

Тебя интересуют информационные технологии?

Ты изучаешь язык программирования и уже пишешь (пусть и простые) программы?

Ты хочешь связать свою профессиональную жизнь с ИТ?

А может ты уже работаешь в ИТ, но тебе нужно значительно повысить свою квалификацию?

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

### Стремись к профессиональной цели!

Если тебя интересует программирование, информационные технологии и ты находишься в начале профессионального пути – стремись к своей цели!

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

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

Определив свой текущий уровень, сформируй карьерный план и определи ближайшие и долгосрочные цели. Не трать на планирование много времени! План – это список намерений, но не более того.

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

Путь до юниора может занять много времени – от полугода до 2 лет, в зависимости от начального уровня и интенсивности подготовки. Нужно много изучать и практиковать, не менее 10 часов и нескольких дней в неделю (например, 2-3 дня в неделю по 2 часа вечером в будни и 4-6 часов в выходной теории и практики). Такой график сложно, но можно соблюдать по совместительству для учащегося, студента или занятого на основной работе. Естественно, у каждого человека своя скорость усвоения материала и получения практических навыков, кто-то достигнет цели ранее, а кому-то потребуется больше времени.

### Звезд с неба не хватал

Может у тебя возникают сомнения, сможешь ли ты достичь своей профессиональной цели – начать работу в ИТ или повысить свою квалификацию?

Может ты думаешь, что многим все дается легко и просто? Вероятно, такие люди есть, но я не из их числа…

Знания мне даются непросто, свой опыт я набирал долго с "кровью и потом" – на работе, вечерами дома, а если меня посетит вдохновение, то иногда и ночью :)

Многие задают вопрос – есть ли польза в книгах, курсах и наставниках? Курсы, книги и учебные материалы, менторы – это ускорители, мотиваторы и тотализаторы, но все зависит от вас самих – вы должны изучать и практиковать!

Первый опыт я получил в школе, кодируя алгоритмы на микрокалькуляторе “Электроника МК-52”, программируя простые игры на микрокомпьютерах “БК-0010” и “ZX Spectrum” на языке Basic. Помимо этого, я провел много времени за компьютерными играми. В университете работал с системой управления базой данных dBase, создавая программу расчета полезных веществ в продуктах питания.

Моя первая работа на должности программист-инженер была в маленьком закрытом городке Казахстана в Курчатове в Институте Атомной Энергии в Национальном Ядерном центре. Курчатов расположен недалеко от ядерного полигона, на полигоне я видел огромные скрюченные, погнутые железобетонные столбы и “атомное” озеро – последствия наземных термоядерных испытаний. Первая реализованная мною база данных, ушедшая в продакшен – “Система учета радиоактивных материалов” для Международного агентства по атомной энергии. Ценным источником знаний по языку программирования С в 1996 году, являлась бумажная распечатка руководства “Язык программирования С” Брайана Кернигана и Денниса Ритчи, по ней я обучался с моим другом и коллегой Цай Евгением. Нашими наставниками по разработке были Инков Александр, Петренко Андрей (передаю им персональный привет!). Позже по документации и книгам изучали C++ и Delphi. В дальнейшем мы работали на С, C++ и Delphi в основном над созданием информационно-управляющих систем для эксперементальных стендов Ангара и EAGLE.

В 2006 году выиграл грант и в Омске в компании Luxoft прошел 4 месячный интенсивный курс по методикам разработки Rational Unified Process, языку программирования Java, Java EE технологиям и базе данных Oracle. После этого сменил специализацию с С++, Delphi на Java стек. Большинство ребят после курса также стали работать Java разработчиками. Переехал в кремневую долину Сибири – в Новосибирск. (Передаю всем знакомым и друзьям из Курчатова, Омска и Новосибирска пламенный привет!).

Начало карьеры может быть сложным, но вам должно нравиться программировать, чтобы получать удовольствие от ИТ учебы в настоящее время и в будущем от работы в ИТ! Чертовски приятно иметь работу, которая интересна и захватывает словно хобби! Иначе, возможно имеет смысл вам найти другое занятие по душе…

Естественно, каждый человек рано или поздно имеет тенденцию терять мотивацию. Практически каждый из нас нуждается периодически в “волшебном пенделе” ;) Рекомендую найти сообщество единомышленников среди изучающих ИТ и ментора из числа опытных разработчиков, которые могут оказать как моральную поддержку, так и дать практические подсказки, советы и помощь в освоении информационных технологий. Разработчики с опытом в свою очередь, оказывая помощь курсантам, могут избежать “выгорания” и прокачать свои навыки по управлению командой и проектом и вырасти до Лидера команды.

Через много лет я достиг своей цели – разработка программного обеспечения в классной ИТ компании в профессиональной команде!

А какова твоя цель?

### Я знаю, что ничего не знаю

Оглядываясь назад, я начал обобщать и фиксировать свой опыт.

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

Почему я точно знаю, какие знания и опыт требуется в ИТ?

Почему я смог выделить самое важное для юниоров из огромного количества информации?

Потому что я писал программы (Delphi, C, C++) и кодирую сейчас (Java, JavaScript, SQL) на нескольких языках программирования.

Потому что проектировал, программировал, тестировал, внедрял и поддерживал системы с различными технологиями:

REST Services, Web Services, Micro services, JSON, XML…

Для хранения данных использовал различные базы данных:

Oracle, MySQL, MariaDB, PostgreSQL, MongoDB, Cassandra, Redis…

Потому что мы используем самые современные средства разработки:

Jira, Redmine, GitLab, Git, Jenkins, TeamCity, IDEA, Eclipse и пр.

Потому что участвовал в десятке ИТ проектов для стартапов, электронной коммерции, банков, бизнеса в одиночку и в командах от 2 до 10 человек, продолжительностью от 3 месяцев до 3 лет, на роли рядового разработчика, ведущего разработчика или технического лидера.

Потому что у меня есть некоторый опыт фриланса и "домашние" ИТ проекты, на которых я изучаю незнакомые мне технологии.

Потому что я знаю и применяю современные методики разработки:

паттерны, рефакторинг, код ревью, юнит и интеграционное тестирование, основные методологии разработки: XP, Scrum.

Потому что помимо успешных проектов были и провалы, а на ошибках учатся.

Потому что имею несколько сертификатов по ИТ, значимые их них Sun Сertified Programmer for the Java 2 Platform (SCP) и Oracle PL/SQL Developer Certified Associate (OCA) – интересен факт, что Oracle проглотил солнце в 2009 году.

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

### Нужно бежать со всех ног, чтобы только оставаться на месте

Есть 2 "новости" для новичков в ИТ. Одна – хорошая, вторая – плохая:

• "Плохая новость" – уровень входа в ИТ за последнее десятилетие значительно вырос. Ранее в большинстве случаев требовалось знание одного языка программирования и навык кодирования. Сейчас ИТ компании даже к юниорам выдвигают ряд обязательных требований.

• "Хорошая новость" – некоторые ИТ специалисты по инерции игнорируют важные ИТ навыки. Вы же можете, начав с чистого листа, взять все самое лучшее в свой профессиональный арсенал.

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

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

У меня эти шаги заняли годы, ты пройдешь их за год – но придется приложить большие усилия.

Не существует "золотой пилюли" для успеха. С 2016 года я прежде всего для себя фиксировал в Wiki конспект ИТ технологий, методологий, инструментов и ссылок на полезные ресурсы. С 2017 года на основе этих материалов, с добавлением практических заданий, постепенно формирую курс, который повысит ИТ квалификацию и поможет открыть дверь в компанию твоей мечты или получить повышение на текущей должности, повысить рейт. Неоднократно материалы курса обновлялись и дополняются в настоящее время. На основе содержания курса сформирована книга, которая указывает ключевые направления профессионального роста для информационно-технологических специальностей и показывает всю современную "кухню" процесса разработки. Материалы курса и книги прежде всего ориентированы на разработчиков ПО, но будут несомненно полезны для тестеров, менеджеров, ИТ администраторов, дизайнеров, владельцев ИТ продуктов – всех участников разработки программного обеспечения.