Case-insensitive languages do NOT “lead to sloppy code”. The example given above is defective. In a case-insensitive language, “DoIt” and “Doit” are the same, so the program runs correctly. It’s only in a case-sensitive language that the given example fails (and takes extra debugging time). Smart editors in case-insensitive languages automatically convert all occurrences of an object name to be the same case throughout so there is no confusion or loss of readability.
It’s not just a scripting language vs compiled language issue and Intellisense isn’t available in all languages, editors, IDEs, etc, so it’s not a solution. Even if Intellisense were universally available in program editors, it’s not a replacement for case-insensitivity. Intellisense is a useful enhancement that does make the programmers job easier and less case-sensitive.
Not only should programming languages be case-insensitive, but so should the programs written in them. Since it’s obvious from this discussion that you can’t even get a fairly small group of programmers to agree about case in a programming language, imagine what it’s like for 1 billion users using 50,000 different programs written in 20 programming languages by 200,000 programmers favoring their own version of case-sensitivity. It’s insane. One of the problems of having case sensitive development tools is that it encourages programmers to write case-sensitive applications because that’s what they’re used to. They don’t think about the impact that has on user productivity and training time.
At the risk of offending someone, I offer one of my signature/tag lines: “Case sensitive applications are written by programmers who are too arrogant, too lazy, or too stupid to understand that without users they wouldn’t have a job.”
That’s not to say that case-sensitivity has no place, case-sensitivity does have it’s place, but it should NEVER be the default behaviour. The default should always be case-insensitive and case-preserving with the ability to force case-sensitivity and/or case conversion when it’s appropriate.
Identifiers differentiated only by case are a bad idea. True, there are some in human written languages, but there is no equivalent in spoken languages (at least not the ones with which I’m familiar), so case isn’t the only distinguishing factor, context is more important. Human languages are very tolerant of improper case, so contending that human languages are case-sensitive is a straw argument. “rome wan’t built in a Day” is improper, but perfectly understandable.
US vs. us is an improper comparison, U.S. is the proper abreviation for the United States. He or Him vs. he or him does have a different connotation, but it can generally be inferred from the context, thus the case becomes inconsequential. I could give many more examples, and I’m sure someone will point out an example or two where case is important. However, that simply supports my assertion that case-insensitivity should be the default and case-sensitivity should be used only when required.
The real point of this whole discussion is that we have to start making computers adapt to humans rather than making the humans adapt to computers. Case-insensitivity is one adaption that is fairly trivial to implement and it’s time that it becomes the standard rather than the exception.