Интересно, зачем разработчику C++, C#, Java изучать динамический язык?
Если предположить, что компания не переключит свой основной язык разработки с C++ / C# / Java на динамический, какой смысл в динамическом языке?
Какие вспомогательные задачи могут быть выполнены с помощью динамических языков быстрее или лучше всего за несколько дней обучения, чем со статическим языком, который вы используете в течение нескольких лет?
После просмотра первых нескольких ответов становится ясно, что есть две проблемы. Мой главный интерес будет в том, что оправдано для работодателя в виде расходов. То есть я ищу оправдания, чтобы работодатель финансировал изучение динамического языка. Помимо очевидного, что у сотрудника будет более широкий взгляд, работодатели обычно ищут «настоящую» выгоду.





Вы рассчитываете работать в этой компании вечно? Если вы когда-нибудь выходите на рынок труда, возможно, некоторые потенциальные работодатели будут знать о Парадокс Python.
+1 за ссылку на Python Paradox.
Позвольте мне перевернуть ваш вопрос с ног на голову, спросив, какая польза для носителя американского английского языка от изучения другого языка?
Языки, на которых мы говорим (и те, на которых мы программируем), определяют наш образ мышления. Это может происходить на фундаментальном уровне, например, на уровне C++, javascript и lisp, или на уровне реализации, когда конструкция ruby обеспечивает момент эврики для решения вашей «реальной работы».
Говоря о вашей настоящей работе, если рынок пойдет на спад и ваш работодатель решит «подобрать подходящий размер», как вы думаете, вы будете противостоять гибкому парню, потому что он пишет программное обеспечение на десятках языков, а не на ваших ограниченных возможностях? контакт? При прочих равных, думаю, ответ ясен.
Наконец, вы занимаетесь программированием, потому что любите программировать ... не так ли?
правда в 30% случаев ...
Я часто обнаруживал, что изучение другого языка, особенно языка с динамической типизацией, может научить вас кое-чему о других языках и сделать вас в целом лучшим программистом. Изучение ruby, например, научит вас объектно-ориентированному программированию способами, которые обычно не используются в Java, и наоборот. В общем, я считаю, что лучше быть разносторонним программистом, чем зацикливаться на одном языке. Это делает вас более ценными для компаний / клиентов, на которые вы работаете.
Помимо философских вопросов, я знаю, что получил пользу от написания быстрых и грязных сценариев Ruby для решения проблем грубой силы, для которых Java была слишком велика. В прошлом году у меня было три отдельные структуры каталогов, которые были более или менее одинаковыми, но с большим количеством различий между файлами (клиент не слышал о контроле версий, а остальное я оставлю вашему воображению).
Написание анализатора на Java потребовало бы больших накладных расходов, но в Ruby у меня он работал примерно за 40 минут.
Часто динамические языки (особенно python и lua) встраиваются в программы, чтобы добавить больше функциональности, подобной плагинам, и поскольку они являются языками высокого уровня, которые упрощают добавление определенного поведения, когда язык низкого / среднего уровня не требуется. .
В Lua конкретно отсутствуют все низкоуровневые системные вызовы, потому что он был разработан для простоты использования для добавления функциональности в программу, а не как общий язык программирования.
Когда я впервые изучил Python, я работал в магазине Java. Иногда мне приходилось выполнять серьезные задачи по обработке текста, которые было намного проще выполнить с помощью быстрых сценариев Python, чем программ Java. Например, если бы мне пришлось проанализировать сложный CSV-файл и выяснить, какие из его строк соответствуют строкам в нашей базе данных Oracle, это было бы намного проще сделать с Python, чем с Java.
Более того, я обнаружил, что изучение Python сделало меня намного лучше программиста на Java; изучив многие из тех же концепций на другом языке, я чувствую, что понимаю эти концепции намного лучше. А что касается того, что делает Python проще, чем Java, вы можете проверить этот вопрос: Java -> Python?
ознакомьтесь с ответами на эту тему:
Изучение новых языков означает непредвзятость и изучение новых способов ведения дел.
Я не уверен, что это то, что вы ищете, но мы пишем наше основное приложение на Java в небольшой компании, в которой я работаю, но мы использовали python для быстрого написания небольших скриптов. Программное обеспечение для резервного копирования, временные скрипты для обработки данных и вывода результатов. Иногда кажется, что проще сесть за Python и написать быстрый скрипт, чем возиться с классами и прочим в java.
Временные скрипты, которые не собираются останавливаться, не требуют много времени на разработку.
И я ленив, но хорошо, конечно, просто узнать как можно больше и посмотреть, какие функции существуют на других языках. Знание большего никогда не повредит вам при будущих изменениях в карьере :)
Я в основном программирую на Java и C#, но использую динамические языки (ruby / perl) для поддержки более плавного развертывания, запуска задач ОС, автоматической отчетности, некоторого анализа журналов и т. д.
После непродолжительного изучения и экспериментов с ruby или perl вы сможете написать несколько скриптов, управляющих регулярными выражениями, которые могут изменять форматы данных или получать информацию из журналов. Примером небольшого сценария ruby / perl, который можно было бы быстро написать, может быть сценарий для анализа очень большого файла журнала и отчета только о нескольких интересующих событиях либо в удобочитаемом формате, либо в формате csv.
Кроме того, наличие опыта работы с различными языками программирования должно помочь вам придумать новые способы решения проблем на более структурированных языках, таких как Java, C++ и C#.
Все дело в том, чтобы расширить свой кругозор как разработчика. Если вы ограничитесь только языками со строгой типизацией, возможно, вы не станете лучшим программистом.
Что касается задач, Python / Lua / Ruby / Perl отлично подходят для небольших простых задач, таких как поиск некоторых файлов и их переименование. Они также отлично работают в сочетании с фреймворком (например, Rails, Django, Lua для Windows) для быстрой разработки простых приложений. Черт, 37Signals основан на создании простых, но очень полезных приложений в Ruby on Rails.
Они полезны для «быстрого взлома», то есть для устранения пробелов в вашем основном языке для быстрого (и потенциально грязного) исправления быстрее, чем потребуется для разработки того же самого на вашем основном языке. Пример: простой скрипт на Perl для просмотра большого текстового файла и замены всех экземпляров адреса электронной почты другим является тривиальным, поскольку время занимает от 10 минут. Чтобы взломать консольное приложение, чтобы сделать то же самое на вашем основном языке, потребовалось бы несколько раз.
У вас также есть преимущество в том, что знакомство с дополнительными языками расширяет ваши способности, а обучение решению проблем с точки зрения другого языка может быть столь же ценным, как и сам язык.
Наконец, языки сценариев очень полезны в области расширений. Возьмем, к примеру, LUA. Вы можете прикрепить интерпретатор lua к своему приложению с очень небольшими накладными расходами, и теперь у вас есть способ создать богатую функциональность сценариев, которая может быть предоставлена конечным пользователям или быстро изменена и распространена без необходимости перестройки всего приложения. Это очень эффективно используется во многих играх, особенно в World of Warcraft.
Лично я работаю над Java-приложением, но я не мог обойтись без Perl для некоторых поддерживающих скриптов.
У меня есть сценарии для быстрого переключения того, на что я указываю, сценарии для запуска сценариев сборки, сценарии для очистки данных и сравнения материалов.
Конечно, я мог делаю все это с помощью java или, возможно, сценариев оболочки (у меня тоже есть некоторые из них), но кто хочет скомпилировать класс (убедитесь, что путь к классам установлен правильно и т. д.), Когда вам просто нужно что-то быстрое и грязное. Знание языка сценариев может избавить от 90% этих скучных / повторяющихся ручных задач.
Одна из главных причин изучить Perl или Ruby - это помочь вам автоматизировать любые сложные задачи, которые вам приходится выполнять снова и снова.
Или, если вам нужно проанализировать содержимое файлов журнала и вам нужно больше изменений, чем доступно с помощью grep, sed и т. д.
Также с использованием других языков, например Ruby, который не требует больших «затрат на установку», позволит вам быстро создавать прототипы идей, прежде чем реализовывать их на C++, Java и т. д.
HTH
ваше здоровье,
Роб
Несмотря на то, что на моем рабочем месте все написано на C++ или встроенном c, я использую Ruby именно для этого. Обработка файлов журнала, быстрое прототипирование, тестовые заглушки для другого конца интерфейса TCP и т. д.
Редактировать: Я написал это перед чтением обновления исходного вопроса. См. Мой другой ответ для лучшего ответа на обновленный вопрос. Я оставлю это как есть в качестве предупреждения не быть самым быстрым оружием на западе =)
Более десяти лет назад, когда я изучал способы работы с компьютером, старые мудрецы с бородой объяснили, как C и C++ являются инструментами отрасли. Никто не использовал Паскаль, и только безрассудные люди рисковали бы своими компаниями с ассемблером.
И, конечно же, никто бы даже не упомянул об ужасно медленной уродливой штуке под названием Java. Это не будет инструментом для серьезного бизнеса.
Так. Гм. Замените языки в приведенной выше истории, и, возможно, вы сможете предсказать будущее. Возможно, ты не сможешь. Дело в том, что Java никогда не будет последним языком программирования, и вы, скорее всего, также смените работодателя. Будущее заряжает вас 24 часа в сутки. Приготовься.
Изучение новых языков полезно для вас. Кроме того, в некоторых случаях это может дать вам право хвастаться надолго. Мой первый университетский курс был в Scheme. Поэтому, когда люди говорят со мной о новом Language du jour, я отвечаю примерно так: «Первоклассные функции? Это прошлый век».
И, конечно же, вы получаете больше вещей сделано с языком высокого уровня.
Вам также следует подумать об изучении функционального языка программирования, такого как Scala. Он обладает многими преимуществами Ruby, включая краткий синтаксис и мощные функции, такие как замыкания. Но он компилируется в файлы классов Java и легко интегрируется в стек Java, что может упростить вашему работодателю понимание.
Scala не имеет динамической типизации, но ее функция «неявного преобразования» дает многие, возможно, даже все преимущества динамической типизации, сохраняя при этом многие преимущества статической типизации.
Часто возникает какая-то быстрая задача, которая не является частью основного программного обеспечения, которое вы разрабатываете. Иногда задача одноразовая, то есть сравнить этот файл с базой данных и сообщить мне различия. Разбор текста в Perl / Ruby / Python намного проще, чем в Java или C# (частично потому, что намного проще использовать регулярные выражения). Вероятно, потребуется гораздо меньше времени, чтобы проанализировать текстовый файл с помощью Perl / Ruby / Python (или, может быть, даже vbscript съеживаться, а затем загрузить его в базу данных, чем для создания программы Java / C#, чтобы сделать это или сделать это с помощью рука.
Кроме того, из-за легкости, с которой большинство динамических языков анализирует текст, они отлично подходят для генерации кода. Конечно, ваш окончательный проект должен быть на C# / Java / Transact SQL, но вместо того, чтобы вырезать и вставлять 100 раз, находить ошибки и вырезать и вставлять еще 100 раз, часто (но не всегда) проще просто использовать генератор кода.
Недавний пример в работе: нам нужно было получить данные из одной системы учета в нашу систему учета. В системе есть формат импорта, но в старой системе был совершенно другой формат (фиксированная ширина, хотя некоторые вещи приходилось согласовывать). Задача не в том, чтобы создать программу для многократного переноса данных. Он предназначен для того, чтобы поместить данные в нашу систему, а затем поддерживать их там в будущем. Поэтому, несмотря на то, что мы являемся магазином C# и SQL Server, я использовал Python для преобразования данных в формат, который может быть импортирован нашим приложением. В конечном итоге не имеет значения, что я использовал python, важно то, что данные находятся в системе. Мой босс был очень впечатлен.
Я часто вижу, что динамические языки используются для тестирования. Намного проще создать программу Python / Perl / Ruby для связи с веб-службой и передачи в нее некоторых данных, чем создание эквивалентной программы на Java. Вы также можете использовать python для попадания в программы командной строки, создания тонны мусора (но все еще действительных) тестовых данных и т. д. Довольно легко.
Еще одна вещь, в которой динамические языки имеют большое значение, - это генерация кода. Создание кода C# / C++ / Java. Ниже приведены некоторые примеры:
Первая задача генерации кода, которую я часто вижу, - это люди, использующие динамические языки для поддержки констант в системе. Вместо ручного кодирования кучи перечислений можно использовать динамический язык для довольно простого анализа текстового файла и создания кода Java / C# с перечислениями.
SQL - это совершенно другая игра с мячом, но часто вы получаете лучшую производительность, вырезая и вставляя 100 раз вместо попытки выполнить функцию (из-за кеширования планов выполнения или добавления сложной логики в функцию, заставляющую вас идти строка за строкой, а не в множество). На самом деле очень полезно использовать определение таблицы для автоматического создания определенных хранимых процедур.
Всегда лучше купить генератор кода. Но даже если вы этого не сделаете, веселее ли тратить время на вырезание / вставку или веселее создать сценарий Perl / Python / Ruby один раз, а затем заставить его сгенерировать код? Если вам требуются часы, чтобы написать что-то, но меньше времени, чтобы создать генератор кода, то даже если вы используете его, вы сэкономили время и, следовательно, деньги. Если на создание генератора кода у вас уходит больше времени, чем на то, чтобы передать код один раз, но вы знаете, что вам придется обновлять код более одного раза, это все равно может иметь смысл. Если вам требуется 2 часа, чтобы передать код, 4 часа, чтобы сделать генератор, но вы знаете, что вам придется передать эквивалентную работу кода еще в 5 или 6 раз, чем, очевидно, лучше создать генератор.
Также с динамическими языками некоторые вещи проще, чем с Java / C# / C / C++. В частности, на ум приходят регулярные выражения. Если вы начнете использовать регулярные выражения в Perl и поймете их ценность, вы можете внезапно начать использовать библиотеку регулярных выражений Java, если вы этого не делали раньше. Если да, то может быть что-то еще.
Я оставлю вам последний пример задачи, которая отлично подошла бы для динамического языка. Моему напарнику пришлось взять каталог, полный файлов, и записать их на разные компакт-диски для разных клиентов. Было несколько клиентов, но много файлов, и вам нужно было заглянуть в них, чтобы увидеть, что они собой представляют. Он выполнил эту задачу вручную ... Программа на Java / C# сэкономила бы время, но для одного раза и со всеми накладными расходами на разработку она того не стоит. Однако объединение чего-то вместе в Perl / Python / Ruby, вероятно, того стоило. Он потратил на это несколько часов. Потребовалось бы меньше одного, чтобы создать сценарий Python для проверки каждого файла, определить, к какому клиенту он обращается, а затем переместить файл в соответствующее место ... Опять же, это не часть стандартного задания. Но задача возникла как разовая. Лучше сделать это самому, потратить больше времени, чтобы заставить Java / C# выполнить задачу, или потратить гораздо меньше времени на выполнение этого в Python / Perl / Ruby. Если вы используете C или C++, проблема становится еще более драматичной из-за дополнительных проблем, связанных с программированием на C или C++ (указатели, отсутствие проверки границ массива и т. д.).
На самом деле я недавно столкнулся с той проблемой, которую вы описываете. Мне дали PDF-файл, и мне нужно было преобразовать его содержимое в синтаксис XML. Я смог сделать это на PHP менее чем за час и удостоверился, что в нем нет опечаток. Намного проще, чем копировать и вставлять.
Я чувствую, что этот график имеет отношение к вашему ответу
Изучение чего-либо с помощью гибкой системы ООП, такой как Lisp или Perl (см. Moose), позволит вам лучше расширить и понять свои мысли о разработке программного обеспечения. В идеале, каждый язык имеет некий уникальный аспект (будь то CLOS или какой-либо другой метод), который расширяет, расширяет и расширяет ваши способности как программиста.
Если у вас есть только молоток, каждая проблема начинает выглядеть как гвоздь.
Бывают случаи, когда отвертка или плоскогубцы делают сложную проблему тривиальной.
Никто не спрашивает подрядчиков, плотников и т. д.: «Зачем учиться пользоваться отверткой, если у меня уже есть молоток?». По-настоящему хорошие подрядчики / плотники имеют массу инструментов и знают, как их правильно использовать. Все программисты должны делать одно и то же, учиться использовать новые инструменты и правильно их использовать.
But before we use any power tools, lets take a moment to talk about shop safety. Be sure to read, understand, and follow all the safety rules that come with your power tools. Doing so will greatly reduce the risk of personal injury. And remember this: there is no more important rule than to wear these: safety glasses -- Norm
Динамические языки отлично подходят для прототипирования идей. Часто по соображениям производительности они не работают с постоянными решениями или продуктами. Но, с такими языками, как Python, которые позволяют вам встраивать в них стандартный C / C++ / Java или наоборот, вы можете ускорить действительно важные биты, но оставить их склеенными вместе с гибкостью динамического языка.
... так что вы получите лучшее из обоих миров. Если вам нужно обосновать это с точки зрения того, почему больше людей должны изучать эти языки, просто укажите, что гораздо быстрее вы можете разработать такое же программное обеспечение и насколько надежнее решение (потому что, по моему опыту, отладка / устранение проблем в динамических языках), значительно проще!).
Знание grep и ruby позволило сузить проблему и проверить исправление проблемы, связанной с множеством исключений Java на некоторых производственных серверах. Поскольку я собрал решение на Ruby, все было сделано (спроектировано, реализовано, протестировано, запущено, исправлено, повторно запущено, улучшено, проанализированы результаты) за полдень, а не за пару дней. Я мог бы решить ту же проблему, используя полностью java-решение или решение C#, но это, скорее всего, заняло бы у меня больше времени.
Знания в области динамического языка также иногда приводят вас к более простым решениям на менее динамичных языках. В ruby, perl или python вы просто интуитивно добираетесь до ассоциативных массивов (хэшей, словарей, любого слова, которое вы хотите использовать) для мельчайших вещей, где у вас может возникнуть соблазн создать сложную иерархию классов на статически типизированном языке, когда проблема не обязательно требует этого.
Кроме того, вы можете подключить большинство языков сценариев к большинству сред выполнения. Так что это не обязательно должно быть «или-или».
Изучение нового языка - это длительный процесс. Да, через пару дней ты выучишь основы. Но! Как вы, наверное, знаете, реальная практическая применимость любого языка связана со стандартной библиотекой и другими доступными компонентами. Чтобы научиться эффективно пользоваться, требуется большой практический опыт.
Возможно, единственная краткосрочная выгода состоит в том, что разработчики учатся различать гвозди, которым нужен молоток на Python / Perl / Ruby. И, если они хороши, они могут изучить еще немного (возможно, онлайн!) И стать настоящими экспертами.
Легче представить себе долгосрочные выгоды:
Сотрудник становится лучшим разработчиком. Лучше разработчик => лучшее качество. В наши дни мы живем в экономике знаний. Разумнее вкладывать деньги в те мозги, которые уже работают на вас.
Когда появится следующий большой язык, будет легче адаптироваться. Весьма вероятно, что NBL будет иметь многие функции, присутствующие в сегодняшних языках сценариев: первоклассные функции, замыкания, потоки / генераторы и т. д.
Новые возможности рынка и возможность более быстрого реагирования. Даже если вы не пишете Python, другие люди. Ваши клиенты? Другой вендор в проекте? Возможно, критический компонент был написан на каком-то другом языке? Это будет стоить денег и времени, если у вас нет людей, которые могут понять код и взаимодействовать с ним.
Набор персонала. Если ваша компания имеет репутацию преподавателя нового и интересного материала, будет легче нанять лучших людей. Каждый выполняет Java / C# / C++. Это не очень эффективный способ выделиться на рынке труда.
«Настоящая выгода», которую может увидеть работодатель, - это лучший программист, который может быстрее внедрять решения; однако вы не сможете предоставить какие-либо точные цифры, чтобы оправдать расходы, и работодатель, скорее всего, попросит вас работать над тем, что приносит деньги сейчас, а не над тем, что сделает будущее лучше.
Единственный раз, когда вы можете пройти обучение на копейку работодателя, - это когда он почувствует в нем потребность, и это дешевле, чем нанять нового человека, у которого уже есть этот набор навыков.
Тестирование.
Часто быстрее и проще протестировать приложение C# / Java, используя динамический язык. Вы можете проводить исследовательское тестирование в интерактивном режиме и быстро создавать сценарии автоматического тестирования.
Я думаю, что основные преимущества динамических языков можно свести к
Короткое время цикла дизайн-код-тестирование делает динамические языки идеальными для создания прототипов, инструментов, а также быстрых и грязных одноразовых скриптов. ИМХО, последние два могут сильно повлиять на продуктивность программиста. Меня поражает, как много людей тащатся через вещи вручную, вместо того, чтобы создавать инструмент, который сделает это за них. Я думаю, это потому, что в их наборе инструментов нет чего-то вроде Perl.
Возможность взаимодействовать практически с чем угодно (другими программами или языками, базами данных и т. д.) Позволяет легко повторно использовать существующую работу и автоматизировать задачи, которые в противном случае пришлось бы выполнять вручную.
Другие уже объяснили, почему изучение большего количества языков делает вас лучшим программистом.
Что касается убеждения вашего босса в том, что оно того стоит, это, вероятно, просто культура вашей компании. В некоторых местах карьерный рост и повышение квалификации являются политикой (продвижение или увольнение), в некоторых это ценится, но это оставляется на усмотрение сотрудника, а в некоторых местах большое внимание уделяется чистой прибыли.
Если вам нужно объяснить, почему изучение языка - это хорошо для вашего начальника, я бы посоветовал оставаться на работе столько, сколько необходимо, а затем идти домой и изучать новые вещи самостоятельно.
Что касается ответа на обновленный вопрос, это проблема курицы / яйца. Лучший способ оправдать расходы - показать, как это снижает затраты где-то еще, поэтому вам может потребоваться дополнительное / личное время, чтобы сначала чему-то научиться, чтобы построить какой-то функциональный прототип.
Покажите своему боссу демонстрацию типа «эй, я сделал это, и это сэкономит мне столько времени [или еще лучше, столько $$], представьте, если бы каждый мог использовать это, сколько денег мы бы сэкономили»
а затем, после того, как они согласятся, объясните, что это какая-то другая технология и что стоит потраченных средств на дополнительное обучение и обучение других тому, как делать это лучше.
Для работы после работы, для работы фрилансером ... :) и, наконец, чтобы быть грамотным в программировании, как ...;)
Я не думаю, что кто-то еще об этом упомянул. Изучение нового языка может быть интересным! Конечно, это достаточно веская причина попробовать что-то новое.
Согласовано. Я программировал почти исключительно на C#, прежде чем однажды увидел учебник по Perl и попробовал его. Я не мог поверить, как это было весело!
Я пробовал Python с точки зрения Java. Это просто круто :-)
Динамические языки - это другой способ мышления, и иногда методы, которые вы изучаете на динамическом или функциональном языке, можно перенести на языки с более статической типизацией, но если вы никогда не потратите время на изучение разных языков, вы никогда не получите преимущества умел думать, когда кодишь.
Учитывая растущее внимание к запуску динамических языков (da-vinci vm и т. д.) На JVM и растущее количество динамических языков, которые на нем работают (JRuby, Grrovy, Jython), я думаю, что варианты использования только увеличиваются. Некоторые из сценариев, которые я нашел действительно полезными:
Прототипирование - используйте RoR или Grails для создания быстрых прототипов с преимуществом возможности запускать его на стандартном сервере приложений и (возможно) повторно использовать существующие службы и т. д.
Тестирование - правые юнит-тесты намного быстрее на динамических языках
Сценарии тестирования производительности / автоматизации - некоторые из этих инструментов позволяют использовать стандартный динамический язык по выбору для написания тестовых сценариев вместо проприетарных языков сценариев. Дополнительным преимуществом может быть возможность повторно использовать уже написанный код модульного теста.
Хороший хоккеист играет там, где шайба. Великий хоккеист играет там, где должна быть шайба. - Уэйн Гретцки
Наша отрасль постоянно меняется. Ни один язык не может быть мейнстримом вечно. Для меня Java, C++, .Net - вот где сейчас шайба. И python, ruby, perl - вот где будет шайба. Решайте сами, хотите ли вы быть хорошим или великим!
Вы оставили комментарий в 2008 году, сейчас 2013 год, а шайба все еще находится на стороне Java, C#.
Не говорите своему работодателю, что хотите изучить Ruby. Скажите ему, что вы хотите узнать о последних достижениях в технологиях веб-фреймворка. просто так сложилось, что самые популярные - это Django и Ruby on Rails.
Несколько лет назад Пол Грэм опубликовал статью о том, почему программисты на Python делают программистов на Java лучше. (http://www.paulgraham.com/pypar.html)
По сути, независимо от того, соответствует ли новый язык текущей методологии компании, изучение нового языка означает изучение новых идей. Тот, кто желает выучить язык, который не считается «бизнес-классом», означает, что он интересуется программированием, а не просто зарабатыванием зарплаты.
Процитируем сайт Павла:
And people don't learn Python because it will get them a job; they learn it because they genuinely like to program and aren't satisfied with the languages they already know.
Which makes them exactly the kind of programmers companies should want to hire. Hence what, for lack of a better name, I'll call the Python paradox: if a company chooses to write its software in a comparatively esoteric language, they'll be able to hire better programmers, because they'll attract only those who cared enough to learn it. And for programmers the paradox is even more pronounced: the language to learn, if you want to get a good job, is a language that people don't learn merely to get a job.
Если бы работодатель был готов оплатить стоимость изучения нового языка, скорее всего, люди, которые вызвались учиться (при условии, что это не был обязательный курс), были бы теми же людьми, которые уже находятся на «ускоренном пути».
Не беспокойте своего работодателя, потратьте ~ 40 долларов на книгу, загрузите какое-нибудь программное обеспечение и каждый день посвящайте какое-то время чтению / выполнению упражнений. Вскоре тебя обучат :)
Я обнаружил, что чем больше я играю с Ruby, тем лучше понимаю C#.
1) Когда вы переключаетесь между этими языками, каждый из них имеет свои собственные конструкции и философию, стоящую за проблемами, которые они пытаются решить. Это поможет вам при поиске правильный инструмент для работы или область проблемы.
2) роль компилятора (или интерпретатор для некоторых языков) становится более заметным. Почему система типов Ruby отличается от системы .Net / C#? Какие проблемы решает каждая из них? Вы обнаружите, что на более низком уровне понимаете конструкции компилятора и его влияние на язык.
3) Переключение между Ruby и C# действительно помогло мне лучше понять Шаблоны проектирования. Я действительно предлагаю реализовать общие шаблоны проектирования на таком языке, как C#, а затем на языке вроде Ruby. Это часто помогало мне понять философию конкретного паттерна на некоторых этапах компиляции.
4) Другой сообщество. C#, Java, Ruby, Python и т. д. Имеют разные сообщества, которые могут помочь вам задействовать ваши способности. Это отличный способ поднять свое мастерство на новый уровень.
5) И последнее, но не менее важное: новые языки - это весело :)
Если вопрос набирает десятки голосов, просто оставьте эту чертову штуку открытым. Понятно, что кому-то пригодится. Разве не в этом весь смысл этого сайта. Прекратите просто рефлекторно закрывать вещи.