Wpis z mikrobloga

Tao programowania
Księga Pierwsza - Cicha Pustka
Oto rzekł mistrz programowania:
`Gdy nauczysz się wychwytywać kod błędu z ramki pułapki, będzie to czas, abyś
wyszedł.''
1.1
Formuje się rzecz tajemnicza, urodzona w pustce. Czekając samotnie i w ciszy,
jest zarówno nieruchoma, jak i w ciągłym ruchu. Jest źródłem wszystkich
programów. Nie znam jej imienia, będę więc ją nazywał Tao Programowania.
Skoro tylko Tao jest wielkie, system operacyjny jest wielki. Skoro tylko system
operacyjny jest wielki, kompilator jest wielki. Skoro tylko kompilator jest wielki,
aplikacja jest wielka. Użytkownik jest zadowolony i istnieje harmonia we
wszechświecie.
Tao Programowania odpływa daleko i wraca na porannym wietrze.
1.2
Tao zrodziło kod maszynowy. Kod maszynowy zrodził assembler.
Assembler zrodził kompilator. I oto powstało do dziś dziesięć tysięcy języków.
Każdy język odgrywa swoją rolę, choć skromną. Każdy język wyraża Yin i Yang
oprogramowania. Każdy język ma swoje miejsce wewnątrz Tao.
Ale jeśli możesz, postaraj się nigdy nie programować w COBOLu.
1.3
Na początku było Tao. Tao zrodziło Czas i Przestrzeń. Czas i Przestrzeń są więc
Yin i Yang programowania.
Programistom, którzy nie szanują Tao, zawsze kończy się czas i przestrzeń dla
ich programów. Programiści, którzy szanują Tao, zawsze mają wystarczająco
czasu i przestrzeni, aby osiągnąć swoje cele.
Jakże mogłoby być inaczej?
1.4
Rozumny programista, usłyszawszy o Tao, podąża nim. Przeciętny programista,
usłyszawszy o Tao, szuka go. Głupi programista, usłyszawszy o Tao, śmieje się z
niego.
Gdyby nie ten śmiech, nie byłoby Tao.
Najwyższe dźwięki są najtrudniejsze do usłyszenia.
Pójść naprzód to sposób, aby się wycofać.
Wielki talent objawia się późno w życiu.
Nawet idealny program wciąż ma błędy.
Księga Druga - Starożytni Mistrzowie
Oto rzekł mistrz programowania:
Po trzech dniach bez programowania, życie traci sens.''
2.1
Programiści przeszłości byli tajemniczy i nieodgadnieni. Nie możemy badać ich
myśli, więc wszystko co zrobimy, to opisanie ich wyglądu.
Przytomni, niczym lis przeprawiający się przez wodę. Czujni, niczym generał na
polu walki. Mili, niczym gospodyni pozdrawiająca swoich gości. Prości, niczym
nieociosane kloce drewna. Nieprzeniknieni, niczym czarne kałuże w mrocznych
jaskiniach.
Któż może pojąć sekrety ich serc i myśli?
Odpowiedź leży w Tao.
2.2
Wielki Mistrz Turing pewnego razu śnił, że jest maszyną. Kiedy się ocknął,
wykrzyknął:
Nie wiem, czy jestem Turingiem śniącym, że jestem maszyną, czy też maszyną,
śniącą, że jestem Turingiem!''
2.3
Programista z bardzo dużej korporacji komputerowej pojechał na konferencję
programistyczną i po powrocie melduje się swojemu menedżerowi, mówiąc:
Jacyż to programiści pracują dla innych korporacji? Zachowywali się źle i nie
dbali o powierzchowność. Ich włosy były długie i zaniedbane, ich stroje były
pomarszczone i stare. Zniszczyli atmosferę naszej gościnności i wydawali
niegrzeczne dźwięki podczas mojej prezentacji.''
Menedżer rzekł:
Nigdy nie powinienem był wysyłać cię na tę konferencję. Ci
programiści żyją ponad materialnym światem. Uznają życie za absurd i
przypadkowy zbieg okoliczności. Przybywają i podróżują nie znając żadnych
granic. Bez żadnej innej troski, żyją tylko dla swoich programów. Dlaczego
mieliby przejmować się konwenansami?''
Oni żyją wewnątrz Tao.''
2.4
Początkujący zapytał Mistrza:
Oto programista, który nigdy nie projektuje, nie
dokumentuje i nie testuje swoich programów. Pomimo tego, wszyscy, którzy go
znają, uważają go za jednego z najlepszych programistów na świecie. Dlaczego
tak jest?''
Mistrz odpowiedział:
Ten programista osiągnął jedność z Tao. Wykroczył poza
potrzebę posiadania projektu; nie złości się, gdy system się zawiesi, ale akceptuje
całą naturę wszechświata bez żadnych wyjątków. Wykroczył poza potrzebę
dokumentowania; nie interesuje go już, czy inni będa oglądać jego kod.
Wykroczył poza potrzebę testowania; każdy z jego programów jest doskonały sam
w sobie, jasny i elegancki, a ich przeznaczenie narzuca się samo. Zaiste, posiadł
on tajemnicę Tao.''
Księga Trzecia - Projektowanie
Oto rzekł mistrz programowania:
Kiedy testuje się program, jest już za późno, aby zmienić założenia w projekcie.''
3.1
Pewnego razu był człowiek, który pojechał na targi techniki komputerowej.
Każdego dnia, kiedy wchodził, informował strażnika przy drzwiach:
Jestem wielkim złodziejem, znanym z bezszelestnego okradania sklepów. Bądź
ostrzeżony, albowiem te oto targi również nie unikną splądrowania.''
Te słowa niepokoiły wielce strażnika, ponieważ na targach zgromadzono sprzęt
komputerowy warty miliony dolarów. Obserwował więc bacznie owego człowieka.
Ten jednak przechadzał się od boksu do boksu, zaledwie mrucząc cicho do siebie.
Gdy człowiek opuścił targi, strażnik wziął go na stronę i przeszukał jego ubrania.
Niczego jednak nie znalazł.
Następnego dnia targów, człowiek powrócił i złajał strażnika słowami:
Wczorajszego dnia uciekłem z wielkim łupem, dziś jednak będzie on jeszcze
większy.'' Strażnik więc obserwował go jeszcze baczniej, ale bez żadnego efektu.
Ostatniego dnia targów, strażnik nie potrafił okiełznać swojej ciekawości.
Panie
Złodzieju,'' rzekł,
Jestem tak zaskoczony, nie mogę zaznać spokoju. Proszę,
oświeć mnie. Czymże jest to, co pada twoim łupem?''
Człowiek uśmiechnął się.
Zajmuję się rabowaniem pomysłów,'' rzekł.
3.2
Był pewnego razu mistrz programowania, który pisał nieustrukturyzowane
programy. Początkujący, próbując go naśladować, także zaczął pisać programy
nieustrukturyzowane. Gdy początkujący poprosił mistrza o ocenienie jego
postępów, mistrz skrytykował go za pisanie nieustrukturyzowanych programów,
powiadając:
To co jest odpowiednie dla mistrza, nie jest odpowiednie dla
początkującego. Musisz zrozumieć Tao, zanim przekroczysz strukturę.''
3.3
Był pewnego razu programista, który związany był z dworem hetmana Wu.
Hetman zapytał programistę:
Który z tych dwóch jest łatwiej zaprojektować:
pakiet księgowy czy system operacyjny?''
System operacyjny,'' odparł programista.
Hetman wyraził bezgraniczne zdumienie.
Ależ zapewne pakiet księgowy jest
trywialny, jesli porównać go do stopnia skomplikowania systemu operacyjnego,''
powiedział.
To pozory,'' rzekł programista, gdy projektuje się pakiet księgowy,
programista odgrywa rolę mediatora pomiędzy ludźmi mającymi różne poglądy:
jak musi on działać, jak muszą objawiać się jego wyniki i jak musi zgadzać się z
ustawą o podatku. Przeciwnie system operacyjny, on nie jest ograniczony
zewnętrznymi konwenansami. Projektując system operacyjny, programista
szuka najprostszej harmonii pomiędzy maszyną i koncepcjami. Oto dlaczego
system operacyjny łatwiej zaprojektować.''
Hetman Wu skinął i uśmiechnął się.
To wszystko dobre i jasne, ale w którym z
tych dwóch łatwiej znaleźć błędy?''
Programista nie udzielił odpowiedzi.
3.4
Menedżer poszedł do głównego programisty i pokazał mu listę wymagań
stawianej nowej aplikacji. Menedżer spytał mistrza:
Jak długo potrwa
zaprojektowanie tego systemu, jeśli przypiszę do niego pięciu programistów?''
Zajmie to jeden rok,'' odparł bezzwłocznie mistrz.
Ale potrzebujemy tego systemu natychmiast, albo może nawet wcześniej! Jak
długo to zajmie, jeśli przypiszę do niego dziesięciu programistów?''
Mistrz zmarszczył czoło.
W takim wypadku, zajmie to dwa lata.''
A co jeśli przypisałbym setkę programistów do tego projektu?''
Główny programista wzruszył ramionami.
Wówczas projekt nigdy nie zostanie
skończony,'' rzekł.
Księga Czwarta - Kodowanie
Oto rzekł mistrz programowania:
Dobrze napisany program jest swoim własnym rajem; źle napisany program
jest swoim własnym piekłem.''
4.1
Program powinien być lekki i zwinny, jego procedury połączone ze sobą jak
sznurek pereł. Dusza i przeznaczenie programu powinny iśc z soba w parze. Nie
powinno być ani zbyt dużo, ani za mało, ani niepotrzebnych pętli, ani
nieużytecznych zmiennych, ani braku struktury, ani przesadnego porządku.
Program powinien przestrzegać 'Prawa Najmniejszego Zaskoczenia'. Jakie to jest
prawo? To prawo po prostu mówi, że program zawsze powinien reagować w
sposób najmniej zaskakujący użytkownika.
Program, nieważne jak skomplikowany, powinien zachowywać się jak pojedyncza
jednostka. Program powinien być raczej zgodny z logiką, niż z zewnętrznymi
konwenansami.
Jeśli program nie spełnia tych wymagań, będzie on w stanie nieporządku i
pomieszania. Jedynym sposobem na poprawienie tego będzie napisanie
programu od nowa.
4.2
Początkujący spytał mistrza:
Mam program, który czasem działa poprawnie, a
czasem zawiesza się. Postępowałem według reguł programowania, jestem jednak
zupełnie zbity z tropu. Jaki jest tego powód?''
Mistrz odparł:
Jesteś zbity z tropu, albowiem nie pojmujesz Tao. Tylko głupiec
oczekuje rozsądnego zachowania od otaczających go ludzi. Dlaczego oczekujesz go
od maszyny, którą ludzie skonstruowali? Komputery udają determinizm; tylko
Tao jest doskonałe.''
Reguły programowania są zmienne; tylko Tao jest wieczne. Musisz więc
kontemplować Tao, zanim otrzymasz oświecenie.''
Ale skąd będę wiedział, kiedy otrzymałem oświecenie?'' zapytał początkujący.
Twój program będzie wtedy działał poprawnie,'' odparł mistrz.
4.3
Mistrz wyjaśniał naturę Tao jednemu ze swoich uczniów.
Tao jest ucieleśniane
przez każde oprogramowanie - niezależne jak błahe,'' rzekł mistrz.
Czy Tao jest w kieszonkowym kalkulatorze?'' zapytał uczeń.
Jest,'' nadeszła odpowiedź.
Czy Tao jest w grze wideo?'' kontynuował nowicjusz.
Jest nawet w grze wideo,'' rzekł mistrz.
I czy Tao jest w DOSie dla komputera osobistego?''
Mistrz zakasłał i nieznacznie poruszył się.
Lekcja jest na dzisiaj skończona,''
rzekł.
4.4
Programista księcia Wang pisał oprogramowanie. Jego palce tańczyły po
klawiaturze. Program skompilował się bez najmniejszego błędu i działał niczym
delikatny wietrzyk.
Wspaniale!'' wykrzyknął książe, Twoja technika jest bezbłędna!''
Technika?'' rzekł programista, odwracając się od monitora, To, czym podążam,
to Tao - ponad wszelkie techniki! Kiedy zacząłem programować, widziałem cały
problem w jednej bezkształtnej masie. Po trzech latach nie widziałem już tej
masy. Zamiast niej widziałem procedury. Ale teraz nie widzę już niczego. Moja
jaźń istnieje w bezkształtnej pustce. Moje zmysły są wyłączone. Moja dusza, nie
ograniczając się żadnym planem, podąża za własnym instynktem. Krótko
mówiąc, program pisze się sam. Owszem, czasami są trudne problemy. Widzę,
kiedy zbliżają się, wówczas zwalniam i przypatruję się im w milczeniu. Wtedy
zmieniam pojedynczą linijkę kodu i problemy rozpływają się niczym kłęby
jałowego dymu. Wtedy kompiluję program. Siedzę w bezruchu i pozwalam
radości mojej pracy wypełnić moje istnienie. Zamykam oczy na moment, a potem
wychodzę z systemu.''
Książe Wang rzekł:
Gdybyż wszyscy moi programiści posiadali taką mądrość!''
Księga Piąta - Konserwacja
Oto rzekł mistrz programowania:
Nawet gdy program będzie się składał zaledwie z trzech linijek, kiedyś będzie
musiał podlegać konserwacji.''
5.1
Dobrze używane wrota nie potrzebują oleju w swoich zawiasach.
Płynący wartko strumień nie powoduje zastojów.
Ani dźwięk, ani myśli nie potrafią podróżować poprzez próżnię.
Oprogramowanie gnije, jeśli go nie używać.
Oto są wielkie tajemnice.
5.2
Menedżer spytał programistę jak długo zajmie mu skończenie programu, nad
którym pracuje.
Będzie skończony jutro,'' odparł programista bezzwłocznie.
Myślę, że jesteś przesadnym optymistą,'' rzekł menedżer, Naprawdę, ile to
zajmie?''
Programista zamyślił się na chwilę.
Mam jeszcze kilka usprawnień, które
chciałbym dodać. To zajmie co najmniej dwa tygodnie,'' ostatecznie rzekł.
Nawet to jest zbyt wiele, ponad to co można wymagać,'' nalegał menedżer,
Będę zadowolony, jeśli po prostu powiesz mi, kiedy program zostanie
skończony.''
Programista zgodził się na to.
Kilka lat później menedżer odszedł na emeryturę. Kiedy odbierał odprawę,
odkrył, że programista śpi przed swoim monitorem. Programował całą noc.
5.3
Początkujący programista pewnego razu został przypisany do prostego pakietu
finansowego.
Początkujący pracował wściekle przez wiele dni, ale gdy jego mistrz przejrzał
jego program, odkrył, że zawierał on edytor ekranowy, zestaw ogólnych procedur
graficznych, interfejs sztucznej inteligencji, ale ani jednego śladu czegokolwiek
finansowego.
Gdy mistrz zapytał o to, początkujący poczuł się zgorszony.
Nie bądź tak
niecierpliwy,'' powiedział,
Kiedyś w końcu wrzucę do niego wszystkie te
finanse.''
5.4
Czy dobry rolnik zaniedbuje zboże, które zasiał?
Czy dobry nauczyciel przeacza nawet swojego nabardziej skromnego ucznia?
Czy dobry ojciec pozwala umrzeć z głodu choćby jednemu dziecku?
Czy dobry programista odmawia konserwowania swojego kodu?
Księga Szósta - Zarządzanie
Oto rzekł mistrz programowania:
Niech programistów będzie wielu, a menedżerów kilku - wówczas wszyscy
będziemy wydajni.''
6.1
Gdy menedżerowie odbywają niekończące się spotkania, programiści piszą gry.
Gdy księgowi mówią o zyskach kwartalnych, budżet działu rozwojowego właśnie
zmniejsza się. Gdy nestorzy nauki mówią o niebieskim niebie, chmury właśnie
zamierzają je zakryć.
Zaiste, nie jest to Tao Programowania.
Gdy menedżerowie czynią zobowiązania, programy rozrywkowe są ignorowane.
Gdy księgowi tworzą plany długoterminowe, powraca porządek i harmonia. Gdy
nestorzy nauki wskazują problemy palcem, problemy wkrótce zostaną
rozwiązane.
Zaiste, oto jest Tao Programowania.
6.2
Dlaczego programiści są tak mało wydajni?
Ponieważ ich czas jest tracony na spotkania.
Dlaczego programiści są tak rewolucyjnie nastawieni?
Ponieważ menedżerowie wtrącają się zbyt bardzo.
Dlaczego programiści rezygnują jeden po drugim?
Ponieważ wypalili się.
Pracowawszy przez lata dla kiepskich menedżerów, już nie cenią swojej pracy.
6.3
Menedżer miał zostać zwolniony, ale programista, który pracował dla niego
wynalazł nowy program, który stał się popularny i sprzedawał się dobrze. W
konsekwencji, menedżer zachował swoją pracę.
Menedżer chciał dać programiście premię, ale programista odmówił jej przyjęcia,
mówiąc:
Napisałem ten program, ponieważ pomyślałem, że to będzie
interesujące, nie oczekuję więc żadnej nagrody.''
Menedżer, słysząc te słowa, zanotował w pamięci:
Ten oto programista, chociaż
jego stanowisko nie obdarza go szacunkiem, doskonale rozumie prawidłowe
obowiązki pracownika. Awansujmy go więc na wysoką posadę konsultanta
zarządu!''
Ale gdy to usłyszał, programista ponownie odmówił, mówiąc:
Istnieję po to, aby
programować. Jeśli zostałbym awansowany, nie robiłbym nic poza marnowaniem
czasu innych ludzi. Czy mogę już odejść? Pracuję właśnie nad pewnym
programem.''
6.4
Menedżer poszedł do swoich programistów i rzekł im:
Jeśli idzie o wasze
godziny pracy: musicie przychodzić o dziewiątej rano i wychodzić o piątej po
południu.'' Usłyszawszy to, programiści rozwścieczyli się i kilku na miejscu
odeszło z pracy.
Menedżer rzekł:
Dobrze więc, w takim wypadku możecie sobie sami ustalić
godziny pracy, pod warunkiem, że będziecie kończyć wasze projekty zgodnie z
planami.'' Wówczas programiści, zadowoleni, zaczęli przychodzić do pracy po
południu i pracować do wczesnych godzin porannych.
Księga Siódma - Mądrość Korporacji
Oto rzekł mistrz programowania:
Możesz zademonstrować program kierownikowi korporacji, ale nie możesz
zrobić z niego znawcy komputerów.''
7.1
Początkujący zapytał mistrza:
Na wschodzie istnieje wielka, rozgałęziona
struktura, którą ludzie nazywają
Biurem Zarządu'. Ona wypełniona jest po
brzegi wiceprezesami i księgowymi. Wydaje mnóstwo notatek, każda mówiąca
Go, Hence!' albo Go, Hither!', i nikt nie wie, co to oznacza. Każdego roku nowe
nazwiska pojawiają się w gałęziach struktury, ale wszystko to nie przynosi
żadnego skutku. Jakże może istnieć tak nienaturalny twór?''
Mistrz odparł: `Postrzegasz tę niezmierzoną strukturę i jesteś zaniepokojony, że
nie ma ona żadnego praktycznego celu. Czy nie mógłbyś nie czerpać przyjemności
z jej nieskończonego wirowania? Czy nie czerpiesz przyjemności z beztroskiej
łatwości programowania za jej chroniącymi gałęziami? Dlaczego jesteś przejęty
jej bezcelowością?''
7.2
Na wschodzie jest rekin, który jest większy niż wszystkie inne ryby. Zmienia się
on w ptaka, którego skrzydła są niczym chmury wypełniające niebo. Ów ptak
przemierza lądy i przynosi wiadomość z Biura Zarządu. Jego wiadomość spada
na programistów, zupełnie jak spada znak mewy na plażę. Potem ptak ujeżdża
wiatr i z błękitnym niebem na swoich plecach wraca do domu.
Początkujący programista wpatruje się w ptaka z zadziwieniem, albowiem nie
rozumie go. Przeciętny programista lęka się przybycia ptaka, albowiem boi się
jego wiadomości. Mistrz programowania nie odwraca się od swojego monitora,
albowiem nie zauważa przybycia ptaka i jego odlotu.
7.3
Czarodziej z Wieży Kości Słoniowej przyniósł do zbadania mistrzowi
programowania swój najnowszy wynalazek. Czarodziej wtoczył dużą czarną
skrzynię do biura mistrza, podczas gdy mistrz oczekiwał w ciszy.
Oto zintegrowana, rozproszona stacja robocza ogólnego przeznaczenia,''
rozpoczął czarodziej,
zaprojektowana ergonomicznie, z zamkniętym systemem
operacyjnym, językami szóstej generacji i wieloma doskonałymi interfejsami
użytkownika. Zabrało moim asystentom kilka setek osobolat, aby to
skonstruować. Czyż to nie jest zdumiewające?''
Mistrz uniósł nieznacznie brwi.
Istotnie, to jest zdumiewające,'' rzekł.
Biuro Zarządu rozkazało,'' kontynuował czarodziej, aby wszyscy używali tej
stacji roboczej jako podłoża dla nowych programów. Czy zgadasz się na to?''
Oczywiście,'' odparł mistrz, Natychmiast każę ją przetransportować do
serwerowni!'' I czarodziej powrócił do swojej wieży, bardzo zadowolony.
Kilka dni później, początkujący przybył do biura mistrza i rzekł:
Nie potrafię
znaleźć kodu źródłowego mojego nowego programu. Czy wiesz, gdzie może on
być?''
Owszem,'' odparł mistrz, kody źródłowe są poukładane na stacji roboczej w
serwerowni.''
7.4
Mistrz programowania porusza się od programu do programu bez strachu. Żadna
zmiana w zarządzie nie może zrobić mu krzywdy. Nie zostanie zwolniony, nawet
jeśli projekt zostanie porzucony. Dlaczego tak jest? Ponieważ jest wypełniony
Tao.
Księga Ósma - Sprzęt i Oprogramowanie
Oto rzekł mistrz programowania:
Bez wiatru, trawa nie porusza się. Bez oprogramowania, sprzęt jest
bezużyteczny.''
8.1
Początkujący zapytał mistrza:
Widzę, że jedna korporacja komputerowa jest
dużo większa niż wszystkie pozostałe. Góruje nad nimi niczym olbrzym nad
krasnoludami. Każdy z jej działów mógłby stanowić odrębną korporację. Dlaczego
tak jest?''
Mistrz odparł:
Dlaczego zadajesz tak głupie pytania? Owa korporacja jest
wielka, ponieważ jest wielka. Gdyby produkowała jedynie sprzęt, nikt nie
kupowałby go. Gdyby produkowała tylko oprogramowanie, nikt by go nie używał.
Gdyby tylko konserwowała systemy, ludzie traktowaliby ją jak służącego. Ale
ponieważ łączy wszystkie te rzeczy w sobie, ludzie uważają ją za jednego z
bogów! Nie szukając zwady, podbija inne bez wysiłku.''
8.2
Mistrz programowania przeszedł obok początkującego programisty pewnego
dnia. Mistrz zauważył zainteresowanie początkującego kieszonkową grą
komputerową.
Przepraszam,'' rzekł, czy mogę to zobaczyć?''
Początkujący wyostrzył uwagę i podał grę mistrzowi.
Widzę, że to urządzenie
twierdzi, jakoby posiadało trzy poziomy gry: Łatwy, Średni i Trudny,'' rzekł
mistrz.
A jednak każde takie urządzenie ma jeszcze jeden poziom, na którym
nie próbuje ono podbić człowieka, ani też nie próbuje być przez człowieka
podbitym.''
Wielki mistrzu,'' błagał początkujący, `jak włącza się owy tajemniczy poziom?''
Mistrz rzucił grę na ziemię
  • 7
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Spojler22: Programista to człowiek leniwy z natury, jakbyśmy byli ambitni i pracowici to wszystko byśmy robili ręcznie i na piechotę, a tutaj jest dużo czytania ( ͡º ͜ʖ͡º)
  • Odpowiedz
@seo000: Nie jestem programistą bo byłem za leniwy by kontynuować naukę po liceum :P Ale ten tekst jest tak dobry, że przeczytałem go w całości. Jestem na 99% pewien, że to najdłuższy tekst jaki kiedykolwiek przeczytałem na mirko
  • Odpowiedz