Prawdziwi programiści

Jako że ostatnio opadły mnie programistyczne refleksje, postanowiłem umieścić tekst pewnego artykułu, pochodzącego z magazynu "Tajemnice Atari", czytanego przeze mnie na początku lat dziewięćdziesiątych. Artykuł ów był tłumaczeniem anonimowego tekstu, pochodzącego prawdopodobnie z USA. Zdaję sobie sprawę, że jest on mocno hermetyczny - żeby go docenić nie dość, że trzeba być programistą, to jeszcze raczej wiekowym lub dobrze znającym historię informatyzacji.


Motto: "Prawdziwi programiści nie używają Pascala"
W dawnych, dobrych czasach, zwanych "Złotą Erą" komputerów, łatwo było odróżnić mężczyzn od chłopców (wtedy mówiło się "oddzielić prawdziwych mężczyzn od maminsynków"). W tym okresie prawdziwymi mężczyznami byli ci, którzy rozumieli programowanie komputerów, zaś maminsynkami - ci, którzy nie rozumieli. Prawdziwy programista mówił rzeczy typu: "DO 10 1=1.10" i "ABEND" (oni naprawdę mówili wielkimi literami!), a reszta świata mówiła "komputery są dla mnie zbyt skomplikowane" i "nie potrafię spoufalić się z komputerami - są zbyt bezosobowe". Prawdziwi mężczyźni nie "spoufalają się" z niczym i nie boją się bezosobowości!

Lecz, jak to zwykle bywa, czasy się zmieniają. Patrzymy dziś na świat, w którym starsze panie używają piecyków mikrofalowych wyposażonych w komputery, dwunastoletnie dzieciaki leją prawdziwych mężczyzn w grach typu "Asteroids" i "Pac-Man" i każdy może kupić, a nawet zrozumieć, swój własny komputer osobisty. Prawdziwym programistom zagraża wyparcie przez maturzystów z mikrokomputerami.
Jak widać, istnieje wyraźna potrzeba pokazania różnicy pomiędzy typowym graczem komputerowym z ogólniaka, a prawdziwym programistą. Kiedy różnica ta stanie się jasna, dzieciaki dostaną materiał do przemyślenia i wzór do naśladowania. Łatwiej także będzie wytłumaczyć pracodawcom prawdziwych programistów, dlaczego pomyłką jest zastępowanie tychże pac-manowymi championami, którym nie trzeba tyle płacić.

Języki

Najprostszą metodą oddzielenia prawdziwego programisty od tłumu jest zauważenie, jakiego języka programowania używa. Prawdziwi programiści stosują FORTRAN, maminsynki używają Pascala. Nicklaus Wirth, twórca Pascala, udzielił kiedyś wywiadu, podczas którego zapytano go jak wymawia swoje nazwisko? Odpowiedział, że są tu dwie możliwości - albo wymawia się je jak nazwisko, czyli wirt (w oryg. Veert - przyp. tłum.), albo jak wartość, czyli wert (w oryg. Worth - przyp. tłum.). Każdy może natychmiast sam domyślić się po tej replice, że Nicklaus Wirth jest maminsynkiem. Jedynym mechanizmem, jaki tolerują prawdziwi programiści jest taki, jaki zaimplementowano w kompilatorach FORTRAN-G i FORTRAN-H dla komputera IBM/370. Prawdziwi programiści nie potrzebują do wykonywania swojej pracy wszystkich tych wyszukanych mechanizmów - są naprawdę szczęśliwi, mając dziurkarkę kart, kompilator języka FORTRAN IV i puszkę piwa.
  • Prawdziwi programiści realizują przetwarzanie list w języku FORTRAN.
  • Prawdziwi programiści realizują operacje na tekście w języku FORTRAN.
  • Prawdziwi programiści realizują obliczenia (jeżeli w ogóle zajmują się obliczeniami) w języku FORTRAN.
  • Prawdziwi programiści tworzą programy sztucznej inteligencji w języku FORTRAN.

