Oh boy. That's almost like asking people what religion you should follow. At least you didn't ask what text editor you should use...
My 2c: do what works for you. Also consider whether you are just coding for yourself, or whether you expect other people to read or work on the code you write, and whether you are starting a project from scratch, or building on existing code.
Naming convention really doesn't matter much, so long as:
You pick names that are meaningful and describe the purpose of the variable/function/other. (Key issue here is purpose; let the compiler deal with the type.)
Be consistent in how you apply any other aspects of the convention (indentation, casing, prefixes, use of underscores, etc).
Generally speaking, if code is well-written, the details of the convention don't matter much.
As for Hungarian and prefixes: Win32 and C++ still uses them somewhat, while .Net and C# don't.
I'd highly recommend reading this long but very insightful article by Joel Spolsky that goes to great length to outline how and why a prefix convention can be actually very useful, if done correctly, and also where it's just a pointless chore.
These days, I don't bother with most Hungarian prefixes, except for a few (note that these are just my personal preferences, they're ones that I've found to be useful over the years):
- p for pointers, because in C++, unlike C#, it's useful to know when you're dealing with a reference vs an object, and how many levels of indirection you're dealing with.
- m_ for member variables (Sometimes _ in C# depending on existing code; see HostileFork's note below re _ as a prefix in C++.)
- cch for character counts, cb for byte counts. Its really important in Win32 to not get these mixed up; pass a character count to memcpy or a byte count to GetWindowText, and you'll have trouble. This is the sort of use of prefixes that can help keep your code clear and obviously correct (or incorrect, as the case may be - "ah, of course, I'm passing a cch to memcpy, that's the problem!").
For me, the first two of these help make the code more readable; the third example here helps both with readability, but can also be a useful technique for ensuring correctness - a bit like a mnemonic, if you will.