<!–
: Translated by Geoffrey James
: Transcribed by Duke Hillard
: Transmitted by Anupam Trivedi, Sajitha Tampi, and Meghshyam Jagannath
: Re-html-ized and edited by Kragen Sittler
: Daljoj devavilonizaciji, de-kodifikaciji i estetizaciji teksta skromno doprineo Kowalsky
: Neupravljačka supervizija projekta := stefoza
: Source last modified 1996-04-10 or earlier
: Dedicated to Tsigo Rastaman
–>
<?ansic
#include <wprssstdio.h>
#define Sadržaj(
1. Gluvo ništavilo
2. Drevni majstori
3. Dizajn
4. Kodiranje
5. Održavanje
6. Upravljanje
7. Korporativna mudrost
8. Hardver i softver
9. Epilog)
*/
void main ()
{
if (ready()) {
/* Knjiga prva – Gluvo ništavilo
1.1
Tako je govorio glavni programer:
“Kada naučiš da iščupaš grešku iz interapta, znaćeš da ti je došlo vreme odlaska.”
1.2
Nešto misteriozno je stvoreno, rođeno iz gluvog ništavila. Čekajući usamljeno i statično, ono je istovremeno nepokretno i u stalnom pokretu. Ono je izvor svih programa. Onom imena ne znam, te ću ga nazvati Tao programiranja.
Ako je Tao veličanstven, onda je operativni sistem veličanstven. Ako je operativni sistem veličanstven, onda je kompajler veličanstven. Ako je kompajler veličanstven, onda je aplikacija veličanstvena. Korisnik postaje zadovoljan i nastaje harmoničan svet.
Tao programiranja lebdi daleko i vraća se na vetrovima jutra.
1.3
Tao porađa mašinski jezik. Mašinski jezik porađa asembler.
Asembler porađa kompajler. I sada postoji desetina hiljada jezika.
Svaki jezik ima svrhu, ma koliko skromna ona bila. Svaki jezik izražava Jin i Jang softvera. Svaki jezik nalazi svoje mesto unutar Tao.
Ali nemojte koristiti COBOL, ukoliko baš ne morate.
1.4
U početku bio je Tao. Tao je porodio prostor i vreme. Tako su prostor i vreme Jin i Jang programiranja.
Programeri koji ne shvataju Tao uvek ostaju bez prostora ili vremena za svoje programe. Programeri koji razumeju Tao uvek imaju dovoljno prostora i vremena da završe svoje programe.
Može li biti drugačije?
1.5
Mudar programer čuo je za Tao i povinovao mu se. Prosečan programer čuo je za Tao i traga za njim. Budalast programer čuo je za Tao i podsmeva mu se.
Da nema podsmevanja, ne bi postojao Tao.
Najviše zvukove najteže je čuti.
Ići napred način je povlačenja.
Veliki talenti poznaju se na koncu života.
I najsavršeniji program ima grešku.
*/ }
if (ready()) {
/* Knjiga druga – Drevni majstori
2.1
Tako je govorio glavni programer:
“Nakon tri dana bez programiranja, život postaje besmislen.”
2.2
Programeri iz davnina bili su misteriozni i dubokomisleći. Ne možemo proniknuti u njihove misli, pa ćemo ih opisati po izgledu.
Svesni, poput lisice koja prelazi potok. Oprezni, poput generala na bojnom polju. Dobri, kao hostesa koja dočekuje goste. Jednostavni, kao što su neotesani komadi drveta. Neprozirni, kao crni bazeni u mračnim špiljama.
Ko može da ispriča tajne njihovih duša i umova?
Odgovor sadrži isključivo Tao.
2.3
Veliki gospodar Tjuring jedanput je sanjao da je mašina. Kada se probudio uzviknuo je:
“Ne znam da li sam ja Tjuring koji je sanjao da je mašina, ili sam mašina koja je sanjala da sam Tjuring!”
2.4
Programer jedne veoma velike kompjuterske korporacije otišao je na stručnu konferenciju i vratio se sa nje, izveštavajući svog menadžera: “Kakva vrsta programera radi za druge korporacije? Oni se ponašaju rđavo i ne interesuju ih tuđa izlaganja. Njihove kose duge su i raščupane, njihova odeća izgužvana i stara. Provalili su na naš štand i proizvodili ružne zvuke tokom naše prezentacije.”
Menadžer reče: “Nisam te trebao poslati na tu konferenciju. Ti programeri žive izvan stvarnog sveta. Oni smatraju da je život apsurd, da je plod čiste slučajnosti. Oni dolaze i odlaze bez ikakvih poznatih ograničenja. Nije ih briga, oni žive samo za svoje programe. Zbog čega bi se smarali društvenim normama?”
Oni žive unutar Tao.
2.5
Učenik je pitao učitalja: “Ovaj programer nikada ne dizajnira, nikada ne testira i nikada ne dokumentuje svoje programe. Ipak, svi koji ga znaju smatraju ga najboljim na svetu. Zašto je to tako?”
Učitelj odgovara: “Taj programer je savladao Tao. Otišao je izvan potrebe za dizajnom; uopšte ga ne nervira kada padne sistem, on prihvata univerzum bez imalo zebnje. Otišao je izvan potrebe za dokumentovanjem; nije ga briga da li će iko pogledati njegove kodove. Otišao je izvan potrebe za testiranjem; svaki od njegovih programa poseduje svoju unutrašnju perfekciju, poseduje spokoj i eleganciju, njihova svrhovitost je očigledna. Zaista, on je pronikao tajne Tao.”
*/ }
if (ready()) {
/* Knjiga treća – Dizajn
3.1
Tako je govorio glavni programer:
“Kada je program u fazi testiranja, tada je prekasno raditi promene dizajna.”
3.2
Jednom jedan čovek ode na kompjuterski sajam. Svakog dana, na ulasku, govorio bi čuvarima:
“Ja sam veliki lopov, poznat po krađama. Budite na oprezu, jer ovaj sajam neće proći neopljačkan.”
Ova izjava duboko je uznemirila čuvare, zato što su na sajmu bili izloženi milioni i milioni dolara kompjuterske opreme, pa su i motrili na tog čoveka. Ali taj čovek je samo šetao od štanda do štanda, pevušeći tiho za sebe.
Kada je čovek krenuo kući, čuvar ga je priveo sa strane da bi ga pretražio, i nije mu našao ništa.
Sledećeg dana, čovek se vratio i rekao: “Juče sam imao dobar ulov, ali danas će biti još bolji.” I čuvari pripaziše na njega još i više tog dana, bez uspeha.
Poslednjeg dana sajma, stražari više nisu mogli da odole. “Gospodine lopove,” rekli su, “toliko sam zbunjen, ne mogu da spavam na miru. Molim Vas, prosvetlite me. Šta ste to uspeli da ukradete?”
Čovek se nasmejao. “Ja kradem ideje,” rekao je.
3.3
Bio jednom glavni programer koji je pisao nestruktuirane programe. Programer početnik, želeći da ga imitira, takođe je počeo da piše nestruktuirane programe. Kada je početnik zamolio glavnog programera da mu proceni rad, glavni programer kritikovao je njegove nestruktuirane programe, rečima, “Ono što priliči glavnom programeru, ne priliči jednom početniku. Moraš razumeti Tao, pre nego što počneš da prevazilaziš strukturu.”
3.4
Jednom beše programer koji je radio na dvoru vojvode Wua. Vojvoda je pitao programera: “Šta je lakše napraviti: program za knjigovodstvo ili operativni sistem?”
“Operativni sistem,” odgovorio je programer.
Vojvoda je ostao u neverici. “Sigurno je knjigovodstveni program mnogo jednostavniji od jednog operativnog sistema,” rekao je.
“Baš i nije,” odgovorio je programer, “jer kada pravi knjigovodstveni program, programer radi kao medijator između ljudi sa različitim idejama: kako bi to trebalo da radi, kako izveštaji treba da izgledaju, i koliko da bude prilagođen poreskim zakonima. Nasuport, operativni sistem nije ograničen samo na spoljašnje osobine. Kada stvara operativni sistem, programer traži najjednostavniju harmoniju između mašine i ideja. Eto, zato je lakše napraviti operativni sistem.”
Vojvoda Wu klimnuo je i nasmejao se. “To je sve u redu, ali šta je lakše debagirati?”
Programer nije odgovorio.
3.5
Menadžer otišao kod glavnog programera i pokazao mu zahtev i specifikacije za novi program. Menadžer ga je upitao: “Koliko je potrebno da se napravi ovakav sistem, ako napravim grupu od 5 programera?”
“Godinu dana,” odgovorio je glavni programer.
“Ali nama je ovo potrebno odmah, možda i ranije! Koliko brzo može to da se napravi, ako napravim grupu od 10 programera?”
Glavni programer se namrštio. “U tom slučaju, dve godine.”
“A šta ako napravimo grupu od 100 programera?”
Glavni programer slegnuo je ramenima. “U tom slučaju projekat nikada neće biti završen,” rekao je.
*/ }
if (ready()) {
/* Knjiga četvrta – Kodiranje
4.1
Tako je govorio glavni programer:
“Dobro napisan program vlastiti je raj; loše napisan program vlastiti je pakao.”
4.2
Program mora biti lagan i pokretljiv, a njegove rutine moraju biti uvezane kao niska bisera. Duh i namera programa moraju se održati u njegovoj unutrašnjoj strukturi. Ne sme biti ni premalo, ni previše, niti sme biti nepotrebnih petlji niti beskorisnih varijabli, niti nedostatka strukture, niti njene pretežuće rigidnosti.
Program se mora povinovati “Zakonu najmanjeg čuđenja”. Šta je taj zakon? To je, prosto, da program svom korisniku mora odgovarati na način koji bi ga najmanje začudio.
Program se, bez obzira na svoju kompleksnost, mora ponašati kao jedan prosti modul. Program se mora kretati po svojoj unutrašnjoj logici, nikako po spoljašnjim osobinama.
Ukoliko program ne isprati ove zahteve, biće to stanje nereda i nedoumica. Jedini način da se ovo ispravi jeste napisati novi program.
4.3
Učenik je upitao učitelja: “Imam program koji ponekad radi a ponekad ne radi. Pratio sam sva pravila programiranja, i ništa mi nije jasno. Zbog čega se to dešava?”
Učitelj je odgovorio: “Zbunjen si zato što ne shvataš Tao. Samo lud čovek će očekivati racionalno ponašanje od svog roda. Zašto očekuješ racionalno ponašanje od mašine koju su napravili ljudi? Kompjuteri samo simuliraju determinizam; samo je Tao savršen.”
“Pravila programiranja su nepostojana; samo je Tao večan. S toga moraš razmišljati o Tao pre nego što dođeš do prosvetljenja.”
“Ali kako ću znati kada sam došao do prosvetljenja?” pitao je novajlija.
“Kada se tvoj program bude izvršavao kako treba,” odgovorio je učitelj.
4.4
Učitelj je objašnjavao prirodu Tao jednom od učenika. “Tao se nalazi u svom softveru – bez obzira koliko beznačajan on bio,” rekao je učitelj.
“Postoji li Tao i u običnom digitronu?” pitao je učenik.
“Da,” stigao je odgovor.
“Postoji li Tao u video igrama?” nastavio je učenik.
“Čak i u video igrama,” rekao je učitelj.
“Postoji li Tao i u DOS operativnom sistemu?”
Učitelj se nakašljao i promeškoljio. “Za danas smo završili,” rekao je.
4.5
Programer je radio softver za princa Wanga. Njegovi prsti prosto su plesali po tastaturi. Program je kompiliran bez ijedne greške, i izvršavao se lako poput povetarca.
“Sjajno!” uzviknuo je princ, “Tvoja tehnika je bezgrešna!”
“Tehnika?” rekao je programer okrećući se od terminala, “Ja pratim samo Tao – iznad svih tehnika! Kada sam počeo da programiram, viđao sam samo jedan veliki problem, jednu veliku gomilu. Nakon tri godine, više nije bilo gomile, počeo sam da koristim podrutine. Ali sada ne vidim ništa. Moje biće obastaje u bezobličnom svetu. Moja čula su besposlena. Moj duh, slobodan da radi bez ikakvog plana, prati svoj sopstveni instinkt. Ukratko, moj program se piše sam od sebe. Istina, ponekad nailazimo na teške probleme. Vidim ih kako nailaze i tada usporim, nemo ih posmatram. Onda promenim jednu liniju koda i oni nestaju, kao dim. Potom kompiliram program. Setim mirno i prepuštam se uživanju u plodovima rada. Zatvorim oči na trenutak i onda se isključim.”
Princ Wang rekao je, “Kad bi samo svi moji programeri bili ovako mudri!”
*/ }
if (ready()) {
/* Knjiga peta – Održavanje
5.1
Tako je govorio glavni programer:
“Čak i ako je program dugačak samo tri linije koda, jednog dana moraće da bude prepravljen.”
5.2
Vrata koja se uredno koriste nije potrebno podmazivati.
Potok koji brzo teče nikada neće presahnuti.
Ni zvuk ni misli ne mogu putovati kroz vakuum.
Softver istruli ako se ne koristi.
To su te velike tajne.
5.3
Menadžer je pitao programera kada će biti završen program na kom ovaj radi. “Biće gotov sutra,” odgovorio je programer.
“Mislim da to nije realno,” rekao je menadžer, “Zaista, kada će biti završen?”
Programer se zamislio na trenutak. “Treba dodati još nekoliko stvari. Trebaće za to bar dve nedelje,” konačno je rekao.
“Čak mi se i to čini preambicioznim,” insistirao je menadžer, “Zašto mi jednostavno ne kažeš kada će program biti završen.”
I programer se složio.
Nekoliko godina kasnije, menadžer je stigao pred penziju. Dok se pakovao, primetio je programera kako spava za svojim terminalom. Programirao je čitave noći.
5.4
Novopečeni programer jednom je zadužen da isprogramira jednostavan program za finansije.
Novajlija je žestoko radio danima, ali kada je njegov gazda pogledao program, video je da je tu jedan editor, da je tu nekoliko opštih grafičkih rutina, da je tu interfejs za veštačku inteligenciju, ali nije bilo ni traga ničemu finansijskom.
Kada ga je gazda pitao, novajlija se uzjogunio. “Ne budite tako nestrpljivi,” ogorčeno je odgovorio, “staviću ja na kraju i neke finansijske stvari.”
5.5
Da li dobar farmer zapostavlja biljku koju je posadio?
Da li dobar učitelj zapostavlja svog najskromnijeg đaka?
Da li dobar otac dozvoljava da mu dete gladuje?
Da li dobar programer odbija da održava svoj program?
*/ }
if (ready()) {
/* Knjiga šesta – Upravljanje
6.1
Tako je govorio glavni programer:
“Neka bude mnogo programera a malo menadžera – tada će sve biti produktivnije.”
6.2
Kada menadžeri održavaju beskrajne sastanke, programeri pišu video igre. Kada računovođe pričaju o profitima, razvojni budžet biće skresan. Kada naučnici pričaju o plavom nebu, ima da se naoblači.
Uistinu, to nije Tao programiranja.
Kada se menadžeri zaista obavežu, nema više igrica. Kada knjigovođe naprave dugoročne planove, sklad i red ponovo se uspostave. Kada naučnici progovore o pravom problemu, onda može doći do rešenja.
Uistinu, to jeste Tao programiranja.
6.3
Zbog čega su programeri neproduktivni?
Zato što se traće na sastancima.
Zbog čega su programeri buntovni?
Zatošto im se menadžeri mešaju u posao.
Zbog čega programeri odlaze, jedan za drugim?
Zato što su sagoreli.
Ukoliko rade za loš menadžment, ne mogu da cene sopstvene poslove.
6.4
Menadžer je trebalo da bude otpušten, ali je njemu potčinjen programer napisao program koji je postao popularan i dobro se prodavao. Kao rezultat toga, menadžer je zadržao svoj posao.
Menadžer je poželeo da da bonus programeru, ali je ovaj to odbio, rečima, “Napisao sam program zato što mi se to učinilo interesantnim, s toga ne očekujem nagradu.”
Menadžer je, čuvši to, primetio, “Ovaj programer, iako na najnižoj funkciji, potpuno shvata dužnosti zaposlenika. Hajde da ga unapredimo, u konsultanta!”
Čuvši to, programer je još jednom odbio nagradu, rečima, “Ja postojim da bih programirao. Ukoliko me unapredite, neću moći raditi ništa drugo do traćiti tuđe vreme. Mogu li sada da idem? Imam neki program na kom radim.”
6.4
Menadžer otišao programerima ne bi li im rekao: “Što se tiče vašeg radnog vremena: ima svi da dolazite na 9, i da idete u 5.” Na to, svi se naljutiše a neki ponudiše otkaz na licu mesta.
Tako menadžer popusti: “U redu, u tom slučaju možete sami sebi da odredite radno vreme, dokle god uspevate da završite projekte na vreme.” Programeri su, konačno zadovoljni, počeli da dolaze u podne i rade do kasnih jutarnjih časova.
/* }
if (ready()) {
*/ Knjiga sedma – Korporativna mudrost
7.1
Tako je govorio glavni programer:
“Možete predstaviti program čelnicima korporacije, ali ih ne možete kompjuterski opismeniti.”
7.2
Novajlija je pitao učitelja: “Onamo se nalazi ogromna razgranata struktura koju nazivaju ‘Korporativnom upravom’. Sve vrvi od potpredsednika i računovođa. Proizvodi mnoštvo memoranduma, od kojih svaki govori ‘Idemo, dakle!” ili “Idemo, ovamo!” ali niko ne razume njihovo pravo značenje. Svake godine postavljaju nova i nova imena na korporativne grane, uvek bez uspeha. Kako uopšte može postojati tako neprirodan entitet?”
Učitelj je odgovorio: “Uočavaš ovu golemu strukturu i smeta ti što ona nema racionalnu svrhu postojanja. Zar ne možeš da uživaš u njenim neprestanim promenama? Zar ne uživaš u spokoju nesputane lakoće programiranja ispod svih ovih korporativnih grana? Zbog čega te muči njihova beskorisnost?”
7.3
Onamo postoji ajkula veća od bilo koje ribe. Ona se transformiše u pticu čija krila su poput oblaka na nebu. Kada ova ptica poleti, ona donosi poruku korporativne uprave. Ova poruka ispuštena je usred gnezda programerskog, na način na koji galeb ispušta svoj izmet po plaži. Potom ptica zajaši vetar i, s modroplavim nebom za leđima, vrati se kući.
Mladi programer gleda i čudi se pricom, jer je ne razume. Srednji programer strepi od dolaska ptice, jer se plaši njene poruke. Stari programer nastavlja da radi za svojim terminalom, jer uopšte ne primećuje dolazak i odlazak ptice.
7.4
Čarobnjak Tornja od slonovače doneo je svoj najnoviji izum glavnom programeru na uvid. Čarobnjak je dokotrljao veliku crnu kutiju u kancelariu, a glavni programer sedeo je u tišini.
“Ovo je integrisana, distribuirana radna stanica za opšte namene,” počeo je čarobnjak, “ergonomski dizajnirana uz korporativni operativni sistem, na šestoj generaciji jezika, i mnogobrojne vrhunske korisničke interfejse. Mojim pomoćnicima bilo je potrebno nekoliko stotina godina da je konstruišu. Nije li neverovatna?”
Glavni programer podigao je obrvu. “Zaista je neverovatna,” rekao je.
“Korporativna uprava naložila je,” nastavi čarobnjak, “da svi počnu da koriste ovu radnu stanicu kao platformu za nove programe. Da li se slažeš?”
“Naravno,” odgovorio je glavni programer, “smesta ću je prebaciti u data centar!” I čarobnjak se vratio u svoj toranj, vidno zadovoljan.
Nekoliko dana kasnije, programer novajlija banuo je u kancelariju glavnog programera i pitao, “Ne mogu da nađem listing mog novog programa. Ne znaš li možda gde bi mogao biti?”
“Znam,” odgovori glavni programer, “listing ti je na onoj novoj platformi, tamo u data centru.”
7.5
Glavni programer kreće se sa programa na program bez imalo straha. Nikakve promene u poslovanju ne mogu da mu naškode. Neće biti otpušten, čak i ako projekat propadne. Zašto? Zato što gaispunjava Tao.
*/ }
if (ready()) {
/* Knjiga osma – Hardver i softver
8.1
Tako je govorio glavni programer:
“Bez vetra neće se povijati vlati trave. Bez softvera, hardver je beskoristan.”
8.2
Učenik je pitao učitelja: “Vidim da je ova kompjuterska korporacija mnogo veća od svih ostalih zajedno. Uzdiže se nad konkurencijom kao div nad patuljcima. Svako od njenih odeljenja moglo bi da predstavlja čitavu proizvodnu granu. Zašto je to tako?”
Učitelj je odgovorio: “Zašto me pitaš tako glupa pitanja? Ta korporacija je velika samo zbog svoje veličine. Da proizvodi samo hardver, niko ne bi želeo da ga kupi. Da proizvodi samo softver, niko ne bi želeo da ga koristi. Da samo održava sisteme, svi bi ih tretirali kao sluge. Ali zato što su udružili sve ove stvari, ljudi ih smatraju bogovima! Bez ikakvog cilja, ona osvaja bez imalo truda.”
8.3
Glavni programer prošao je jedan dan pored programera novajlije. Glavni programer primetio je da je novajlija preokupiran nekakvom džepnom video-igricom. “Oprosti,” reče, “mogu li to da pogledam?”
Novajlija je s pažnjom predao uređaj svom učitelju. “Vidim da ovaj uređaj nudi tri nivoa težine: Lak, srednji i težak,” reče učitelj. “Ipak, svaki od ovih uređaja ima još jedan nivo igre, u kom se uređaj trudi da ne pobedi čoveka, niti da bude pobeđen od strane čoveka.”
“Molim Vas, veliki majstore,” zamolio je novajlija, “gde se nalazi ta tajnovita opcija?”
Učitelj je bacio uređaj na zemlju i razlupao ga nogom. Tako je učenik postao prosvećen.
8.4
Beše jednom programer koji je radio na ličnim rčaunarima. “Pogledaj kako mi dobro ide,” jednom se pohvalio programeru mejnfrejma koji mu je došao u posetu, “Imam moj sopstveni operativni sistem i uređaj za skladištenje podataka. Ne moram resurse da delim ni sa kim. Softver je robustan i lak za upotrebu. Zašto ne bi napustio svoj posao i pridružio mi se?”
Programer mejnfrejma počeo je da opisuje svoj sistem rečima “Mejnfrejm ti je kao drevni mudrac koji meditira usred data centra. Njegovi hard diskovi protežu se na sve strane, kao veliki okean podataka. Softver mu je mnogostran kao dijamant, a isprepleten kao prastara džungla. Programi, svaki od njih jedinstven, kreću se kroz sistem kao brze planinske reke. Zbog toga sam srećan gde jesam.”
Programer ličnih računara, čuvši ovo, zaćuta. Ali obojica ostaše prijatelji dok ne izbrojaše i poslednje dane života.
8.5
Hardver sreo Softver na putu za Čangce. Softver reče: “Ti si Jin a ja sam Jang. Ukoliko nastavimo zajedno postaćemo slavni i zaraditi gomilu novca.” Tako i krenuše zajedno, misleći da će osvojiti svet.
Sretoše potom Firmver, koji je bio sav u ritama i kretao se jedva, uz pomoć trnovitog štapa. Firmver im reče: “Tao je izvan Jin i Janga. On je tih i nepomičan poput bazena vode. On ne traži slavu, otud niko nije ni svestan njegovog postojanja. On ne traži bogatstvo, jer je već ispunjen bogatstvom. On obastaje izvan prostora i vremena.”
Softver i Hardver, postiđeni, vratiše se kućama.
*/ }
if (ready()) {
/* Knjiga deveta – Epilog
9.1
Tako je govorio glavni programer:
“Sada je vreme da odeš.”
*/
}
?>
<eof>