Динамические языки теоретически находятся в невыгодном положении, при прочих равных условиях, потому что они меньше указывают на то, как работает код (каковы ограничения), и, следовательно, меньше рефакторинга может выполняться автоматически, а возникающие проблемы также не могут быть обнаружены автоматически. ,
Но все остальное не равно. Самые популярные динамические языки допускают очень компактный, но понятный код, который, как правило, ускоряет разработку в них и делает логику (которая может измениться в рефакторинге) более легкой для визуального определения. Поэтому, хотя вы можете потерять некоторые относительные преимущества работы на динамическом языке, вы все равно можете выйти вперед, особенно если вы все равно планируете провести рефакторинг вручную.
С другой стороны, существуют статически типизированные языки, обладающие, по существу, теми же преимуществами, что и динамические языки (то есть компактные и понятные - с типами, которые в основном выводятся, но их очень много): возможно, ведущий пример - Haskell, но OCaML / F #, Scala, и другие в этой категории также. К сожалению, поскольку они используются не так интенсивно, как самые популярные языки со статической типизацией, они не имеют столь обширного набора инструментов для них (например, для рефакторинга).
Итак, в итоге, я думаю, вы будете адекватно работать с гибкими методологиями в большинстве языков; Я бы не сказал, что сейчас есть явный победитель, поскольку практика еще не догнала теорию.