Varsinainen ohjelmointityö on käytännössä sitä, että monimutkaiset kokonaisuudet rakennetaan yksinkertaisista palasista. Jokainen ohjelma (tai funktio) käyttää tyypillisesti apunaan yhtä tai useampaa aliohjelmaa (tai alifunktiota), joiden avulla se määrittelee oman toimintansa.
Esimerkiksi tämä ohjelma tekee sanasta palindromin (palindromiksi("kirja") tuottaa tulokseksi "ajrikkirja"):
def palindromiksi(sana): return sana[::-1] + sana
palindromiksi-funktio käyttää apunaan kahta muuta funktiota: merkkijonon väärin päin kääntämistä, joka tehdään [::]-aliohjelmalla (jota kutsutaan "slice"-rakenteeksi), sekä merkkijonojen peräkkäin yhdistämistä, joka tehdään +-aliohjelmalla.
Esimerkkimme näyttää yhden tapauksen yleisemmästä periaatteesta, miten pienistä palasista muodostetaan suurempia kokonaisuuksia: yhden aliohjelman tuloste annetaan toiselle, niin että se on toisen aliohjelman syöte. palindromiksi-funktiossa [::]-aliohjelman tulos (eli väärin päin käännetty sana) annetaan syötteeksi +-aliohjelmalle, joka yhdistää sen alkuperäiseen sanaan.
Tätä menetelmää, jossa yhden funktion tuloste annetaan toiselle syötteeksi, sanotaan funktioiden kompositioksi. Se vastaa sitä, että kaksi konetta yhdistetään peräkkäin tuotantolinjaksi siten, että edeltävän koneen tulokset menevät seuraavalle käsiteltäviksi. Esimerkiksi palindromiksi-funktio on "isompi kone", joka rakentuu pienemmistä seuraavasti:
palindromiksi +---------------------------------+ | /-----------------\ | | / väärin \ + | sana| / päin \+-----+ | -----> [::-1] käännetty \> | |yhdistelty sana | \ +------+ sana | --->--------> | \---> --------------> | | | +------+ +-----+ | +---------------------------------+
(Takaisin ohjelmoinnin käsitteet -sivulle.)