But I think this is not the only explanation. By being a dynamically typed language there is a list of problems that a typed language would not have:
- The autocomplete does not work correctly forcing you to keep using “Search” to find the possible actions
- This results in going back and forth to the documentation to see how a library can be used (if you’re lucky and the library has one)
- The name of variables are much shorter making them less descriptive (because sometimes you have to type them completely – no help from your IDE)
- No type for a function parameter means no hint for its possible value (Think about enums in Java)
- No method overload – leaving solutions like jQuery’s plugins where types of the parameters depend on the value of the first parameter – the method name!
- The refactoring seems almost impossible making the code aging quickly
This list is of course not complete. But anyone of these items makes you spend few seconds more than the same task in Java. Multiplied by the number of times you do it, by the number of developers, equals a lot of time lost!
As an example, here are two open source projects that I consider “big” (data according to ohloh website
Of course these projects don’t have the same list of functionalities. But this comparison tells you how people perceive the size and difficulty of a project. And can guide you next time you start a project.