Learning is always simpler with an example, so here it is:
C # (case sensitive, but used with VB.NET, which is case insensitive):
CONSTANT_NAME IInterfaceName // Uses I prefix in all case sensitive and insensitive languages ClassName // Readable in both case sensitive and insensitive languages _classMember // sometimes m_classMember or just classMember DoSomething(someParam) // Method with action name, params can be _someParam PropertyName // Same style in case sensitive and insensitive languages localVariable // Never using prefix
Java and JS use a style similar to C #, but methods / functions / events are declared as doSomething, onEvent variables.
ObjectPascal (Delphi and Lazarus / FPC are not case sensitive such as ADA and VB.NET)
CConstantName // One can use Def or no prefix, not a standard IInterfaceName TClassName // Non-atomic types/classes have T prefix eg TStructRecordName PSomePointer // Pointers have types, safer low level stuff FClassFieldMember // F means Field member similar to m DoSomething(Parameter) // Older code uses prefix A for parameters instead PropertyName LLocalVariable // Older code uses prefix for parameters not local vars
Using only OneCase and prefixes for each type makes sense in all languages. Even languages that run without prefixes have newer constructs, such as interfaces, that do not rely on chance, but use a prefix instead.
So it really doesn’t matter if the language is case sensitive or not. Newer concepts have been added to case-sensitive languages that were too confusing to be expressed in only one case and required using a prefix.
Since case-sensitive languages have begun to use prefixes, it is prudent to stop using the case with the same identifier name someIdentifier SomeIdentifier SOME_IDENTIFIER, ISomeIdentifier and just use prefixes where that makes sense.
Consider this problem: Do you have a member of a class called something, a method / function parameter called something, and a local variable called something, which case convention can be used to easily distinguish them? Isn't it easier to just use most ConsistentCaseStyle everywhere and add a prefix?
Fans of case-insensitive languages care about the quality of the code, they just want the same style. Sometimes they agree that one library is poorly written and uses a strict style, while a library may not have a style or bad code.
Both case-sensitive and case-insensitive languages require strict discipline, it makes sense to have only one style all over the world. It would be better if we had a language that used only StrictCase, one style everywhere and prefixes.
There is a lot of bad C code, case sensitivity does not make it readable, and there is nothing you can do about it. In a case-insensitive language, you can provide a good style in your code without overwriting the library. In the StrictCase language, which does not yet exist, all the code will have decent quality :)