I don't see how seeking to add types precludes also understanding "closures, concurrency passing or functional programming", especially since these are in no way foreign concepts in statically typed languages.
> If you want a statically typed language, use one. Use one that was designed for deterministic behavior and static correctness.
I definitely see what you're trying to say, but as I understand it, these projects to "add types" often come on later, when the project is so big, that it is simply less time consuming to just develop a type checker, than it is to rewrite your entire codebase in a new language.
Not having to define types is not the biggest merit of dynamic languages.
The biggest benefit is to be able to do things that you couldn’t do if you had a type system. You can do some crazy stuff with Ruby’s meta programming.
This is a bad question. Refactoring Rails is AFAIK a nightmare. Given enough devs it can probably be done, however it might be painful.
Now the trend is to bolt on type checking to dynamic languages because people don’t want dynamic behavior. Most developers I’ve encountered who seek to add types to dynamic languages will never truly understand dynamic languages, closures, concurrency passing or functional programming for that matter.
If you want a statically typed language, use one. Use one that was designed for deterministic behavior and static correctness.
If you have a huge codebase in Ruby that is full of bugs and is unpredictable, don’t blame the language or lack of types.
There are plenty of ruby codebases that are bug free and work well without static typing. How do they exist?