Edgar Codd (1970): Matematika protiv kaosa
Kako je jedan matematičar tablicama sredio kaos koji je IBM-u punio džepove, a njega dugo ignorirao.
Godina je 1970. Nixon je u Bijeloj kući, Boeing 747 tek je počeo letjeti, a u podrumima velikih kompanija — banaka, osiguravajućih društava, proizvođača automobila — žive baze podataka koje bi svaki normalan čovjek opisao jednom riječi: labirint. Ne metaforički, stvarno labirint — sa stablima, granama, pokazivačima koji vode s jedne razine podataka na drugu, i jednim jedinim ispravnim putem do informacije koju tražiš. Zalutaš — nema podatka. Često nema ni greške. Samo šutnja.
Da nađeš plaću zaposlenika, moraš znati točan redoslijed kojim se do nje dolazi — odjel → tim → osoba → plaća — jer baza je organizirana kao obiteljsko stablo, a ti si genealog koji nema pravo pogriješiti granu. Promijeni menadžersku strukturu firme — a menadžerske se strukture, iznenađenje, mijenjaju — i cijela armija programa koja je ovisila o tom stablu prestaje raditi. Ne sutra. Odmah.
Svijet baza podataka 1970. tako izgleda kao industrija čuvara tajni — programer nije netko koji piše upit, on je vodič kroz tunel koji samo on poznaje, i ta ekspertiza je moć. Tvrtke ne plaćaju za brzinu, plaćaju za nekoga tko se ne izgubi u vlastitim podacima — jer u ovom trenutku »upit« kao takav, jednostavno pitanje bazi »daj mi to i to«, još i ne postoji u obliku koji bismo danas prepoznali.
A onda, u IBM-ovu istraživačkom centru u San Joseu, u zgradi punoj ljudi čiji je posao bio upravo taj IMS (IBM-ov hijerarhijski sustav za baze podataka o kojem je riječ, ono stablo kroz koje se moralo hodati granu po granu) usavršavati, sjedi jedan Britanac koji je za Drugog svjetskog rata letio kao pilot RAF-a, a sad je matematičar s idejom koja zvuči, iskreno, pomalo dosadno. Edgar Codd gleda u sve to stablo, sve te pokazivače, sav taj muzej strukturnog kaosa — i vidi nešto što se pred njim krilo od prvog dana. Ne labirint. Tablice.
Redovi i stupci. Ništa egzotično, ništa što bi zahtijevalo mapu. Samo matematika — ona vrsta koja se ne petlja s time gdje se fizički nalazi podatak, nego s time što on *znači*. Problem je, dakako, što ta ideja upravo prijeti unovčenom proizvodu vlastite tvrtke. A firme, kao i labirinti, ne vole kad im netko iznutra pokaže izlaz.
Zamisli da ti je posao pronaći podatak o jednom kupcu u firmi 1970. godine. Ne klikneš, ne upišeš ime u kućicu — pišeš program. I ne bilo kakav program, nego program koji unaprijed mora znati cijeli put kroz zgradu do sobe u kojoj ta informacija sjedi. Jer baza podataka u to doba nije stol s ladicama do kojih možeš posegnuti kako ti padne na pamet. Baza podataka je stablo — korijen, granje, listovi. Da bi došao do lista, moraš krenuti od korijena i proći kroz svaku granu redom, baš kao da tražiš određenu sobu u zgradi bez brojeva na vratima: znaš put jer si njime već hodao, ne jer postoji znak koji kaže lijevo, desno, treći kat.
To se zvalo hijerarhijska baza podataka, a najpoznatiji primjerak, IBM-ov IMS, još je 1970. bio glavni kruh te tvrtke — o tome više kasnije. Ideja same strukture nije glupa, čak je logična: kupac ima narudžbe, narudžba ima stavke, stavka ima proizvod. Roditelj, dijete, dijete djeteta. Uredno, kao obiteljsko stablo. Problem nastaje kad shvatiš da stvarni svijet rijetko poštuje jednog roditelja. Jedna narudžba može imati dva kupca (tvrtka i osoba koja je naručila u njezino ime), jedan proizvod može biti dio deset različitih narudžbi — i sad ti, dragi programeru iz 1970., moraš odlučiti čije je dijete taj proizvod, jer stablo dopušta samo jednog roditelja po granu. Rješenje je obično bilo — kopiraj podatak na više mjesta i moli se da se svi primjerci nekako slože kad ih idući put budeš ažurirao. (Spojler: nisu se slagali.)
Zato je programer u to doba bio, u najboljem smislu te riječi, špiljski vodič. Ne dizajner rješenja — vodič kroz tunel koji je netko drugi već izdubio. Htio si podatak o kupcu? Nisi napisao „daj mi kupca”. Napisao si niz naredbi koje govore: uđi kroz ovaj ulaz, siđi na ovu granu, pa na ovu, pa uzmi treći zapis s lijeve strane. Program nije opisivao ŠTO želiš, nego KAKO do toga doći, korak po korak — kao upute za blago nacrtane rukom na poleđini stare karte. I dok je karta odgovarala teritoriju, sve je bilo u redu. Brzo, čak elegantno — takvi upiti (pitanja koja postavljaš bazi da ti nešto pronađe) mogli su biti nevjerojatno efikasni, ako si, naravno, znao put.
Ali teritorij se mijenjao. Firma doda novu vrstu proizvoda, novi odjel, novi tip odnosa između kupca i računa — i cijela ta lijepo izdubena struktura stabla postaje pogrešna. Ne nepotpuna, pogrešna. A kad se promijeni struktura stabla, ne moraš samo dodati novu granu — moraš prepisati svaki program koji je ikad hodao starim putem, jer taj put sada vodi u zid ili, gore, tiho odvodi na krivo mjesto i vrati ti pogrešan podatak bez ijednog upozorenja. Svaka promjena strukture bila je mala smrt: umirao je stari kod, umirali su tjedni rada, umirao je vikend programera kojem je to sletjelo na stol u petak popodne.
U San Joseu, u istraživačkom laboratoriju IBM-a, sjedio je čovjek koji je taj labirint gledao i nije u njemu vidio tradiciju koju treba poštovati. Vidio je nepotreban kaos koji se može riješiti — ne boljim tunelom, nego time da tunela uopće ne bude. Imao je onu rijetku matematičarsku naviku da za stvari koje svi drugi prihvaćaju kao normalne prvo pita: a zašto, zapravo?

