忌み嫌っている人も多いようですが、私の個人的な意見。嫌いじゃありません。
多くの人は "System Hungarian" は絶対に使うべきではない、"Application Hungarian" を利用すべきと言いますがどんな状態でもそれが正しいでしょうか?
確かに C# のような完全に type safety が保証されている言語では、"Application Hungarian" で問題が無い場合も多いでしょう。
ただし、C# のような完全に type safety が保証されている言語でも cast 前後でそれぞれ変数に割り当てるとなると "Application Hungarian" ではきつくなりますね。扱うものは同じですから、頭に付くか後ろに付くかもしくは真ん中に含めるかどうでもいいですが、型を変数名に含めないといけないでしょうから。まあ、そういう例外を除き "System Hungarian" を積極的に利用する利点が無いわけですから、この場合にはあえて規約として強制すべきではないというのには同意です。
ですが、type safety が保証されていない言語ではどうでしょう? "System Hungarian" 強制したほうがいい場合がありませんか?
例えば、dynamic な言語。多くの dynamic 言語では型の存在が隠蔽されています。そういう言語を扱う場合、明確に型を識別するため "System Hungarian" を利用してやりたくなります。
ちなみに VBS や C を使うときにはガリガリの "System Hungarian" 利用しています。C# で書くときはやらないけど。