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

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

Чтобы добавить немного контекста, я работал с C #, visual basic, java, PL / SQL, T-SQL, Clipper, Power Builder, Kotlin, Dart и Clojure, просто чтобы назвать языки. Излишне говорить, что я ни на одном из них не специализировался. Тем не менее, я всегда мог выполнить свою работу. Только через 5 или 6 лет я решил стать разработчиком Android и попытался сосредоточиться на этом. Но потом мне пришлось столкнуться с множеством ситуаций, когда кроссплатформенность была лучшим выбором. Что же тогда делать? Должен ли я внести свой вклад в Android и оставить iOS без присмотра? Это был не вариант, поэтому, даже будучи мобильным инженером, я не мог сосредоточиться на конкретной платформе. Я уже создал полноценные мобильные приложения с использованием родных Android, Xamarin и Flutter. Недавно я даже начал работать с Clojure, функциональным языком, отличным от всего, к чему я привык.

И меня всегда преследовало сомнение: Должен ли я быть специалистом в чем-то конкретном?

Таким образом, вы можете видеть, что, фактически не принимая решения, мой путь всегда был склонен к тому, чтобы стать универсалом. И меня всегда преследовало сомнение: Должен ли я быть специалистом в чем-то конкретном? Следует ли мне изучать все уродливые внутренности Android и все, что выпускается каждый год? Должен ли я знать наизусть каждый виджет Flutter и как им правильно пользоваться? Стоит ли мне погрузиться в суть и математические теории функционального программирования? И если вы зашли так далеко, скорее всего, у вас могут возникнуть те же сомнения. (Не) к счастью, нет правильного или неправильного ответа. Все, что я могу сказать, это то, что до сих пор это работало для меня очень хорошо, и я могу сказать вам, почему.

Преимущества быть универсалом

Жизнь не скучна!

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

Увидеть картину в целом

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

Участвуйте в различных обсуждениях

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

Свобода выбора инструментов

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

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

Несколько советов для коллег-универсалов

Избегайте слишком мелкого

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

Создайте отличный фундамент

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

Углубляйтесь в самое главное

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

Будьте прагматичны

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

Обратная сторона

Вы (вероятно) не станете технической рок-звездой

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

Компании, ориентированные на специалистов

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

Некоторые проблемы все же потребуют специалиста

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

Я могу говорить только о своем опыте, и я должен сказать, что я научился ЛЮБИТЬ быть универсалом! Это привело меня туда, где я нахожусь сегодня, я работаю в одном из лучших мест, обладая одними из лучших талантов, которые я когда-либо встречал. Это даже позволило мне попробовать это как предпринимателю несколько лет назад. И все это для того, чтобы не бояться новых технологий и новых вызовов.