Rad iz 1970.: "A Relational Model of Data..."
Codd svoj rad ne objavljuje u nekom časopisu za poslovne ljude s kravatama, nego u Communications of the ACM — glasilu Association for Computing Machinery, strukovne udruge informatičara čiji je časopis nešto poput najstrože znanstvene provjere u toj branši: čita ga možda pet stotina ljudi na planeti, od kojih trojica shvaćaju o čemu se radi, a nikakva šira javnost pojma nema da se nešto dogodilo. Naslov je suhoparan kao porezna prijava: „A Relational Model of Data for Large Shared Data Banks”. Nema uskličnika, nema obećanja da će ti promijeniti život. A promijenit će ga — samo što to još nitko ne zna, uključujući, vjerojatno, i samog Codda, koji je u tom trenutku matematičar frustriran time što IBM-ovi klijenti moraju biti pola inženjeri baš da bi dohvatili podatak koji im treba.
Ideja u srži je uvredljivo jednostavna, u onom smislu u kojem su sve najbolje ideje uvredljivo jednostavne kad ih netko drugi već smisli. Zaboravi stabla, zaboravi pokazivače, zaboravi da moraš znati kako je netko strukturirao skladište da bi našao kutiju. Umjesto toga — tablice. Redovi i stupci. Kao proračunska tablica, samo — i ovo je ključno — s pravilima matematike iza sebe, a ne samo linijama u Excelu koje izgledaju uredno dok ih ne pomiješaš.
Zamisli tablicu KUPCI sa stupcima ime, grad, broj_narudžbe. I drugu tablicu NARUDŽBE sa stupcima broj_narudžbe, artikl, cijena. U hijerarhijskom svijetu, da spojiš te dvije stvari, morao bi znati fizički put — narudžba visi ispod kupca kao grana ispod stabla, i ideš tim putem ili ne ideš nikamo. U Coddovom svijetu spajaš ih preko vrijednosti: broj_narudžbe u jednoj tablici jednak je broj_narudžbi u drugoj, i to je sve. Nema puta, nema grane, nema pokazivača koji pokazuje na memorijsku adresu koja se sutra može promijeniti — samo podatak koji se poklapa s podatkom. Zvuči sitno. Nije sitno — to je razlika između toga da moraš znati gdje je nešto spremljeno i toga da samo moraš znati što tražiš.
E sad, dio koji zvuči zastrašujuće a nije: relacijska algebra. Codd ne izmišlja čarobne riječi — posuđuje iz matematike koju je svladao za doktorat i primjenjuje na tablice operacije koje se, u prijevodu s akademskog na ljudski, svode na: filtriraj, spoji, projiciraj. Filtriraj: daj mi samo kupce iz Zagreba. Spoji: daj mi kupce zajedno s njihovim narudžbama. Projiciraj: daj mi samo imena, ne treba mi cijela tablica. To je to. Tri pojma koja zvuče kao satnica na matematičkom fakultetu, a u praksi su ono što svaka SELECT naredba koju je ikad netko napisao — svjesno ili ne — radi u pozadini.
Ali najveći udarac u ovom radu nije ni tablica, ni algebra. Najveći udarac je rečenica koja se lako previdi jer nije napisana masnim slovima, a mijenja sve: podaci trebaju biti nezavisni od programa koji ih koristi. Do tada, ako je netko promijenio strukturu podataka — dodao stupac, preimenovao polje, reorganizirao skladište — svaki program koji je s tim podacima radio morao je biti prepisan, jer je program znao točno gdje stvar fizički leži. Codd kaže: ne mora. Program pita »daj mi sve kupce iz Zagreba« i baš ga zabole gdje je to fizički spremljeno, u kojem redoslijedu, na kojem disku, iza koje brave. Baza to rješava sama. Programer prestaje biti špiljski vodič i postaje — čovjek koji samo postavlja pitanja.
Rad ima i formalni dio koji izgleda kao da ga je napisao netko tko mrzi ljude — grčka slova, skupovi, definicije normalizacije koje ćeš, ako ikad upišeš informatiku, gledati u nekom udžbeniku i pitati se je li ovo kazna za nešto što si učinio u prošlom životu. Ali ispod te matematičke kore leži jedan jedini poziv: prestanite programerima naplaćivati znanje fizičke strukture skladišta. Neka pitaju što žele, a ne kako doći do toga.
Naravno, 1970. nitko u IBM-u ne trči s ovim radom niz hodnik vičući da su upravo promijenili svijet. Rad se čita, kimne se glavom, pohvali se matematička elegancija — i onda se vrati na posao, jer se poslu, kao što ćemo vidjeti, uopće ne isplati da ovaj rad ikad napusti papir na kojem je otisnut.

