Первое я хотел бы упомянуть о том, что Брюс Eckel написал очень интересную статью под названием Strong Typing vs Strong Testing (ссылка вниз на данный момент, к сожалению, но, надеюсь, это будет скоро).
Его идея заключается в том, что при работе с скомпилированными языками компилятор просто выступает в качестве первого автоматического этапа автоматического тестирования. При переходе на динамический язык вы теряете этот первый уровень автоматического тестирования. Но в обоих случаях этот первый, автоматический уровень - это всего лишь одна часть тестирования, и даже не очень важная часть.
Его цель состоит в том, что если вы разрабатываете программы должным образом, то есть выполняете какие-либо тесты и регрессионные тесты, отсутствие компилятора будет заставлять вас добавлять какие-то дополнительные, несколько базовые тесты в любом случае, поэтому большие потери.
Итак, я думаю, что первый ответ, который я вам даю, сосредоточен на тестировании, что-то, что вы должны делать в любом случае, и такие изменения не должны сильно влиять на вас.
Вторая вещь Я бы хотел упомянуть, что многие динамические языки, которые я видел (например, Python), имеют гораздо лучшие возможности для изменения того, что делают методы/классы, не нарушая существующий код.
Например, если у вашего метода используется два параметра, но теперь требуется третий, вы всегда можете добавить параметр по умолчанию, не нарушая существующий код, но который вы теперь можете использовать. Это очень простой метод, но в случае Python (и я предполагаю большинство других динамических языков), эти методы могут стать гораздо более интересными; так как они динамичны, вы можете в значительной степени изменить реализацию функций для определенных модулей, изменить переменные и т. д.
Я предлагаю посмотреть, какие методы Clojure позволяют делать подобные вещи и решать, применяют ли они в вашей ситуации.
Как вы, ребята, имеете дело с этим? По моему опыту, правильный ответ был бы «Не очень хорошо». –