Ohjelmointikieli
Ohjelmointikielet ovat formaaleja kieliä, joita ohjelmoijat käyttävät tietokoneen ohjelmointiin. Ohjelmointikielellä tehdystä lähdekoodista tuotetaan tietokoneen ymmärtämää konekielistä "binääriä" kääntäjäohjelmalla tai tulkilla. Tietokoneen ymmärtämä binääri voidaan tehdä mahdollisen välikielen kautta.
Ada Lovelace kirjoitti 1800-luvulla Charles Babbagen analyyttiselle koneelle askeleellisen sarjan käskyjä ja Lovelacea pidetään ensimmäisenä tietokoneohjelmoijana.
Ensimmäisenä ylemmän tason ohjelmointikielenä pidetään Konrad Zusen 1940-luvulla kehittämää Plankalkülia. Kielen kuvaus julkaistiin kuitenkin vasta 1972, eikä sitä toteutettu hänen elinaikanaan oikeassa tietokoneessa.
Small-Scale Experimental Machine oli ensimmäinen tietokone, jossa ohjelma voitiin tallettaa tietokoneen muistiin. Myöhempien tietokoneiden ominaisuudet lisäsivät tarvetta käsitellä ohjelmointia ylemmällä tasolla ja kehitettiin symboliset konekielet (ks. assembly). Tarve ylemmän tason ohjelmointikielille johti muun muassa ALGOLin, COBOLin ja FORTRANin kehittämiseen.
Ohjelmointikielet ovat monin tavoin luonnollisten kielten kaltaisia. Niillä on oma sanastonsa ja kielioppisäännöstönsä; näistä kahdesta muodostuu kielen syntaksi eli lauseoppi. Niillä on myös looginen merkitys, jota kutsutaan semantiikaksi. Esimerkiksi lause "Koira puri luuta" on sekä syntaktisesti (lauseopillisesti) oikein että semanttisesti (merkitykseltään) mielekäs. Sen sijaan lause "Luu puri koiraa" on syntaktisesti oikein mutta semanttisesti epämielekäs. Vastaavasti ohjelmakoodin syntaktinen oikeellisuus, eli se, että kääntäjä kykenee kääntämään lähdekoodin konekieliseksi ei vielä tarkoita, että ohjelma toimii aiotulla tavalla.
Ohjelmointikielten kielentutkimus eli lingvistiikka on hyvin samankaltaista kuin luonnollistenkin kielten tutkimus. Toisaalta ohjelmointikielet ovat luonnollista kieltä huomattavasti yksinkertaisempia, muun muassa varattujen sanojen hyvin pienen lukumäärän vuoksi: tyypillisesti ohjelmointikielten sanasto on alle sata sanaa. 
Ohjelmointikielten kielioppisäännöt ovat paljon yksinkertaisempia kuin luonnollisten kielten, säännöt ovat yksikäsitteisiä, ja mielekkäitä vaihtoehtoisia ilmaisutapoja on rajallinen määrä. Esimerkiksi luonnollisen kielen ilmaisut kuten "pienennä saldoa kymmenellä", "vähennä 10 saldosta", "ota kymmenen pois saldosta", "aseta saldoksi kymmenen vähemmän" jne tarkoittavat kaikki samaa ja ovat mielekkäitä, kun taas useimmilla ohjelmointikielillä asian voi ilmaista vain yhdellä tai kahdella tavalla, esim. "codice_1", tai "codice_2".
C-kielessä vaihtoehtoja on runsaasti, sillä kokonaislukumuuttujan arvoon voi lisätä yhden neljällä eri tavalla:
Erillisinä lauseina näiden merkitys on aivan sama eli muuttujan arvon kasvattaminen yhdellä, mutta lausekkeen osana viimeisen rivin merkitys poikkeaa aiemmista. Kolme ylintä palauttaa lausekkeen osana ollessaan muuttujan uuden arvon, kun alin palauttaa vanhan, vaikka kasvattaakin itse muuttujan arvoa.
Jos kielessä on monia vaihtoehtoisia toimintoja, kaikki ohjelmoijat eivät välttämättä tunne niistä kaikkia harvinaisempia ja voivat jättää käyttämättä tilanteeseen parhaiten sopivaa piirrettä.
Ohjelmointikieliä on suunniteltu lukuisiin eri tarkoituksiin ja niitä voi arvioida eri tavoilla. Tärkeitä tavoitteita ohjelmointikielen suunnittelussa ovat muun muassa luettavuus, kirjoitettavuus ja yleinen yksinkertaisuus - eli kuinka hyvin kerran kirjoitetusta ohjelmasta saa selvää joku muukin kuin alkuperäinen ohjelmoija. Toisissa kielissä painotetaan lähdekoodin selkeyttä (Java) ja toisissa ilmaisuvoimaa (Perl), jälkimmäisessä selkeyden kustannuksella. Tietokoneiden alkuaikoina ohjelmointikielten ja kääntäjien kehityksessä pääpaino oli tukea mahdollisimman tehokkaasti laiteresursseja hyödyntävän konekielen tuottamista (C), mutta noin 1970-luvulta alkaen ohjelmiston elinkaareen alettiin kiinnittää enemmän huomiota kun toimitettujen ohjelmien ylläpito alkoi nousta merkittäväksi kustannustekijäksi ja liiketoiminnaksi. Samalla kääntäjät kehittyivät niin tehokkaiksi, että lähdekoodin manuaalisen optimoinnin merkitys vähentyi, lukuun ottamatta nopeuskriittisiä reaaliaikasovelluksia, digitaalista signaalinkäsittelyä, laiteajureita ja usein ajettavia algoritmeja.
Eri kielten ominaisuudet eroavat toisistaan muun muassa kontrollirakenteiden, tietotyyppien, ilmaisuvoiman, abstraktiotason ja turvallisuuden suhteen. Turvallisuuteen kuuluvat muun muassa tyyppitarkistukset ja virhetilanteiden hallinta.
Ohjelmointikielet voidaan jaotella eri ryhmiin kielen paradigman ja toisaalta ohjelmointimallin mukaan:
Ohjelmointikielet voivat toteuttaa useaa paradigmaa eli ovat "moniparadigmaisia". Esimerkiksi C++ on moniparadigmainen kieli.
Alla olevassa listassa on joukko tunnetuimpia ohjelmointikieliä. Todellisuudessa niitä on satoja tai jopa tuhansia, mutta erityisesti teollisuudessa käytetään vain muutamaa kymmentä (jos johdannaisia ei lasketa mukaan).