
Predstavljajte si, da na Zemljo prispe vesoljec, ki o našem svetu ne ve popolnoma nič.
Naleti na nekaj.
Sprva tega ne imenuje jabolko. Ne ve niti, da gre za predmet.
Preprosto opazi spremembo.
Obstaja neka konfiguracija čutnih informacij. Ko vesoljec posreduje vanjo, se spremeni. Vesoljec si zabeleži razliko.
Poskusi isto interakcijo znova.
Rezultat je podoben.
Poskusi nekaj drugega. Rezultat se spremeni.
Zdaj ima začetke vzorca.
Lahko začne delati napovedi:
Če to dejanje ponovim v podobnih pogojih, bi se moralo zgoditi nekaj podobnega.
Nato to napoved poskuša ovreči.
Spremeni pogoje. Ponovi poskus. Išče izjeme.
Sčasoma morda opazi, da se nekateri vzorci pojavljajo skupaj. Nekatere stvari se dosledno pojavljajo ob drugih. Nekatere spremembe obstanejo. Nekatere izginejo. Nekatere preobrazbe je mogoče ponoviti.
Šele po dovolj opazovanjih začne tem pravilnostim dajati imena in graditi abstrakcije okoli njih.
Sčasoma morda odkrije tisto, čemur pravimo jabolko. Pozneje morda odkrije, da jabolka rastejo na drevesih. Še pozneje morda odkrije, da so drevesa del večjega biološkega sistema.
Toda nobenega od teh pojmov ni dobil vnaprej.
Najprej je svet. Pojmi pridejo pozneje.
To je zamisel zagonskega nalagalnika znanja.
Zagonski nalagalnik je majhen košček programske opreme, ki se zažene prvi, preden ostali operacijski sistem sploh obstaja, in pripravi sistem, da lahko teče vse drugo. Ime se prilega, ker ima ta postopek podobno vlogo za znanje: sistemu omogoči, da začne z zelo malo, zgradi zanesljive trditve o svetu in postopoma sestavlja zahtevnejše razumevanje, ne da bi predpostavljal sklepe, ki jih šele išče.
Zagonski nalagalnik znanja je postopek, ki opažanja spreminja v zanesljive trditve.
Osnovna zamisel je preprosta: vsaka trditev o svetu mora skozi postopek, preden ji sistem sme zaupati.
V bistvu je to znanstvena metoda, formalizirana iz mojih izkušenj z gradnjo sistemov.
Postopek je tak:
Sprememba → Primerjava → Hipoteza → Napoved → Falsifikacija → Neodvisno preverjanje → Posploševanje → Abstrakcija → Izolacija in poseg → Sestavljanje → Umerjanje → Izbira naslednjega cilja
Ni nujno linearen. Je zanka. Neuspela napoved vas lahko vrne k hipotezi. Neuspelo umerjanje lahko razkrije težavo več korakov prej. Napaka v temeljih vas lahko vrne k sistemu tipov.
Pomembno je, da si trditve v sistemu prislužijo svoje mesto s tem postopkom.
Preostanek članka sledi temu postopku.
Vesoljec začne s spremembo.
Ne začne s predmetom, kategorijo ali razlago. Nekaj je drugače, kot je bilo prej.
To je prva stopnja zagonskega nalagalnika, ker ni ničesar za razlagati, dokler se nekaj ne zgodi.
Obstaja neka konfiguracija čutnih informacij. Ko vesoljec posreduje vanjo, se spremeni. Vesoljec si zabeleži razliko.
Sistem še ne ve, kaj je povzročilo spremembo.
Ve samo, da se je zgodila.
Sistem še ne ve, kaj je povzročilo spremembo.
Ve samo, da se je zgodila.
Predstavljajte si na primer, da vesoljec spusti majhen predmet. Predmet se premakne glede na vesoljca. Vesoljec ga spusti znova in predmet se spet premakne. V tem trenutku vesoljec ne ve, kaj je »padanje«, niti da na predmet deluje kakšna sila. Ve samo, da se je stanje sveta spremenilo, potem ko je predmet spustil.
Ta razlika je pomembna. Zagonski nalagalnik začne z opazovanjem, ne z razlaganjem.
Ko je sprememba tu, je naslednji korak, da jo primerjamo s tem, kar je bilo prej, in s tem, kar se zgodi, ko interakcijo ponovimo.
Vesoljec poskusi isto interakcijo znova.
Rezultat je podoben.
Poskusi nekaj drugega.
Rezultat se spremeni.
Zdaj je na voljo nekaj koristnejšega od enega samega opažanja. Obstaja razmerje med dejanji in izidi, ki ga je mogoče primerjati med opažanji.
Vesoljec spušča predmete različnih oblik in velikosti. Spušča jih z različnih položajev. Predmeti se še naprej gibljejo proti istemu območju prostora. Vesoljec še vedno ne ve, zakaj. Odkril je le, da so spremembe povezane na ponovljiv način.
Tu se zagonski nalagalnik začne premikati od surove spremembe proti znanju.
Primerjava razlike še ne razloži.
Ugotovi, da razlika obstaja, in sistemu da nekaj, kar je mogoče raziskati.
Ko sistem začne videti vzorce, lahko predlaga hipotezo.
Vesoljec morda pride do nečesa takega:
Če to dejanje ponovim v podobnih pogojih, bi se moralo zgoditi nekaj podobnega.
V tem trenutku ima sistem razlago, ki jo lahko raziskuje.
Znanja pa še nima.
Hipoteza je predlog. Zagonski nalagalnik to razliko namenoma ohranja, ker bi prezgodnji sprejem hipoteze iz domneve naredil temelj.
Vesoljec bi zdaj lahko predlagal: »Predmeti, spuščeni v teh pogojih, se nagibajo k premikanju proti temu območju.« Tega območja ne imenuje »dol« in pojava ne imenuje »gravitacija«. Ti pojmi še niso vzpostavljeni. Hipoteza preprosto opisuje vzorec, ki ga je opazil.
Naslednja stopnja obstaja zato, da hipotezo naredi preverljivo.
Hipoteza postane uporabna, ko ustvari napoved.
Če sistem verjame, da določeno dejanje v določenih pogojih povzroči določen rezultat, bi moral znati povedati, kaj pričakuje, ko se ti pogoji ponovijo.
Vesoljec napove, da se bo predmet, ki ga spusti z istega mesta, premaknil proti istemu območju. Nato napove, da bo spustitev z višjega mesta še vedno povzročila gibanje proti temu območju.
Zdaj se lahko trditev sreča z resničnostjo.
To je pomemben prehod v zagonskem nalagalniku.
Sistem se je premaknil od:
»Mislim, da bi to lahko držalo.«
k:
»Če to drži, bi moral opaziti tole.«
S tem ima sistem nekaj, kar lahko poskuša ovreči.
Naslednja stopnja je falsifikacija.
Namesto da bi se spraševal le, kako hipotezo potrditi, sistem spreminja pogoje. Ponavlja poskus. Išče izjeme.
Poskuša ovreči lastno napoved.
Vesoljec spušča predmete z različnih krajev. Uporablja različne predmete. Spušča jih z različnih višin. Spreminja okoliške pogoje. Išče predmet, ki se ne obnaša, kot je napovedano. Če ga najde, se mora hipoteza spremeniti. Če ga ne najde, je hipoteza preživela še en poskus, da bi jo ovrgli.
Tu testi postanejo del zagonskega nalagalnika.
Test je v bistvu poskus falsifikacije. Zastavi trditev o tem, kaj bi moral sistem početi, nato pa poskuša najti okoliščino, v kateri trditev odpove.
Splošni deli sistema bi zato morali imeti splošne teste.
Testirajte atome.
Testirajte tipe.
Testirajte mehaniko avtomatov stanj.
Testirajte pravila, ki bi morala veljati ne glede na to, katera domena je zgrajena na vrhu.
Ti testi lahko ostanejo stabilni, medtem ko se domena spreminja.
Celostni testi služijo drugačnemu namenu.
Testirajo sestavljeni sistem v točki, kjer se vsi deli srečajo. Test s Playwrightom lahko na primer vzame trditev, ki se zdi pravilna sama zase, in jo poskuša ovreči prek dejanske aplikacije.
To je pomembno, ker nekatere napake nastopijo šele po sestavljanju.
Splošne komponente so lahko vsaka zase pravilne, njihova kombinacija pa ni.
Če dobi vsaka domena svojo zbirko testov, tesno vezanih na njeno izvedbo, je vzdrževanje teh testov drago. Domene se spreminjajo. Testi se spreminjajo z njimi. Sčasoma postane že sam nabor testov vir tehničnega dolga.
Testiranje splošne podlage deluje drugače.
Testi lahko ostanejo stabilni, medtem ko se domena spreminja, ker testirajo trditve, ki naj bi ostale stabilne.
Preživeti poskus falsifikacije ni vedno dovolj.
Obstaja druga plast preverjanja, ki jo je lahko spregledati: neodvisno preverjanje.
Dva sistema z isto izvedbo se lahko ujemata preprosto zato, ker delita isto napako. Neodvisne izvedbe so močnejši preizkus.
Vesoljec zdaj za merjenje gibanja predmeta uporabi drugo eksperimentalno postavitev. Namesto da bi se zanašal na isti mehanizem opazovanja, uporabi drugega. Če oba neodvisno dasta isto razmerje, ima vesoljec več razlogov, da rezultatu zaupa.
Prevajalnik in izvajalno okolje, dva interpreterja ali preverjevalnik specifikacije in izvajalni mehanizem lahko omogočijo tako primerjavo.
Če neodvisno pridejo do istega rezultata, je trditev prestala močnejši preizkus kot samo notranjo skladnost.
To zagonskemu nalagalniku daje še eno pomembno lastnost.
Trditev ne bi smela postati temeljna zgolj zato, ker se ena izvedba slučajno ujema sama s seboj.
Čim pomembnejša postaja trditev, tem dragocenejše je neodvisno preverjanje.
Če trditev preživi falsifikacijo in neodvisno preverjanje, lahko zagonski nalagalnik zastavi novo vprašanje:
Kateri del tega rezultata velja onkraj posameznega primera, v katerem je bil odkrit?
Vesoljec preizkusi kamne. Nato koščke kovine. Nato vodo. Nato samega sebe. Zdi se, da opažanje velja za veliko različnih stvari. Zdaj se lahko premakne od »ta določeni predmet se je obnašal tako« proti »predmeti v tem okolju kažejo to vedenje v teh pogojih«.
To je posploševanje.
Ne puščajte posebne zakrpe v enem odjemalcu, če pravilo pripada splošni podlagi.
Premaknite ga na plast, kjer lahko varuje vse, kar je zgrajeno na njem.
Tu zagonski nalagalnik začne posamezna odkritja spreminjati v ponovno uporabno znanje.
Toda samo posploševanje ni dovolj.
Sistem mora še določiti, kakšno obliko naj to znanje ima.
Posploševanje vodi k abstrakciji.
Osrednje arhitekturno vprašanje postane:
Kaj naj ostane stabilno in kaj naj se sme spreminjati?
Uporaben sistem potrebuje oboje.
Splošna plast zagotavlja stabilna pravila in mehanizme. Domensko specifična plast zagotavlja spreminjajoče se vedenje, zgrajeno na njih. Obe morata ostati ločeni.
Vesoljec zdaj potrebuje način, da predstavi, česar se je naučil. Sčasoma, po dovolj raziskovanja, bi lahko razvil abstrakcijo za trajno razmerje, ki ga je odkril. Veliko pozneje bi temu razmerju morda rekli »gravitacija«. Pomembno je, da je abstrakcija prišla po opažanjih, napovedih in poskusih, ki so jo podprli.
Ta ločitev je posledica zagonskega nalagalnika.
Ko je pravilo preživelo postopek in se je pokazalo, da velja onkraj enega posameznega primera, ga ne bi smela vsaka domena znova odkrivati sama.
Lahko postane del splošne plasti.
Osnovni gradniki bi morali biti dovolj majhni, da jih je mogoče uporabiti povsod.
Pomislite na LEGO. Iste kose je mogoče sestaviti v številne različne strukture. LEGO kocke ne spreminjate vsakič, ko zgradite drugačno hišo.
To naredi ločitev na splošno in domensko specifično resnično. Domensko vedenje nastane z drugačnim sestavljanjem atomov, ne s stalnim ustvarjanjem novih različic samih atomov.
Zagonski nalagalnik lahko zato ustvari majhne, stabilne koščke znanja, ki jih je pozneje mogoče sestaviti v zahtevnejše sisteme.
Sistem tipov postane skupna referenčna točka.
Obstajati bi morala ena definicija tipa, uvožena povsod, kjer jo potrebujejo. Ko se ta definicija spremeni, se posledice razširijo po sistemu.
To je uporabno, ker sistem sam izpostavi nesoglasje. Urejanje skupnega tipa bi moralo prisiliti odvisno kodo, da dokaže, da je še vedno smiselna.
Sistem tipov zato deluje kot del splošne referenčne plasti.
To je še posebej pomembno, ker se temeljne trditve razširijo najdlje.
Napaka v funkciji na visoki ravni lahko prizadene eno funkcijo. Napaka v skupnem tipu ali primitivu lahko prizadene vse, kar je zgrajeno na njem.
Zato so temelji posebej pomemben cilj zagonskega nalagalnika.
Čim bolj temeljna je abstrakcija, tem skrbneje mora preživeti postopek.
Zagonski nalagalnik se ne ustavi pri abstrakciji.
Sistem lahko odkrije, da je nekaj narobe, ne da bi takoj vedel, kje je prava težava.
Napaka se lahko pojavi v funkciji na visoki ravni, dejanska težava pa je v skupnem primitivu.
Sistem mora zato izolirati pravi vzrok in poseči tam.
Recimo, da eden od vesoljčevih poskusov da drugačen rezultat. Ne spremeni takoj celotnega modela. Spreminja eno spremenljivko naenkrat. Je krivo telo? Mesto? Merilna naprava? Okolje? Z izolacijo spremenljivk lahko ugotovi, kje nesoglasje dejansko izvira, in poseže tam.
To je vloga izolacije in posega.
Cilj ni zgolj zakrpati vidni simptom.
Cilj je ugotoviti, kje je napačna temeljna trditev ali mehanizem, in spremembo narediti tam.
To je še en razlog za ločevanje splošnih mehanizmov od domensko specifičnega vedenja.
Če je težava splošna, jo popravite v splošni podlagi.
Če je domensko specifična, naj poseg ostane na robu.
Domensko specifični del je tam, kjer se sistem dotika zunanjega sveta.
Podatkovne zbirke, vmesniki API, datoteke, uporabniki, omrežja in drugi zunanji sistemi vsi prinašajo domensko specifično vedenje in negotovost.
Če so ti učinki izolirani, se lahko spreminjajo, ne da bi onesnažili splošno podlago.
Splošno strojevje ostane stabilno. Domensko specifično vedenje živi na robovih.
Zagonskemu nalagalniku to daje mesto za poseg, ne da bi bilo treba nenehno spreminjati temelje, ki so že preživeli prejšnje cikle preverjanja.
Ko je zadevna sprememba izolirana in narejena, jo mora sistem sestaviti nazaj v večji sistem.
Tu postanejo avtomati stanj uporabni.
Avtomati stanj so splošna podlaga za mutacijo.
Avtomat stanj si lahko predstavljamo kot zaporedje okvirjev. Nekaj je v enem stanju, zgodi se dogodek in preide v drugo stanje.
Mehanizmu ni treba vedeti, kaj ta stanja pomenijo. Dovolj je, da ve, da stanja obstajajo in da prehodi sledijo pravilom.
Zato je avtomat stanj uporaben kot splošen vsebnik za številne različne domene.
Splošni mehanizem lahko tako ostane stabilen, medtem ko se domensko znanje sestavlja na njem.
Vesoljec zdaj lahko združi svoje znanje o obnašanju predmetov z znanjem o gibanju, merjenju in navigaciji. Vsak del je mogoče uporabiti kot del večjega sistema, ne da bi bilo treba vsakič znova odkrivati temeljna razmerja.
To je stopnja sestavljanja v zagonskem nalagalniku: potrjeni mehanizmi in abstrakcije se združijo v nekaj, kar lahko deluje v določeni domeni.
Nekatere napake postanejo vidne šele tu.
Splošne komponente so lahko vsaka zase pravilne, njihova kombinacija pa ni.
Zato se sestavljanje vrača k prejšnjim stopnjam in ni konec postopka.
Ko je sprememba sestavljena v sistem, mora zagonski nalagalnik ugotoviti, ali se sistem še vedno obnaša, kot se pričakuje.
To je umerjanje.
Vesoljec napove, kje naj bi predmet pristal, ko ga spusti z določenega položaja. Izmeri, kaj se dejansko zgodi, in ugotovi, da je napoved rahlo napačna. Izmeri razliko, prilagodi model in poskus ponovi. Umerjanje je postopek, ki model in opazovani svet spet približa drug drugemu.
Sistem ima lahko pravilno lokalno pravilo, medtem ko njegov širši model zastara.
Lahko opravi obstoječe teste, medtem ko se okolje okoli njega spreminja.
Umerjanje zato zaključi trenutni cikel z vprašanjem, ali je znanje, ki ga je ustvaril postopek, še vedno uporabno in dovolj natančno za okolje, v katerem sistem deluje.
Tu se zberejo prejšnje stopnje:
Primerjava → Hipoteza → Napoved → Falsifikacija → Preverjanje → Umerjanje
Sistem opazi, kaj se je zgodilo, to primerja s svojimi pričakovanji in ugotovi, ali njegov model še dovolj dobro ustreza resničnosti.
Če ne, se postopek začne premikati nazaj.
Neuspelo umerjanje lahko razkrije težavo več stopenj prej.
Zagonski nalagalnik opisuje, kako se sistem nauči, kaj je pravilno.
Entropija opisuje omejitev, v kateri ta postopek poteka.
Viri so omejeni. Sistem lahko od okolja sprejme le toliko nereda in ga potisne nazaj le toliko. Toda pomembna spremenljivka ni preprosto, koliko nereda obstaja v danem trenutku.
Pomemben je čas.
Pomembno je razmerje med hitrostjo, s katero se nered kopiči, in hitrostjo, s katero ga sistem zmore obdelati in izvoziti.
Konica ni težava, če ima sistem dovolj časa, da se z njo spopade, preden pride naslednja.
Podobno je dolgu. Dolg sam po sebi ni nujno težava. Težava se začne, ko kopičenje dosledno prehiteva odplačevanje.
Zagonski nalagalnik je del tega odplačevanja:
Primerjava → Hipoteza → Napoved → Falsifikacija → Preverjanje → Umerjanje
Vsak cikel vzame čas.
Preživetje sistema zato je odvisno od tega, ali zmore dokončati svoje cikle dovolj hitro, da drži korak z okoljem.
Če se okolje spreminja hitreje, kot sistem zmore dokončati svojo zanko, lahko njegov model zastara, še preden je bil preverjen.
Sistem ima lahko popolnoma zdrav postopek za ustvarjanje znanja, a če se svet spreminja hitreje, kot postopek lahko teče, znanje prispe prepozno.
Ta zastarelost je sama kopičenje entropije.
Zato ravnovesje ni mirovanje.
Je omejena vzajemna sprememba med sistemom in njegovim okoljem.
Sistem se spreminja kot odziv na okolje, okolje pa se spreminja kot odziv na sistem.
Sistem, katerega trditve o svetu so napačne, težavo poslabša. Še naprej deluje na podlagi napačnega modela, zato so njegove interakcije z okoljem potratne ali samopoškodujoče.
To je eden neposrednih načinov, kako pokvarjen epistemični postopek povzroči, da sistem preseže svojo mejo entropije, medtem ko se še vedno obnaša, kot da ohranja ravnovesje.
Kadar sistem ne more več zmanjševati entropije, je rezerva zamrznitev.
Zamrznitev nereda ne zmanjša. Ustavi nadaljnjo izpostavljenost njemu.
Sistem se odpove delu svoje sposobnosti prilagajanja v zameno za ustavitev kopičenja.
Toda živ sistem ne more ostati zamrznjen v nedogled.
Ohranjanje ravnovesja zahteva neprekinjen pretok, tako kot človeško telo ohranja ravnovesje z nenehnimi procesi, ne pa tako, da bi doseglo neko končno statično stanje.
Zagonski nalagalnik cikel konča z izbiro tistega, kar bo raziskal naslednje.
Vedno bo še ena negotovost, še ena nepojasnjena sprememba, še ena predpostavka, ki bi lahko bila napačna, ali še ena temeljna trditev, ki bi ji koristilo preverjanje.
Vesoljec ima zdaj uporaben model tega določenega pojava, a ta model razkrije tudi nova vprašanja. Ali se razmerje spremeni na drugem kraju? Ali se spremeni zunaj tega okolja? Ali nanj vpliva kak drug velik predmet?
Eno od teh negotovosti izbere za naslednji cilj in začne znova.
Sprememba → Primerjava → Hipoteza → Napoved → Falsifikacija → Neodvisno preverjanje → Posploševanje → Abstrakcija → Izolacija in poseg → Sestavljanje → Umerjanje → Izbira naslednjega cilja.
In ponovite.
Arhitektura obstaja zato, da ta postopek naredi poceni in ponovljiv. Sprememba je narejena, primerjana s tem, kar že obstaja, in spremenjena v hipotezo in napoved. Napoved je nato preizkušena, kjer je mogoče ovržena in kjer je izvedljivo neodvisno preverjena.
Rezultat je posplošen, abstrahiran in sestavljen nazaj v sistem. Ko se kaj ne obnaša, kot se pričakuje, sistem izolira vzrok, poseže tam in umerja glede na resničnost.
Nato izbere naslednji cilj.
Cilj ni zgraditi sistem, ki se nikoli ne spremeni. Cilj je zgraditi sistem, ki se lahko spremeni, ne da bi izgubil sposobnost presojanja, ali je bila sprememba pravilna.
Zagonski nalagalnik se ni treba ustaviti pri razumevanju sveta. Ko je zanka dovolj stabilna, da ji lahko zaupamo, se lahko obrne nase, na svoje temelje. Trditev lahko postane naslednji cilj, nato metoda, s katero je bila trditev vzpostavljena, nato cilji, ki določajo, kaj raziskovati, in nazadnje predpostavke, na katerih ti cilji temeljijo. Isti postopek teče naprej: sistem uporabi svojo metodo za pridobivanje znanja, da preuči samo metodo. V tem smislu zagonski nalagalnik ni le način gradnje znanja. Je način, kako sistem postopoma preučuje in izpopolnjuje strojevje, s katerim ve.