|
Beleške |
|
|
Programersko slepiloDa li ste ikada napravili malu, malecku grešku koja vas je koštala vremena i živaca? Niste? Ne verujem: svakome se desilo bar jednom... Među programerima postoji priča o programerskom "slepilu", tačnije o prilikama kada čovek "od silnog drveća ne može vidi šumu". U ovom teškom poslu dešavaju se situacije kada, ma koliko neko bio iskusan i vešt u programiranju, dolazi do grešaka uzrokovanih umorom, razmišljanjem o drugim stvarima ili, prosto, previdom nastalim zbog žurbe i nepažnje. Da bi stvar bila gora, u ovu kategoriju spadaju male, banalne greške koje je daleko teže otkriti nego one "prave", velike. Sećam se jedne epizode iz svog najranijeg praktičnog iskustva, a pouka koju od onda nosim pomogla mi je mnogo puta. Uvek drugi vide boljeNegde početkom 1989. godine, kao student druge godine informatike na Višoj školi za ekonomiju i informatiku, provodio sam dosta vremena u računskom centru škole: trudio sam se da se "uvučem" u ERC u slobodno vreme van vežbi i da što bolje iskoristim to vreme u praksi. U to vreme, studenti su imali na raspolaganju korisničke naloge na jednom Honeywell mastodontu, tada popularnoj "šestici", koja je radila pod operativnim sistemom GCOS 6, a programiralo se uglavnom u COBOL-u. Kad god bi mi se ukazala prilika, odlazio sam na treći sprat i molio osoblje da me puste da radim za terminalom; uglavnom bi me puštali, pod uslovom da nikome ne smetam. To i nije bilo tako loše, pošto sam im dosađivao kojekakvim pitanjima, pa su odlučili da me se reše dajući mi na raspolaganje originalnu tehničku dokumentaciju operativnog sistema i COBOL-a, što većina mojih kolega nije mogla da dobije... U to vreme, bilo je potrebno uraditi neki manji seminarski rad iz predmeta "Poslovno-proizvodni informacioni sistemi", a jedna od mogućnosti je bila da se odabere tema na osnovu koje će se napisati program u COBOL-u; rad se smatrao uspešnim ukoliko se na osnovu ulaznih podataka demonstriraju rezultati na ekranu terminala ili na papiru - dakle, program je morao zaista da radi. Uzeo sam jednu temu koja se bavila analizom vrednosti zaliha u skladištu, prema tzv. metodologiji "ABC". Po pravilu, rezultat ove analize je tabela stavki sortirana po vrednosti, praćena grafikonom u kome linija trenda mora da se uklopi u unapred zadate granične vrednosti na ključnim tačkama. Osim plana da uspešno odradim seminarski rad, koji bi mi jako olakšao izlazak na ispit, bio sam vidno uzbuđen, jer je taj program trebalo da bude moj pravi programerski prvenac: do tada nikad nisam imao prilike da apsolviram neki problem, a potom da napišem program koji će ga rešiti. U to vreme bio sam pun entuzijazma (čitaj: neobavešten; tu reč danas smatram pogrdnom i uvredljivom) i latio sam se posla kao da mi sudbina zavisi od njega. Kako to već ide po redu, proučio sam literaturu o tom problemu i konsultovao se sa profesorom, a na kraju čvrsto rešio da barem nekim elementom rada programa prevaziđem osnovni zahtev i tako pokažem da problem "i nije bogzna kakav". E, kamo sreće da sam imao imalo iskustva i da sam tada malo "smanjio doživljaj"... Osnovni dijagram toka programa i glavnu skicu programa sam napisao za dan-dva; spremio sam i program za unos podataka, koji je ispravno proradio odmah nakon unosa sa papira i kompajliranja. Osokoljen uspešnim početkom, usred unosa glavnog programa, odlučio sam gde ću da se pokažem: osnovni zahtev je glasio da rezultat bude vidljiv na terminalu ili na papiru, a ja sam u poslednji čas rešio da korisniku programa omogućim izbor; štaviše, jedna od opcija je bila i simultani izlaz na ekran i na papir. Nije bilo potrebno praviti bogzna kakvu izmenu programa: ubacio sam promenljivu dužine jedan znak (seća li se neko klauzule WORKING-STORAGE SECTION u grupi DATA DIVISION?...) i formirao funkciju grananja u izlaznom delu programa. Pre prvog kompajliranja, rešio sam da usput malo sredim izvorni kod programa, jer je svakako trebalo da ga priložim uz rad, a znao sam i da mi to može pomoći ako se pojavi neka greška pri kompajliranju. Tada se radilo sa nekakvim linijskim editorom, koji je, doduše, bio zaista jak za one prilike, ali pun nekakvih opskurnih komandi i dosta težak za upotrebu: potrošio sam nekoliko sati rada, uz konstantne opaske sistem-operatera da je krajnje vreme da završim pre nego što dođu operateri iz susedne firme (ERC je vršio usluge obrade podataka za nekoliko firmi). Brže-bolje sam odštampao listing i završio posao čitavih nekoliko dana pre roka koji sam najavio profesoru. Bio sam zadovoljan do tada urađenim: obavio sam poslednje provere i samo je trebalo kompajlirati program, spakovati ga za prezentaciju i pozvati profesora u ERC. Sutradan sam došao u ERC pre vremena, mislim čak da sam pobegao sa nekih predavanja, jer nisam mogao da dočekam trenutak kada će moj prvenac najzad proraditi. Prvo kompajliranje je prošlo sa tolikom gomilom grešaka da nisam mogao verovati svojim očima; kompajliranje se prekinulo, jer je grešaka bilo previše. Brzo sam se snašao, jer sam se setio da u se u izvornom kodu u COBOL-u deklaracije moraju pisati počev od osme, a komande počev od dvanaeste kolone (možete li verovati?); greška je bila na tom mestu: nešto sam promenio na pogrešan način, pa sam pomerio ceo kod za jedan znak ulevo... Onaj moćni linijski editor (kome sam čak i ime zaboravio, i nije mi žao zbog toga) je odradio posao za par minuta. Pustio sam batch za kompajliranje, i potom me je dočekalo pet grešaka, ovaj put vrlo indikativnih: sistem je javio da nije deklarisana promenljiva SKP. Koješta, pomislih, znam da sam je deklarisao - to je skretnica ka štampaču u delu programa koji traži od korisnika da odabere izlazni uređaj. Proverim u listingu: skretnica je bila na svom mestu. Pustim kompajler ponovo - opet greška. Pregledam ceo listing na terminalu jednom, pa opet - sve deluje da je u redu. Sad sam se već zamislio, razmišljao u čemu bi mogao biti problem, pregledao ranije odštampani listing... Ništa što bi ukazivalo na neku grešku. Program je imao oko 350 redova, što u razmerama COBOL programa nije malo. Čekao sam skoro par sati dok mi sistem-operater nije dozvolio da upotrebim štampač, jer je sistem bio opterećen nekom drugom obradom, a bilo je došlo i vreme kada je dobra volja tih ljudi prema meni vidno popustila, jer sam im smetao da rade svoj posao. ERC sam napustio u prilično lošem raspoloženju, a od mog prvobitnog ushićenja zbog ovog posla ne beše ostalo mnogo. Prošao je vikend, a ja sam se trudio da ne razmišljam o problemu misteriozne promenljive SKP. Najpre sam bio uveren da je u pitanju neka krajnje banalna sitnica - ali, šta je vredelo, kad nisam znao da je nađem; ceo listing programa sam verovatno znao napamet, skoro sam pomislio da su one priče o gremlinima istinite... Sledećeg ponedeljka sam došao u ERC čvrsto rešen da ga ne napustim dok ne završim ceo posao, a kamoli da rešim jednu grešku u sintaksi programa. Oprobao sam da kompajliram program ("ko zna, možda su greške nestale preko vikenda"), ali neumoljivi kompajler me je monotono i uporno obaveštavao da nisam deklarisao SKP. Isplakao sam od administratora da mi da uputstvo za COBOL, pa sam krenuo da tražim poglavlje pod naslovom "Zona sumraka". Uzalud: ničeg nije bilo što je moglo da sugeriše gde grešim. Bio sam totalno frustriran, na ivici da obrišem program i da odustanem od celog seminarskog rada. Privukao sam pažnju dvojice sistem-operatera: siguran sam da je uzrok njihovog smeha sedeo nekoliko metara od njih, čupajući kosu. Ko zna, možda su se plašili da ne razbijem terminal. Konačno, priđe mi jedan od njih i upita me u čemu je problem. Objasnim mu u nekoliko reči (ama, pričao bih ja i pola sata, da je hteo da me sluša), a on me zaustavi, privuče stolicu, pusti kompajler, pogleda grešku, otvori izvorni kod i baci pogled u područje deklaracija promenljivih, a potom ustajući sa stolice i odlazeći, reče:
Pogledam u listing: zaista. Otvorim onaj listing koji sam odštampao pre prvog kompajliranja: čovek je bio u pravu. Ko zna koliko sam gledao u listing, a ja nisam video ovu razliku. Onda sam se i setio: promenljivu sam deklarisao u trenutku kada je program slao izlazne podatke samo na štampač i SKT je značilo "Skretnica Ka Terminalu". Dok sam pravio blok za selekciju u izvršnom delu, uveliko sam rešio da terminal bude osnovni izlazni uređaj, a štampač opcioni (to je bilo vreme kada sam mislio da računari smanjuju, a ne da povećavaju količinu papira u kancelariji) i ono što sam pisao je bila "Skretnica Ka Printeru" (SKP). Rečju, ja jesam istovremeno gledao i u deklaraciju SKT i u upotrebu SKP, ali za mene tu nije bilo apsolutno nikakve razlike. Sistem-operater, čovek koji nije imao pojma šta program treba da radi, postupio je sasvim logično: kada je video grešku u kompajliranju, uradio je isto što sam uradio i ja: proverio da li je i gde promenljiva deklarisana. Dok sam ja programsku skretnicu smatrao najvećim dostignućem programiranja dvadesetog veka, i misleći da je ona ispravna i tačka, ta promenljiva za njega nije imala nikakav značaj: on je grešku locirao za manje od jednog minuta... Sat vremena kasnije, napustio sam ERC obavljena posla. Čak se pokazalo da je program zadovoljio sve ostale provere funkcionalnosti i da nema potrebe za daljim intervencijama. Ali, bio sam toliko mentalno iscrpljen da nisam mogao ni da budem zadovoljan. Profesor je, pak, nekoliko dana potom pogledao program i pohvalio rad. Čak mu se dopao onaj ružni grafikon koji je zvezdicama na karakter-terminalu simulirao liniju u Dekartovom koordinatnom sistemu... Eh, da sam onda imao Excel... Nisu nam dozvolili da za seminarske radove koristimo nove XT mašine koje su imale Lotus 1-2-3, osim da donesemo programe od kuće na disketi. Pitam se, koliko je ljudi te 1989. imalo PC kod kuće...). Od celog slučaja, pisanje tog programa ne pamtim kao svoj pravi prvenac u programiranju, nego kao svoju prvu frustraciju u budućoj struci. Istina, bilo je u potonjim godinama raznih tehničkih problema kojih se sećam, ali nijedan nisam doživeo niti primio k srcu kao taj. Tek mnogo kasnije, čuo sam od jednog starijeg kolege za izraz "programersko slepilo", a kad sam mu ispričao ovu priču, samo mi je rekao da sam imao sreće da mi se tako nešto desi na samom početku programerskog zanata. Prošle su godine i danas se programiranjem uglavnom više ne bavim, osim kada treba napisati neki VBA ili ASP modul, ali to se ne može meriti sa pravim projektovanjem i pisanjem programa "od nule". Pouka je, pak, ostala duboko usađena u moj refleks za reakciju prema bilo kojoj grešci koju izazovem ja sam ili je uzrokuje sistem: naučio sam da najpre proverim jednostavne stvari. I, gle čuda: skoro uvek, potraga se uspešno završi u ovoj fazi. Kada god napravim neku kritično bitnu strukturu, bio neki makro koji zadire u žive podatke ili parametri rada neke Web aplikacije, obavezno pokažem nekom kolegi šta sam uradio i čekam da on reaguje na moguće greške. A kada god naumim da neku aplikaciju koja radi proširim nekim revolucionarnim dodatkom koji će pomeriti horizonte svetskih tokova informatike, to radim u strogo kontrolisanim uslovima, nakon završene prethodne faze i na kopiji koja neće napraviti štetu tekućoj operativi. Jer ko zna, možda se u toj mojoj ideji krije neka programska skretnica sa dva imena koje će moje oči videti kao jedno...
|
|
Vrh stranice Prethodna stranica Naslovna strana Mapa sajta Pretraga |
| AFORIZAM ZA DANAS | OVIH DANA SLUŠAMO... |
| Copyright © Praktikum na Webu, 2000-2011; Valinor Design; sva prava pridržana. |