Programavimo kalbų istorija ir apie jas

Terminal

Eidamas per savo senus dokumentus ir flash’us radau 2011 metais rašytą baigiamąjį darbą apie programavimo kalbas. Tuo metu gavau geriausią įvertinimą, o kadangi praėjo tiek daug laiko tai pamaniau pasidalinsiu šiuo straipsniu, gal bus kam įdomu :D dėl kažkokių neatitikimų jau nebeatsakau, kadangi tai buvo labai seniai :)

1. Kas yra programavimas?

Programavimas arba algoritmavimas tai kompiuterinių programų kūrimo procesas, kuomet kodas yra užrašomas viena iš daugybės, skirtingiems poreikiams ir tikslams naudojamų programavimo kalbų.
Kompiuterinė programa – tai ne kas kita kaip komandų rinkinys sudėtas į krūvą, kuris sąveikauja su sistema. Programavimas gali būti objektinis (OOP)[1] arba konsolinis (CLI)[2], abiem atvejais dar gali būti kompiliuojamas[3] arba interpretuojamas[4].

Parašytas algoritmas, atitinkamai nuo programavimo kalbos tipo, būna sukompiliuojamas kompiliatoriumi[5] ir paverčiamas į mašininį kodą, kurį supranta procesorius, arba interpretuojamas interpretatoriumi[6], kur kodas būna kompiliuojamas realiu laiku atmintyje ir paruošiamas vykdymui.
Objektinis programavimas (OOP)[1] skiriasi nuo konsolinio (CLI)[2] tuo, kad naudojamos klasės, aprašomas ir “piešiamas” GUI[7], kad atrodytų gražiau, patraukliau ir būtų lengviau valdoma, tačiau programavimo kalbos pagrindas, sintaksė ir algoritmavimas išlieka tokie pat. Beveik visos dabartinės programavimo kalbos turi patogias OOP[1] programavimo galimybes.
Konsolinis programavimas (CLI)[2] skiriasi nedaug kuo nuo Objektinio programavimo (OOP)[1]. Jame klasės nėra būtinybė, nebent pats apsirašytum, sukurtos programos neturi GUI[7], tik konsolinį langą.

1.1. Istorija

Pirmosios programavimo kalbos buvo labai primityvios, paprastos ir ribotų galimybių.
Iki 1940 metų buvo naudojama Perfokortos[8], kuriose išmuštos instrukcijos buvo skaitomos pirmųjų mašinų kad atliktų paprastus veiksmus. Pirmosios Žakardinės staklės, išrastos 1801 metais, naudojo kaip tik tokias Perfokortas[8] iš kurių buvo skaitoma informacija ir atitinkamai judinama mechaninė staklių ranka kuri automatiškai piešdavo paveikslėlius.

Per devynių mėnesių periodą 1842-1843 metais, Ada Lovelace išvertė Italijos matematiko Luigi Menabrea memuarus apie Charles Babbage naujausią išrastą mašiną – Analitinį variklį. Su šiuo straipsniu apie variklį ji pridėjo ir keletą pastabų, kurios konkrečiai nurodė metodą apskaičiuoti Bernoulli[9] skaičiams su šiuo varikliu. Istorikų tai buvo pripažinta kaip pirmojo istorijoje kompiuterinė programa.
Per pirmus 20-tojo šimtmečio dešimtmečius, skaitmeniniai skaičiavimai buvo pagrįsti dešimtainiais skaičiais. Galiausiai buvo suprasta, kad logikai galėjo būti naudojami skaičiai, ne tiktai žodžiai. Pavyzdžiui, Alonzo Church sugebėjo išreikšti Lambdos skaičiavimą[10] formulėmis. Tiuringo mašinos[11] nustatė pagrindą programų išsaugojimui kaip duomenis “von Neumann” kompiuterio architektūroje. Tačiau, skirtingai nuo Lambdos skaičiavimo[10], Tiuringo kodas nebuvo naudojamas kaip pagrindas aukštesnio lygmens kalboms.

Kaip daugelį pirmųjų kalbų istorijoje, pirmąją šiuolaikinę programavimo kalbą yra sunku identifikuoti. Nuo pradžios, kompiuterinės įrangos apribojimai apibrėžė kalbą ir jos galimybes. Perfokortos[8] turėjo tik 80 stulpelių, ir kai kurie iš stulpelių turėjo būti panaudotos rūšiavimo skaičiui kiekvienoje kortelėje, todėl buvo galima išsaugoti tik mažą dalį komandų.
FORTRAN programavimo kalba naudojo kai kuriuos reikšminius žodžius, kurie buvo tokie pat kaip anglų kalbos žodžiai, tokie kaip, “IF”, “GOTO” (go to) ir “CONTINUE”. Magnetinio būgno naudojimas atminčiai reiškė, kad kompiuterio programos turėjo būti rašomos būgnui besisukant. Dėl šito programos buvo labiau priklausomos nuo kompiuterinės įrangos.

Kai kuriems žmonėms, pirma šiuolaikinė programavimo kalba priklauso nuo to, kiek pastangų ir skaitomumo yra reikalaujama įdėti kol jam suteikiama “programavimo kalbos” vardas. Žakardinės staklės ir Charles Babbage Analitinis Variklis, abu turėjo paprastas, labai ribotas kalbas tam, kad aprašytų veiksmus, kuriuos šitos mašinos turi įvykdyti.
Kiek vėliau, 1940-taisiais metais, buvo sukurtas pirmas elektrinis kompiuteris. Itin ribotas greitis ir atminties trūkumas privertė programuotojus asembleriu rašyti programas. Kaip paskui paaiškėjo, programuojant asembleryje[12] buvo reikalinga didelės pastangos norint suderinti tą ar aną.

1948-taisiais metais, Konrad Zuse išleido straipsnį apie savo programavimo kalbą “Plankalkül”, tačiau kalba nebuvo įgyvendinta jo gyvenimo trukmėje ir jo originalūs įnašai buvo izoliuoti nuo kitų įvykių.
1950-taisiais metais, pirmos trys šiuolaikinės programavimo kalbos, kurios yra naudojamos iki šių dienų buvo sukurtos:

  • FORTRAN (1955), “FORmula TRANslator”, sukurta John Backus
  • LISP (1958), “LISt Processor”, sukurta John McCarthy
  • COBOL, “COmmon Business Oriented Language”, sukurta “Short Range” komiteto, prie kurio aktyviai prisidėjo Grace Hopper.

Kitas įvykis 1950-tųjų pabaigoje buvo Amerikos ir Europos programuotojų komiteto publikacija – “naujos kalbos algoritmams”. “ALGOL 60” raportas (“ALGOrithmic Language”) konsolidavo daug minčių, cirkuliuojančių tuo laiku, ir rodė dvi pagrindines kalbos naujoves:

  • įdėta blokų struktūra: kodų sekos ir kintamieji galėjo būti sugrupuoti į blokus, todėl procedūros nebuvo būtinybė.
  • lokali struktūra: blokas galėjo turėti savus privačius kintamuosius, procedūras ir funkcijas, nematomas visoms kitoms funkcijoms ir procedūroms tik kurioje jos aprašytos.

Programavimo kalba “ALGOL 60” ypač buvo įtakinga vėlesnėms kalboms, iš kurių kai kurios netrukus tapo populiaresnės. “Burroughs” didelės sistemos buvo suprojektuotos taip kad būtų galima užprogramuoti “ALGOL” atšakomis.
“ALGOL” kalbos pagrindinės mintys buvo tęsiamos kuriant naują šaką “ALGOL 68”:

  • sintaksė ir semantika tapo labiau “stačiakampės”, su anonimine rutina, pasikartojančia spausdinimo sistema su aukštesnio užsakymo funkcijomis.
  • ne tiktai dalis be kontekstų, bet ir pilna kalbos sintaksė ir semantika buvo apibrėžtos formaliai, išreiškiant Van Wijngaarden gramatika[13] ir formalizmu, suprojektuotu specialiai šiam tikslui.

