I linguaggi dinamici sono teoricamente in svantaggio, a parità di tutti gli altri, perché specificano meno come funziona il codice (quali sono i vincoli), e quindi meno del refactoring può essere fatto automaticamente, e i problemi che si presentano non possono essere rilevati automaticamente pure.
Ma tutto il resto non è uguale. I linguaggi dinamici più diffusi consentono di realizzare codice altamente compatto ma comprensibile, che in genere rende più veloce lo sviluppo in essi, e rende più semplice individuare visivamente la logica (che può cambiare nel refactoring). Quindi, anche se potresti perdere parte del vantaggio relativo di lavorare in un linguaggio dinamico, potresti comunque venire avanti, specialmente se avessi intenzione di eseguire comunque il refactoring a mano.
D'altra parte, esistono linguaggi tipizzati staticamente con essenzialmente gli stessi vantaggi dei linguaggi dinamici (cioè compatti e comprensibili - con tipi per lo più dedotti, ma molto presenti): Haskell è forse l'esempio principale, ma OCaML / F # , Scala e altri sono in questa categoria anche. Sfortunatamente, dal momento che sono meno pesantemente utilizzati rispetto ai più popolari linguaggi tipizzati staticamente, non dispongono di una vasta gamma di strumenti per essi (ad esempio per il refactoring).
Quindi, come linea di fondo, penso che farai adeguatamente con metodologie agili nella maggior parte delle lingue; Non direi che c'è un chiaro vincitore in questo momento in quanto la pratica non ha ancora raggiunto la teoria.