IBM ignorira vlastitog genija
Sad bi bilo lijepo zamisliti scenu: Codd uleti u ured potpredsjednika s papirima u ruci, potpredsjednik ih pročita, skoči na stol i vrisne »ovo mijenja sve!«. Ništa od toga se nije dogodilo. Dogodilo se ono što se u velikim firmama uvijek dogodi kad genij u podrumu smisli nešto što bi uništilo najprofitabilniji proizvod na katu iznad njega — apsolutno ništa.
IMS je nastao nekoliko godina prije, za potrebe programa Apollo — trebalo je nekako organizirati milijune dijelova rakete koja je trebala odletjeti na Mjesec. Ali je radio. I, što je puno bitnije menadžmentu, donosio je novac. Mnogo novca. Banke su na njemu vodile transakcije, avioprijevoznici rezervacije — IMS nije bio proizvod, IMS je bio krava muzara koja je davala mlijeko svaki kvartal, uredno, pouzdano, bez drame.
Codd je radio u IBM-ovom istraživačkom centru u San Joseu — daleko, geografski i politički, od prodajnih timova koji su živjeli od IMS-a. Rad je objavio u akademskom časopisu Communications of the ACM, što je istovremeno bilo hrabro i pametno: nije mogao čekati da interna birokracija odluči hoće li mu dopustiti da priča o svojoj ideji, pa je objavio izvana, neka IBM to čita kao i svi ostali.
Reakcija menadžmenta? Ljubazno kimanje, poneki interni memo — ništa što bi ugrozilo prodaju IMS-a, koji je i dalje nosio kruh. Codd nije bio otpušten, nije bio ni javno ismijan; bilo bi to previše dramatično za priču koja je, u biti, dosadnija i tužnija od otkaza. Jednostavno je bio marginaliziran na najtiši mogući način: ignoriran. Dobio je poneki resurs da razvija ideju dalje, ali nikakav mandat, nikakvu ozbiljnu podršku da to pretvori u proizvod. Njegov šef, kažu, bio je više zainteresiran da Codd ne pravi buku nego da mu pomogne da je napravi glasnijom.
Ono što ovu priču čini gotovo nestvarnom jest to da se, iste te 1970., tridesetak kilometara sjevernije, sprema identičan zločin. U Xeroxovom PARC-u istraživači će za par godina izmisliti grafičko sučelje, miš, umrežavanje — a Xerox će sve to gledati kao znanstveni kuriozitet, dok Apple i Microsoft ne odnesu ideju kroz vrata. Dva giganta, dvije zgrade puno pametnijih ljudi nego što im je trebalo, i oba puta ista dijagnoza: firma je znala da drži budućnost u ruci i pustila ju je da ispari, jer je sadašnjost (fotokopirni stroj, IMS ugovor) bila previše profitabilna da bi je se dirnulo.
Codd nije odustao — i tu priča skreće, jer za razliku od PARC-ovih izuma koji su čekali da ih neka tuđa tvrtka pretvori u proizvod, Codd je odlučio da će, ako treba, cijelu industriju osobno natjerati da prizna što je zapravo rekao. Sljedećih godina to će raditi na način koji njegovim kolegama neće biti lagan za slušanje.

