[Перевод] Признаки настоящих программистов-сеньоров и методы их выслеживания в дикой природе

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

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

ycirzad4nhvnk9och3v7dtvkcdw.jpeg

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

Автор материала, перевод которого мы сегодня публикуем, говорит, что хочет рассказать о некоторых признаках, которые помогают отличить настоящего программиста-сеньора от программиста с «сеньорностью».

Парадигмы программирования


Принципы SOLID, объектно-ориентированное и функциональное программирование — это три парадигмы программирования, три методологии написания чистого кода, которые составляют значительную часть концептуальных подходов, стоящих за созданием программ.

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

Писать код может кто угодно — точно так же, как кто угодно может написать сообщение в мессенджере или короткий обзор книги на Amazon. Но подобные тексты нельзя поставить на один уровень с романами Стивена Кинга. Парадигмы программирования действуют как направляющая сила, стоящая за кодом, который пишут сеньоры. Это делает парадигмы похожими на сюжетные структуры, которым следуют авторы художественных произведений. Все языки пронизаны формулами. Разработчики-сеньоры понимают их на глубоком уровне, до которого джунам и мидлам ещё только предстоит дойти.

Способность создавать


Когда мы впервые приходим в мир циклов for и конструкций if else, мы задаём вопросы и пытаемся найти ответы на них в виде кода, который можно откуда-то скопировать и вставить в свой проект. Уровень понимания этого кода — это то, чем характеризуется квалификация джуниоров, которые только приступили к работе, и начинающих мидлов.

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

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

Объективная критика


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

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

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

Разница между хорошей программой и работающей программой


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

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

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

Способность учить


Посредственный учитель излагает. Хороший учитель объясняет. Выдающийся учитель показывает. Великий учитель вдохновляет.
Уильям Артур Уорд

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

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

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

Итоги


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

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

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

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

Уважаемые читатели! Если вы занимаетесь подбором кадров в сфере информационных технологий — просим рассказать нам о том, как вы «выслеживаете» сеньоров.

rw6vyn2bxx4usoqc39holmj2z8m.jpeg

© Habrahabr.ru