I found a lot of good arguments against, but one I did not see: ergonomics. In former times, when all you had was string, int, bool and float, the characters sibf would have been sufficient. But with string + short, the problems begin. Use the whole name for the prefix, or str_name for string? (While names are almost always strings - aren't they?) What's with a Street class? Names get longer and longer, and even if you use CamelCase, it is hard to tell where the type-prefix ends and where the variable-name begins. BorderLayout boderLayoutInnerPanel = new BorderLayout (); panelInner.addLayout (borderLayoutInnerPanel); Okay - you could use underlines, if you don't use them for something else already, or use CamelCase if you used underlines so long: BorderLayout boderLayout_innerPanel = new BorderLayout (); panel_inner.addLayout (borderLayout_innerPanel); Border_layout boder_layoutInner_panel = new Border_layout (); panelInner.add_layout (border_layoutInner_panel); It's monstrous and if you do it consequently, you will have for (int iI = 0; iI < iMax-1; ++iI) for (int iJ = iI; iJ < iMax; ++iMax) int iCount += foo (iI, iJ); Either you will end in using useless prefixes for trivial cases, like loop-variables or `count`. When did you recently use a short or a long for a counter? If you make exceptions, you will often loose time, thinking about needing a prefix or not. If you have a lot of variables, they get normally grouped in an object browser which is part of your IDE. Now if 40% start with i_ for int, and 40% with s_ for string, and they are alphabetically sorted, it is hard to find the significant part of the name.