b'\n_START_ARTICLE_\nOhjelmointikieli\n_START_SECTION_\nHistoria\n_START_PARAGRAPH_\nAda Lovelace kirjoitti 1800-luvulla Charles Babbagen analyyttiselle koneelle askeleellisen sarjan k\xc3\xa4skyj\xc3\xa4, ja Lovelacea pidet\xc3\xa4\xc3\xa4n ensimm\xc3\xa4isen\xc3\xa4 tietokoneohjelmoijana._NEWLINE_Ensimm\xc3\xa4isen\xc3\xa4 ylemm\xc3\xa4n tason ohjelmointikielen\xc3\xa4 pidet\xc3\xa4\xc3\xa4n Konrad Zusen 1940-luvulla kehitt\xc3\xa4m\xc3\xa4\xc3\xa4 Plankalk\xc3\xbclia. Kielen kuvaus julkaistiin kuitenkin vasta 1972, eik\xc3\xa4 sit\xc3\xa4 toteutettu h\xc3\xa4nen elinaikanaan oikeassa tietokoneessa._NEWLINE_Small-Scale Experimental Machine oli ensimm\xc3\xa4inen tietokone, jossa ohjelma voitiin tallettaa tietokoneen muistiin. My\xc3\xb6hempien tietokoneiden ominaisuudet lis\xc3\xa4siv\xc3\xa4t tarvetta k\xc3\xa4sitell\xc3\xa4 ohjelmointia ylemm\xc3\xa4ll\xc3\xa4 tasolla ja kehitettiin symboliset konekielet (ks. assembly). Tarve ylemm\xc3\xa4n tason ohjelmointikielille johti muun muassa ALGOLin, COBOLin ja FORTRANin kehitt\xc3\xa4miseen.\n_START_SECTION_\nYleist\xc3\xa4\n_START_PARAGRAPH_\nOhjelmointikielet ovat monin tavoin luonnollisten kielten kaltaisia. Niill\xc3\xa4 on oma sanastonsa ja kielioppis\xc3\xa4\xc3\xa4nn\xc3\xb6st\xc3\xb6ns\xc3\xa4; n\xc3\xa4ist\xc3\xa4 kahdesta muodostuu kielen syntaksi eli lauseoppi. Niill\xc3\xa4 on my\xc3\xb6s looginen merkitys, jota kutsutaan semantiikaksi. Esimerkiksi lause "Koira puri luuta" on sek\xc3\xa4 syntaktisesti (lauseopillisesti) oikein ett\xc3\xa4 semanttisesti (merkitykselt\xc3\xa4\xc3\xa4n) mielek\xc3\xa4s. Sen sijaan lause "Luu puri koiraa" on syntaktisesti oikein mutta semanttisesti ep\xc3\xa4mielek\xc3\xa4s. Vastaavasti ohjelmakoodin syntaktinen oikeellisuus, eli se, ett\xc3\xa4 k\xc3\xa4\xc3\xa4nt\xc3\xa4j\xc3\xa4 kykenee k\xc3\xa4\xc3\xa4nt\xc3\xa4m\xc3\xa4\xc3\xa4n l\xc3\xa4hdekoodin konekieliseksi ei viel\xc3\xa4 tarkoita, ett\xc3\xa4 ohjelma toimii aiotulla tavalla. _NEWLINE_Ohjelmointikielten kielentutkimus eli lingvistiikka on hyvin samankaltaista kuin luonnollistenkin kielten tutkimus. Toisaalta ohjelmointikielet ovat luonnollista kielt\xc3\xa4 huomattavasti yksinkertaisempia, muun muassa varattujen sanojen hyvin pienen lukum\xc3\xa4\xc3\xa4r\xc3\xa4n vuoksi: tyypillisesti ohjelmointikielten sanasto on alle sata sanaa._NEWLINE_Ohjelmointikielten kielioppis\xc3\xa4\xc3\xa4nn\xc3\xb6t ovat paljon yksinkertaisempia kuin luonnollisten kielten, s\xc3\xa4\xc3\xa4nn\xc3\xb6t ovat yksik\xc3\xa4sitteisi\xc3\xa4, ja mielekk\xc3\xa4it\xc3\xa4 vaihtoehtoisia ilmaisutapoja on rajallinen m\xc3\xa4\xc3\xa4r\xc3\xa4. Esimerkiksi luonnollisen kielen ilmaisut "pienenn\xc3\xa4 saldoa kymmenell\xc3\xa4", "v\xc3\xa4henn\xc3\xa4 10 saldosta", "ota kymmenen pois saldosta", "aseta saldoksi kymmenen v\xc3\xa4hemm\xc3\xa4n" ja niin edelleen tarkoittavat kaikki samaa ja ovat mielekk\xc3\xa4it\xc3\xa4, kun taas useimmilla ohjelmointikielill\xc3\xa4 asian voi ilmaista vain yhdell\xc3\xa4 tai kahdella tavalla, esimerkiksi "saldo -= 10;", tai "saldo = saldo-10;"._NEWLINE_C-kieless\xc3\xa4 vaihtoehtoja on runsaasti, sill\xc3\xa4 kokonaislukumuuttujan arvoon voi lis\xc3\xa4t\xc3\xa4 yhden nelj\xc3\xa4ll\xc3\xa4 eri tavalla:_NEWLINE_muuttuja = muuttuja + 1;muuttuja += 1;++muuttuja;muuttuja++;_NEWLINE_Erillisin\xc3\xa4 lauseina n\xc3\xa4iden merkitys on aivan sama, eli muuttujan arvon kasvattaminen yhdell\xc3\xa4, mutta lausekkeen osana viimeisen rivin merkitys poikkeaa aiemmista. Kolme ylint\xc3\xa4 palauttaa lausekkeen osana ollessaan muuttujan uuden arvon, kun alin palauttaa vanhan, vaikka kasvattaakin itse muuttujan arvoa._NEWLINE_Jos kieless\xc3\xa4 on monia vaihtoehtoisia toimintoja, kaikki ohjelmoijat eiv\xc3\xa4t v\xc3\xa4ltt\xc3\xa4m\xc3\xa4tt\xc3\xa4 tunne niist\xc3\xa4 kaikkia harvinaisempia ja voivat j\xc3\xa4tt\xc3\xa4\xc3\xa4 k\xc3\xa4ytt\xc3\xa4m\xc3\xa4tt\xc3\xa4 tilanteeseen parhaiten sopivaa piirrett\xc3\xa4._NEWLINE_Ohjelmointikieli\xc3\xa4 on suunniteltu lukuisiin eri tarkoituksiin ja niit\xc3\xa4 voi arvioida eri tavoilla. T\xc3\xa4rkeit\xc3\xa4 tavoitteita ohjelmointikielen suunnittelussa ovat muun muassa luettavuus, kirjoitettavuus ja yleinen yksinkertaisuus - eli kuinka hyvin kerran kirjoitetusta ohjelmasta saa selv\xc3\xa4\xc3\xa4 joku muukin kuin alkuper\xc3\xa4inen ohjelmoija. Toisissa kieliss\xc3\xa4 painotetaan l\xc3\xa4hdekoodin selkeytt\xc3\xa4 (Java) ja toisissa ilmaisuvoimaa (Perl), j\xc3\xa4lkimm\xc3\xa4isess\xc3\xa4 selkeyden kustannuksella. Tietokoneiden alkuaikoina ohjelmointikielten ja k\xc3\xa4\xc3\xa4nt\xc3\xa4jien kehityksess\xc3\xa4 p\xc3\xa4\xc3\xa4paino oli tukea mahdollisimman tehokkaasti laiteresursseja hy\xc3\xb6dynt\xc3\xa4v\xc3\xa4n konekielen tuottamista (C), mutta noin 1970-luvulta alkaen ohjelmiston elinkaareen alettiin kiinnitt\xc3\xa4\xc3\xa4 enemm\xc3\xa4n huomiota kun toimitettujen ohjelmien yll\xc3\xa4pito alkoi nousta merkitt\xc3\xa4v\xc3\xa4ksi kustannustekij\xc3\xa4ksi ja liiketoiminnaksi. Samalla k\xc3\xa4\xc3\xa4nt\xc3\xa4j\xc3\xa4t kehittyiv\xc3\xa4t niin tehokkaiksi, ett\xc3\xa4 l\xc3\xa4hdekoodin manuaalisen optimoinnin merkitys v\xc3\xa4hentyi, lukuun ottamatta nopeuskriittisi\xc3\xa4 reaaliaikasovelluksia, digitaalista signaalink\xc3\xa4sittely\xc3\xa4, laiteajureita ja usein ajettavia algoritmeja._NEWLINE_Eri kielten ominaisuudet eroavat toisistaan muun muassa kontrollirakenteiden, tietotyyppien, ilmaisuvoiman, abstraktiotason ja turvallisuuden suhteen. Turvallisuuteen kuuluvat muun muassa tyyppitarkistukset ja virhetilanteiden hallinta.'