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 ja tarkvaraarendus märkimisväärselt muutunud. Üheks oluliseks arengusuunaks on olnud andmeteaduse, masinõppe ja tehisintellekti kiire areng. Viimastel aastatel on eriti palju tähelepanu saanud generatiivne tehisintellekt ja suured keelemudelid. Üks tuntumaid näiteid on OpenAI loodud ChatGPT, mis avalikustati 2022. aasta novembris.
Generatiivse tehisintellekti tööriistad on muutunud oluliseks ka programmeerimises. Need suudavad genereerida ja selgitada koodi, aidata leida ja parandada vigu, koostada teste ning pakkuda lahendusi programmeerimisülesannetele. Uuemad programmeerimisagendid suudavad töötada juba tervete tarkvaraprojektidega: analüüsida olemasolevat koodi, kavandada muudatusi, muuta mitut faili ning käivitada ja kontrollida teste.
See ei tähenda siiski, et tehisintellekt asendaks programmeerija või tarkvarainseneri. Tehisintellekti genereeritud lahendused võivad sisaldada vigu ning nende sobivus sõltub ülesande kontekstist ja esitatud infost. Tarkvaraarendaja peab oskama probleemi mõista, valida sobiva lahenduse, hinnata genereeritud koodi korrektsust, turvalisust ja kvaliteeti ning vastutada lõpptulemuse eest. Seetõttu muudab generatiivne tehisintellekt programmeerija tööd, kuid programmeerimise põhialuste, algoritmilise mõtlemise ja koodi analüüsimise oskus jääb oluliseks.
Materjali esialgse variandi koostas Eno Tõnisson. Materjali täiendas Karolina Samasev. Kohendatud kursuse korraldajate poolt.
| < eelmine | 1. OSA sisukord | järgmine > |