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

Они не получают обратной связи

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

Плохой вариант при получении фидбека у вас внутри включается такой монолог: «Да что он о себе возомнил, у меня уже пять лет опыта работы и куча запущенных проектов, а он мне пишет о какой-то неправильной обработке формы? Я уже достаточно хорош и не нуждаюсь ни в чьих советах!».

Однако, любая обратная связь должна натолкнуть вас на размышления о том: как же можно улучшить в будущем то, что я делаю, чтобы даже это незначительное замечание больше не всплывало.

Вот как правильно это делать:

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

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

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

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

Они не задают вопросов

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

Но это же огромный и ценный опыт, а единственный вариант добыть эти знания из головы другого программиста – просто спросить. Конечно, тут приходится преодолевать целую вереницу психологических преград, начиная с природной застенчивости разработчиков и заканчивая постоянной занятостью кодированием. Многим кажется, что если отрывать коллегу от работы и спрашивать его, то на тебя могут подумать: «как же мне надоел этот незнайка, сиди и сам разбирайся!», однако, все обстоит совсем иначе. Любой хороший программист будет рад раскрыть свои гениальные наработки и обучить этому других, стоит только попросить об этом. Можно стараться все решать самостоятельно и доходить «своей головой», только часто это оборачивается тем, что к дедлайну у вас не будет нужной информации.

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

Они боятся сложных задач

Многие разработчики застревают в определенной колее (язык программирования, стек, область решаемых задач) и к сожалению, этому подвержены очень многие. Объясняется это просто: вначале очень тяжело добиться приемлемого уровня владения нужной технологией, требуется долгие часы изучения документации и отработки навыков, но постепенно решение задач сводится до автоматизма, код легко и просто пишется. Появляется большая гордость, что ты преодолел тяжелый период обучения и теперь крут, а тебе еще и платят хорошо. В общем, мотивации брать новые задачи совсем не остается.

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

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

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

Они никогда не работают над своими собственными проектами

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

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

Они никогда не меняют роли или компании

Когда вы меняете роли в компании или просто меняете место работы, то случаются следующие вещи:

  • У вас появляются новые коллеги, которые могут научить многим интересным вещам;

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

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

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

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

Они не меняют языки программирования

Очень многие начинающие, да и опытные программисты упускают потрясающие возможности к росту, когда сильно привязываются к одному языку программирования и считают, что лучше просто не существует. Язык программирования всего лишь инструмент для решения определенных задач. Если C++ разработчик ненавидит JavaScript, то он никогда не сможет оценить простоту создания фронтенд-приложения, которое отлично работает в браузере, хотя сам плюсовик может создавать невероятно быстрые низкоуровневые приложения для какого-нибудь микроконтроллера. Но этим самым он ограничивает свое видение.

Даже я, когда после долгих лет программирования на PHP начал постепенно изучать JavaScript, а потом и TypeScript, то мне открылись огромные преимущества строгой типизации, которые позволили начать эффективнее делать приложения на PHP. До этого я не мог понять зачем все эти сложности и лишний код.

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

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

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

Комментарии (16)


  1. Myclass
    24.07.2023 06:20
    +2

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


    1. Rumantic Автор
      24.07.2023 06:20
      -1

      Оставаться "просто художником", что это как не отсутствие роста? Просто хобби для души.

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


      1. Krouler7
        24.07.2023 06:20
        +3

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

        Да и потом стоит все же различать техническое направление и искусство. Художник художнику рознь. И по факту они все на одном плато.


      1. vau
        24.07.2023 06:20
        +1

        Даже если меч понадобится один раз в жизни...


      1. Myclass
        24.07.2023 06:20
        +2

        Профессионал деньги зарабатывает

        Вы сами даёте понять, что для вас есть рост. Простое - зарабатывать деньги. А есть миллионы людей - успешных и менее, которые любят своё дело, но не только деньги есть и были для них мотиватор. Ничего плохого в этом не вижу, но успех и рост не только в деньгах отражается. Уверен, что пользуетесь софтом из open source. И многие из авторов есть профессионалы, но ни в первую очередь зарабатывания денег. Деньги - хоть и есть важная часть нашей жизни, но не только в них и их количестве есть смысл роста или взросления. Но это понимается позже.


  1. forthuse
    24.07.2023 06:20

    Они боятся сложных задач

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


  1. dsh2dsh
    24.07.2023 06:20
    +5

    кто способен сохранять темп и учиться новому – получают все сливки

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


    1. Rumantic Автор
      24.07.2023 06:20
      +1

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


      1. hVostt
        24.07.2023 06:20

        Вообще тут кривая. Сначала радуешься тому, что "оно работает!". Потом занимаешься вылизыванием. Потом набираешься опыта и вместо вылизывания начинаешь решать задачи. Когда каждая строка кода имеет практический смысл. А код начинает быть качественным не потому что "так надо" или "так правильные пацаны пишут", а потому что действительно понимаешь, зачем нужен такой код, трезво оцениваешь выхлоп, затраты и перспективу.


  1. laatoo
    24.07.2023 06:20
    +1

    когда после долгих лет программирования на PHP начал постепенно изучать JavaScript, а потом и TypeScript, то мне открылись огромные преимущества строгой типизации, которые позволили начать эффективнее делать приложения на PHP

    прийти из php в js и удивиться строгой типизации? )
    в хаосе js'овых костылей научиться работать эффективнее в php?

    удивительный парень, удивительный пример


    1. Rumantic Автор
      24.07.2023 06:20

      Typescript научил следовать типизации.


  1. amarkevich
    24.07.2023 06:20

    Они не меняют языки программирования

    а основной уже до конца освоили? попробовали другие фреймворки? может так случится, что по верхам понимание есть, а суть не понимают


    1. Rumantic Автор
      24.07.2023 06:20

      Понятно, что крайности всегда есть.

      И лучше совсем уж сначала математические модели уметь строить и понимать по Кнуту, чтобы совсем кошерно было.


      1. hVostt
        24.07.2023 06:20

        Должны быть причины для смены языка. Само по себе умение написать hello world на 10 языках имеет примерно ноль смысла. Очень полезно перейти с одной нишевой вертикали на другую. Например из PHP на какой-нибудь enterprise ЯП, и обратно. Если захочется конечно :)


  1. mikronavt
    24.07.2023 06:20
    +1

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

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

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


    1. Myclass
      24.07.2023 06:20

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