Dvanaest pravila i križarski rat
Prođe petnaestak godina. Rad iz 1970. postao je evanđelje, akademici ga citiraju, konferencije ga slave — a onda se dogodi ono što se uvijek dogodi kad ideja postane popularna: svi počnu koristiti riječ, a nitko ne provjerava ima li pravo na nju. Sredinom osamdesetih tržište je puno proizvoda koji na kutiji imaju natpis „relacijska baza podataka”, a unutra imaju... pa, štogod je marketinški odjel te večeri smislio da se prodaje bolje. Tablice tu i tamo, malo SQL-a, puno praznih fraza. Codd je to gledao onako kako čovjek gleda kad mu netko zalijepi ime na proizvod koji nikad nije testirao.
I onda je napravio ono što bi napravio svaki matematičar uvrijeđen u svojoj struci: sjeo je i napisao popis. Ne prijedlog, ne preporuku — popis. Dvanaest pravila (tehnički trinaest, ali broje se od nule, jer zašto ne, matematičari vole te male sadističke detalje) koja je proizvod morao zadovoljiti da bi se smio zvati relacijskim. Sve, od toga da se podaci moraju predstaviti isključivo kroz tablice, do toga da baza mora imati jedinstven jezik za definiciju podataka, manipulaciju i sigurnost — sve, bez rupa, bez „radi većinom”, bez „skoro”.
Poanta nije bila akademsko cjepidlačenje radi cjepidlačenja. Poanta je bila da riječ „relacijski” nosi konkretno obećanje — nezavisnost podataka od programa (možeš promijeniti kako su podaci fizički spremljeni, a program koji ih koristi neće ni primijetiti), matematičku dosljednost, mogućnost da pitaš bazu bilo što bez da znaš gdje je fizički spremljeno. Ako proizvod to obećanje ne ispunjava, korisnik će jednog dana platiti cijenu za to, samo neće znati zašto. Codd je htio zaštititi ljude koji ni ne znaju da im treba zaštita.
Tu se vidi i druga strana Codda, ona koja mu je istovremeno bila najveća snaga i najveća kočnica. Čovjek se nije znao smiriti. Nije bio tip koji kaže „dobro, nije baš savršeno, ali ide u pravom smjeru”. Za njega je „relacijsko” bilo ili čisto ili nije bilo relacijsko, treće opcije nije bilo. Pisao je članke, davao intervjue, javno raščlanjivao proizvode konkretnih firmi red po red, pravilo po pravilo, kao profesor koji vraća seminarski rad prošaran crvenom kemijskom. To ga je pretvorilo u lika kojeg su industrijski analitičari istovremeno citirali s poštovanjem i izbjegavali zvati na ručak.
Ta beskompromisnost ga je, s jedne strane, učinila jedinim autoritetom kojem se vjerovalo bez pitanja — kad bi Codd rekao da nešto nije relacijsko, to nije bilo mišljenje, to je bila presuda. Ali ista osobina ga je, s druge strane, izolirala od samog tržišta koje je stvorio. Firme su zarađivale milijarde na njegovoj ideji, a on je sjedio postrani i vikao da to rade pogrešno, dok su njegovi poslodavci — da, opet IBM, isti onaj koji ga je već jednom maknuo daleko od proizvodnih odluka — tiho nastavljali raditi ono što je najisplativije, a ne ono što je najčišće.
Danas, kad neki proizvod na svojoj naljepnici kaže „SQL-compatible” umjesto „relacijski”, to nije slučajna formulacija. To je industrija koja je, negdje usput, tiho odustala od pokušaja da udovolji Coddovim dvanaest pravila i odlučila da je lakše samo promijeniti naziv nego popraviti proizvod. Sam Codd bi vjerojatno rekao da je to dokaz da je bio u pravu od početka.

