Примечание: это в основном субъективно и основано на моем опыте и впечатлениях.
Динамически типизированные языки сильно отличаются от статически типизированных языков. Эти различия, вероятно, становятся более важными в тяжелом корпоративном программном обеспечении, чем в большинстве других приложений.
Статически типизированные языки имеют тенденцию быть очень предписывающими. Метод будет принимать только те данные, которые точно соответствуют его сигнатуре. Уровни доступа имеют тенденцию быть очень важными, и интерфейсы определяются явно, с подробными, но недвусмысленными ограничениями для обеспечения соблюдения этих определений.
Динамически типизированные языки, с другой стороны, очень прагматичны. Преобразования типов часто происходят неявно, функции могут даже совпадать, если вы введете неправильный тип ввода, если он ведет себя достаточно схожим образом. В таких языках, как Python, даже уровни доступа будут основаны на контракте, а не на технических ограничениях (т. Е. Это только private
потому, что вам сказали не использовать его, и у него забавное название).
Многие программисты предпочитают динамические языки, потому что они (возможно) позволяют быстрое создание прототипов. Код часто оказывается короче (хотя бы из-за отсутствия объявлений типов), и если вы хотите нарушить надлежащий протокол, потому что вам нужно быстрое и грязное решение или вы хотите что-то протестировать, это легко возможно.
Теперь причина того, что «корпоративные» компании часто предпочитают статически типизированные языки, заключается именно в том, что они более ограничительны и более явны в отношении этих ограничений. Хотя на практике даже статически типизированный код может быть взломан идиотами с помощью компилятора, многие проблемы будут гораздо более заметны гораздо раньше в процессе (т. Е. До выполнения). Это означает, что даже если кодовая база большая, монолитная и сложная, многие ошибки могут быть легко обнаружены без необходимости запуска кода или его передачи в отдел контроля качества.
Причина, по которой это преимущество не перевешивает недостатки для многих программистов за пределами этой среды, заключается в том, что эти ошибки часто легко обнаруживаются при тщательной проверке кода или даже при попытке его запустить. Особенно при следовании методологии, основанной на тестировании, эти ошибки часто становятся тривиальными, и их легко исправить. Кроме того, поскольку многие такие компании имеют гораздо более короткий цикл выпуска, производительность зачастую важнее, чем жесткость, и сами разработчики проводят большое (базовое) тестирование.
Другой причиной того, что корпоративные корпорации не используют динамически типизированные языки, является устаревший код. Как бы глупо это ни казалось нам, ботаники, крупные корпорации часто будут придерживаться решений, которые работают, даже если они уже давно истекли. Вот почему так много крупных компаний используют Internet Explorer 6 и так медленно обновляют свои операционные системы. Именно поэтому они часто пишут новый код на «старых» языках (например, древние версии Java): гораздо проще добавить несколько строк кода в неживую часть программного обеспечения, чем получить разрешение на полное переписывание в новом язык.
tl; dr: статические языки больше похожи на бюрократию, поэтому руководителям предприятий они нравятся больше.