Когда узкому специалисту становится скучно, на свет появляется универсал

Перевод статьи «A generalist is born when a specialist becomes bored».

Узкий специалист и универсал

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

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

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

Но тут есть один интересный момент.

На каком-то этапе универсал был узким специалистом. А когда этому узкому специалисту стало скучно, на свет появился универсал.

Первый язык универсала

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

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

Моим первым языком программирования был C#. Я страстно желал стать экспертом в нем, так что мой стол был завален соответствующими книгами. Как же я гордился своей книжной полкой! Я просматривал проекты open source (сколько находил) и даже принял посильное участие в одном или двух. В качестве C#-разработчика я провел семь лет и да, мне хочется думать, что я все-таки стал экспертом.

Но мое стремление к учебе, которое позволило мне стать экспертом в C#-разработке, привело и к другим последствиям.

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

Если взять для примера экосистему .NET, разработчику с несколькими годами опыта, желающему изучить нечто новое, приходится ждать, пока Microsoft выпустит новую версию Visual Studio. Временами случаются горько-сладкие моменты, когда Microsoft решает заменить прекрасно работающий, но слегка устаревший фреймворк другим, чуть более современным и чуть менее надежным.

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

Второй язык универсала

У меня это был Ruby. И это был просто глоток свежего воздуха. Конец власти Visual Studio! Больше не нужно писать полные сигнатуры функций с типами возвращаемых значений и параметров! Мои бедные пальцы наконец отдохнут! Динамическая типизация… как прекрасно! Все является выражением… потрясающе! Метапрограммирование… невероятно! Оковы спали!

Я помню это время как момент освобождения. Несмотря на то, что я был благодарен C# за солидную базу в объектно-ориентированном проектировании, теперь я был способен понять, что это излишне сложный язык. И я научился любить простоту.

Универсал ценит простоту

TDD и учебный цикл

Я расскажу вам о своем секретном оружии, помогающем мне в изучении новых языков. Это TDD (разработка через тестирование). Если вы знаете TDD и несколько его приемов, вы сможете изучить практически любой язык, используя одинаковый шаблон изучения. Просто напишите несколько кат, и вы будете схватывать все на лету. Это действительно просто.

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

5 стадий горя

Что касается моего четвертого языка, к моему ужасу, мне пришлось работать с JavaScript. Я не был его поклонником. Беспорядочный язык, до уровня которого мне пришлось опуститься после восхождения к потрясающим вершинам Clojure и ClojureScript.

С JavaScript я прошел все 5 стадий горя.

Первой было отрицание. «Это ненадолго, а позже я вернусь к настоящим языкам».

Второй стадией был гнев. «React…?! Facebook?! Что дало право этим паршивым разработчикам не считаться с четырьмя десятилетиями лучших практик GUI-разработки?!»

Затем был торг. «Хмм, Я могу писать на JavaScript с применением простых функций, как если бы это был Clojure…»

Потом пришла депрессия. «Моей карьере конец. Открою ресторан на пляже».

И, наконец, принятие. «Окей, я ошибался. JavaScript абсолютно прекрасен. Пришла пора обновить свой профиль в LinkedIn — теперь я JavaScript-разработчик

Выводы из прошлого опыта

Одно из преимуществ бытности универсалом — вы прекращаете уделять слишком много внимания поиску «единственно верного пути».

Теперь, когда я уже несколько лет проработал с JavaScript, я могу точно сказать, что опыт, полученный с C#, Ruby и Clojure сделал меня куда лучшим JavaScript-разработчиком. Я вижу, почему этот язык таков, каков он есть. Я не скучаю по «настоящим» объектам. Мне не нужны классы. Прототипное наследование прикольная штука и оно определенно меня не раздражает.

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

В общем, я легко воспринимаю все чудачества JavaScript. Они мне не досаждают.

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

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

Когда появляется что-то новое, я спрашиваю себя: «Поможет ли мне этот новый инструмент (подход | библиотека | фреймворк) писать код более качественно и быстро?» Если нет (а чаще именно нет), новинка меня не впечатляет.

Универсал знает много языков

Может ли универсал оставаться экспертом?

Допустим (для целей этой дискуссии), что для того чтобы стать экспертом по какому-либо языку, нужно 5 лет. Тогда у человека с 15 годами опыта было время овладеть в совершенстве тремя языками.

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

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

Больше того, если у вас есть 5 лет опыта работы с языком, для того чтобы разобраться в новейшем фреймворке вам потребуется один день — на создание игрушечного приложения. Год на это точно не уйдет. Языки и фреймворки меняются только инкрементально.

Универсалы выбирают более подходящие инструменты для работы

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

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

Чтобы стать универсалом, не нужны какие-то необыкновенные способности

В своем последнем проекте я имел возможность по-настоящему поработать с Docker и Nginx. Я бы не назвал себя экспертом, но могу сказать, что из всей команды я единственный, кто изъявил желание взяться и изучить эти темы.

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

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

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

Что вам терять?

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

[customscript]techrocks_custom_after_post_html[/customscript]

[customscript]techrocks_custom_script[/customscript]

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх