Keskustelin taannoin jokin kuukausi takaperin shakkitietokoneen ohjelmoinnista Ohjelmointiputkassa avaten siitä oman säikeensä siellä, niin tuli tuollainen kysymys mieleeni, että voiko tietokone-ohjelma tai algoritmi olla käytännössä koskaan 100% robusti?
Kun tuli juttua ohjelmoinnin teoriassa koodin vaativusmääritelmistä, eli lähinnä että ohjelmakoodi on
a.) mahdollisimman uudelleenkäytettävää (re-usability), mikä yleensä saavutetaan modulaarisoimalla top-down -menetelmällä pilkommalla suuremmat ongelmat yhä pienempiin osa-ongelmiin, kunnes jäljellä on enää niin yksinkertainen metodi, joka todella on moneen tilanteeseen sopiva.
b.) Mahdollisimman vähän koodin toistoa sisältävää (code redudancy), lähinnä turhien toistojen ja ehtolauseiden minimointia, mutta proseduraalisissa ohjelmoinnissa ja rakenteisessa ohjelmoinnissa esiintyy uudelleen toistoa paljonkin, ja mitä mennään ohjelmoinnin historiaan, niin 1950/1960 -luvulla tämä ei ollut mitenkään voinut olla vaatimuksena.
Päädyin miettimään tuollaista, että voiko ylipäätään, jos ongelma on algoritmisesti ratkeava suotuisassa ajassa, kuinka todellista reaalimaailman sovelluksissa ohjelmiston robustisuus käytännössä toteutuneena on?
Päädyin pohdinnassa siihen, että jos ottaa kaikkien ohjelmien emo/isä-ohjelman tarkasteluun, jollaisena käyttöjärjestelmää voidaan ainakin jossain määrin pitää, kun tietokoneella oikein voi tehdä mitään järkevää ilman, että siinä olisi asennettuna jokin kyseisessä sähkölaitteessa toimiva käyttöjärjestelmä, niin Windows nyt ei ainakaan ole lähelläkään robustia, mutta pohtisin, että mahtoiko 1990 vuonna ensimmäinen Linux-versio olla melko lähellä sitä?
Linuxin kehittäjäyhteisö on paisunut ja kehitystyö niin laajaksi, että Linux:kaan, jota voi pitää hyvänä käyttöjärjestelmänä tekniikkansa osalta, niin ei tämäkään mikään täysin robusti käyttöjärjestelmä-ohjelmisto ole käsittääkseni?
Tästä nousee siis kysymys, onko mahdollista ohjelmoida käyttöjärjestelmää jollekin sähkölaitteelle, joka olisi täysin robusti?
Varmaan mikro-ohjelmointitasolla mitä joskus joku täälläkin palstalla totesi, että varmaan prosessoritehtaalla mikro-ohjelmoitu C-kääntäjä Intelin tehtailla poltetaan piirilevyyn kiinni, niin ne varmaan aika tavalla järkeviä analyyseja virhesyötteistä antaa, mutta korkeamman tason vähän kompleksiemmista ohjelmista, en ole nähnyt missään alan kirjallisuudessa ohjelmointiteoriasta puhuttaessa, että koodin pitäisi olla parhaimmillaan myös täysin robusti ratkaisu.
Näin ei varmaan käytännössäkkään ole? Onko muilla palstalaisilla tähän jotain ajatusta heittää?