Это рубрика, в которой эксперты отвечают на актуальные и волнующие вопросы об IT-профессиях, будущем сферы и ее перспективах.
На этот вопрос нет однозначного ответа, потому что изучение второго языка — непростой трудозатратный процесс. У разработчика должны быть веские причины, перевешивающие сложности изучения. По моему мнению, их может быть две.
Требования проекта
Часто среди IT-специалистов идут разговоры о том, что нужно использовать технологию под задачу. На деле даже опытные разработчики выбирают любимый или хорошо знакомый язык программирования.
Именно поэтому со мной произошла одна ситуация. В проекте использовался PHP как основной язык backend-разработки. Стояла задача создать микросервис для WebSocket-соединений. Опытные разработчики сразу скажут, что для этого нужно использовать язык, который хорошо работает асинхронно. Из самых популярных — это Node.JS (Socket IO) или Golang. Однако техническое руководство компании запретило использовать другие языки, аргументируя, что у компании отличная экспертиза в PHP, и не стоит тратить время на другие технологии. В итоге WebSocket-микросервис на PHP (React PHP) было тяжело разрабатывать и сложно поддерживать. Но главное — он работал очень медленно. Через несколько месяцев мучений мы переписали его на Golang и зажили счастливо.
Ситуация не уникальна: множество компаний допускают такие же ошибки. Если под большую задачу лучше подходит другой язык программирования, то усилия, потраченные на его изучение, оправданы и окупятся.
Собственное желание развиваться в разных технологиях
Мы, разработчики, любим узнавать что-то новое даже в свободное от работы время. Из-за этого можем тратить часы на изучение функциональных языков программирования просто «для себя», не используя их в коммерческих проектах. Я считаю, что изучение языков из другой парадигмы развивает эрудицию и мышление, позволяет решать более сложные архитектурные и алгоритмические задачи.
Независимо от причины, изучение новых языков расширит кругозор и повысит профессиональную квалификацию.
Я не советую изучать второй язык программирования просто так. Хотя часто слышу утверждения, что «Круто знать второй язык» или «Чем больше языков знаешь, тем ты лучше как специалист». На мой взгляд, это заблуждение, потому что это:
- трудоемко. Выучить язык — это долго и дорого. Также очень ресурсозатратно поддерживать знания двух языков в актуальном состоянии;
- бесполезно без практики. Даже если вам удастся выучить второй язык, без постоянной практики это будут бесполезные знания. Важно уметь применять его в определенных ситуациях. Если вы его не используете, то и таких ситуаций не возникнет;
- не пригодится. Велика вероятность, что если вы выучите язык «для себя», то он вам не пригодится. Технологии быстро меняются. По разным причинам меняются и языки;
- не даст преимущества на собеседовании. Вполне вероятно, что те, кто будут вас собеседовать, знают только необходимый им в работе язык.
Второй язык вас сам найдет, когда это будет нужно. Например, в Android-разработке основным языком был Java, а потом появился Kotlin. Cистема сборки Gradle поддерживает язык Groovy. Некоторые скрипты написаны на Bash. Иногда в проекте встречаются модули, которые разработаны на C++. Эти технологии не нужно изучать на старте, но для решения определенной задачи вам, возможно, придется с ними разобраться. Однако, например, Python вряд ли когда-то встретится в Android-разработке.
По моему опыту и опыту коллег, перейти с одного языка на другой в одном проекте можно за 1-2 месяца. При условии, что область разработки и технологии не меняются.
Я думаю, что изучение второго языка будет только плюсом. Но это нужно делать, когда человек уверенно владеет основным языком. На старте возникает много сложностей и ошибок, и если параллельно изучать что-то новое, трудности могут накладываться друг на друга. Это замедлит понимание и может вообще оттолкнуть от программирования.
Изучение второго языка полезно:
- для общего развития;
- понимания разновидностей языков, того, как они применяются в конкретной области;
- большей уверенности в себе на рынке труда.
Чтобы выбрать второй язык, специалисту нужно сначала навести справки в компании, где он работает, начать поиск с продукта, которым он занимается. Часто бывает, что решение состоит из множества подпроектов. Они могут быть написаны как на одном, так и на разных языках.
Например, frontend-клиентская часть бывает разделена на два микропроекта, один на React а другой на Angular. На стороне сервера находятся приложения на Python, Node.JS и .Net. Если есть возможность, то можно изучать язык и параллельно выполнять небольшие задания на другом проекте, его части. Так изучение пройдет проще и быстрее, появится способ изучать язык в свободное время и во время работы, взаимодействуя с опытными коллегами.
Если проект написан на одном языке, а работать над другими проектами невозможно, можно поискать в смежных областях.
Например, вы работаете только с backend-частью на C#, где реализуете взаимодействие клиента с базой данных. У базы данных есть свой язык запросов SQL/GraphQL. И еще есть клиентская часть, написанная, возможно, на одном из JS-фреймворков. В таком случае можно рассмотреть языки, которые дополнят общую картину разработки. Например, помогут лучше понять, как общается клиент и сервер, сервер и БД. Если эти языки используются в компании, вы сможете обратиться к коллегам за советом.
Выбирайте язык, который отличается от основного. Если вы frontend-разработчик на JavaScript, присмотритесь к одному из серверных языков. Конечно, многие языки используются и в backend, но в этом случае будет только один профит – большее понимание того, как устроен backend. А если вы выберете, например, C#, то заодно сможете оценить всю прелесть строго типизированного языка. Если вы уже работаете на Java и решите попробовать Python, то увидите, насколько проще можно реализовать тот же самый функционал. Также вы сможете развиваться в другой области, где более применим язык.
Приведу пример с дорогой от дома до работы. Вы можете ходить по одному и тому же маршруту долгое время, отлично его знать. Но как только что-то произойдет с его участком, придется потратить много времени и сил, чтобы найти новый путь. Если вы будете ходить разными маршрутами, то в случае чего всегда сможете найти другой вариант.