Zašto je matematika pobijedila
Dobro, sad presuda. Zašto je pobijedio matematičar s tablicama protiv cijele industrije koja je na hijerarhijskim bazama zarađivala ozbiljne novce? Odgovor je jedna riječ, ali zaslužuje objašnjenje: deklarativnost.
Postoje dva načina da nekome kažeš što želiš. Prvi je proceduralni: kažeš mu točan slijed koraka. Idi do stabla, skreni lijevo, otvori treći pokazivač, prati vezu do zapisa, provjeri je li aktivan, ako nije idi na sljedeći. To je programiranje s IMS-om — govoriš kako doći do podatka, korak po korak, kao da diktiraš uputu slijepcu kroz labirint. Drugi način je deklarativni: kažeš mu što hoćeš, a on nek se snalazi kako doći do toga. »Daj mi sve kupce iz Zagreba koji su nešto kupili u zadnjih mjesec dana.« Gotovo. Ne zanima te put, ne zanima te stablo, ne zanima te je li netko sinoć preslagao indekse. To je SQL — kratica za Structured Query Language, odnosno »jezik za strukturirane upite« — dijete Coddove relacijske algebre, i to je razlika koja je odlučila rat prije nego što je i ozbiljno počeo.
Zvuči kao mala stvar. Nije. Kad računalu kažeš kako, ti si taj koji mora znati svaki detalj strukture — i ti si taj koji plaća kad se ta struktura promijeni. Kad računalu kažeš što, teret optimizacije prebacuješ na sustav. Netko drugi, pametniji od tebe u tom trenutku, s boljim informacijama o tome kako podaci fizički stoje na disku, smišlja najbrži put do odgovora. Ti se time ne moraš zamarati. Codd je, u suštini, izumio podjelu rada između čovjeka koji zna posao i mašine koja zna motor. Genijalno u tome je što je ta podjela ostala stabilna pola stoljeća — SQL koji pišeš danas nije bitno drukčiji od onog iz osamdesetih, dok su ispod haube baze mijenjale motore triput.
Zato ova priča zaslužuje mjesto koje joj enciklopedija daje, bez stida oko superlativa. Rijetko je jedan znanstveni rad tako uredno podijelio povijest struke na prije i poslije — svaki SELECT (naredba kojom od baze tražiš »daj mi te i te podatke«) koji si ikad otipkao, svaki JOIN (naredba kojom spajaš podatke iz dvije tablice u jedan odgovor) koji te natjerao da psuješ u tri ujutro, svaki upit koji si strpao u aplikaciju na poslu — sve to duguje postojanje jednom matematičaru koji je 1970. gledao IBM-ov labirint i rekao: dosta, hoću tablice.