Kurssilla tarkastellaan ohjelmointikieliä ja paradigmoja teoreettisesta ja teknisestä näkökulmasta. Aihetta konkretisoidaan tutustumalla eri ohjelmointiparadigmoja edustaviin ohjelmointikieliin.

Kurssin päätavoite on antaa jäsennetty kokonaiskuva ohjelmointikielistä ja niiden tekniikoista, sekä teoreettisesta että pragmaattisesta näkökulmasta. Kieliä tarkastellaan läpileikkaavien piirteiden (esim. syntaksi, semantiikka) kautta, mutta myös erilaisiin paradigmoihin jaotellen.

Kielten käsittely alkaa niiden kehityskulun tarkastelulla nykypäivään asti, minkä jälkeen tuodaan lähempään tarkasteluun eri kieliä paradigmoittain. Imperatiivisen ohjelmoinnin kautta esitellään kielille yleisiä piirteitä (mm. syntaksi, kontrollivuo ja -rakenteet, nimet, sidonta, tila). Olio-ohjelmoinnin osalta syvennetään ymmärrystä periytymisen ja geneerisyyden toiminnasta sekä oliomallin abstraktioista. Javan lisäksi tarkastellaan vaihtoehtoisia oliomalleja (esim. moniperintä, prototyypit). Funktionaalisen ohjelmoinnin osalta tuodaan esiin tausta (mm. lambda-laskento), nojautuminen tyyppeihin (Haskell) sekä perusrakenteita. Deklaratiivista ohjelmointia tarkastellaan myös logiikka- ja tietovuo-ohjelmoinnin kautta. Muista paradigmoista tutustutaan mm. reaktiiviseen, aspekti- ja metaohjelmointiin sekä sovellusaluekohtaisiin ja visuaalisiin kieliin. Paradigmojen ohella tuodaan esiin myös samanaikaisuuden ja rinnakkaisuuden käsitteitä, tekniikoita ja haasteita.