“ALGOL 68” daug mažai panaudotų kalbos ypatybių ir jos sudėtinga sintaksė padarė ją nemėgstamą ir įgijo nemažai neigiamos reputacijos, kadangi buvo sudėtinga. Niklaus Wirth išėjo iš projekto komiteto, kad sukurtų paprastesnę “Pascal” kalbą.
Periodas nuo 1960-tųjų antrosios pusės iki 1970-tųjų antrosios pusės atnešė pagrindinį programavimo kalbų žydėjimą. Dauguma pagrindinių kalbos paradigmų dabar naudojime buvo sukurtos per šį periodą, kaip kad:

  • “Simula”, sukurtas Nygaard ir Dahl 1960-tųjų pabaigoje kaip “ALGOL 60” superkomplektas ir tai buvo pirmoji kalba, suprojektuota darbui su OOP[1].
  • “C”, ankstyva sistemų programavimo kalba, buvo išvystytas Dennis Ritchie ir Ken Thompson iš kompanijos “Bell Labs” tarp 1969 ir 1973 metų.
  • “Smalltalk”, 1970-tųjų viduryje aprūpino užbaigtą OOP[1] kalbos pagrindo projektą.
  • “Prolog”, suprojektuotas 1972 metais Colmerauer, Roussel, ir Kowalski, buvo pirma logiška programavimo kalba.
  • “ML” pastatė polimorfinę tipo sistemą (sukurta Robin Milner, 1973 metais) ant LISP.

Kiekviena iš šitų kalbų sukūrė visą šeimą palikuonių, ir dabartinės kalbos turi bent vieną jų protėviuose.
1960-taisiais ir 1970-taisiais buvo kilę dideli debatai dėl struktūrinio programavimo, kur iš esmės buvo programuojama be GOTO komandos naudojimo. Šie debatai buvo artimai susieti su kalbos projektu: kai kurios kalbos neapėmė GOTO, kuris vertė struktūrinį programavimą ant programuotojo. Nors tuo laiku debatai šėlo su įkarščiu, beveik visi programuotojai dabar sutinka, kad net kalbomis, kurios palaiko GOTO, jie užskaito kaip prastą programavimo stilių, išimtis gali būti itin retais atvejais, kadangi kodą su GOTO yra sunku prižiūrėti, tvarkyti, taisyti klaidas bei nagrinėti.

1980-tieji metai buvo reliatyvios konsolidacijos būtinomis kalbomis metai. Užuot išradę naujas atšakas, visi šitie judėjimai detaliau susitelkė ant jau esamų kalbų, išrastų per praėjusį dešimtmetį. C++ programavimo kalba susijungė į OOP[1] ir sistemų programavimą. Jungtinių Valstijų vyriausybė standartizavo “ADA” sistemų programavimo kalbą, numatytą gynybos rangovų naudojimui. Japonijoje didelės sumos buvo išleistos tyrimams vadinamosioms penktos kartos programavimo kalboms, kurios įtraukė programines logikos konstrukcijas. Funkcinė kalbų bendruomenė pajudėjo, kad standartizuotų ML ir LISP kalbas. “Miranda”, funkcinės kalbos su kreivu įvertinimu, tyrinėjimas pradėjo griebtis per šį dešimtmetį.

Viena svarbi nauja tendencija programavimo kalbų kūrime buvo padidėjęs dėmesys didelio-mąsto sistemoms. “Modula”, “Ada”, ir “ML” – visos išvystytos žinomos modulio sistemos 1980-taisiais. Modulio sistemos buvo dažnai atsidavusios bendro programavimo konstrukcijoms.
Nors pagrindinės naujos paradigmos būtinoms programavimo kalboms nepasirodė, daug tyrėjų išplėtė mintis apie ankstesnes kalbas ir pritaikė jas prie naujų kontekstų. Pavyzdžiui, “Argus” ir “Emerald” sistemų kalbos buvo pritaikytos objektiniam programavimui[1].

“RISC” judėjimas[14] kompiuterių architektūroje teigė, kad aparatinė įranga turi būti suprojektuota kompiliatoriams, o ne asemblerio programuotojams. Padėjus procesoriaus greičio pagerinimams, kurie įgalino vis labiau ir labiau agresyvesnę kompiliacijos techniką, “RISC” judėjimas[14] uždegė didesnį susidomėjimą kompiliacijos technologijai aukšto lygio programavimo kalboms.
1990-taisiais nebuvo jokios naujovės būtinomis kalbomis, bet buvo daug kombinacijų iš naujų ir senų kalbų bendrinimo. Ši era pradėjo funkcinių kalbų paplitimą. Didelis dėmesys buvo skiriamas programuotojo produktyvumui. Pasirodė daug RAD[15] kalbų, kurios paprastai būdavo kartu su IDE[16] ir buvo vyresnių kalbų palikuonis. Visos tokios kalbos buvo OOP[1] tipo. Jie apėmė Object Pascal (Delphi), Visual Basic (VB), ir Java.

Java gavo ypač daug dėmesio dėl to, kad buvo radikalesnė ir novatoriškesnė negu kitos RAD[15] kalbos. Ji tiesiogiai nesileido žemyn nuo kitų kalbų ir rodė naują sintaksę ir liberalesnę ypatybių inkorporaciją. Daugelis mano, kad šitos skriptinimo kalbos yra labiau produktyvios negu kad RAD[15] kalbos, bet dažnai tai būna dėl pasirinkimo galimybės, kurios daro mažas programas paprastesnėmis, bet dideles programas – sudėtingesnėmis parašyti ir palaikyti. Vis dėlto, skriptinimo kalbos buvo žinomiausios kalbos panaudotos ryšyje su internetu.
Šiais laikais kalbų yra sukurta virš tūkstančio ir kiekviena skirta vis kitokiam dalykui.

Keletas žymesnių istorijoje programavimo kalbų, chronologine tvarka:

Iki 1950-tujų metų:

Metai Pavadinimas, komentarai
1943 Plankalkül (Konrad Zuse). Sukurtas tačiau niekur nenaudotas ilgą laiką.
1943 ENIAC programavimo sistema.
1949 – 1954 Serija specifinių mašinai mnemoniškų nurodymų rinkinių, kaip ENIAC, prasidėdamas 1949 metais nuo C-10 BINAC (kuris vėliau plėtojosi į UNIVAC).

Iki 1970-tujų metų:

Metai Pavadinimas, komentarai
1951 Regional Assembly Language
1952 Autocode
1954 FORTRAN, IPL (LISP pradininkas)
1955 FLOW-MATIC (COBOL pradininkas)
1957 COMTRAN (COBOL pradininkas)
1958 LISP, ALGOL 58
1959 FACT (COBOL pradininkas), COBOL
1962 APL, Simula, SNOBOL
1963 CPL (C pradininkas)
1964 BASIC, PL/I
1967 BCPL

Iki 1980-tujų metų:

Metai Pavadinimas, komentarai
1968 Logo
1969 B (C pradininkas)
1970 Pascal, Forth
1972 C, Smalltalk, Prolog
1973 ML
1975 Scheme
1978 SQL (pirma buvo kurta kaip užklausinė sistema, bet vėliau buvo pakoreguota iki programavimo kalbos)

Iki 1990-tujų metų:

