Thread started by davidlu on Wednesday, April 02, 2014.

Pronunciation of Hungarian Notation tags

Pronunciation of Hungarian Notation tags - how we spoke the names of Hungarian types and variable names out loud in discussions about Word code

Many folks who first read code that has been notated in Hungarian, complain that the data object names in the program text look like gobbledegook and are unpronounceable - PCD, CHP, PAP, SED, BTE, mpwwhwwd, mpdochdod, hdndl, dnsprm, mpfoobar.

Despite that objection, Hungarian, as used in the Microsoft Applications Division, was the lingua franca that allowed us to discuss and easily master the mass of code that we maintained for our applications development.

Forbidding its use because of unpronounceability would have led to confounding disasters similar to those that the Bible report befell mankind after the Lord scrambled human speech to punish the hubris of the erection of the Tower of Babel.

I would grant that it is correct to say that Hungarian names were not 'obviously pronounceable'. Despite that, Apps Hungarian practitioners found that it was pretty easy to pronounce Hungarian names if a few rules were followed.

Microsoft Applications developers would have failed monumentally as software developers communication lingo if there was not an efficient way to communicate aurally via Hungarian.

As it was, Microsoft Apps Division could compete successfully with staffs of 10 to 15 developers against its competitors, who rumor had it were already using staffs of hundreds to produce their products (Word Prefect, Lotus and Ashton-Tate).

Many within Microsoft thought that the Hungarian notation used in application development allowed Microsoft software engineers to work and collaborate with that kind of 10 times or better competitive efficiency.

When prefixes of composition were used in a Hungarian name (eg. rg, mp, dn, pl, plc, p, h) we would expand the prefix and name the kind of structure that we were dealing with.

An rg was a range (an unstructured array of records), an mp was a map (an array that transformed a meaningful array index into a different datatype), a dn was a domain (an array that stored information corresponding to a particular meaningful type of array coordinate), a pl was a plex (a generalized variable length array), a plc was a plex of character positions (a generalized variable length array whose entries were in one-to-one correspondence with a sorted, searchable array of character positions that marked significant locations or boundaries within the text stream of a document), a p was a pointer, an h was a handle.

If a hungarian tag contained a vowel, we pronounced that tag using the rules of English pronunciation.

A SED (a SEction Descriptor) was pronounced like 'said', a PAP (a PAragraph Property block) was pronounced 'pap', like Huckleberry Finn's father's preferred nickname.

If a tag did not contain a vowel and was frequently used, if we could, we pronounced it with a vowel sound that fit comfortably within that consonant cluster.

A CHP (a CHaracter Property block) we pronounced as a 'chip'. A STSH (a STyle SHeet record) we pronounced as a 'stish'.

If a tag was consonantal and two or three characters long, and a vowel didn't automatically suggest itself to make it easier to pronounce, we spelled it out letter by letter.

A CP (Character Position in a Word document) we spelled out as a cee-pee. An FC (a File Character position) we spelled out as an eff-cee. A PN (page number) was a pee-en.

If we saw mpdochdod[ ], we pronounced that as map-doc-to-aitch-dod or even map-doc-aitch-dod, if the person we were speaking to was an old hand with Word code.

If we were speaking to a new programmer who was still learning the lingo, we would say that this array was a map from a DOCument number to a handle that references a heap data block that records a DOcument Descriptor.

If we saw hplcbteChp or hplcbtePap, we pronounced that as an aitch-pleece-B-T-E-chip or an aitch-pleece-B-T-E-pap.

When we were speaking to neophytes, for their benefit we would read that as a 'handle to a plex of character positions in 1-to-1 correspondence with an array of Bin Table Entries that we search to locate the corresponding CHaracter Prop or PAragraph Prop for a particular Character Position'.

Notice how two 11 character object names mentally expand into an accurate 34 word description of what these objects really are. Notice also how a six syllable name expands into this long but accurate explanation when a programmer understands how to parse an Apps Hungarian name using the object's shorthand pronunciation.

If we saw a PRM (a PRoperty Modifier), we pronounced that as 'perm', a sequence of instructions that described how the content of property data structure is smashed, field by field, to produce a desired property value content.

If we saw sprm (a Single PRoperty Modifier), we pronounced that as a 'sperm', a numerical opcode that had an operation payload following that specified which single property value in a property block should be changed and described how it should be changed.

If we needed to find out the length of a sprmCFBold operator, which sets the bold flag in the CHP (character prop block), we would reference the dnsprm[sprmCFBold].cch, which we would pronounce as the cee-cee-aitch (count of characters) value of the sprmCFBoldth entry of the domain of sperms.

If we saw a dndl[ ], we would pronounce that as a dee-en-dee-ell, and call it a domain of Display Lines for the uninitiated.

If we wanted to know the upper left corner coordinates of the 5th line displayed in some window area, we might reference the pwwd->dndl[5].xpLeft and pwwd->dndl[5].ypTop, which we would pronounce as a 'pee-double u-double u-dee right lump fifth dee-en-dee-el entry's ex-pee-left and why-pee-top'.

For a neophyte we'd expand that into "a Pointer to Window Descriptor that points to the domain of display lines for that window (an array that stores info about each line displayed in that window) where we would like to access the 5th entry in that domain corresponding to the 5th line displayed in that window, in order to lookup the xpLeft horizontal pixel coordinate and ypTop vertical pixel coordinate values stored within that entry, where xp and yp values are measured from the upper left corner of the window".

If we saw rgstu[istu] we'd say that we were indexing a range of stu with an eye-stew.

For neophytes we might say that we are indexing an unstructured array of STUdent records using an integer index to student.

We would likely expect that this reference occurs within the bounds of a loop construct that initializes istu to 0, which iterates until istu is equal to istuLim (the limit coordinate of the array of STU, pronounced eye-stew-lim).

I hope that I've demonstrated that apparently unpronounceable Hungarian data object names and procedure names were pronounceable by programmers who had absorbed a particular project's development culture and that Hungarian names were pronounced in a short hand or expanded form whose use depended on the experience level of the programmers who were participating in a discussion about application source code.

Those who were versed in the art could pronounce a project's Hungarian names pretty easily a week or two after exposure to the Hungarian usages of a new software project.

After that small amount of overhead was paid, Apps Hungarian practitioners frequently testified that they could write code faster while introducing fewer faults into their projects, that verbal and written communications about code became much quicker, much more precise, and less confusing, and that code became much easier to comprehend, especially when a reader was not the code's original author.

I would guess that the Cyrillic, Greek, and Gothic scripts all look dismayingly ugly to those who are used to Roman orthography.

The lack of vowels in the Arabic and Hebrew alphabets I'm sure dismay many who fluently read text that is rendered using the common European alphabets.

I'd imagine that all programming notations likely look unbearably barbaric and drearily ugly to those who's only language experience is with their mother tongue.

Such notations can acquire an aura of beauty when a person experiences how ideas that are nearly impossible to express accurately and fluently in unrestricted language become easier to think about when a felicitous notation is adopted.

Apps Hungarian practitioners tended to experience Hungarian with that kind of aura after they used it for awhile as they attempted to solve hard programing problems as part of a programming team that was working at high efficiency.