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.