Metai Pavadinimas, komentarai
1980 C++ (C su klasėmis, vardas pakeistas 1983 metų Liepą)
1983 Objective-C, Ada
1984 Common Lisp
1985 Eiffel
1986 Erlang
1987 Perl
1988 Tcl
1989 FL (Backus)

Iki 2000-tujų metų:

Metai Pavadinimas, komentarai
1990 Haskell
1991 Python, Visual Basic
1993 Ruby, Lua
1994 CLOS (dalinai ANSI Common Lisp)
1995 Java, Delphi (Object Pascal), JavaScript, PHP
1997 Rebol
1999 D

Iki 2010-tujų metų:

Metai Pavadinimas, komentarai
2001 C#, Visual Basic .NET
2002 F#
2003 Scala, Factor
2006 Windows Power Shell
2007 Clojure, Groovy
2009 Go

2. Netikros programavimo kalbos

Šiais laikais yra išrasta tiek programavimo kalbų, jog atrodo kad sukurta yra kiekvienam technikos gabaliukui užprogramuoti. Tačiau kaip bebūtų, egzistuoja ir tokios kalbos, sukurtos šiaip sau. Jos neturi nei savo IDE[16], nei kompiliatoriaus[5] ar interpretatoriaus[4] ir jos nėra užskaitomos kaip tikros programavimo kalbos, na galbūt bent jau tarp rimtų programuotojų kurie nesupranta juokų. Tokios “netikros” kalbos dažniausiai naudojamos norint pasijuokti ar šiaip pasukioti galvą kaip butų galima parašyti. Įdomiausia tai kad jų yra ne viena ir ne dvi, o visa krūva ir kiekviena savaip ypatinga. Norint daugumą jų suprasti, reikia pažinoti interneto kultūrą.

2.1. Istorija

Ankstyviausias, ir pirmasis istorijoje netikros kalbos pavyzdys buvo INTERCAL, suprojektuotas Don Woods ir James M. Lyon, 1972 metais, su mintimi kad ji bus nepanaši į bet kokia kita programavimo kalbą kuri egzistavo tuo metu, su kuria autoriai nebuvo pažįstami. INTERCAL kalba parodijavo nustatytų programavimo kalbų elementus, tokių kalbų kaip FORTRAN, COBOL, ir asemblerio[12].

Ankstyvas INTERCAL naudojimas buvo surištas su IBM System/360 ir neatpažintu Atari kompiuteriu (turbūt vienu iš pirmūjų Atari 2600), tačiau neprigijo. Daugelį metų INTERCAL buvo tiktai popierinėje INTERCAL vadovo kopijoje. Kalbos atgimimas 1990 metais kaip “C” kalbos papildinys ant Unix sistemos paskatino susidomėjimą tokiomis, netikromis kalbomis.

1992 metais, Wouter van Oortmerssen sukūrė “FALSE” – maža programavimo kalba, kuri iš prigimties ketino padaryti kodą supainiotą, painų, ir paprastai neįskaitomą. Taip pat verta pažymėti, kad ji turėjo tiktai 1024 baitų kompiliatorių[5]. Tai įkvėpė Urban Müller sukurti net mažesnę kalbą, dabar garsią ir itin plėtojamą “BrainFuck”, kurios sintaksė susideda tiktai iš aštuonių simbolių. Kartu su Chris Pressey “Befunge” kalba (panašiai kaip FALSE), BrainFuck yra dabar viena iš labiausiai paplitusių netikrų programavimo kalbų. Kokios kalbos kuriais metais atsirado – nėra aišku, tačiau kelios kalbos yra įrašytos į istoriją. Pateikiu sąrašą populiariausių ir labiausiai žinomų kalbų chronologine tvarka:

1964 metai:

  • Corrado Böhm išleido dokumentaciją, apibūdinančią P” kalbą. Nors iš pradžių tuo metu ji nebuvo sukurta tokiam tikslui, tačiau vėliau buvo pastebėta kad ji yra labai panaši į “BrainFuck” sukurtą po 29-nerių metų.

1972 metai:

  • Donald R. Woods ir James M. Lyon išleido INTERCAL, programavimo kalbą kuri neturėjo nieko bendra su tuometinėmis programavimo kalbomis. INTERCAL istorikų yra laikoma kaip pirmoji istorijoje netikra kalba.

1991 metai:

  • Ward Cunningham išrado Biota kalbą kuri buvo parduota internete.

1993 metai:

  • FALSE, kalba su 1024 baitų kompiliatoriumi[5], buvo išrasta Wouter van Oortmerssen. Vėliau, Urban Müller išrado Brainfuck, nurungdamas FALSE su tiktai aštuoniomis instrukcijomis ir kompiliatoriumi kiek didesniu kaip 200 baitų.
  • Chris Pressey išrado “Befunge”. Sukurta šiais metais buvo pavadinta Befunge-93, dėl jo apribojimo 80×25 kodiniam dydžiui.

1994 metai:

  • Chris Pressey pasiūlo SMETANA, kuriame programos kodas yra serija žingsnių kaip, “Go to step n.” ir “Swap step a with step b.” Būdama gana nenaudinga ir mažai galimybių turinti kalba, SMETANA kalbai nebuvo skirta daug dėmesio.
  • “Kvikkalkul” kalba, tariamai išvystyta ir panaudota švediško Karinio jūrų laivyno 1950-taisiais, pasidarė žinoma visiems kai anoniminis vartotojas parašė apie tai alt.folklore.computers forume.

1997 metai:

  • Befunge variantas “Befunge-97” sukurtas. Šis standartas pasirodo buvo neišbaigta ir nebuvo plačiai naudojama.
  • Chris Pressey, Ben Olmstead, ir John Colagioia išranda “Wierd” kalbą, pagrįstą laidais, kurios atitiko instrukcijas. Buvo kilę diskusijų ar laidams yra leidžiama kirstis.

1999 metai:

  • Sukurta “Unlambda”, pirmoji netikra, pilnai išbaigta ir funkcionuojanti kalba.

2000 metai:

  • John Colagioia išranda Thue.
  • Jeffry Johnston aprašo “BitChanger”, pirmąją vieno bito BrainFuck versiją su tiktais keturiomis instrukcijomis.

2002 metai:

  • Nikita Ayzikovsky pasiūlo SmallFuck, supaprastintą Brainfuck versiją su apribota atmintimi ir be IO. Nors kalba nėra ypač galinga, ji gali būti sukompiliuota su SMETANA, kalba kurią anksčiau laikė visiškai nenaudinga.

2003 metai:

  • Edwin Brady ir Chris Morris išranda “Whitespace”, kuri susilaukė daug dėmesio kai buvo paskelbta Slashdot naujienų portalo pagrindiniam puslapyje.
  • Išrastas “Kipple”.
  • Rugpjūtį, Francis Rogers išranda “PATH”, BrainFuck atšaką.
  • Rugsėjį, Daniel Brockman išleidžia “SNUSP” – pagerintą PATH variantą.

2.2. Pavyzdžiai

Dabar egzistuoja virš 650 netikrų kalbų ir jų atšakų. Vienos labiau paplitusios, kitos jau seniai užkastos interneto kapinyne. Čia pateiksiu keletą populiariausių kalbų ir jų sintaksės pavyzdžius:

Kalbos pavadinimas Aprašymas “Hello World!” programa
LOLCODE Kalba sukurta atvaizduoti “lolcat” interneto kultūros atšakai
HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE
Befunge Labiausiai pastebima tai kad kodas rašomas atvirkščiai ir programos vykdymą galima prilyginti laikrodžio judėjimo krypčiai
"dlroW olleH">:v
                          ^,_@
