Уровень разработчика не обязательно определяется многолетним опытом программирования: «джун» вполне может быть старше «сеньора», — всё сводится к профессиональным навыкам. Это не означает, что старший разработчик должен быть специалистом во всём, но можно с уверенностью сказать, что навыки у него гораздо более развиты, чем у разработчиков младшего и среднего уровня.

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

Переведено в Alconost

Знания


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

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


Фото — Clem Onojeghuo, площадка Unsplash

Программирование


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

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

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

Как вычислить «джуна»


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

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

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

Как пишут код «сеньоры»


Глядя на код старшего разработчика, можно подумать: и это всё? А где остальное? Достаточно опытный разработчик пишет простой, понятный и, возможно, местами даже чересчур прямолинейный код — и это одно из самых важных качеств, если говорить о программировании. «Сеньор» следует принципу KISS, гласящему, что код должен быть простым и понятным: «Keep it simple, stupid»

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

Не программированием единым


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

Младшие разработчики, как правило, выполняют самые простые и не самые важные задачи; они не занимаются разработкой архитектуры. Разработчики среднего уровня тоже не разрабатывают решения, а просто выполняют задачи, однако их меньше контролируют — если задание довольно типовое. А вот «сеньоры» могут разработать приложение совершенно самостоятельно.

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

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

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

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

А вот в случае «джунов» не следует ожидать, что они смогут задавать нужные вопросы: у них недостаточно практики, поэтому ими должны руководить более опытные коллеги. Младшего разработчика следует обеспечить необходимыми ресурсами или хорошенько подтолкнуть в правильном направлении.

Переход на следующий уровень


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

От «джуна» — к «мидлу»


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

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

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

От «мидла» — к «сеньору»


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

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

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

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

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

Заключение


Разница между «джуном», «мидлом» и «сеньором» заключается не только в многолетнем опыте. Да, можно с уверенностью сказать, что у последнего навыки гораздо более развиты, чем у разработчиков младшего и среднего уровня. Но знание — не самый важный фактор.

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

«Джуну», чтобы расти дальше, нужно постараться научиться писать простой код и пройти через несколько полных циклов разработки. Чтобы подняться выше среднего уровня, нужно сосредоточиться на изучении чего-то большего, чем просто рутинные задачи по исправлению ошибок. Вы должны быть готовы брать на себя самые сложные задачи и полностью овладеть своим техническим стеком. Еще одна обязанность старшего разработчика — выручать менее опытных.

Напоследок процитирую Мартина Фаулера:

«Любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человеку»

О переводчике

Перевод статьи выполнен в Alconost.

Alconost занимается локализацией игр, приложений и сайтов на 70 языков. Переводчики-носители языка, лингвистическое тестирование, облачная платформа с API, непрерывная локализация, менеджеры проектов 24/7, любые форматы строковых ресурсов.

Мы также делаем рекламные и обучающие видеоролики — для сайтов, продающие, имиджевые, рекламные, обучающие, тизеры, эксплейнеры, трейлеры для Google Play и App Store.

Подробнее

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


  1. AlexUl
    15.08.2019 11:35

    Долго ждал подробного описания стадий «взросления» разработчика, а оказалось все упирается в софтскил.
    Но почему тогда от более опытных и крутых разработчиков звучит что важно понимать программу не на уровне кода, а на уровне взаимодействия этого кода с железом, принципов работы памяти, каким образом обрабатываются команды на уровне процессора и все такое прочее?

    Но знание — не самый важный фактор.

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

    код должен быть простым и понятным: «Keep it simple, stupid»
    На этом момента вспомнилось выражение не программиста скорее повара-шоумена Константина Ивлева: «Хочешь делать плохо, сначала научись делать хорошо».


    1. iit
      15.08.2019 12:59

      Тут скорее не о мягких навыках а скорее их комбинации с техническими.


      То есть по факту нужно знать
      1) Особенности работы платформы на которой работаешь начиная от мануалов заканчивая пониманием того что проходит "под капотом"
      2) Уметь писать код по паттернам и стандартам принятым для этой платформы
      3) Уметь правильно предсказать развитие проекта и построить архитектуру проекта наиболее правильным способом
      4) Уметь переводить бред заказчика в бизнес-процессы и бизнес-процессы в спецификации на основе которых собственно строить ТЗ + писать код + покрывать его тестами. Мало того еще желательно уметь проделать этот процесс в обратную сторону (реверс-инженерия)
      5) При всем этом нужно не быть "токсичным", уметь followup/feedback и минимальные навыки управления хотя-бы собой и обучения других. Уметь координировать работу всех остальных где то добрым словом а где добрым словом и пистоном
      6) И на сладкое понимать чем занимается контора и как оптимизировать её работу.


      То есть идеальный сферический senior в вакууме это Программист + Архитектор + Проектировщик + Управленец + Специалист в предметной области.


      На самом деле достаточно уметь выполнять хотя-бы 1-2 роли отлично, а остальные хоть как-то и уже все будут считать что ты и есть тот сейнер-помидор и вообще...


      Но нужно понимать что это только на конкретную компанию/предметную область.


      Например Senior JavaEE из банка внезапно может быть middle для галеры для студии с лендостками и wordpress, junior в 1C и полный нуль в gameDev или IOT.


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


      1. AlexUl
        15.08.2019 13:37

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

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


        1. iit
          15.08.2019 15:28

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


          Судя по всему на западе в принципе develop входит в навыки developer by default и рассматривается как должное в следствии чего в текстах статей этот момент не учитывается и при переводах теряеться. Что и вызывает немой вопрос — мол а писать код кто будет?!


          1. AlexUl
            15.08.2019 15:42

            Что и вызывает немой вопрос — мол а писать код кто будет?!

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


            1. iit
              16.08.2019 06:06

              Судя по результатам работы — качество не учитываться, код работает — работает, тесты проходит — проходит. Значит все ок.


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