Jeżeli którejś z tych rzeczy nie możesz zrobić w języku FORTRAN, zrób ją w asemblerze. Jeżeli zaś nie da się jej zrobić w asemblerze - oznacza to, że nie warto sobie nią zawracać głowy.

Programowanie strukturalne

W ciągu ostatnich kilku lat teoretycy informatyki doszli do czegoś, co nazwali "programowaniem strukturalnym". Twierdzą, że programy są o wiele bardziej zrozumiałe, jeżeli programista używa specjalnych konstrukcji językowych. Oczywiście, od dawna nie mogą dojść do porozumienia, o jakie konstrukcje im chodzi, więc przykłady, których używają, aby pokazać swój punkt widzenia, niezmiennie trafiają na łamy takich, czy innych czasopism, nikogo nie przekonując!

Kiedy skończyłem szkołę myślałem, że jestem najlepszym programistą na świecie. Umiałem napisać program, który nie dawał się pokonać w grze w kółko i krzyżyk, używałem pięciu różnych języków programowania i potrafiłem napisać program o długości 1 000 wierszy, który działał (naprawdę!). I wtedy wkroczyłem w prawdziwy świat. Moim pierwszym zadaniem było zapoznanie się z programem, napisanym w języku FORTRAN, który miał długość 200 000 wierszy, zrozumienie go i przyspieszenie jego działania. Każdy prawdziwy programista powie, że całe programowanie strukturalne na świecie nie może pomóc w rozwiązaniu takiego problemu - potrzebny jest talent!

Klika obserwacji, związanych z prawdziwymi programistami i programowaniem strukturalnym:
  • Prawdziwi programiści nie boją się używać instrukcji GOTO.
  • Prawdziwi programiści mogą napisać pętlę DO na pięć stron, nie tracąc wątku.
  • Prawdziwi programiści lubią stosować instrukcje IF - one czynią kod ciekawszym.
  • Prawdziwi programiści piszą programy, które same się modyfikują. zwłaszcza wtedy, kiedy pozwala to oszczędzić 20 nanosekund w środku krótkiej pętli.
  • Prawdziwi programiści nie potrzebują komentarzy - kod jest wystarczająco przejrzysty.


Dzięki temu. że FORTRAN nie ma instrukcji strukturalnych typu REPEAT...UNTIL, ani np. CASE, prawdziwi programiści nie muszą martwić się ich nieużywaniem. W zamian uzyskują pożądane rezultaty, stosując odpowiednio rozkazy GOTO.

Wiele pisało się ostatnio także o strukturach danych. Abstrakcyjne typy. struktury, wskaźniki, listy, łańcuchy stały się popularne w pewnych kręgach. Wirth (wspomniany już maminsynek) napisał nawet książkę, w której usiłuje nas przekonać, że można napisać program oparty na strukturach danych. Jak wiadomo, jedyną pożyteczną strukturą jest tablica. Łańcuchy, listy, rekordy i zbiory są tylko szczególnymi przypadkami tablic i powinny być tak właśnie traktowane, bez zaśmiecania języka programowania wszelkiego rodzaju bzdurami. We wszystkich tych śmiesznych typach danych najgorsze jest to, że musi się je deklarować; w każdym prawdziwym języku programowania typ zmiennej oznacza się pierwszą literą jej sześcioznakowej nazwy.

Systemy operacyjne

Prawdziwi programiści nie używają systemu CP/M, który jest raczej zabawką niż prawdziwym systemem operacyjnym. Nawet starsze panie i dzieci z podstawówki mogą zrozumieć zasady używania CP/M.
Unix jest oczywiście bardziej skomplikowany - typowy użytkownik systemu nigdy nie może spamiętać, jaką komendę wyświetlania wywołać w tym tygodniu, ale szczerze mówiąc, Unix to raczej rodzaj gry komputerowej. Nikt nie wykonuje prawdziwej pracy pod kontrolą Uniksa; robi się tylko kawały w sieci UUCP i pisze gry tekstowe oraz prace naukowe.

Nie, prawdziwy programista używa systemu OS/370. Dobry programista znajduje opis błędu IJK3051 w podręczniku użytkownika JCL. Wybitny programista potrafi napisać program bez zaglądania do podręcznika użytkownika systemu. Genialny programista znajduje błąd w sześciomegabajtowym, szesnastkowym wydruku pamięci, bez używania kalkulatora.

OS/370 to niezapomniany system operacyjny. Można np. zniszczyć efekty wielu dni pracy przez umieszczenie jednej spacji w złym miejscu. Najlepiej kontaktować się z systemem przez dziurkarkę kart. Niektórzy ludzie zarzekają się, że na OS/370 działa system z podziałem czasu, ale po dogłębnej analizie problemu doszedłem do przekonania, że są w błędzie.

Narzędzia programistyczne

W teorii prawdziwy programista może uruchamiać swoje programy po zakodowaniu ich na płycie czołowej komputera. Kiedyś, gdy komputery miały jeszcze płyty czołowe, czasem tak się robiło. Typowy prawdziwy programista wprowadzał nader często do pamięci procedury ładowania, gdy zdarzyło się, że program zniszczył kawałek systemu operacyjnego. Legenda głosi, że Seymore Cray, twórca superkomputera Cray I i większości komputerów firmy Control Data, osobiście wstukał pierwszy system operacyjny dla komputera CDC7600 bezpośrednio na płycie czołowej. Nie trzeba chyba wyjaśniać, że Seymore jest prawdziwym programistą.

W niektórych firmach przetwarzanie tekstu nie wymaga już dziesięciu inżynierów, obsługujących dziurkarkę 029. Dzisiaj prawdziwi programiści wykonują swoją pracę przy pomocy "edytorów tekstu". Wielu ludzi uważa, że najlepsze edytory tekstu powstają w centrum badawczym firmy Xerox w Palo Alto dla komputerów Alto i Dorado. Niestety, żaden prawdziwy programista nie będzie używał komputera z przyjaznym systemem operacyjnym i komunikował się z komputerem za pomocą myszy - trzeba zachować choćby resztki godności!

Kłopot z takimi edytorami polega na tym, że prawdziwi programiści uważają zasadę "widziały gały, co brały" (w niektórych pismach nazywaną WYSIWYG) za niesłuszną, podobnie, jak w stosunku do kobiet. Nie, prawdziwy programista potrzebuje edytora, pracującego w oparciu o inną zasadę: "sam się o to prosiłeś", edytora skomplikowanego, tajemniczego, wszechmocnego, złośliwego i niebezpiecznego. Do którego obsługi potrzeba lat praktyki i niezłomnego hartu ducha.

Prawdziwi programiści wolą w większości wypadków bezpośrednie wprowadzanie kodu binarnego niż robienie poprawek w tekście źródłowym programu. Robią to tak często, że większość programów ma niewiele wspólnego z tekstem początkowym. W wielu przypadkach tak mało, że można powiedzieć, iż tekst źródłowy nie istnieje. Kiedy trzeba poprawić taki produkt, nikt nie odważy się zlecić tej pracy komuś, kto nie jest prawdziwym programistą - żaden maminsynek nie wiedziałby nawet, od czego zacząć. Tę technikę nazywamy utajnianiem naszej pracy.

Oto kilka narzędzi programistycznych NIE używanych przez prawdziwych programistów:
  • Preprocesory języka FORTRAN
  • Debuggery, pracujące na tekście źródłowym - wystarczą wydruki pamięci.
  • Kompilatory, które sprawdzają zakres zmiennych. Zabijają one inicjatywę i pomysłowość oraz nie pozwalają na modyfikację systemu operacyjnego przez zastosowanie ujemnych indeksów.
  • Archiwa tekstów źródłowych. Lepiej przechowywać je na kartach perforowanych.


Prawdziwy programista przy pracy

Żaden prawdziwy programista nie chciałby zostać znaleziony martwy nad programem obliczeniowym w języku COBOL. Prawdziwy programista lubi zadania najwyższej ważności.
  • Prawdziwi programiści pracują w Los Alamos National Laboratory, pisząc symulacje bomby atomowej dla komputera Cray I.
  • Prawdziwi programiści pracują dla Narodowej Agencji Bezpieczeństwa, dekodując rosyjskie transmisje.
  • To dzięki wysiłkom tysięcy prawdziwych programistów pracujących dla NASA, nasi chłopcy mogli polecieć na księżyc przed Rosjanami. Nikt w takim wypadku nie zaufa programowi w języku Pascal.
  • Prawdziwi programiści pracują dla firmy Boeing, projektując systemy operacyjne dla pocisków Cruise.

Wielu prawdziwych programistów pracuje dla rządu Stanów Zjednoczonych. Jednak ostatnio nad horyzontem zaczęła się formować czarna chmura. Wygląda na to, że jakieś wysoko postawione maminsynki z Departamentu Obrony zdecydowały, że wszystkie programy wojskowe powinny być pisane w zunifikowanym języku, zwanym ADA. Początkowo wyglądało na to, że jest to oręż wymierzony w prawdziwych programistów - język strukturalny, z typami danych itd. Na szczęście, po pewnej adaptacji, stał się wystarczająco atrakcyjny, bardzo zwięzły, wyposażony w mechanizmy bezpośredniego dostępu do pamięci i możliwość modyfikacji systemu operacyjnego. Poza tym Edsger Dijkstra go nie lubi! (jak zapewne wiecie, napisał on książkę pt. "Szkodliwe GOTO", będącą policzkiem wymierzonym prawdziwym programistom). A tak w ogóle, wbrew wszelkim modom, zdeterminowany prawdziwy programista może napisać programy fortranowe w dowolnym języku!

Prawdziwy programista może pójść na kompromis ze swoimi zasadami i pracować nad czymś bardziej trywialnym niż sposoby niszczenia życia, o ile praca ta przynosi odpowiednie zarobki. Paru prawdziwych programistów pracuje w firmie ATARI, tworząc gry komputerowe (oczywiście, nie grają w nie - prawdziwy programista zawsze umie pokonać maszynę - gdzie tu więc współzawodnictwo?). Kilku innych zajmuje się grafiką komputerową, chociaż nie znajduje ona większego zainteresowania. Dobrą stroną tej pracy Jest to, że wykonuje się ją w FORTRAN-ie, można więc uniknąć obrzydliwego COBOL-a...

Środowisko naturalne prawdziwego programisty

Typowy prawdziwy programista żyje przed terminalem komputera. Wokół terminala znaleźć można:
  • listingi wszystkich programów, nad którymi kiedykolwiek pracował, rozrzucone przypadkowo na każdej płaskiej powierzchni;
  • około pół tuzina filiżanek z niedopitą kawą, czasem wypełnionych petami, lub innymi śmieciami;
  • podręcznik użytkownika systemu operacyjnego JCL, otwarty na jakiejś interesującej stronie;
  • przyklejony do ściany kalendarz na rok 1969 z psem Snoopy, wydrukowany na drukarce znakowej;
  • schemat blokowy w szufladzie - pozostałość po poprzednim użytkowniku biura (prawdziwy programista pisze programy, a nie dokumentację!).

Prawdziwy programista jest w stanie pracować 30, 40 a nawet 50 godzin bez przerwy. W rzeczywistości, nawet woli pracować w taki sposób. Jeśli nie gonią go terminy, przejawia tendencje do rozważania wielu aspektów jakiegoś niewielkiego problemu przez pierwsze 9 tygodni pracy, a potem kończy całość projektu w ostatnim tygodniu, podczas 50-godzinnego maratonu. To nie tylko robi wrażenie na jego zleceniodawcy, który prawie załamał się, nie widząc postępów w pracach, ale także jest dobrym wytłumaczeniem dla nienapisania dokumentacji. Ogólnie:
  • żaden prawdziwy programista nie pracuje w normalnych godzinach pracy;
  • prawdziwy programista nie nosi krawata;
  • prawdziwy programista nie nosi modnych butów;
  • prawdziwy programista przychodzi do pracy w czasie przerwy obiadowej;
  • prawdziwy programista może, ale nie musi znać imienia swojej żony; na pewno natomiast zna na pamięć całą tablicę ASCII!


Przyszłość

Ostatnia generacja programistów bardzo różni się od swoich poprzedników. Większość młodych programistów nigdy nie widziała dużego komputera, wielu z nich nie potrafi nawet liczyć w systemie szesnastkowym bez pomocy kalkulatora (tak, takie mamy czasy!). Absolwenci szkół są chronieni przed realiami programowania przez debuggery symboliczne, edytory tekstu, które liczą nawiasy i "przyjazne dla użytkownika" systemy operacyjne. Najgorsze jest to, że wielu młodych naukowców robi kariery w dziedzinie informatyki, nie znając nawet podstaw języka FORTRAN. Czyżby nadchodziła era użytkowników Uniksa i programistów pascalowych?

Z własnego doświadczenia mogę powiedzieć, że przyszłość maluje się w jasnych barwach. Ani OS/370 ani FORTRAN nie wykazują najmniejszych oznak wymierania (mimo wszystkich wysiłków maminsynków na całym świecie!). Nawet najbardziej podstępne sztuczki - jak wprowadzenie programowania strukturalnego do języka FORTRAN - zawiodły! Jasne, niektórzy producenci oferują kompilatory FORTRAN-a 77, ale każdy z nich ma możliwość powrotu do oryginalnego FORTRAN-a 66, żeby kompilować pętle DO, jak w piśmie stoi!

Nawet Unix nie musi być tak straszny, jak mogłoby się wydawać. Ostatnia jego wersja ma zalety systemu operacyjnego, godnego prawdziwego programisty. Dwa różne i podstępnie niekompatybilne interfejsy użytkownika, bardzo skomplikowany i tajemniczy sterownik wyświetlania, pamięć wirtualna... Jeśli się pominie jego strukturalność, to nawet język C może być niezły! Nie ma kontroli typów danych, nazwy zmiennych są siedmio- (dziesięcio-?, ośmio-?) znakowe, no i te wskaźniki... Mniam! To tak, jakby najlepsze fragmenty FORTRAN-a i asemblera w jednym miejscu!

Nie, przyszłość nie będzie taka zła. Przez ostatnie kilka lat prasa pisze o tych komputerowych magikach, opuszczających mury uniwersytetu Stanford, czy też M.I.T. i wchodzących w prawdziwy świat. Ponad wszelką wątpliwość, duch Prawdziwego Programisty żyje w tych młodych mężczyznach i kobietach. Dopóki będą istnieć głupie zadania, kretyńskie błędy i nierealistyczne plany - będą prawdziwi programiści gotowi wskoczyć i rozwiązać problem, zostawiając dokumentację na później.
Niech żyje FORTRAN!
Annon. Wersja skrócona: John Wilson i SonOfMotorola

Komentarze

  1. Bynajmniej nie włączę się do dyskusji o programach i programistach :-). Poruszająca jest dla mnie sama pasja i wiedza (autora), tak często ignorowana przez ignorantów u steru - jak to w życiu, niestety, bywa częstym zjawiskiem.
    Sądzę, że rozumiem jego słuszną frustrację. Chociaż tyle :-)

    OdpowiedzUsuń

Prześlij komentarz