What happened to Hungarian Notation?
Hungarian notation had fallen out of use in the mainstream programming, compared to late 1990s and early 2000s. In my observation, today the default setting in the majority of the code writers' minds is Hungarian notation: off
. What had caused this? Is there really no use for Hungarian notation?
Mainstream IDEs have Evolved
Mainstream Integrated Development Environments (IDE) have been getting increasingly more powerful. Now they provide on-the-fly some reference information about variables. This reduces the need to encode additional meta-information (type, scope) into the name of the variable.
OO Languages vs. Non-OO Languages
OO languages (such as C# and Java) vs. non-OO languages (such as plain C). OO program may use a larger set of data types, which can include a large number of classes. Remembering (and sometimes inventing) a map of Hungarian prefixes becomes more tedious.
Using the prefix p
for pointers in C++ is still a good idea. Pointers should be treated with additional care, so it wouldn’t hurt to have this additional bit of labeling. Similarly, fp
for function pointers.
Refactoring
Refactoring has emerged as a major force in software development. Hungarian notation, however, predates the wide use of refactoring. For example, an initial version of the code may have status represented by a string
. Later it gets refactored to an enum
which provides condition for switch
statements. Later it gets refactored again, and condition is replaced with polymorphism.
- Without Hungarian, the metamorphoses of the member variable (field) would be something along the lines of
string m_status
-> StatusEnum m_status
-> Status m_status
The type of the member variable changes but the name remains the same. - With Hungarian
string m_strStatus
-> StatusEnum m_iStatus
-> Status m_objStatus
Notice that both the type and the name change.
The first case requires less change to the source code. Then again, automated refactoring aids would make everything smoother.
Embedded Programming
Code for microcontrollers (especially, the relatively small 8- and 16-bit ones) is often written in plain C. IDEs for microcontrollers often lack Intellisense and other productivity features. As a result, I think that Hungarian notation is still strongly indicated for microcontroller code.