Algoritmavimas ir programavimas
2006 m. lapkritis 6 d.
Dariaus
Programavimas arba algoritmavimas yra viena iš svarbiausių informatikos dalių, o uždavinio sprendimo algoritmizavimas – svarbi informatikos sąvoka, kurios sampratą turi įdiegti bendrojo lavinimo mokykla.
Studijuodama Lietuvos, Rusijos, Bulgarijos, JAV, Slovakijos informatikos mokytojų darbo patirtį, mokslininkų straipsnius, randu patvirtinimą, kad mokymas programuoti ugdo loginį mąstymą ir jo dėka keičiasi mokinių mokymosi būdas. Mokslininkų tyrimai rodo, kad programavimas formuoja sugebėjimą išskirti svarbiausius užduoties, problemos sprendimo etapus: analizę – užduoties išskaidymą į atskiras dalis; plano sudarymą – kiekvienos dalies sprendimo atskyrimą; sintezę – atskirų dalių apjungimą. Išmokti programuoti kokia nors programavimo kalba – reiškia suprasti jos semantiką ir sintaksę, o tai padeda formuoti moksleivių kalbos stilių. Programavimas skatina eksperimentuoti, formuluoti ir tikrinti hipotezes.
Su kokia programavimo kalba tikslingiausia supažindinti moksleivius? Lietuvos (ir ne tik Lietuvos) informatikos mokytojų, mokslininkų pasisakymai, straipsniai rodo, kad yra daug skirtingų nuomonių. Kiekvienas jų pateikia įtikinančius argumentus, pagrindžiančius jų nuomonės teisingumą. Tačiau dažniausiai savo nuomonės gynimas baigiasi kitų programavimo kalbų kritika, įrodinėjimu, kuo jos netinkamos mokykloje.
„Mokytojas, šventyklos šešėlyje vaikščiojantis tarp pasekėjų, skleidžia ne savo išmintį, o greičiau savo tikėjimą ir atsidavimą. Jei jis iš tiesų išmintingas, jis nekvies jūsų įžengti į savo išminties namus, greičiau jis ves jus prie jūsų pačių proto slenksčio.“ (K. Džibranas Pranašas.) Mano nuomone, konkreti programavimo kalba – tai tik priemonė realizuoti tikslus: mokyti programuoti, sudaryti kūrybos ir atradimų aplinką ir t. t. Ir mokytojo pasirinkimas turi būti pagrįstas pirmiausia jo tikėjimu tuo, ko moko. Tik tada jis ir jo mokiniai pasieks geriausių rezultatų. Svarbiausia visiems suvokti, kad mokymas turi būti nukreiptas ne į taisyklių išmokimą, o į mąstymo proceso formavimą.
Pagrindinės mokyklos informatikos kurso pradmenų viena dalis skirta algoritmavimui. „Programavimas – tai bendravimas su kompiuteriu tokia kalba, kuri suprantama ir kompiuteriui, ir juo dirbančiam žmogui. Labai svarbu suvokti programavimo esmę – keliolika pagrindinių konstrukcijų. Tuomet nei jo bijosime, nei jis stebins. Vaikui išmokti kalbą nebūtų sunku, jei jis turėtų tinkamas sąlygas. Mokytis kompiuterio kalbos reikėtų taip natūraliai, kaip mokomasi, pavyzdžiui, prancūzų šnekamosios kalbos Prancūzijoje, o ne taip, kaip jos mokoma Amerikos mokyklose.“ – teigė S. Papertas [12]. Kas sudaro tas tinkamas sąlygas? Pirmiausia – tai ugdymo filosofija, antra – pasirinkta programavimo kalba, trečia – tai mokymo metodika. Logo – tai ir pedagoginė filosofija, ir programavimo kalba, ir mokymo metodika, tinkanti ne tik jaunesniojo amžiaus vaikams, bet ir vyresniesiems.
Antrojoje darbo dalyje, remdamasi išstudijuota literatūra, pristatau Logo pedagogiką, apibūdinu Logo programavimo kalbų grupes. Trečioje dalyje nurodytas darbo tikslas ir uždaviniai. Ketvirtoje dalyje pateikiu teorinę medžiagą ir praktines užduotis, projektus, skirtus supažindinti mokinius su „Komenskio Logo“ sistema ir programavimo kalba. Penktoje dalyje aprašau savo darbo su mokiniais Logo sistema patirtį ir metodiką.
Algoritmas, užrašytas kompiuteriui suprantamu pavidalu, pavyzdžiui, programavimo kalba, vadinamas programa. Programa – tai algoritmo išraiška tikslia kalba, suprantama kompiuteriui. Pats kompiuteris moka atlikti tik labai elementarias operacijas, pavyzdžiui, sudėti du skaičius. Bet kadangi tiek programa, tiek duomenys jai kompiuteriui pateikiami kažkokiais simboliais, tai natūralu, kad viena programa gali būti duomenimis kitai programai. Todėl nebūtina algoritmus išreikšti elementariausiomis operacijomis, kurias tiesiog gali įvykdyti kompiuteris. Galima kurti aukštesnio lygio (tolimesnes kompiuteriams ir artimesnes žmonėms) programavimo kalbas ir programas transliatorius, kurios tą kalbą išverstų į kompiuteriui suprantamas instrukcijas. Yra sukurta daug ir įvairių programavimo kalbų.
Dažniausiai algoritmo sąvoka naudojama informatikoje užrašant kompiuterines programas. Tokiu atveju algoritmų užrašymui naudojami įvairūs susitarimai – programavimo kalbos. Dažniausiai mokymosi tikslams naudojama Pascal programavimo kalba arba pseudokalba, kai norime algoritmą publikuoti viešai.
Algoritmas kasdieniniame gyvenime
Gyvenime dažnai susiduriame su algoritmo sinonimais: instrukcijomis, nurodymais ir taisyklėmis, kurių nežinodami negalėtume atlikti tam tikrų veiksmų. Tačiau kartais šie aprašymai stokoja tikslumo. Taigi bendrai algoritmą būtų galima apibūdinti kaip tikslių nurodymų seką tam, kas turės atlikti konkrečią užduotį. Daugelį kasdieninės veiklos rezultatų pasiekiame net nesusimąstydami, kad vykdome tam tikrą algoritmą (sinonimai psichologijoje: įprotis, įgūdis, įgimtas ar įgytas refleksas). Jie mums reikalingi: išgyventi (savisaugai), prisitaikyti (adaptacijai) reikiamai vietovei pasiekti, prietaisams įjungti, išjungti bei naudoti, pirmajai pagalbai suteikti, maistui pagal receptą gaminti, matematiniams uždaviniams spręsti ir pan. Pagaliau, mūsų visą dieną (įvardinus jos tikslus) galima būtų pavadinti algoritmu, nes ji turi savo dienotvarkę, t.y. veiksmų atlikimo tvarką. Kartais sukeitus algoritmo veiksmus rezultatas nepakinta. Tačiau vykdant kai kuriuos algoritmus veiksmų sukeitimas gali sugriauti visą tolimesnę algoritmo eigą.
Algoritmas – aprašoma uždavinių sprendimo eiga. Ši eiga yra skirtinga skaičiuojant reakcijos lygtis (temos: reakcijos lygtys, pertekliaus nustatymas ir išeigos skaičiavimas) ir sprendžiant kitų temų uždavinius. Algoritmo peržiūrai naudojama nuoroda:Toliau pateikiamas algoritmo pavyzdys:
1. Nustatyti pradinius duomenis (kas duota).
2. Nustatyti galutinius duomenis (rezultatus, ką reikia rasti).
3. Parinkti tinkamą (-as) formulę (-es).
4. Nustatyti tarpinius duomenis (ko dar reikės uždaviniui išspręsti).
5. Nustatyti būdus (parinkti lenteles, formules) tarpinių duomenų paieškai.
6. Patikrinti, ar suvienodinti naudojamų fizikinių dydžių matavimo vienetai.
7. Atlikti reikalingus skaičiavimus pagal formules.
8. Parašyti gautą atsakymą.
Algoritmus galima užrašyti įvairiomis programavimo kalbomis. Jų pasaulyje sukurta labai daug ir vis randasi naujų. Tačiau daugelis jų turi panašias pagrindines konstrukcijas. Paprastai tik užrašai šiek skiriasi. Programavimo kalbos turi tarytum dvi puses: pirma – ji reikalinga žmogui, kad galėtų išreikšti uždavinio sprendimą aiškia, trumpa forma, antra – ji skiriama kompiuteriui, kuris turi įvykdyti užrašytas komandas ir gauti rezultatus. Abi šios pusės gana svarbios. Pradedant mokytis programuoti ypač svarbi pirmoji, nukreipta į žmogų, – nes daug kartų tenka patiems skaityti sukurtas programas ir jas nuolatos taisyti. Todėl labai svarbu pasirinkti programavimo kalbą, turinčią aiškias ir patogias konstrukcijas. Viena tokių yra Paskalio programavimo kalba. Paskalis tinka ir žmogui algoritmus rašyti bei skaityti, ir kompiuteriui – programoms vykdyti. Todėl juo parašytus algoritmus galima vadinti ir algoritmais, ir programomis, o pačią kalbą – ir algoritmavimo, ir programavimo. Su Paskalio programavimo kalba jau šiek tiek susipažinote pagrindinės mokyklos baigiamose klasėse mokydamiesi informatikos pradmenų kurso. Ten pagrindinis dėmesys buvo skirtas algoritmams, o Paskalis vartojamas tik kaip algoritmų užrašymo viena iš priemonių. Dabar didesnį dėmesį skirsime pačios kalbos konstrukcijoms, dar tiksliau – algoritmams užrašyti ir realizuoti Turbo Paskalio sistema.
Paskalio programavimo kalbą sukūrė Šveicarijos Federalinės aukštosios politechnikos mokyklos Informatikos instituto direktorius profesorius Niklausas Virtas (Niklaus Wirth) 1968–1971 metais ir pavadino ją žinomo prancūzų matematiko ir filosofo Blezo Paskalio (Blaise Pascal, 1623–1662) garbei. Paskalio kalbos pradžia reikėtų laikyti 1970 metus, kai buvo sukurtas pirmasis šios kalbos transliatorius CDC 6400 kompiuteriui. 1971 metais buvo paskelbtas pirmasis oficialus Paskalio programavimo kalbos aprašas, o po metų pasirodė jo pataisytas variantas. Vos tik sukurta Paskalio kalba ėmė sparčiai plisti. Ji susilaukė visuotinio pripažinimo ir tapo pagrindine programų publikavimo ir programavimo disciplinos mokymo kalba. 1977 metais buvo sudaryta mokslininkų grupė Paskalio kalbos standartui parengti. Jai vadovavo A. Adaimanas (A. M. Addyman). 1983 metų gruodžio 1 dieną paskelbtas tarptautinis Paskalio kalbos standartas ISO 7185. Šiuo standartu iš esmės remiamasi kuriant transliatorius įvairų tipų kompiuteriams.Lietuvoje Paskalio kalba pradėta praktiškai vartoti nuo 1977 metų, kai tuometinis Matematikos ir kibernetikos institutas įsigijo atitinkamą transliatorių kompiuteriui БЭСМ-6. Nuo 1979 metų Paskalio kalba vartojama neakivaizdinėje Jaunųjų programuotojų mokykloje. Nors iuo metu pasaulyje sukuriama vis naujesnių, atrodo, vis tobulesnių, programavimo kalbų, tačiau Paskalis nenustoja savo vertės – jis labai tinka pradedantiesiems mokytis programavimo. Daugelis šiuolaikinių modernių kalbų taip pat remiasi Paskaliu. To pavyzdys galėtų būti dabar itin mėgiama Delphi programavimo sistema, kurioje vartojama Object Pascal programavimo kalba – daguma jos konstrukcijų tiesiog paimtos iš Paskalio. Taigi išmokus rašyti algoritmus Paskalio kalba, nesunku bus įvaldyti bet kurią kitą programavimo kalbą. Paskalio kalba parašytiems algoritmams atlikti sukurta daug transliatorių. Vienas populiariausių Lietuvoje – Turbo Paskalis. Jį ir naudosime šioje knygoje pateiktoms programoms atlikti.Programavimo kalbos sukurtos tam, kad programuotojai galėtų žymiai paprasčiau rašyti programas, nei jie tai darytų programuodami mašinos kodu ar žemo lygio kalbomis (pvz., Asembleriu). Viena iš svarbiausių programavimo kalbos paskirčių — ne tik programinio kodo užrašymo paprastumas, bet ir jo perskaitymo ir perpratimo paprastumas. Tai svarbu dirbant tiek komandoje, tiek individualiai.
Istorija
Kai tik atsirado pirmi (primityvūs) kompiuteriai, jiems pradėtos rašyti programos kalbomis, atitinkančiomis asemblerio kalbą.
1945 m. sukurta pirmoji žinoma kalba Plankalkül.XX a. 6-ajame dešimtmetyje susidarius palankioms sąlygoms, sukurta nemažai kalbų, tame tarpe Fortran (1954), Algol 58 (1958), Lisp (1959).Vėliau sukurta daug įvairių tipų ir paskirčių kalbų; žinomesnės iš jų: Cobol (1960), Simula (1962), BASIC (1964), Logo (1967), Pascal (1971), C (1972), C++ (1983), Perl (1987), Java (1995), PHP (1997), C# (2000)
Nuo XX a. 6-ojo dešimtmečio vidurio dauguma kalbų kurtos ne iš naujo, o tobulinant ir kergiant jau sukurtas kalbas.
Skirstymas
Programavimo kalbas galima skirstyti keletų būdų. Čia išvardinti kai kurie jų.
Pagal vykdymo tipą
Vykdymo tipas – būdas, kaip programos kodas paverčiamas kompiuteriui suprantamomis instrukcijomis ir vykdomas.Teorinės kalbos (nevykdomos)Kompiliuojamos kalbos (pvz., C, Pascal)Interpretuojamos kalbos (pvz., PHP, Perl, Python, Ruby)Mišrios kalbos – naudojamas ir kompiliatorius ir interpretatorius (pvz., Java; taip pat žr. JIT)
Pagal abstrakcijos lygį
Kuo kalba abstraktesnė, tuo aukštesnio lygio ji skaitoma.Mašininis kodasŽemo lygio kalbos (pvz., Asembleris)Sisteminės kalbos (pvz., C)Objektinės kalbos (pvz., SmallTalk)
Pagal vyraujančia paradigmą
Funkcinės kalbos (pvz., Lisp, ML)Procedūrinės kalbos (pvz., C, Pascal)Objektinės kalbos (pvz., SmallTalk, Java, Ruby)Loginės kalbos (pvz., Prolog)
Pagal paskirtį
Kai kurios kalbos dažniau sutinkamos tam tikrose, joms būdingose, nišose. Vienos kalbos buvo sukurtos specialiai tam tikros srities problemoms spręsti, kitos išpopuliarėjo savo srityje dėl istorinių aplinkybių.
Keletas išskirtinių sričių su joms būdingomis kalbomis:
(Toks skirstymas yra nesistemiškas, nepatikimas ir linkęs keistis. Čia jis pateikiamas tik iliustraciniais sumetimais)Sisteminis programavimas (operacinių sistemų, kompiliatorių) (pvz., C, C++)Interneto svetainių programavimas (pvz., PHP, Perl, ColdFusion)Matematiniai skaičiavimai (pvz., PROLOG, Fortran, MATLAB, MAPLE)Mokymas (pvz., Pascal, Logo)Ezoterinės kalbos (pvz., INTERCAL, brainfuck, Befunge)