Приводим перевод статьи Скотта Шиппа, программного инженера в Сиэтле.
Слова менеджеров или рекрутеров о том, что любого хорошего инженера можно заменить другим хорошим инженером, я слышал так часто, что уже не могу игнорировать. “Правда, – добавляют они, – ведущий инженер выбрал F# для этого проекта, а есть не так много F#-разработчиков. Но ведь любой неплохой разработчик с парой лет опыта за плечами будет так же хорош”.
Другая мысль, которую тоже часто приходится слышать, это что-то вроде: «О, я знаю, он работает над фронтендом, но сейчас нам нужно, чтобы он занялся бэкендом. Он хороший разработчик, для него это не составит труда».
Если вы в это верите, у меня есть для вас предложение… Я создам очередной стартап-единорог, продающий лед эскимосам, который принесет миллиард прибыли! Главное, сделайте взнос прямо сразу.
Серьезно, сама идея того, что «хорошие» программные инженеры взаимозаменяемы, является неверной. Я иногда задумываюсь о работе программиста. Стоит мне написать в своем резюме, что у меня есть «проверенный послужной список для расширения новыми технологиями» и – бум! – я могу пойти куда угодно?
Не думаю, что я могу это объяснить, но давайте рассмотрим языковую разницу в качестве отправной точки. Я запускал в производство коды на разных языках — от Scala до C#, до Java и JavaScript. Даже несмотря на то что я способен вникнуть в любой С-подобный синтаксис за несколько недель (что касается других языков, то потребуется и того больше времени), я не настолько глуп, чтобы опрометчиво начать копаться в исходном коде программы на новом для себя языке.
Как насчет производственного или делового аспекта? Я работал в здравоохранении, электронной коммерции, образовании и телекоммуникациях. Могу ли я считать себя достаточно квалифицированным для работы в социальных медиа? Как насчет производства? Авиакосмонавтики? Криптовалют? Насколько я могу растянуть воображение? То же самое касается ситуации, когда меня просят о переходе от web к мобильным или десктопным версиям или интернету вещей.
Пример из собственного опыта
Позвольте добавить маленькую историю. Прошлым летом, работая на полную ставку бэкенд-инженером веб-сервисов на Java, я также работал в команде, реализовывавшей мобильное приложение в фреймворке Ionic, который является синтезом Angular, TypeScript и нескольких пользовательских библиотек. Почти до конца 8-месячного проекта я не чувствовал себя комфортно, работая с Ionic/Angular/TypeScript. «Комфортно» – это вообще сильно сказано, конечно. У меня так и не исчезло странное ощущение, что мне нужно сделать поля в контроллере публичными просто потому что им нужно отображаться, или что константы должны иметь такие же имена, как и остальные переменные.
Кстати, если вы хотите иметь статическую типизацию в JavaScript, вы скоро обнаружите, что не можете переносить ее очень далеко. Однако мне нравились сабскрайберы RxJs, которые мы использовали.
Мне никогда не приходило в голову, что теперь я смогу называть себя TypeScript или мобильным разработчиком. Это не из какого-то языкового снобизма. Дело в опыте: восьми месяцев недостаточно, чтобы делать такие заявления. И держу пари, что любой, работавший программистом на полную ставку, с этим согласится.
Разработчик, посвятивший пару лет какому-то языку, сможет думать на этом языке без усилий. У него в голове уже открыт доступ ко всем ресурсам, необходимым для того чтобы заставить все работать и перейти к следующему заданию. Он знает, как устроен язык, и может с легкостью объединить стандартные и сторонние библиотеки в единый новый функционал, который подходит для решения насущной проблемы, как ключ к замку. Но не зная о доступных ресурсах, человек будет заново изобретать велосипед или вообще растеряется.
В каждом языке есть свои идиомы, инструменты для управления сборкой и зависимостями, фреймворки, библиотеки, онлайн-сообщества, IDE и много других вещей, которые гораздо больше влияют на ежедневную работу программиста, чем мы думаем.
Эй, но ведь это же одно и то же, верно? Я имею в виду, какая разница между разработчиками на C# и C++? Решетки, плюсики, это ж все пустое. Они неважны, их вообще можно отбросить!
Я не говорю, что никто никогда не должен переходить на другой язык, в другую сферу или на другое устройство. Я только хочу сказать, что программисты все разные. Для команды, которая пишет приложение преимущественно на F#, мой опыт с Java почти бесполезен, даже если я провел достаточное количество времени работая со Scala. Я просто говорю, что мы не можем собрать всех «хороших разработчиков» и случайным образом рассовать их по разным командам следуя прихоти менеджера. Я настаиваю на том, что нельзя считать всех «хороших» разработчиков взаимозаменяемыми.
Миф о взаимозаменяемых разработчиках ошибочен. Пусть между нами будут различия и пусть место в команде получает тот, кто лучше всего подходит для этой роли!
***
Подписывайтесь на наш канал в Telegram!
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]