I was reading thru’ an O’Reilly book on C# from 2003 recently and the author undertook a little diversion into the rationale behind naming conventions.
MS have a real problem because of all that legacy code that is not just being dragged around, but is still actually used. The advice the authors came up with was (I think) pretty sensible.
When you’re writing code that someone else might use, use Pascal Name notation ( System.Xml.XmlTextWriter) in preference to CamelCaps (system.xml.xmlTextWriter), with the exception of interfaces, which should have a capitalized ‘I’ in front of them.
ALL CAPS for pragmas and constants, avoid underscores, and if you’re interfacing with COM or COM+, obey their old naming conventions because if you’re interfacing with COM, you’ll be familiar with them.
Bits of code that aren’t exposed outside of quite restricted scope, they suggest you do whatever you want, except for public members that will be exposed to calling code.
I personally avoid moving outside of standard printable ASCII purely to avoid (as much as possible) the ‘Turkish I problem’, which I’d never heard of before, but just confirms to me that y’all can’t be too careful, even with what looks like ASCII on the page.
It took me a LONG time to fully abandon underscores.