Привет! Меня зовут Рома Суранов. Свой путь в программировании я начал N лет назад — и да, продолжаю учиться по сей день. При этом с каждым годом учиться новому всё сложнее: трудно понять свои зоны роста, найти подходящий формат, да ещё и начинает давить эго «опытного специалиста».
В этой статье я пытаюсь разобраться, как прокачивать навыки, если ты уже не джун — и рассказываю, какой путь развития в профессии выбрал я.
По книжкам и в электричке
Я учился в Московском институте электронной техники на инженера-электронщика и на 4 курсе заинтересовался программированием. То есть не совсем программированием, а сайтами в целом. Тогда меня поразила информация, что можно купить домен за 100 рублей, хостинг за 100 рублей, и выложить свое творение во всеобщую паутину. Круто же Но, чтобы сделать сайт, нужно уметь программировать. Вот и пришлось разбираться в этих ваших языках программирования. Начал со стандартного стека на тот момент — php+js+html+css.
К слову, свободного времени было мало: очная учеба в институте, плюс первая работа для прохождения практики. Увлекательный мир разработки приходилось познавать прямо на работе, во время поездок в электричках и автобусах, а также в выходные. Не понимаю, если честно, откуда у меня было столько сил все успевать. Но я довольно увлекающийся человек — и если что-то меня заинтересовало, весь фокус устремляется именно туда.
В те времена школ программирования не было от слова совсем, информацию я собирал по крупицам, из книг и интернета. Нет, инфы было много, но какой? В большинстве это был sheet-code (привет Stack Overflow): копируешь кусок, вставляешь, вроде работает. Что-то понимаешь, что-то нет, и на этих примерах учишься.
Так я и перешёл в разработку. Стал делать сайтики на заказ знакомым и не только. В общем-то, классический фриланс.
Профессиональные открытия и курсы с торрента
После института надо было определиться, чем заниматься в жизни. Специальность у меня была хоть и техническая, но с программированием не связана. Но я любил делать сайты всей душой — и решил пойти работать прогером в местную web-студию во Владимире.
Там я начал понимать, что если код работает — это еще не значит, что он правильный. Разработчик — это, пожалуй, одна из самых творческих профессий. Количество возможных решений одной задачи подчас поражает воображение, настолько по-разному у людей работают мозги, и в хорошем плане, и не очень :)
Сейчас ситуация в корне изменилась: открылось множество оффлайн и онлайн-школ, как для детей, так и взрослых. Конкуренция в сфере сильно повысилась: джунов стало больше, их уровень в среднем стал выше чем раньше. Ведь сегодня можно пойти учиться и делать сразу «как надо», а не быть порождением stackoverflow. И я считаю, что это отлично — индустрия развивается, так и должно быть. Но, конечно, есть и минусы: предложений много, а какое выбрать — непонятно. Легко нарваться на некачественное обучение и потратить время и деньги впустую. Поэтому к выбору стоит подходить внимательно.
В общем, на своей первой фулл-тайм работе я еще больше увлекся программированием. Это были прекрасные времена, когда твой рост как специалиста происходит с космической скоростью. Я программировал на работе, после работы и по выходным. Скачивал курсы на торрентах (осуждаю) и обучался. В итоге за полтора года стал ведущим разрабом — и уже сам помогал коллегам с задачами.
Годы шли, и я четко осознал одну штуку: чем лучше спецом ты становишься, тем сложнее научиться новому (и стать еще лучше). Информация в интернете в основном для новичков, оно и понятно — закон спроса и предложения.
Но учиться новому и прокачивать себя как специалиста, я считаю, необходимо. Помимо повышения «стоимости» на рынке труда, мне кажется, важен и сам постоянный процесс обучения, «узнавания» нового, он дарит приятные эмоции и не дает мышлению «застояться». А еще новые навыки позволяют создавать более классные и глобальные вещи, положительно влиять на реальность других людей.
Снова в школу: курс «Python-разработчик»
У каждого, даже самого опытного специалиста, есть пробелы в знаниях — это нормально. Кто-то в течение своей карьеры углубляется в архитектуру кода, кто-то — в работу с БД, в приложения, в администрирование или работу с серверами. Не поймите меня неправильно: узким спецом быть хорошо, но рынок устроен по-другому. Найти узконаправленную работу всегда в разы сложней. Да и все сферы IT-разработки взаимосвязаны: пробел в одной области влечет за собой неоптимальные решения в другой.
У меня такие пробелы тоже были. Тогда я задумался — как же развиваться опытным ребятам? Я стал посматривать на онлайн-курсы; как раз недавно открылся Яндекс Практикум — и я устремил свой взор туда. Меня заинтересовал курс по Python: я давно хотел изучить другой язык программирования, чтобы расширить IT-кругозор, посмотреть, какие паттерны и подходы в разработке используют питонисты.
Другие платформы я не рассматривал. Во-первых, знал, что у ребят за плечами — бренд Яндекса, и ударить в грязь лицом нельзя, а значит, качество курса будет хорошее. Во-вторых, сама программа устроена так, что ты постоянно практикуешься, а твой наставник делает код-ревью. Такого взгляда со стороны часто не хватает, особенно опытным специалистам.
Я долго сомневался, идти на курс или нет. Во-первых, он все же рассчитан на новичков, а я уже вроде такой весь из себя опытный, «не по погонам» начинать с нуля. Тут я посоветовал бы (в первую очередь себе самому) немного усмирить свое ЭГО — оно мешает развиваться. Вообще это нередкая проблема в IT-среде — считать себя умнее других, и потому избегать любого фидбэка или возможности научиться новому.
Я все же решился пройти курс, и решающим аргументом стало его разнообразие и глубина. Конкретно этот курс — он больше про backend-разработку; там также есть темы про устройство сетей, работа с развертыванием среды, теория алгоритмов и.т.д. Я хотел, чтобы этот курс помог мне как опытному разработчику систематизировать знания в голове — и мои ожидания полностью оправдались. А ещё у меня был довольно строгий наставник, который придирался к каждой строчке кода :) Но я этому был только рад и многое для себя почерпнул — это тот самый «взгляд со стороны», который был мне нужен. Еще один бонус: я хотел начать решать алгоритмические задачи, но на большинстве платформ, как вы понимаете, php не котируется. В итоге этот пробел я заполнил — и спокойно пользуюсь питоном в таких случаях.
Как по мне, для новичков курс сложноват. Прям с полного нуля я бы не шел, лучше сначала все-таки подучить основы web-разработки самому, по доступным материалам из интернета, а то вопросы в чате про css и html, конечно, огорчали :)
Но мы учимся новому, только когда тяжело. Задача курса в первую очередь — научить думать и решать нестандартные задачи, как на настоящей работе. Поэтому иногда удивляют отзывы людей, жалующихся, что им не положили все на блюдечке – таким точно в IT не надо. Тут важен баланс: с одной стороны, материал должен быть максимально понятен, с другой — не раскрыт полностью, чтобы научить анализировать информацию самому... Мне кажется, у Практикума получается этот баланс соблюсти.
И вновь студент: курсы для разработчиков «с опытом»
Что было дальше? Через несколько месяцев после выпуска я увидел, что у Практикума начали появляться курсы для разработчиков с опытом. Один из них — «Алгоритмы и структуры данных». Он длился всего 4 месяца, и его основой была именно практика. Для прохождения было необходимо решить от 60 до 100 задач, плюс теория.
Так я решился на второй курс. Были и сомнения в духе: «Наверное, я единственный программист на Земле, который не знает алгоритмы, а все нормальные разработчики еще в детстве упали в чан с алгоритмами». Каково же было мое удивление, когда я увидел, что 90% студентов нашего курса — это опытные технари со стажем. Просто в свое время не упавшие в чан с алгоритмами, как и я :)
На тот момент аналогов у других платформ не было. Да, есть много информации по этой теме, но она не структурирована. К тому же, обучение в Практикуме заточено на прохождение алгоритмических собеседований в IT-компании. Однозначно могу сказать, что после прохождения курса я стал лучше соображать. На мой взгляд, такие фундаментальные знания наиболее важны для развития разработчика: технологии меняются постоянно, а алгоритмическая подготовка актуальна будет всегда, и поможет легко осваивать новые инструменты для работы.
Сейчас я работаю в золотодобывающей компании, и переоценить важность полученных знаний с двух курсов тяжело. IT-решения стали проще, оптимальнее и эффективней. Архитектура кода более структурирована и логична. Какие-то паттерны и приемы из питона пригодились и в php, например, те же декораторы. А еще мама говорит, что я стал очень умный, а у меня нет причин ей не верить. Кстати, в своей предыдущей статье я рассказал на конкретном примере, как применил новые знания по алгоритмам на практике.
Закончить хотелось бы следующей мыслью. Самые надежные инвестиции — это инвестиции в себя, в них точно никогда не прогоришь. В этом я опытный инвестор :) Поэтому сейчас прохожу уже третий курс: «Go-разработчик». Давно хотел поработать с компилируемым и многопоточным языком, да и Golang сейчас на слуху, вот и посмотрим, что это за «зверь».
Конечно, одним курсом я не ограничиваюсь: постоянно погружаюсь, смотрю видео и читаю статьи по теме. Вот несколько последних ресурсов о разработке на Go, которыми хочется поделиться:
Uproger: Написание эффективных для памяти и процессора Go-структур, оптимизированных для работы с ЦП 2023;
Herberto Graca: DDD, Hexagonal, Onion, Clean, CQRS, … How I put it all together;
HighLoad Channel: Go To Memory. Разбираем аллокатор Go по полочкам
Мы работаем в IT сфере, где все меняется очень быстро — и умение находить возможности для саморазвития, мне кажется, становится одним из важнейших скиллов. И, как я писал в начале статьи, делать это с получением опыта становится все сложней. Интересно узнать, как вы решаете проблему дальнейшего развития? Делитесь в комментариях :)
volchenkodmitriy
Мне в свое время сложно было просто понять чего именно хочет работодатель от специалиста, обеспечивающего работу компьютеров в компании. Например году в 2010 было много вакансий типа Системный Администратор - Программист 1С)). Когда поработал в серьезной организации с разделением технической поддержки на линии - стало хотя-бы понятно куда можно двигаться и чему для этого нужно учиться.