Первым делом я хочу объяснить главные термины этой статьи.
Основным языком мы будем называть тот, которому разработчик в определенный момент времени отдает предпочтение. Все остальные языки – дополнительные.
Конечно же, время от времени основной язык может меняться – таких примеров я видел много и считаю, что это нормальное явление в карьере программиста.
Противники идеи «разработчика-полиглота» чаще всего аргументируют свою позицию тем, что за знание второго, третьего... n-ого языка приходится «расплачиваться». Мол, каждый новый выученный язык делает вас более слабым экспертом в основном. Т.е. вместо того, чтобы обогащать свои знания и углублять их, вам придется тратить время на освоение нового языка.
Я с этим мнением не согласен и предлагаю сделать сравнение со спортом. Согласитесь, занятия несколькими видами спорта могут улучшить ваши достижения в одном из них. Понятно, что везде медали получить нереально, да и навыки игры в дартс не помогут в плавании. Но для скалолаза, например, йога будет очень полезна, потому что она поможет улучшить гибкость, выносливость и умение сохранять равновесие. Получается, что благодаря йоге можно стать лучшим скалолазом, чем без нее.
Мне кажется, что освоение новых языков часто тоже улучшает уже имеющиеся навыки разработчика.
Зная несколько ЯП, вы значительно улучшаете свой арсенал и становитесь способным смотреть на поставленные задачи с разных сторон. Я могу провести параллель с отвертками. Посмотрите на это изображение:
Кажется, что все винты идентичны и для того, чтобы их закручивать, хватит одной отвертки с крестообразной головкой. И это действительно так: в целом, можно вполне обойтись одной отверткой. Но некоторые винты все равно будет сложнее затягивать, чем другие.
И если вы зайдете в строительный магазин, то обнаружите, что крестообразные отвертки, как и винты, бывают разными. А консультант подскажет, какая для чего лучше подходит. Таким образом, несмотря на внешнюю схожесть, отвертки нельзя считать полностью взаимозаменяемыми.
Так же и с языками программирования: дополнительные знания помогут вам лучше (быстрее, с меньшими усилиями, оптимальнее и т.д.) решать поставленные задачи.
Скажу одно – я с такими «ценниками» не сталкивался. Можно ли знать два языка на одинаково превосходном уровне? Вряд ли. Но разве вам это нужно? Зачем?
Углубите ли вы благодаря дополнительному языку знания в основном? Конечно, я в этом даже не сомневаюсь. Изучая второй язык, вы будете сравнивать их, что заставит быть более внимательным и вдумчивым. Вы станете анализировать отличия и разбираться глубже, почему что-то работает именно так, и какой вариант лучше.
Подводя итог, расскажу о примере из реальной жизни. Раньше я использовал инструмент командной строки, созданный на языке Python, но когда приходилось устанавливать его на новом устройстве, возникали проблемы, и обновления их не решали, а только усугубляли.
Зная язык Go, я смог понять, что он в моей ситуации является более подходящим, так как дает возможность компилировать свои артефакты в отдельный двоичный файл, который потом будет запускаться на всех предусмотренных машинах. Поэтому я решил портировать CLI с языка Python на Go. Благодаря новой версии проблема смены сред выполнения и сторонних зависимостей пропала.
Это хороший пример того, что не все инструменты одинаково подходят для решения разных задач. И чтобы у вас была возможность выбирать лучший, нужно учить дополнительные языки, т.е. стать программистом-полиглотом.