Nota: questo è per lo più soggettivo e basato sulle mie esperienze e impressioni.
Le lingue tipizzate dinamicamente sono molto diverse dalle lingue tipizzate staticamente. Queste differenze probabilmente diventano più importanti nel software aziendale pesante rispetto alla maggior parte delle altre applicazioni.
Le lingue tipizzate staticamente tendono ad essere molto prescrittive. Un metodo prenderà solo input che corrispondono esattamente alla sua firma. I livelli di accesso tendono ad essere molto importanti e le interfacce sono definite in modo esplicito, con restrizioni dettagliate ma inequivocabili in atto per applicare tali definizioni.
D'altra parte, le lingue tipizzate dinamicamente sono molto pragmatiche. Le conversioni di tipo spesso avvengono in modo implicito, le funzioni possono persino giocare se si fornisce un tipo di input errato purché si comporti in modo sufficientemente simile. In lingue come Python, anche i livelli di accesso saranno basati sul contratto piuttosto che sulle restrizioni tecniche (cioè è solo private
perché ti viene detto di non usarlo e ha un nome divertente).
Molti programmatori preferiscono linguaggi dinamici perché (probabilmente) consentono la prototipazione rapida. Il codice spesso finisce più corto (se non altro a causa della mancanza di dichiarazioni di tipo) e se vuoi violare il protocollo corretto perché hai bisogno di una soluzione rapida e sporca o vuoi testare qualcosa, è facilmente possibile.
Ora, la ragione per cui le aziende "enterprise" spesso preferiscono linguaggi tipizzati staticamente è esattamente che sono più restrittive e più esplicite su tali restrizioni. Sebbene in pratica anche il codice tipicamente statico possa essere infranto dagli idioti con un compilatore, molti problemi saranno molto più visibili molto prima nel processo (cioè prima del runtime). Ciò significa che anche se la base di codice è grande, monolitica e complessa, molti errori possono essere colti facilmente, senza dover eseguire il codice o inviarlo al reparto QA.
La ragione per cui il vantaggio non supera gli svantaggi di molti programmatori al di fuori di quell'ambiente è che si tratta di errori che spesso possono essere facilmente rilevati da un'accurata ispezione del codice o anche dal tentativo di eseguirlo. Soprattutto quando si segue una metodologia guidata dai test, questi errori diventano spesso banali da catturare e facili da correggere. Inoltre, con molte di queste aziende che hanno un ciclo di rilascio molto più breve, la produttività è spesso più importante della rigidità e molti test (di base) vengono eseguiti dagli stessi sviluppatori.
L'altro motivo per cui le società aziendali non usano molto i linguaggi tipizzati in modo dinamico è il codice legacy. Per quanto sciocchi possano sembrare noi nerd, le grandi aziende si attengono spesso a soluzioni che funzionano, anche se sono ben oltre la loro shelf-life. Questo è il motivo per cui così tante grandi aziende applicano Internet Explorer 6 e sono così lente ad aggiornare i loro sistemi operativi. Questo è anche il motivo per cui spesso scriveranno un nuovo codice in "vecchie" lingue (ad es. Versioni antiche di Java): è molto più facile aggiungere alcune righe di codice a un software non vivente che ottenere l'approvazione per una riscrittura completa in un nuovo linguaggio.
tl; dr: i linguaggi statici sembrano più una burocrazia, quindi ai dirigenti di impresa piacciono di più.