What if I want to rename the firstname attribute of the Person class to firstName? Simple, replace all in all files, right? Now imagine I have an application with 2 classes that have that exact same attribute. Now how do I rename it? Humans inevitably make mistakes doing things like this and then have to rely on 100% test coverage prior to the code failing in production. Now imagine the headache when you take over someone else's software that you didn't write and they have 10, 20 or more classes that have the same name (believe me it happens). Static typing can drastically improve productivity when dealing with large applications when there are static references. I can't tell you how much I hate the introduction of the var keyword in C#. Too many people use it, when they don't need to, instead of declaring the type. This makes analyzing and/or refactoring an application extremely difficult down the line.