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

это-не-полный-стек-dev-meme.jpg

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

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

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

Текст на скриншоте на испанском, но написано примерно так:

Моим айтишникам или ИТ-клиенту, который меня читает. Если вы ищете этот профиль: Java + Python + PHP + …. и т.д

Это НЕ FullStack Developer
Это ВЕСЬ ИТ-отдел

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

Разогрев…

Скажем так: вы только начинаете в мире программирования и слышали, что Python — очень дружелюбный язык для начала. Через некоторое время вы решаете перейти на более академический путь (курсы веб-разработки или дипломная работа) и начинаете с самых основ: C, C++ или Java. Затем вы изучите некоторые основные алгоритмы сортировки и поиска, а также некоторые основные структуры данных, такие как массивы, векторы, списки и карты/словари. На некоторых более высоких уровнях, возможно, вы увидите бинарные деревья. А как насчет сохранения данных? Непосредственно в файловую систему в виде двоичных файлов. Что насчет пользовательского интерфейса? Старомодный Терминал/DOS будет работать нормально.

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

Паническая атака!

Итак, вы заходите на LinkedIn (или на любую другую платформу по трудоустройству) и находите что-то вроде этого:

«Мы ищем разработчика программного обеспечения со знанием:

  • HTML5/CSS3
  • ReactJS или угловой
  • NodeJS + MongoDB
  • питон
  • Java/Скала/Котлин
  • MySQL/ПостгресSQL
  • Unix-серверы
  • Git и CI
  • Модульные и интеграционные тесты
  • Системы с высокой масштабируемостью и доступностью
  • Шаблоны проектирования"

Несмотря на то, что вы приложили столько усилий, вы едва знаете Python (и очень базовые знания). Здесь вы начинаете делиться сообщениями, о которых я говорил в начале:

  • "Это не просто разработчик, это целая команда"
  • "Вы не можете знать все эти технологии"
  • "Они хотят нанять одного разработчика, чтобы он работал как пятеро!"

Остынь, чувак!

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

Во-первых, несколько запрашиваемых технологий дополняют друг друга, поэтому знать значительное их количество вовсе не невозможно. Если в объявлении о приеме на работу будет указано, скажем, 20 разных языков программирования… окей, это кажется сложным. Но если 4 из этих технологий — это языки программирования, 3 — передовой опыт разработки, 2 — механизмы баз данных, а остальные — просто инструменты, ситуация совершенно иная.

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

Я имею в виду, что тот факт, что вы знаете только то, как сделать CRUD-систему для управления запасами, которая сохраняет данные в двоичных файлах с помощью C++, является лишь следствием небольшого пути, который вы прошли.

Реальные факты (один из многих)

В моем конкретном случае я начал изучать программирование как самообучение. Сначала на Python, потом на Java. Чтобы улучшить свой инструментарий для поиска работы, я сделал несколько курсов программирования: Java Web + MySQL + Introduction to Object-Oriented Programming. Веб-курс Java включает в себя несколько занятий по Hibernate ORM и Struts Framework (к тому времени это уже был старый фреймворк).

На тот момент мои знания ограничивались:

  • HTML
  • CSS
  • Java (Struts + Hibernate)
  • MySQL

Затем я получил свою первую работу в качестве Java-разработчика. Технический стек компании немного отличался от того, что я уже знал, поэтому мне пришлось изучить Spring, DB2 (еще один движок базы данных), jQuery, SVN (контроль версий) и Jira. Благодаря этому опыту я укрепил имеющуюся основу и добавил в свой стек новые технологии: Spring и DB2.

  • HTML/CSS/JavaScript
  • jQuery
  • Java (весна, Struts, Hibernate)
  • MySQL / DB2
  • Джира
  • СВН

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

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

Значит ли это, что я знаю все эти технологии? Нисколько! Но с уверенностью могу сказать, что знаю и умею работать со всеми технологиями, о которых упоминал в начале статьи.

Последние мысли

Моя история не исключение из правил, наоборот, я считаю себя среднестатистическим инженером-программистом, одним из многих. Я начал работать с Java, как мог бы начать работать с NodeJS, Python или .Net. Пожалуйста, не считайте меня исключительным случаем: нет ничего более далекого от истины. Любой разработчик достигает точки в своей карьере, когда он знает интересное количество технологий.

Не расстраивайтесь из-за того, что не знаете даже 10% того, что требуется в описании работы разработчика/инженера программного обеспечения, и не позволяйте этому мотивировать вас обескураживать других, публикуя мемы или картинки, говорящие, что все это невозможно. Это не так. Воспринимайте эти должностные инструкции как руководство, как дорожную карту, как то, чему нужно научиться, чтобы вы могли стать тем разработчиком, которым хотите быть. Превратите этот список «недостижимых» требований в свою цель, и вы окажетесь там, даже не заметив этого.

Это возможно. Очень возможно.

Спасибо за чтение!