Veliki broj nas dobrim delom napredujemo kroz vrćenje u raznim petljama. Tako i nazadujemo, opet dobrim delom, stagniramo, petljanje je relativno očigledno na nižem nivou pa bi ovakava tvdnja bila tautologija kad pored onih najprostijih petlji ne bi postojale i kompleksnije.
Meni kao programeru je inspiracija za post došla od mrtvih petlji u programerskom multithreadingu (učinilo mi se pre nedelju dve na blogu da je neko imao bolji srpski termin za deadlocks ali sam ga zaboravio), no u poslednjem izdanju časopisa Wired je izašao interesantan članak o blog manifestaciji rekurzivnih mreža pa otud skrenuta pažnja i prvi deo naslova.
“You have a blog. You compose a new post. You click Publish and lean back to admire your work. Imperceptibly and all but instantaneously, your post slips into a vast and recursive network of software agents, where it is crawled, indexed, mined, scraped, republished, and propagated throughout the Web. Within minutes, if you've written about a timely and noteworthy topic, a small army of bots will get the word out to anyone remotely interested, from fellow bloggers to corporate marketers.” Ovim navodom sam iskopirao pola članka dok se ostatak, a još važnije interesantan Flash dijagram nalaze pod “The Life Cycle of a Blog Post, From Servers to Spiders to Suits — to You”.
Ko do sad nije čuo za mrtve petlje neka se seti jednostavnog primera gde dve osobe čekaju jedna na drugu da bi nastavile zajednički posao. A sve zbog nerazumevanja ko, šta i kojom dinamikom treba da radi, ili zbog manje ili više pristrasne interpretacije zajedničkog dogovora. I pošto obe osobe čekaju, napredak je zaustavljen dok se ovakva mrtva petlja nekako ne preseče.
Prokletstvo veštačkog, i tako i programerskog je naglašeno prisustvo algoritamskog, pa tako rigidnog, plićeg, tendenciozno sekvenciranog. U programiranju se, na primer, ubrzo primeti naša umanjena sposobnost da rešenje problema vidimo u paralelnom izvršavanju višestrukih malih poslova. U našem razmišljanju je naglašena tendencija da sekvenciramo rad na problemu u što manje, poželjno jednom nizu po cenu da mnogi učesnici u poslu čekaju dok program izvršava sekvencu koja se tih učesnika ne tiče. Tipičan primer je program koji mnogo “računa”, znači koristi CPU, ali periodično piše privremene rezultate na disk. Pošto je disk nekoliko redova veličina “sporiji” (proizvoljno, intuitivno poređenje) logično bi bilo da processor nastavi da “računa” u jednom thredu dok privremene rezultate spašava na disk drugi thread, tj da dva thread rade paralelno. Ali to je i teži način razmišljana, mnogo je lakše zaustaviti “računanje” dok pišemo na disk, imati jedan thread u poslu, koristiti jedan mozak.
Usporiti posao zato što nam to intelektualno više odgovara, na onaj jeftin način, tj lakše nam je, je poprilično opšta pojava u mnogo uskih grana ljudske delatnosti, ili u rešavanju mnogih specifičnih problema. Iza “lakše nam je” je često i “bogata” istorija, pojedinačna ili zajednička, konvencije, radoznalost, žurba. Žurba! Interesantna, mrtva superpetlja žurbe sa samom sobom.
U žurbi su, npr, kompjuteri daleko dobacili, kao jedna od globalinih i opšte prihvaćenih “wild frontiers” dvadesetog veka. Taj digitalni ICT front iza kog je divljina ostaje do daljnjeg, tražiti neke “convenience driven deadlocks” u ICT-ju “per se” bi bio jalov i nepotreban posao.
Ipak! Kako smo sa dvadest prvim velom ušli polako i u vek “life sciences” tako smo ponovo otvorili i jednu usku kutiju sa mnogo IT nerešivih problema. Nije neki poseban problem nerešiv problem za koji ne znamo kako ga rešiti. Ali, ima i nerešivih problema gde imamo odličan i provereno kvalitetan model koji dovodi do rešenja. I ima problema, i sad, naravno, ulazim u domen još hrabrijeg nagađanja, koji su nerešivi baš zbog digitalnog i naše volje za unidirekcionalnim i sekvencijalnim.
Interesantno je kako je rešenje problema uz pomoć digitalnih kompjutera izuzetno često “dalje” od prirodnog pogleda na problem. I interesantnan uvod u ovaj argumenat su Gaudijevi “hanging chains” (primer sličica pri dnu). Shvatanje ideje statičke analize kako ju je Gaudi radio je unutar mogućnosti dece koja su još uvek u osnovnoj školi: vešanje kanapa i tegova sa plafona, a koji modeliraju ivice i sile u nekoj zgradi. Kanapi, tegovi, plafon I gravitacija su analogni kompjuter koji je izuzetno brzo davao interesantan i koristan pogled u buduće sile u potencijalnoj konstrukciji (koliko su razni kanapi zategnuti). Istovremeno nam i ogledalo na podu daje realniju sliku potencijalne strukture.
U elektronici analogni kompjuteri umeju da budu i po osam redova veličine brži od njihove digitalne braće. Manje su precizni, po pravilu nisu opšte nameni i tako su, naravno, inconvenient.
A interesannto je kako je, npr, problem uvijanja proteina u biologiji, komjutacionoj i pravoj, od ogromnog značaja za razumevanja biohemije i života. Proteini su nizovi amino kiselina, njihova uloga u organizmu zavisi u velikoj meri od njihove trodimenzionalne strukture. Standardnih amino kiselina ima 20, struktura im je poznata, pa tako i elektrostatičko polje oko njih, sve standardna hemija i elektrostatika. I elektrostatika odlično objašnjava kako se proteini uvijaju. Na to, naravno, utiče i okolni rastvor u kom se protein nalazi ali i ako ga i zanemarimo još uvek najmoćniji kompjuteri danas ne umeju da « uviju » proteine od više od 50-100 amino kiselina. A prosečna kompleksnost proteina je viša od toga, od nekoliko stotina do nekoliko hiljada amino kiselina. Na prvi pogled je nemogućnost predviđanja strukture proteina fascinantna kad se ima u vidu da danas superkompjuteri imaju i po više hiljada procesora. O masivnoj paralelizaciji tipa SETI@Home ili Folding@Home da i ne pričamo.
“Problem” sa prirodom je ta masivna “paralelizacija” – u proteinu svaka “tačka” na “površini” svake amino kiseline privlači ili odbija svaku drugu “tačku”. I čim se stvari malo pomere, pomere se i rastojanja pa tako I sile. Digitalni kompjuteri se “muče” sa ovako potpuno paralelnim uticanjem svega na sve i muku rešavaju sa sekvenciranjem u vremenu – računanjem samo u određenim trenucima u vremenu.
A osnovni problem sa sekvenciranjem je sličan problemu sa treptanjem dok pokušavamo da vidimo kako će kameleon uhvatiti insekta – sve može da se desi u deliću sekunde dok mi žmurimo.
Skraćivanje vremenskih intervala između dva računanja, naravno, “rešava” problem. Samo što prosta računica pokazuje da su za neka rešenja najmoćnijim kompjuterima potrebne hiljade godina rada!
Interesantno je da visoka vremenska rezolucija u kojoj bi digitalni kompjuteri mogli dati tačno rešenje nekih problema, ali bi to trajalo predugo, nije nikakav problem za analogne kompjutere. Ono što je čak dramatično je da analogni kompjuteri rešenja mogu da daju u realnom vremenu – kao što se Gaudijevi “hanging chains” smire u rešenju u relativno kratkom vremenskom periodu, tako neki analogni kompjuteri, za promenljive koje se čak menjaju svo vreme, umeju da daju rešenja istom brzinom kojom i prirodni process koji se modelira.
Ponekad i brže – još jedan paradoks koji nam donosi vreme – rešenje prirodnog problema pre nego što takvo rešenje u prirodi i postoji.