Когда вы работаете разработчиком ПО и ежедневно пользуетесь одним языком программирования, легко попасть в пузырь этого языка. Я хочу показать, как выход из зоны комфорта, изучение новых языков и парадигм помогло мне вырасти как разработчику.
За годы работы я совершил переход от фронтенд-разработчика к full-stack и даже попробовал профессионально создавать игры! В это время я руководил и выполнял функции ментора разработчиков с разным уровнем опыта.
Ваш основной язык программирования
Существуют десятки языков программирования. В большинстве случаев мы, программисты, профессионально осваиваем только один. Зачастую это первый язык, которому нас научили в вузе или на буткемпе. Иногда случается, что свой любимый язык порекомендовал нам более опытный друг. А может быть, мы мечтали о создании конкретного типа ПО, например, видеоигр, и выбрали самую популярную технологию в этой сфере. После получения первой работы уровень опыта взлетает до небес.
Для меня основным языком был и остаётся JavaScript. Это был не первый мой язык, но он был самым доступным для меня в старшей школе: я мог писать на нём и запускать код, по сути, на любом компьютере без специального компилятора или IDE.
Выход из зоны комфорта
Учась в старшей школе, я приобретал всё больше опыта в создании множества хобби-проектов, от простых игр до более сложных, например двухмерного игрового движка в виде приложения на Electron.
Из-за некоторых преподавателей программирования у меня сложилось ощущение, что JavaScript — это «ненастоящий» язык программирования. Кроме того, это был JavaScript во фронтенде, то есть перемещение всяких div и кнопочек, а не реальные алгоритмы.
Примерно в то же время один из близких друзей познакомил меня с Elixir. Помню, как я неделю подряд запоем просматривал доклады о нём с конференций. Они так меня вдохновили. Это был язык бэкенда, а для меня естественной средой был фронтенд, поэтому в то время освоить его оказалось непросто.
К счастью, функциональное программирование осталось со мной.
Так начался цикл восхищения новыми языками. За долгие годы я программировал в качестве хобби или профессионально на Elm, ReScript (ранее известном как ReasonML или BuckleScript), OCaml, Haskell, Scala.
Я по-прежнему практически ежедневно работаю с JavaScript, но изучение множества новых концепций наподобие иммутабельности, statelessness, монад, алгебраических типов данных и модели акторов упростило решение задач. Это даже помогло мне сделать отличный доклад на международной конференции!
А поскольку некоторые концепции популярны в сообществах разработчиков на других языках, это познакомило меня со множеством архитектур и паттернов программирования, используемых в различных системах, например, с предметно-ориентированным проектированием (DDD, Domain-Driven design) и с теорией категорий.
Возвращаясь к уровню джуна
Перенесёмся в март 2022 года, когда я уволился из jam.dev с должности руководителя разработки.
Я решил, что мне нужен перерыв, чтобы понять, чем следующим заниматься в жизни.
С первых дней в программировании меня всегда восхищали видеоигры и компьютерная графика. В старшей школе я экспериментировал с OpenGL, позже с трассировкой лучей, а на прошлое Рождество в качестве хобби-проекта приступил к реализации Physically Based Renderer на Vulkan и Rust.
В первый месяц моего отдыха я вернулся к этому проекту на Vulkan и Rust. Работая над ним, я пришёл к выводу, что дальше я хочу работать программистом графики. Но если у вас нет опыта в этой области, то это работа не для начинающих. А поскольку разработка игр — это самое близкое, что я мог представить, я решил устроиться в компанию-разработчика игр из Кракова, в котором я живу.
Я поспрашивал своих друзей об учебных материалах, и сразу же погрузился в мир C++ и Unreal Engine! За две недели я прошёл курс Тома Лумана по C++ движка Unreal Engine (потрясающий курс, крайне рекомендую его, если вы хотите повысить свой уровень знания Unreal Engine). Я много читал о C++ и среде разработки игр, создал несколько простых игр с SDL, и спустя два с половиной месяца после увольнения я начал свой путь программиста C++ движка Unreal Engine.
Я ждал, что меня примут на позицию джуниора, а зарплата меня не особо волновала. Как ни удивительно, по требованиям я подошёл на должность мидла! Оказалось, что общие знания программирования и годы опыта обеспечили довольно неплохое резюме.
Я больше не работаю в той компании. После испытательного срока я не стал возобновлять договор. Теперь я не стремлюсь к карьере программиста графики, но это уже история для отдельной статьи.
Пробуйте что-то новое!
Совершенно нормально углублять свои знания в одной технологии или в одном языке программирования. Вполне приемлемо иметь работу «9 на 5», позволяющую оплачивать все расходы.
Но если вы намереваетесь повышать свой уровень, я крайне рекомендую пробовать что-то новое, чтобы расширять свой кругозор.
Если вы пишете на JavaScript, попробуйте какой-нибудь функциональный язык типа Elixir или ReScript. Если вы уже знакомы с высокоуровневыми языками, где есть сборка мусора, попробуйте что-то низкоуровневое, наподобие Rust или даже C/C++. Экспериментируйте с разными моделями многопоточной обработки, например, с корутинами или с моделью акторов.
Вам необязательно менять работу, необязательно выпускать продукты на основе изучаемых технологий. Пробуйте создавать что-то новое. Позже вы сами поблагодарите себя.