Ohjelman optimointi on tietotekniikassa joukko menetelmiä, joilla ohjelmakoodin suoritusta tehostetaan. Tapauksesta riippuen optimointia voidaan tehdä esimerkiksi muistimäärän käytön, virran käytön tai suoritusajan suhteen. Optimointia voidaan tehdä kääntäjän asetuksilla ja itse ohjelmakoodin muokkaamisella. Tärkeysjärjestyksessä ensimmäisenä on aina ohjelman oikea ja luotettava toiminta, mutta on useita tilanteita joissa optimointia voidaan tarvita.[1]
Optimoinnin apuna voidaan käyttää profilointia "kuumien kohtien" (engl. hot spot) havaitsemiseen.
Kevyimmällä tasolla optimointi voi tarkoittaa selkeää ja yksinkertaista toteutusta ja syvemmällä tasolla toteutusmenetelmien muuttamista.[1]
Ohjelmakoodin lisäksi tietorakenteita muuttamalla voidaan parantaa ohjelman suoritusta: kielestä riippuen ongelmakohtia voivat olla monimutkaiset varaukset yksinkertaisille rakenteille tai useita välituloksia suorituksen aikana.[2] Muistiarkkitehtuurit kuten NUMA voivat vaatia erityistä suunnittelua.[3]