BrainFuck Kalba sukurta būti ypatingai minimalistine, todėl kodas atrodo kaip užkoduotas ir neįskaitomas kiekvienam, kadangi visa kalba susideda iš aštuonių simbolių
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
INTERCAL Sintaksė panaši į C kalbos, tačiau skiriasi
#include 
int main()
{ 
   puts("Hello, world!");
   return 0;
}
Malbolge Sukurta kaip pati sudėtingiausia kalba
('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=

3. Šiuolaikinis programavimas

Šiuolaikinis programavimas yra daug sudėtingesnė procedūra negu kad buvo anksčiau. Rašant kokybiškas programas, būtina atsižvelgti į daugybę faktorių – ar kodas tvarkingas, ar “nenuteka” kur nors atmintis, ar aprašytas komentarais tinkamai ir panašiai. Rašant didelį projektą grupėje, kai dirba du, trys ar daugiau žmonių, tokie dalykai kaip tvarkingas, įskaitomas kodas, aprašytas komentarais yra būtinybė, kitaip projektas gali užsitęsti ilgiau nei buvo planuota, arba programa nesigaus kaip norėta.

3.1. Kokybės reikalavimai

Kad ir kaip programuotum, galutinis variantas turi atitikti ir tenkinti tam tikrus standartus ir poreikius. Čia keletas dalykų į kuriuos yra būtina atsižvelgti:

  • Efektyvumas/greitis: apibrėžia kiek programa “valgys” kompiuterio resursų – procesoriaus greitis/laikas, laikinosios atminties dydis/apdorojimo greitis, lėti įrenginiai, kaip kad kietieji diskai, interneto greitis ir t.t. – kuo mažiau, tuo geriau.
  • Patikimumas: nustato kaip dažnai programa lūžinės, striginės. Kaip dažnai išvedinės teisingus rezultatus – tai remiasi ant algoritmavimo koncepcijos, programavimo ir dizaino klaidų, tinkamo resursų išnaudojimo – atminties atlaisvinimas kai jos nereikia, buferio perpildymai ir logines klaidos – tokios kaip dalyba iš nulio.
  • Susidorojimas su klaidomis: tai apibrėžia kaip gerai programa tvarkysis su klaidomis, dėl kurių programuotojas nėra atsakingas – tokiomis kaip neteisingi, sugadinti ar neegzistuojantys duomenys, reikalingų resursų nebuvimas, operacinės sistemos servisų klaidos su kuriomis sąveikaus programa, internetas ir panašiai.
  • Panaudojimas: programos GUI[7] ergonomika, kaip gerai programa veiks pagal savo paskirtį, o kartais ir ne pagal paskirtį.
  • Universalumas: kaip programa tvarkysis ir veiks su skirtingais kompiuteriais, technine ir aparatine įranga, ant kokių sistemų ir kaip gerai ant jų veiks.

3.2. Pirminio kodo skaitomumas

Programavime skaitomumas reiškia pirminio kodo tvarkingumą, komentavimą, suprantamumą. Kodas turėtų būti aiškiai surašytas, kad kitas programuotojas, nežinodamas ką pati programa daro, suprastų viską lengvai ir paprastai pažiūrėjus į kodą.
Įskaitomumas yra ypač svarbus programuotojams, dėl to kad jie daug laiko praleidžia žiūrėdami ir tvarkydami kodą, savo ir kitų. Sunkiai įskaitomas ir netvarkingas kodas, kuris įgavo ir savo terminą – Spaghetti Code (Spageti kodas), priveda iki programavimo klaidų, ilgesnio, pasikartojančio kodo.

Skaitomumas apima:

  • Tarpus tarp žodžių, sakiniu ir eilučių
  • Komentarus
  • Kodo suskirstymas į dalis
  • Atitinkamai pavadintus ir lengvai įsimenamus vardus klasėms, kintamiesiems, procedūroms, funkcijoms, konstantoms ir t.t.

3.3. Programavimo kalbos pasirinkimas

Kaip minėta anksčiau, programavimo kalbų yra virš tūkstančio ir kiekviena skirta kažkam arba ji turi savo savybes kurios tinka vienur ir netinka kitur, taigi norint išsirinkti kalbą kuri yra perspektyvi neretai tenka pasukti galvą. Tiesa – yra kalbų kurios skaitosi kaip universalios, tokios kaip C, Ruby, Python ir pan.
Renkantis kalbą, neretai kyla klausimas, kuri kalba yra populiariausia. Į ši klausimą yra sunku atsakyti, kadangi nėra patikimo metodo tai išmatuoti. Kol kas populiariausias metodas tai išmatuoti yra sekant darbo pasiūlymus, skaičiuojant parduotas programavimo knygas, skaičiuojant išleistus programavimo projektus.

3.4. Programavimo stilius

Pagal tai, kokiais principais remiantis kuriamos programos, skiriami du pagrindiniai programavimo stiliai:

  • Imperatyvusis programavimas: Pagrindinis principas: programa – tai komandų, kurias reikia vykdyti, rinkinys. Komandos keičia programos būseną. Kadangi beveik visa aparatinė įranga dirba šiuo principu, tai didžioji dalis programų yra parašyta būtent šiuo stiliumi. Skiriamos tokios šio stiliaus atšakos:
    • nuoseklusis programavimas: Tai programavimas be jokių arba keliomis taisyklėmis. Priimtinas nedidelėse programose, jei intensyviai naudojamos “GOTO” komandos, gaunamas sunkiai valdomas, įskaitomas ir prižiūrimas kodas, dar vadinamas “spaghetti kodu”.
      Pavyzdys: BASIC (pradinė versija), Asembleris[12] (jei nesilaikoma disciplinos), kitos pirmosios programavimo kalbos.
    • struktūrinis (procedūrinis) programavimas: Toks programavimo stilius uždeda apribojimus, kad visa programa turi būti suskaidyta į kaip įmanoma mažiau viena nuo kitos priklausomus modulius (gali būti kelių lygių: procedūros/funkcijos, modulio, bibliotekos). Kiekviena tokia dalis gali turėti tik joje matomus kintamuosius.
      Pavyzdys: “ALGOL” ir iš jo išsivysčiusios atšakos, Pascal, C.
    • objektinis programavimas: objektiškai kuriamos programos struktūra suskirstoma į klases, kurios aprašo duomenis ir su jais susijusį funkcionalumą.
  • Deklaratyvusis programavimas: Pagrindinis principas: programa aprašo kokias sąlygas sprendinys turi tenkinti, tačiau neapibrėžia sprendinio ieškojimo algoritmo. Šį algoritmą kiekviena realizacija gali turėti savo. Skiriamos tokios deklaratyviojo programavimo stiliaus atšakos:
    • Funkcinis programavimas: Funkciniame programavime sprendinio sąlygoms aprašyti naudojamos funkcijos, neturinčios vidinių būsenų. Dėl šios savybės jos negalinti turėti šalutinių poveikių.
      Pavyzdys: LISP.
    • Loginis programavimas: Loginiame programavime sprendinio sąlygas aprašo duomenys, su kuriais reikia dirbti ir taisyklės, kurios nurodo kaip tie duomenys yra vieni su kitais susiję.
      Pavyzdys: Prolog, SQL.

3.5. Pirminio kodo taisymas

Kodo taisymas, dar žinomas kaip “Debugging”[17] yra labai svarbi užduotis programinės įrangos kūrimo procese, todėl kad klaidinga programa gali turėti reikšmingas pasekmes jos vartotojams. Kai kurios kalbos yra labiau linkusios į kai kurias klaidų rūšis, todėl kad jos kompiliatoriai[5] ar interpretatoriai[4] neturi tokiu funkcijų kurios įvykdytų tokius didelius tikrinimus kaip kitų kalbų. Statiškos analizės įrankio (debugger)[18] naudojimas gali padėti aptikti tam tikras galimas problemas. Todėl beveik kiekviena kalba turi po kelis kompiliatorius[5] arba interpretatorius[4].

Keletas pavyzdžių:

Kalbos pavadinimas Kalbos tipas Kompiliatoriai / interpretatoriai
Java Kompiliuojama javac, GCJ, ECJ
C Kompiliuojama AMPC, GCC, Microsoft C, Turbo C
C++ Kompiliuojama C++ Builder, Borland C++, GCC, Visual C++
BASIC Kompiliuojama bwbasic, FreeBASIC, glbcc, Gambas, GW Basic, hbasic, kbasic, scriptbasic, smallbasic, wxbasic, xbasic, x11basic, yabasic, Jabaco
C# Kompiliuojama Microsoft Visual C# , Mono
Pascal Kompiliuojama Free Pascal, Turbo Pascal
Object Pascal Kompiliuojama Delphi, Free Pascal
Perl Interpretuojama Perl
PHP Interpretuojama PHP
Python Interpretuojama IronPython, Python
Ruby Interpretuojama IronRuby

Dažniausiai visas klaidų šalinimas būna atliekamas per tam skirtą IDE[16] kur galima matyti visą kodo veikimą paleidus programą ir taip galima sekti jos vykdymą žingsnis po žingsnio stebint kintamųjų reikšmes, procedūrų veikimą ir panašiai. Programos klaidų šalinimą galima atlikti ir neturint kodo programose kaip “OllyDbg”, Dažniausiai toks metodas pritaikomas programų “nulaužinėjimuose” kur būna apeinama arba kitaip pašalinama programos veikimo dalis. Labiausiai žinomas pavyzdys yra žaidimuose arba mokamose programose, kai piratiniuose leidiniuose neretai dadedamas ir “pagerintas” paleidimo failas iš kurio būna išimtos apsaugos.

4. Programavimo aplinka

Programavimo aplinka dabar su programavimu eina išvien. Buvo laikai kai rašyti algoritmus buvo išrastos ir sukurtos tam specialios klaviatūros, kur vietoje raidžių, ant mygtukų buvo surašyta specialūs žodžiai ir taip buvo programuojama norint paspartinti darbą. Dabar tas būtu nei teoriškai, nei praktiškai neįmanoma, vien dėl to kad kalbų yra tūkstančiais ir tos kalbos turi tiek galimybių bei funkcijų kad viską sutalpinti yra stačiai neįmanoma. Tam šiais laikais yra kuriamos IDE[16], kai kurios yra ir RAD[15].

4.1. Integrated Development Environment (IDE)

Integrated Development Environment (IDE)[16], dar verčiama kaip “Integrated Design Environment” arba “Integrated Debugging Environment” tai specializuota programa programų kūrėjams, kurios tikslas yra paspartinti programuotojo darbą ir kurioje yra kuriamos, rašomos, taisomos ir tobulinamos programos.
Standartinis IDE[16] paprastai susideda iš:

  • Pirminio kodo redaktoriaus
  • Kompiliatoriaus ir/arba interpretatoriaus
  • Debugger (Statines analizės įrankio)

RAD[15] tipo IDE[16] dar turi ir automatizuotą kodo rašymą kur kodas yra nuspėjamas ir pasiūloma kiti variantai. Dar jame yra ir automatizuotų GUI[7] kūrimo įrankių, kurie leidžia vizualiai kurti programų išvaizdą.
Kadangi tokios programos (IDE)[16] yra sudėtingos, greitesnis ir labiau automatizuotas programų kūrimas pasireiškia po kažkiek laiko, kai būna susipažįstama kaip ji veikia ir kas kur randasi.

Keletas pavyzdžių:

Kalba IDE pavadinimas Ar yra ant linux?
Java NetBeans / JCreator / Eclipse Taip / Ne / Taip
C NetBeans / Code::Blocks / Taip / Taip
Perl Padre / E-P-I-C Taip / Taip
Delphi / Pascal FPS / Embarcadero / Kylix / Lazarus Ne / Ne / Taip / Taip

4.1.1. IDE istorija

IDE[16] poreikis atsirado kai atsirado galimybė rašyti programas konsolėje arba terminale. Ankstesni kompiuteriai tokios prabangos neturėjo ir programos buvo rašomos ant popieriaus arba išmušamos ant Perfokortų[8] prieš suvedant į kompiliatorių[5]. “Dartmouth BASIC” kalba buvo pirmoji istorijoje kuri leido kurti programas terminale arba konsolėje. Tokia IDE[16] buvo per komandinę eilutę ir visiškai nebuvo panaši į dabartines, tačiau kaip bebūtų, ji turėjo integruotą kodo redagavimą, failų tvarkyklę, kompiliatorių[5] ir statinį analizės įrankį[18]. Visa tai veikė kiek panašiai į dabartines tokio tipo programas.
1975 metais kompanija “Softlab Munich” sukūrė “Maestro I” IDE[16] ir specialią klaviatūrą jai, su kuria buvo greitesnis programų kūrimas. “Maestro I” buvo naudojama apie 22 tūkst. programuotojų per visą pasaulį tuo metu. Iki 1989 vien Vokietijoje buvo suskaičiuota apie 6 tūkst. programuotojų programuojančių su ja ir tai buvo labiausiai paplitusi IDE[16] per 1970 ir 1980 metus.

4.2. Kompiliatoriai

Kompiliatorius tai speciali programa, arba rinkinys programų kurios paverčia parašytą programą tekstiniu formatu į binarinį formatą – exe, dll, com ir kitokį, kurį supranta kompiuteris. Binarinį formatą galima įsivaizduoti kaip nulių ir vienetų seką.

Vardas “kompiliatorius” yra dažniausiai naudojamas programoms, kurios verčia programos tekstą iš aukšto lygio programavimo kalbos į žemesnę lygmens kalbą (pavyzdžiui asemblerį[12]). Jei sukompiliuota programa veikia ant kompiuterio, kurio procesorius ar operacinė sistema yra kitokie negu toks, ant kurio kompiliatorius veikia, tai kompiliatorius yra žinomas kaip multiplatforminis. Programa, kuri verčia iš žemo lygio kalbos į aukštesnį lygmenį, vadinama dekompiliatoriumi. Programa, kuri verčia tarp aukšto lygio programavimo kalbų (iš vienos programavimo kalbos į kitą) yra vadinama kalbos keitikliu.

Kompiliatorius paprastai vykdo daug operacijų, kaip kad: leksinė analizė, išankstinis apdorojimas, gramatinis nagrinėjimas, semantikos analizė (į Sintaksę nukreiptas vertimas), kodo generacija, ir optimizacija.
Programos klaidos, sukeltos klaidingo kompiliatoriaus elgesio, gali būti labai sudėtingos aptikti ir pašalinti, todėl, kompiliatoriaus kūrėjai įdeda daug laiko, garantuodami jų programinės įrangos stabilumą.

4.2.1. Kompiliatorių istorija

Programinė įranga ankstyviems kompiuteriams buvo rašoma asembleriu[12] daugelį metų. Aukštesnio lygmens programavimo kalbos nebuvo išrastos, kol atsirado galimybė parašytas programas naudoti ant skirtingų procesorių, nerašant kiekvienam procesoriui atskirai kompiliatoriaus. Labai apribotas ankstyvų kompiuterių atminties talpumas taip pat kėlė daug techninių problemų.

1950-tųjų antroje pusėje, buvo sukurtos programavimo kalbos kurios buvo skirtos rašyti programas nepriklausomai nuo procesoriaus, tai reiškė, kad programa rašyta ant vieno kompiuterio galėjo veikti ir ant kitų. Paskui, keli bandomieji kompiliatoriai[5] buvo sukurti. Pirmąjį tokį kompiliatorių sukūrė Grace Hopper, 1952-taisiais “A-0” programavimo kalbai. FORTRAN programavimo kalbos komanda, vadovaujama John Backus, IBM kompanijoje pristatė pirmąjį pilnai užbaigtą kompiliatorių šiai kalbai, 1957-taisiais metais. COBOL taip pat buvo ankstyva kalba, kuri buvo sukompiliuota ant daugialypės architektūros, 1960-taisiais metais.

Daugelyje taikomųjų sričių, mintis pavartoti aukštesnio lygmens kalbą greitai išpopuliarėjo. Dėl besiplečiančio funkcionalumo, kurį palaikė naujesnės programavimo kalbos ir didėjantys kompiuterių architektūros sunkumai, kompiliatoriai tapo tik sudėtingesni.

Ankstyvi kompiliatoriai buvo parašyti asembleriu[12]. Pirmas kompiliatorius gebantis sukompiliuoti savą programos kodą aukšto lygio programavimo kalboje buvo sukurtas Tim Hart ir Mike Levin iš MIT[19], 1962-taisiais metais “LISP” kalbai. Nuo 1970-tųjų tai tapo įprasta praktika, kad kalba būtų kartu tu savo kompiliatoriumi[5]. Tokio kompiliatoriaus priėmimo kompiliatoriaus statyba yra pakopinio paleidimo problema – toks kompiliatorius kalbai turi būti sukurtas arba kompiliatoriaus parašyto kitokia kalba, arba (kaip Hart ir Levin “LISP” kompiliatorius) sukurtas paleidus kompiliatorių interpretatoriuje[4].

4.3. Interpretatoriai

Programavime, terminas “Interpretatorius” reiškia specialią programą kuri tiesiogiai skaito programos kodą ir kompiliavimą bei komandas atlieka tiesiogiai atmintyje.
Kai interpretavimas ir kompiliavimas yra dvi svarbiausios priemonės, prie kurių programavimo kalbos yra sukurtos, jie nėra visiškai skirtingos kategorijos, viena iš priežasčių yra tai, kad daugumos interpretavimo sistemų taip pat įvykdo kažkokį vertimo darbą, taip pat kaip kompiliatoriai. Terminai “interpretuojama kalba” ir “kompiliuojama kalba” paprasčiausiai reiškia, kad kanoninis tos kalbos veikimas yra vertėjas ar kompiliatorius.

Didžiausias interpretatorių minusas yra tas, kad kai programa yra interpretuojama, ji tipiškai veikia lėčiau, negu ji būtų sukompiliuota. Greičių skirtumas iš esmės gali būti mažytis arba didelis. Apskritai užima daugiau laiko valdyti programą su interpretatoriumi negu valdyti kompiliuotą kodą, bet gali užimti mažiau laiko, kad interpretuotų tai negu visas laikas, reikalingas surinkti ir valdyti tai. Tai ypač svarbu bandantis kodą, kai ciklas yra “redaguoti-interpretuoti-pašalinti” gali dažnai būti daug trumpesnis negu ciklas “redaguoti-kompiliuoti-pašalinti”.

Kodo interpretavimas yra lėtesnis negu kompiliavimas todėl, kad interpretatorius turi analizuoti kiekvieną žingsnį programoje kiekvieną kartą kai tai atliekama ir paskui įvykdyti pageidaujamą veiksmą, tuo tarpu surinktas kodas tik įvykdo veiksmą viduje pastovaus konteksto, nustatyto kompiliacijos metu. Ši atlikimo metu analizė yra žinoma kaip “interpretive overhead”. Prieiga prie kintamųjų yra taip pat lėtesnė todėl, kad žemėlapių sudarymas į laikymo vietas turi būti daromas pakartotinai kai vykdoma komanda.

Bet kuriuo atveju, laiko skirtumas yra toks mažas kad žmogui jokio skirtumo praktiškai nėra, ar programa dirbs keliomis mili-sekundėmis lėčiau ar greičiau.
Terminas “interpretatorius” dažnai reikšdavo įrangą, kuri galėjo skaityti Perfokortas[8] ir spausdinti ekrane kas jose išmušta lengvai skaitomoje formoje. IBM 550 skaitmeninis vertėjas ir IBM 557 alfabetinis vertėjas yra tipiški pavyzdžiai nuo 1930 ir 1954 metų, atitinkamai.

5. Programavimas įvairioms sistemoms

Tai dar vadinama multiplatforminiu programavimu, kai parašyta programa gali veikti ant kitokiu sistemų nei kad buvo kurta. Multiplatforminė programinė įranga gali būti padalyta į du tipus:

  • Kompiliuojama: kai ta pati programa yra sukompiliuojama kitoms platformoms. Taip gaunasi daugiau nei vienas failas.
  • Interpretuojama: kai ta pati programa gali veikti nepriklausomai nuo sistemos ir interpretatoriaus, kol tas interpretatorius bus tai kalbai.

5.1. Platformos

Platforma yra aparatinės ir programinės įrangos kombinacija. Ji gali būti apibūdinta tiesiog kaip operacinė sistema ar kompiuterių architektūra, arba abiejų kombinacija. Turbūt labiausiai pažįstama platforma yra “Microsoft Windows”, veikiantis ant x86 (32 bitų) ir x64 (64 bitų) architektūros. Kitos žinomos stacionarių ir nešiojamų kompiuterių platformos apima “Linux/Unix” ir visiems gerai žinomą, Apple kompanijos “Mac OS X” sistemą, kurios pačios iš savęs yra multiplatforminės. Yra daug prietaisų tokių kaip mobilieji telefonai, kurie yra šiais laikais kaip kompiuteriai, kuriuose veikia atitinkama operacinė sistema, kaip kad pavyzdžiui HTC telefonuose dabar įdiegiama yra nemokamas Google kompanijos produktas “Android” kuris yra sukurtas Linux pagrindu. Taikomoji programinė įranga gali būti parašyta, kad priklausytų nuo ypatybių tam tikros platformos – ar tai aparatinės įrangos, ar operacinės sistemos. “Java” platforma yra virtuali platforma, kuri veikia ant daugelio operacinių sistemų ir aparatinės įrangos tipų, ir yra bendra pozicija programinei įrangai kurti. Java kalbos, nors ji ir kompiliuojama, tas pats sukurtas failas gali veikti nepriklausomai nuo sistemos, kaip ir interpretuojamas skriptas. Tam yra naudojama “Java framework” programinė įranga, kuri sugeba paleisti Java programas.

Programinė įranga, kurią būtų galima pavadinti multiplatformine, turi sugebėti funkcionuoti ant daugiau kaip vienos kompiuterių architektūros ar operacinės sistemos. Tai gali būti daug darbo reikalaujančia užduotimi, duota, kad skirtingos operacinės sistemos turi skirtingas taikomojo programavimo sąsajas, kitaip dar API[20] (pavyzdžiui, Linux naudoja visiškai kitokią programavimo sąsają negu Windows).

Tik todėl, kad tam tikra operacinė sistema gali veikti ant skirtingos kompiuterių architektūros, tai dar nereiškia, kad programinė įranga, parašyta tai operacinei sistemai, automatiškai veiks visoje architektūroje, kurią operacinė sistema palaiko. Vienas pavyzdys 2006 metų Rugpjūtį buvo išleistas OpenOffice.org – “Microsoft Office” alternatyva, kuri neveikė ant AMD64 ar Intel64 procesorių. Tai buvo nuo to laiko pakeista, ir OpenOffice.org programinės įrangos rinkinys yra “daugiausia” perkeltas į šitas 64 bitų sistemas. Tai taip pat reiškia, kad tik todėl, kad programa yra parašyta populiarioje programavimo kalboje tokioje kaip C ar C++, tai nereiškia, kad tai veiks ant visų operacinių sistemų, kurios palaiko tą programinę kalbą – ar net ant tos pačios operacinės sistemos ant skirtingos architektūros.

Internetinės programos[21], tos kurios talpinamos serveriuose kad būtų prieinamos kiekvienam, kaip kad forumai, yra tipiškai apibūdinamos kaip multiplatforminės todėl, kad, idealiai, jos yra prieinamos iš bet kurios iš įvairių naršyklių skirtingų operacinių sistemų viduje. Tokios programos apskritai naudoja klientas-serveris architektūrą.

Žinomi pažangių internetinių programų pavyzdžiai apima Gmail pašto serverio interfeisą. Tokios pažangios programos kaip įprasta priklauso nuo papildomų ypatybių, kurios randasi tiktai naujesnėse populiarių tinklo naršyklių versijose. Šitos priklausomybės apima Ajax, JavaScript, “dinaminę” HTML kalbą, ir kitus turtingų interneto programų komponentus. Vyresnės populiarių naršyklių versijos yra linkusios stokoti palaikymo tam tikroms ypatybėms.
Tradiciškai programavime taikomoji programinė įranga buvo paskirstyta vartotojams kaip binariniai atvaizdai, kurie yra sudėti “exe” failuose, specifiniame dvejetainės rinkmenos tipe. Tokie failai tiktai palaiko operacinę sistemą ir kompiuterių architektūrą, kuriai jie buvo sukurti.

5.2. Programavimas ant Windows

Nuo tada kai atsirado “Microsoft Windows” operacinė sistema, ji ėmė sparčiai plėstis ir labai greitai išpopuliarėjo ir dabar visas pasaulis naudojasi šia sistema. Vien dėl šios priežasties programuoti Windows sistemoje ir pačiai Windows sistemai tapo labai paprasta, nes yra prikurta gausybė įrankių itin palengvinančių darbą. Microsoft kompanija net pati yra sukūrusi savo programavimo kalbą kartu su jai skirtu IDE[16] ir kompiliatoriumi[5] – Visual Basic.

Tačiau Windows programos ne visada gali veikti ant visų Windows versijų, kaip kad programa veikianti ant “Windows XP” sistemos gali neveikti ant “Windows Vista” ar “Windows 7”. Taip bent jau būdavo naujoms Windows versijoms vos tik pasirodžius. Dabartiniai kompiliatoriai ir interpretatoriai jau yra optimizuoti kurti ir paleisti programas visose Windows versijose. Microsoft kompanija yra įdėjus ir papildomą funkciją – “Run as…” kuri leidžia paleidžiant programą emuliuoti vienos ar kitos sistemos aplinką, taip programa mano kad veikia toje sistemoje, nors iš tikrųjų veikia visai kitoje. Tai yra ypač patogu kai norima yra pasileisti seną programą kuri jau ilgas laikas neatnaujinama, ar nutrauktas projektas ar dar kas. Tokiu atveju galima programą, tarkim rašytą “Windows 98” sistemai paleisti ant “Windows XP”. Tiesa – tai ne visada gali pavykti, nes ta funkcija neveikė itin gerai ir iš tiesų ji išvis neveikė. Didžioji dalis programų taip ir nepasileisdavo. Aišku, nėra ko norėti, tai yra tipiška Microsoft kompanijai.

5.3. Programavimas ant Linux

Skirtingai nei su Windows sistema, programavimas ant Linux yra kiek sudėtingesnis nes tada reikia atsižvelgti į daugybė faktorių – kuriant programas kompiliuojamąja kalba ir kuriant jam grafinę sąsają, reikia žinoti kam kuri. Žinoma yra kad Linux sistemai yra sukurta daugybė langų tvarkyklių tokių kaip GNOME, KDE, XFree86, XFCE, AwesomeWM ir t.t. kurios naudoja savo išvaizdą ir architektūrą ir kurias galima keisti laisvai, todėl kuriant vienam, gali neveikti ant kito. Prie viso to prisideda ir skirtingos Linux distribucijos, kurių yra tūkstančiais ir visos yra skirtingos architektūros. ir čia tik maža dalis sunkumų.

Tačiau tai liečia tik kompiliuojamas programavimo kalbas. Su interpretuojamomis yra kiek kitaip. Kadangi interpretuojamas kodas yra, grubiai tariant, kompiliuojamas realiu laiku atmintyje, jis nepriklausomai nuo sistemos gali veikti visur, reikia tik turėti atitinkamą interpretatorių. Dėl savo prigimties būti atviru kodu, interpretatoriai Python, Perl, Ruby ir Java kalboms dažniausiai būna jau įrašyti kartu su Linux sistema, todėl papildomai nieko daryti nereikia ir skriptai pasileis.

Linux yra UNIX atšaka, kuri įgyvendina didžiąją dalį POSIX funkcionalumo. Suderinamumas tarp tokių Unix-panašių operacinių sistemų (tokių kaip BSD, Solaris, ir Mac OS X) yra pateiktas per standartus tokius kaip POSIX ir sistemos bibliotekas tokias kaip glibc. GNU įrankiai, originaliai kurti Unix sistemoms buvo perkelti ant Windows, taip pat kaip GTK, Qt ir daugelio kitų bibliotekų.

Linux sistemai nėra jokio standarto dėl GUI įrankių tokių kaip langai, mygtukai, etiketės, ir t.t. Kelios konkuruojančios bibliotekos yra išleistos, tokios kaip GTK, Qt, wxWidgets, Motif. Programos, parašytos šitoms bibliotekoms veiks tik ant tos sistemos, kurioje yra šios bibliotekos. Jei jų nėra, tai galima paprasčiausiai įsirašyti.

Tarp įvairaus Linux dalijimo nėra jokio plačiai priimto ir bendro daugialypio standarto ir API[20]. Trimatei grafikai OpenGL yra priimtas kaip standartas, bet visa kita kaip audio, įvesties prietaisai ir taip toliau gali naudoti daug visokių bibliotekų.
Linux aparatinės įrangos tvarkyklės yra daugiausia pateikiama kaip dalis branduolio[22], kaip nemokama programinė įranga, išleista programos kodo formoje. Tvarkyklę laiko dalimi branduolio projekto, ir laikoma, kad šitų tvarkyklių kūrėjai yra Linux branduolio kūrėjų bendruomenės dalis. Tačiau, tvarkyklės kūrėjai yra atsakingi už tai, kad pastoviai palaikytų atnaujinimus, o tvarkyklės, kurios nėra aktyviai palaikomos yra pašalinama iš branduolio.

Kelios komercinės IDE[16] ir kompiliatoriai[5], tokie kaip PGI, Intel, ir Absoft Fortran kompiliatoriai. Multiplatforminės nemokamos IDE ir kompiliatoriai, iš kurių dažniausiai būna įtrauktos į Linux distribuciją yra:

  • GNU kompiliatorių kolekcija
  • Eclipse
  • NetBeans
  • Mono
  • MonoDevelop
  • Geany
  • Anjuta
  • KDevelop
  • Free Pascal / Lazarus
  • OpenLDev
  • Code::Blocks

6. Terminų paaiškinimai

  1. Objektinis Programavimas, trumpiau OOP (angl. Object-Oriented Programming) – programavimo paradigma, kompiuterinių programų architektūroje naudojanti objektus ir jų sąveikas. Beveik visos dabartinės programavimo kalbos turi patogias OOP programavimo galimybes. Kai kurios yra pilnai sukurtos šiuo pagrindu, pavyzdžiui, Java, Smalltalk, C++, Delphi ar C#.
  2. Konsolinis Programavimas, trumpiau CLI (angl. Command-Line Interface) – programavimo paradigma, kompiuterinių programų architektūroje ne naudojanti objektus ir jų sąveikas. Visos dabartinės programavimo kalbos turi patogias CLI programavimo galimybes, pavyzdžiui, Java, C, Pascal, PHP ar Python.
  3. Kompiliuojamoji kalba (angl. Compiled language)
    – tokia kalba kuria užrašytas kodas paverčiamas į mašininį specialios programos – kompiliatoriaus, pavyzdžiui, Java, C, Delphi, Pascal.
  4. Interpretuojamoji kalba (angl. Interpreted language) – tokia kalba kuria užrašytas kodas kompiliuojamas ir verčiamas į mašininį realiu laiku atmintyje. Dėl to skriptas gali veikti nepriklausomai nuo sistemos ar apskritai kompiuterio, pavyzdžiui, Python, Ruby, Perl, PHP.
  5. Kompiliatorius (angl. Compiler) – speciali programa kuri paverčia užrašytą tekstą į mašininį kodą, kurį supranta procesorius, pavyzdžiui, GCC, FreeBASIC, Borland Delphi, FreePascal.
  6. Interpretatorius (angl. Interpreter) – speciali programa kuri tiesiogiai skaito programos kodą ir kompiliavimą bei komandas atlieka atmintyje, todėl kodas lieka nepaliestas, pavyzdžiui, IronPython, IronRuby.
  7. Grafinė vartotojo sąsaja, trumpiau GUI (angl. Graphical User Interface) – interaktyvumo tipas kuris leidžia žmonėms kontroliuoti programas pasitelkiant jų Grafinę sąsają, t.y. mygtukus, etiketes, sąrašus ir panašiai.
  8. Perfokorta (angl. Punched Card) – yra dalis kieto popieriaus (kartono), kuris turi savyje skaitmeninę informaciją, kuriai atstovauja buvimas ar nebuvimas duobių apibrėžtose iš anksto padėtyse. Taip buvo saugoma kompiuterinė informacija.
  9. Bernulio skaitmenys (angl. Bernoulli numbers) – yra seka racionalinių skaičių su giliais ryšiais tarp skaičių teorijų.
  10. Lambdos skaičiavimai (angl. Lambda Calculus) – taip pat dar rašomas kaip λ -skaičiavimas, yra oficiali sistema funkcijos apibrėžimui ir funkcijos paraiškai.
  11. Tiuringo mašina (angl. Turing machine) – tai teoriškas prietaisas, kuris valdo simbolius ant juostos kasetės pagal nustatytas taisykles.
  12. Asembleris (angl. Assembler) – tai žemo lygmens programavimo kalba kompiuteriams, mikroprocesoriams, mikrokontroleriams, ir kitiems programuojamiems prietaisams.
  13. Van Wijngaarden gramatika (angl. Van Wijngaarden grammar) – yra dviejų lygmenų gramatika, kuri aprūpina techniką, kad apibrėžtų potencialiai begalines gramatikas be kontekstų baigtiniu taisyklių skaičiumi.
  14. RISC judėjimas (angl. RISC – Reduced instruction set computing) – yra procesoriaus projekto strategija, pagrįsta įžvalgumu, kuris supaprastina instrukcijas ir gali aprūpinti aukštesnį atlikimą, jei šis paprastumas įgalina daug greitesnę kiekvienos instrukcijos egzekuciją.
  15. RAD kalbos (angl. Rapid Application Development) – tai programinės įrangos išsivystymo metodologija, kuri naudoja minimalų planavimą ir greitą kūrimą.
  16. IDE (angl. Integrated Development Environment) – yra programinės įrangos paraiška, kuri aprūpina visapusiškus patogumus programuotojams programinės įrangos kūrimui.
  17. Klaidų šalinimas (angl. Debugging) – yra metodinis procesas norint surasti ir pašalinti klaidų ar defektų, kompiuterio programoje ar dalyje elektroninės aparatinės įrangos skaičių, tokiu būdu priversdamas jį elgtis kaip tikėtasi.
  18. Statinės analizės įrankis (angl. Debugger) – yra speciali kompiuterinė programa, kuri yra naudojama tikrinti kitas programas ir šalinti defektus bei klaidas.
  19. MIT (angl. Massachusetts Institute of Technology) – yra privatus universitetas, esantis Kembridže, Masačiusetse. Šis universitetas turi penkias mokyklas ir vieną kolegiją, turėdamas savyje iš viso 32 akademinius skyrius, su stipria mokslinio ir technologinio tyrinėjimo istorija.
  20. API (angl. Application Programming Interface) – tai tam tikras taisyklių rinkinys, kurias programinės įrangos programos gali sekti, kad bendrautų viena su kita.
  21. Internetinės programos (angl. Web Applications) – tai tokios programos kurtos specialiai naudoti su internetu, kaip kad SMF, phpBB, vB forumai.
  22. Sistemos branduolys (angl. Kernel) – tai pagrindinis operacinės sistemos komponentas. Branduolio pareigos apima kompiuterio išteklių paskirstymą (komunikaciją tarp aparatinės įrangos ir programinės įrangos komponentų).

7. Literatūra

  1. D. Rutkauskienė, V.R. Kovertaitė, R. Kutas: Windows 95 aplinka. Kaunas, Technologija, 1996.
  2. V. Dagienė: Mokomės programuoti. Kaunas, “Šviesa”, 1989.
  3. J. Erickson: Hakingas: Programų kodo narstymo menas. “Smaltijos” leidykla, Kaunas, 2004.
  4. A,. Vidžiūnas: C++ ir C++ Builder pradmenys. “Smaltijos” leidykla, Kaunas, 2005.
  5. A,. Vidžiūnas: C++ ir C++ Builder pradmenys. “Smaltijos” leidykla, Kaunas, 2005.
  6. J. Erickson: Hakingas: Programų kodo narstymo menas. 2-asis pataisytas ir papildytas leidimas. “Smaltijos” leidykla, Kaunas, 2010.
  7. B. Starkus, M. Starkus: Linux pirmieji žingsniai. “Smaltijos” leidykla, Kaunas, 2005.
  8. V. Žalkauskas: “Linux” žodynėlis. “Smaltijos” leidykla, Kaunas, 2004.
  9. J. Blonskis, V. Bukšnaitis, V. Jusas, R. Marcinkevičius, D. Rubliauskas: Programavimas C++. Leidykla “Technologija”, Kaunas, 2008.
  10. V. Šakys: Informacinių technologjių vadovas, Kaunas, 2005.
  11. J. Meloni: PHP, MySQL and Apache. Leidykla “Sams”, JAV, 2002.
  12. S. Sinkevičius: PHP5 pradmenys. “Smaltijos” leidykla, Kaunas, 2008.
  13. M. Starkus, A. Kviklienė: Kompiuteris – pirmieji žingsniai. VII atnaujintas leidimas. “Smaltijos” leidykla, Kaunas, 2008.
  14. M. Starkus: Kaip dirbti kompiuteriu. III atnaujintas leidimas. “Smaltijos” leidykla, Kaunas, 2007.
  15. S. Kelby: Mac OS X Leopard, Leidykla “Datacom”, Kaunas, 2009.

One comment

  1. marciuxg says:

    Įdomus straipsnis. Detaliai aprašomas programavimo kalbų istorija ir vystymasis ir kaip vienos kalbos keitė kitas. Linksma paskaityti apie netikras kalbas. Paaiškinta kas yra kompiliatorius ir interpretatorius. Man patiko.

Leave a Reply

Your email address will not be published. Required fields are marked *