Materjalid koostas ja kursuse viib läbi
Tartu Ülikooli arvutiteaduse instituudi informaatika didaktika töörühm
< eelmine | 1. OSA sisukord | järgmine > |
1.3 Silmaring. Katkeid programmeerimise ajaloost
ALGUS
Ühelt poolt on programmeerimise ajalugu küllaltki lühike, eriti võrreldes mõnede teiste valdkondadega. Teiselt poolt on aga siingi juhtunud palju huvitavaid sündmusi, on olnud erinevaid ajajärke ja tegutsenud värvikaid persoone. Siin saame tutvustada vaid vähest, aga loodetavasti mingi (küll väga fragmentaarse) taustapildi siiski saab.
Programmeerimise ajalugu algab juba enne seda, kui arvutid füüsiliselt valmis said. Nimelt leidis inglise matemaatik Charles Babbage 1812. aastal, et teatud arvutusi võiks teha hoopis masin. Aastakümnete jooksul tegeles ta selle mõtte realiseerimisega. 1842. aastal tutvustas ta loengus universaalse mehaanilise arvuti - analüütilise masina ideed. Teatud eeskujuks olid automaatsed kangasteljed. Varasematest ideedest eristas seda masinat just see, et protsessi pidi juhitama varemkoostatud juhiste järgi. C. Babbage püüdis seda masinat ka valmis ehitada, aga tolleaegsete tehniliste võimaluste piiratuse tõttu see ei õnnestunud. Masina lihtsam kuju tehti valmis aastaid hiljem. Mitmed tema põhimõtted aga leidsid rakendamist hilisemates arvutites.
Analüütilise masina loengu põhjal avaldati artikkel, mille C. Babbage palus inglise keelde tõlkida Ada Lovelace'il, kes oli luuletaja lord Byroni tütar. Lisaks tõlkimisele lisas A. Lovelace artiklile ka kommentaare, mille hulgas olid ka juhised, kuidas selle masina abil leida Bernoulli arve. Hiljem on neid juhiseid hakatud pidama ajaloo esimeseks programmiks ja Ada Lovelace’i esimeseks programmeerijaks. Rohkem programme ta teadaolevalt ei kirjutanud ja ei saanud seda ainsatki masinal reaalselt testida. See, et esimene programmeerija oli naine, on vahel olnud inimestele üllatav. Tegelikult saab programmeerimisega muidugi tegeleda soost sõltumata.
PROGRAMMEERIMISKEELED
Räägime nüüd ka natuke sellest, kuidas aegade jooksul arvutile oma soove on teada antud. Juba mehaanilistest masinatest peale on olulisel kohal olnud suhteliselt kahevalentne lähenemine nii programmide kui andmete osas. Nii on näiteks perfokaardil või perfolindil mingis konkreetses kohas auk või seda ei ole, mingi lamp põleb või ei põle, mingis pesas on midagi või pole. Arvude kujul on seda mõistlik kirja panna vaid kahe numbri, 1 ja 0 abil.
Programmeerimiskeeled võib (mõnevõrra tinglikult) jaotada põlvkondadesse. Nii saab eristada näiteks:
1. põlvkond - masinkood
2. põlvkond - assemblerkeeled
3. põlvkond - kõrgtasemekeeled
4. põlvkond - probleemile orienteeritud keeled
Masinkoodis programmid koosnevad tinglikult ainult ühtedest ja nullidest, näiteks
00000000001000100011000000100000
võib tähendada "liita aadressidel 1 ja 2 olevad arvud ning salvestada resultaat aadressile 6“. Sellist programmi on inimesel raske lugeda ja kirjutada, masinale on see aga hästi “seeditav”. Assemblerkeeles programmitekst on juba inimesele natuke paremini mõistetav, näiteks
add $1, $2, $3
Siiski loetakse assemblerkeeles kirjutatud programme madalatasemeliseks. See tähendab siinkohal arvutilähedust - assemblerkeelt valdavad programmeerijad on ise reeglina just kõrgetasemelised.
Kõrgtaseme keeles programmi suudab ettevalmistunud inimene hästi kirjutada ja lugeda, masina jaoks tuleb seda aga transleerida. (Transleerimine ongi konkreetne termin, kuigi olemuselt see muidugi tõlkimist tähendabki.)
Probleemile orienteeritud keeled ei ole universaalsed keeled, vaid on loodud konkreetse valdkonna jaoks, aidates püstitada probleemi inimkeelselt. Nende puhul kirjutatakse koodis mida teha, mitte aga kuidas teha. Selliste keelte hulka kuulub näiteks SQL. Allpool toodud SQL-kood summeerib makseid, mille liik on “toetus”:
SELECT SUM(makse.summa) FROM makse WHERE makse.liik = ‘TOETUS’
.
TÄNAPÄEV
Viimase kahekümne aasta jooksul on programmeerimine läbinud mitmeid olulisi muutusi, sealhulgas arenes ka andmeteaduse valdkond. Programmeerijad on hakanud rohkem keskenduma andmeanalüüsile, ennustusmudelitele ja tehisintellektile – nii arenes välja kõikide jaoks tuntud ChatGPT. See on generatiivse tehisintellektiga vestlusbot, mille töötas välja OpenAI 2022. aasta septembris ja mis on võimeline töötama vestlusrežiimis. ChatGPT-d treeniti meetodiga RLH, mis on stiimulõpe inimtagasisidest. Selle meetodiga õpetatakse keelemudelit andma vastuseid, mis meeldivad inimkasutajatele – seega mitte lihtsalt suvalisi vastuseid.
Vaatamata sellele, et see keelemudel areneb kiiresti ja on lahe koodi kirjutaja, ei saa seda siiski võrrelda tarkvarainseneri ega arendajaga. See tehisintellekt ei saa kavandada tarkvarainseneri vaatenurgast või teha arendusi multimodaalsetes projektides, võttes arvesse ettevõtte vajadusi, ega parandada vigu, mis erinevad selle sisenditest. ChatGPT ei oska abstraktselt hinnata probleemi ega välja mõelda fundamentaalselt uut lahendust ning selles on väga lihtne veenduda kombinatoorika näitel – selle liigi ülesannete lahendamisel teeb ta tihti palju vigu ja ei suuda neid parandada isegi pärast seda, kui nendele “näpuga” viidata. Siiski on ChatGPT "lugenud" rohkem dokumentatsiooni, kui inimene elu jooksul loeb, seega oskab ta välja tuua koodinäiteid, lahendada standardseid algoritmilisi ülesandeid ja tuvastada vigu koodijuppides.
Materjali esialgse variandi koostas Eno Tõnisson. Materjali täiendas Karolina Samasev. Kohendatud kursuse korraldajate poolt.
< eelmine | 1. OSA sisukord | järgmine > |