Teóricamente, los lenguajes dinámicos están en desventaja, todos los demás son iguales, porque especifican menos sobre cómo funciona el código (cuáles son las restricciones) y, por lo tanto, se puede hacer una menor parte de la refactorización automáticamente, y no se pueden detectar los problemas que surjan. automáticamente también.
Pero todo lo demás no es igual. Los lenguajes dinámicos más populares permiten un código altamente compacto pero comprensible, que generalmente hace que el desarrollo en ellos sea más rápido y hace que la lógica (que puede cambiar en la refactorización) sea más fácil de detectar visualmente. Por lo tanto, aunque podría perder parte de la ventaja relativa de trabajar en un lenguaje dinámico, es posible que aún salga adelante, especialmente si planea hacer su refactorización a mano de todos modos.
Por otro lado, existen lenguajes tipificados estáticamente con esencialmente las mismas ventajas que los lenguajes dinámicos (es decir, compactos y comprensibles, con tipos mayormente inferidos, pero muy presentes): Haskell es quizás el ejemplo principal, pero OCaML / F # , Scala, y otros están en esta categoría también. Desafortunadamente, dado que son menos utilizados que los lenguajes de escritura estática más populares, no tienen un conjunto de herramientas tan amplio (por ejemplo, para refactorizar).
Entonces, como resultado final, creo que lo harás adecuadamente con metodologías ágiles en la mayoría de los idiomas; No diría que hay un claro ganador en este momento ya que la práctica aún no ha alcanzado la teoría.