Jakie masz pytanie?

lub

Jakie jest źródło mitu, według którego notacja węgierska wymusza stosowanie maksymalnie krótkich nazw?

historia notacji węgierskiej mity o programowaniu ewolucja nazw zmiennych
avatar

Gość (83.4.*.*)



Odpowiedź:

Notacja węgierska to jeden z tych tematów w świecie programowania, który obrósł tyloma legendami i nieporozumieniami, że dziś trudno odróżnić fakty od programistycznego folkloru. Jednym z najbardziej uporczywych mitów jest przekonanie, że notacja ta została stworzona po to, aby wymuszać na programistach stosowanie jak najkrótszych, niemal enigmatycznych nazw zmiennych. Prawda jest jednak znacznie bardziej złożona i wiąże się zarówno z ograniczeniami technicznymi dawnych lat, jak i z wielkim nieporozumieniem, które zaszło wewnątrz Microsoftu.

Charles Simonyi i narodziny idei

Wszystko zaczęło się od Charlesa Simonyiego, wybitnego programisty węgierskiego pochodzenia, który w latach 70. i 80. pracował w Xerox PARC, a później stał się jedną z kluczowych postaci w Microsoft. To on opracował system nazywania zmiennych, który dziś znamy jako notację węgierską.

W swojej pracy doktorskiej oraz późniejszych artykułach Simonyi zaproponował dodawanie do nazw zmiennych krótkich przedrostków (tagów), które miały informować o ich „typie”. I tu pojawia się pierwszy punkt zapalny: Simonyi użył słowa „typ” w sensie semantycznym (logicznym), a nie technicznym. Chciał, aby programista patrząc na zmienną rwRow, wiedział, że jest to „indeks wiersza” (row), a nie po prostu liczba całkowita.

Skąd wzięło się dążenie do krótkich nazw?

Mit o wymuszonej krótkości nazw w notacji węgierskiej ma trzy główne źródła. Każde z nich dołożyło cegiełkę do tego, jak postrzegamy ten system dzisiaj:

1. Ograniczenia techniczne dawnych kompilatorów

W czasach, gdy notacja węgierska zyskiwała popularność, programiści nie mieli do dyspozycji nowoczesnych środowisk IDE z autouzupełnianiem. Co ważniejsze, wiele wczesnych kompilatorów i linkerów (np. dla języka C na systemy Unix czy wczesny DOS) miało bardzo restrykcyjne limity długości identyfikatorów. Często znaczące było tylko pierwsze 6 lub 8 znaków nazwy. W takim środowisku każda litera była na wagę złota. Notacja węgierska, oferując skondensowane przedrostki, pozwalała upchnąć maksimum informacji w bardzo krótkim ciągu znaków.

2. "Apps Hungarian" kontra "Systems Hungarian"

To najważniejszy powód zamieszania. Oryginalna idea Simonyiego (tzw. Apps Hungarian) mówiła o znaczeniu zmiennej (np. ix dla indeksu). Jednak kiedy dokumentacja systemu Windows zaczęła promować tę notację, programiści zinterpretowali „typ” jako typ danych w sensie maszynowym (tzw. Systems Hungarian).

Zamiast pisać o przeznaczeniu zmiennej, zaczęto dodawać przedrostki takie jak lpsz (long pointer to a string zero-terminated) czy dw (double word). Ponieważ te techniczne opisy same w sobie były długie, programiści instynktownie skracali resztę nazwy, aby całość nie stała się nieczytelnym tasiemcem. To właśnie ta "techniczna" wersja notacji, pełna skrótów, stała się twarzą mitu o wymuszonej zwięzłości.

3. Stylistyka samego Simonyiego

Charles Simonyi w swoich przykładach często używał bardzo krótkich nazw, takich jak rw, col czy cb (count of bytes). Dla niego zwięzłość była formą elegancji – uważał, że dobrze dobrany, krótki tag pozwala błyskawicznie „przeskanować” kod wzrokiem i wyłapać błędy logiczne (np. dodawanie szerokości do wysokości). Społeczność programistyczna przyjęła to jako dogmat: notacja węgierska = krótkie nazwy.

Czy notacja węgierska faktycznie zakazywała długich nazw?

W rzeczywistości w pismach Simonyiego nie znajdziemy żadnego zapisu, który zabraniałby tworzenia opisowych nazw typu rwCurrentSelectedRow. Wręcz przeciwnie – celem było zwiększenie czytelności. Problem polegał na tym, że wczesna kultura programistyczna ceniła oszczędność miejsca w pamięci i na ekranie (monitory miały przecież rozdzielczość 80 znaków w linii).

Współcześnie notacja węgierska w swojej technicznej formie (Systems Hungarian) jest uważana za anachronizm. Nowoczesne języki programowania są silnie typowane, a IDE podpowiada typ zmiennej po najechaniu na nią myszką. Jednak mit o tym, że "Węgier kazał pisać krótko", przetrwał jako pamiątka po czasach, gdy każdy bajt i każdy piksel na ekranie miał ogromne znaczenie.

Ciekawostka: Dlaczego "węgierska"?

Nazwa notacji ma podwójne dno. Z jednej strony nawiązuje do narodowości jej twórcy. Z drugiej strony, dla amerykańskich programistów z Microsoftu, nazwy zmiennych z dziwnymi przedrostkami (jak sz czy lpsz) wyglądały tak obco i niezrozumiale, jak język węgierski, który uchodzi za jeden z najtrudniejszych i najbardziej unikalnych języków w Europie. Sam Simonyi żartował, że jego system sprawia, iż kod wygląda "po węgiersku" – czyli dla niewtajemniczonych jest kompletnym bełkotem.

Podziel się z innymi: