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
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.
OdpowiedzUsuńSądzę, że rozumiem jego słuszną frustrację. Chociaż tyle :-)