Перевод статьи «The Polyglot Developer».
Лично я убежден, что каждый программист должен знать больше одного языка программирования. То есть, если мы говорим о языках программирования, разработчик должен быть полиглотом.
Основной и вспомогательный языки
Давайте сразу проясним термины, которыми будем оперировать в этой статье.
Я совершенно уверен, что в любой отдельный момент времени у каждого разработчика есть какой-то один язык, которому он отдает предпочтение. Этот язык я называю основным. Любые языки помимо основного я буду называть вспомогательными.
Конечно, на протяжении своей карьеры разработчик может менять свой основной язык (и не раз). Я видел множество примеров таких изменений и думаю, что это вполне нормально.
Экспертиза
В дискуссиях о разработчиках-полиглотах часто приводят довод, что за знание второго языка разработчику приходится «расплачиваться». Некоторые люди убеждены, что изучение каждого нового языка уменьшает вашу экспертизу в основном. Сторонники этой идеи исходят из того, что на изучение каждого нового языка тратится время, и это время вы уже не сможете потратить на приобретение знаний о своем основном языке.
Мне этот ход умозаключений кажется ошибочным. У меня вообще напрашивается другая аналогия: спорт. Известно, что занятие одним видом спорта улучшает ваши достижения в другом. Разумеется, речь не идет о том, что вы сможете выиграть золотые медали в обоих видах, да и дартс вряд ли сделает вас лучшим пловцом. С другой стороны, если вы скалолаз, то йога поможет вам развить гибкость и умение удерживать равновесие. Таким образом, занятия йогой сделают вас лучшим скалолазом, чем вы были бы без них.
Я думаю, что изучение каждого дополнительного языка также часто улучшает ваши навыки в других известных вам языках.
Более широкий набор инструментов
Кроме того, знание нескольких языков программирования существенно улучшает ваш арсенал разработчика. Оно расширяет ваши горизонты и позволяет смотреть на определенные вещи с разных точек зрения.
Возьмем пример из повседневности. Если вы когда-либо пользовались отверткой, вы знакомы с крестообразными головками винтов. На первый взгляд все винты с крестообразными головками одинаковы и кажется, что их все можно закручивать одной отверткой. Да, бывает, что вам сложно затянуть или открутить какой-то винт, но в целом одной отвертки вам хватает.
Но вот однажды вы заходите в магазин с инструментами, разглядываете все эти прекрасные отверточки и обнаруживаете, что крестообразные отвертки бывают разные. Вы видите, что та отвертка, которая у вас уже есть, это Philips (PH), и решаете купить ее сестру-двойняшку Pozidriv (PZ). И тут внезапно оказывается, что для каких-то винтов лучше подходит одна, а для каких-то — другая. Они выглядят одинаково, но они не взаимозаменяемы. (Если вам было любопытно, что означают буквы PH и PZ на ваших отвертках — теперь вы это знаете).
Дополнительные знания и дополнительный инструмент позволят вам лучше справиться с задачей в следующий раз, когда вам понадобится закрутить винт с крестообразной головкой.
То же самое касается и языков программирования.
Вам не придется расплачиваться за дополнительные знания
Итак, лично я не вижу ценника на изучении дополнительного языка программирования. Будете ли вы одинаково превосходно знать оба языка? Вероятно, нет, но вряд ли вы ставите перед собой такую цель. Узнаете ли вы что-то новое о своем основном языке? Я абсолютно уверен в этом. Изучение нового языка заставит вас обращать внимание на разницу между ним и вашим основным языком. А это, в свою очередь, пробудит ваше любопытство. Вам станет интересно, почему что-то в новом языке делается по-другому и что это дает.
В заключение приведу пример из жизни. Я пользовался одним инструментом командной строки, написанным на Python. Каждый раз при установке этого инструмента на новой машине возникали проблемы, и с каждым обновлением количество проблем возрастало.
Если в вашем наборе инструментов есть язык Go, вы сразу заметите его преимущество в описанном сценарии. Go позволяет компилировать его артефакты в автономный двоичный файл. Вы можете быть уверены, что после компиляции двоичный файл будет работать на каждой машине, для которой вы его скомпилировали. Поэтому я портировал Python CLI на Go. С этой новой версией мне больше не нужно было беспокоиться об изменении среды выполнения или о сторонних зависимостях.
Это прекрасный пример выбора наиболее подходящего инструмента для выполнения задачи. А чтобы иметь возможность выбирать, нужно стать разработчиком-полиглотом.
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]
Автор приводит много аналогий, но не факт, что эти аналогии не являются ложными. Логического обоснования необходимости изучения нескольких яхыков программирования (разумеется без надобности), я не увидел.
Ты чем читал, [ред.]? Статья не о необходимости изучения нескольких языков, а о преимуществах. Включи логику, [ред.].