Hardvér počítača dokáže vykonávať jedine takzvaný strojový kód, ktorý je tvorený na najnižšej úrovni iba jednotkami a nulami. Pre ľudí by bolo písanie programov priamo v ňom veľmi náročné, preto si to rôznymi spôsobmi uľahčujú.
Základnou používanou abstrakciou je assembler, čo je popísanie základných inštrukcií pomocou textových skratiek - pre svoju zložitosť sa však používa len výnimočne.
O úroveň vyššie sú programovacie jazyky ako C a C++. Tie už obsahujú príkazy vo forme slov (prevažne z angličtiny) a poskytujú rôzne spôsoby jednoduchého použitia už existujúceho kódu. Napríklad ak v C napíšete funkciu na výpočet objemu gule, môžete ju bez zmeny použiť v ľubovoľnom inom programe. Okrem toho ju stačí mať v programe iba raz a dá sa jednoducho zavolať vždy, keď je potrebná. Aj v jazyku C má však programátor priamy prístup ku všetkým prostriedkom počítača a musí sám dávať pozor na ich používanie, napríklad na prideľovanie pamäte. Existuje veľké množstvo ďalších, vyšších programovacích jazykov (napríklad Java, PHP, Visual Basic), ktoré ešte viac zjednodušujú tvorbu programu, niektoré až na úroveň jednoduchého klikania myšou.
Vo všeobecnosti platí, že čím „vyšší" programovací jazyk sa použije, tým rýchlejšie sa dá program vytvoriť a tým menšia je pravdepodobnosť výskytu chýb, ale na druhej strane tým pomalšie pracuje.
Väčšina programov a operačných systémov sa píše práve v C alebo C++, to je aj prípad Windows (i Linuxu). Text programu, napísaného v konkrétnom programovacom jazyku, sa nazýva zdrojový kód.
Počítač však nedokáže priamo vykonať takýto program vo vyššom programovacom jazyku, preto ho treba najprv preložiť do strojového kódu. Na tento účel slúžia programy „kompiler" a „interpreter". Kompiler program preloží a uloží priamo v strojovom kóde - napríklad vo Windows sú to súbory EXE alebo DLL. (Naproti tomu intepreter program prekladá „za behu" a používa sa len vtedy, keď sa nevyžaduje vysoká rýchlosť vykonávania.)
Na inštalačnom CD sú Windows už priamo v skompilovanej podobe - konverzia do pôvodného zdrojového kódu, s ktorým by sa dalo pracovať, je väčšinou veľmi zložitá alebo nemožná.
Naopak, ak niekto má k dispozícii zdrojový kód, môže presne zistiť, ako program funguje a po jeho skompilovaní získať spúštateľnú verziu programu. Časti tohto kódu potom môže použiť aj v iných programoch.