Minden számítógépnek szüksége van programokra a működéshez. Ezek indítóprogramra oszlanak, amely életre kelti a gépet, aztán operációs rendszerre, amely lehetővé teszi a működését – majd felhasználói programokra, amelyek gyakorlati értelmet adnak neki. A programozás bonyolult – és az ésszerű számítógép-kezeléshez vezető út éppen a programozás fejlődésén keresztül vezetett. A programoknak karbantarthatónak kellett lenniük, vagyis a saját szerzőjükön kívül más programozóknak és fejlesztőknek is érteniük kellett őket.
Eredetileg a számítógépeket gépi kódban programozták, ami egy nagyon alacsony szintű számítógépes nyelv, amellyel a hardver közvetlenül tud dolgozni. Régebben az a képesség, hogy valaki fejből tudott közvetlenül „gépi kódban” írni, magasabb szintű programozói hatalom, sőt egyenesen szoftveres fekete mágia bizonyítékának számított – erre tényleg nem volt képes akárki. Az így létrejött kód rendkívül átláthatatlan volt, és részletes dokumentáció nélkül általában csak maga a szerzője tudta javítani és módosítani.
Ezért jött létre egy magasabb szintű nyelv, az assembler, amely ugyan még mindig nagyon közel állt a gépi kódhoz, de már tudott szimbolikus változókat és címkéket használni, így a kódot áttekinthetőbben lehetett írni. A programozónak továbbra is ismernie kellett a gépi utasításokat, de már nem kellett fejben tartania a memóriacímeket, és használhatott változókat és konstansokat, ami nagy előrelépést jelentett. Az assemblerben írt kódot már egy másik programozó is tudta olvasni és javítani, de megjegyzések nélkül így is elég nehezen volt érthető.
A számítógépek megjelenése után viszonylag hamar a tudósok elkezdtek foglalkozni azzal a kérdéssel, hogy lehetséges-e olyan magasabb szintű nyelvet létrehozni, amely leírja a problémát, ugyanakkor nem függ a konkrét számítógépes hardvertől, így a programot közvetlenül meg lehet írni, és különböző gépeken futtatni. 1954-ben jött létre a Fortran (Formula Translation) nyelv, amelyet tudományos és matematikai problémák leírására terveztek – és bár eleinte kétségek merültek fel a hatékonyságával kapcsolatban, gyorsan kiderült, hogy a magasabb szintű nyelvek előnyei felülkerekednek.
Grace Hopper matematikus 1959-ben javasolta a Flow-Matic nyelvet, amely a problémákat a hétköznapi angolhoz közeli nyelven írta le, ami alapvetően leegyszerűsítette a kód megértését. Ez a nyelv lett a nagyon sikeres Cobol alapja, amely főként az üzleti világban terjedt el, és még ma is találkozhatunk vele.
A számítógéptudósok törekvéseinek célja természetesen a „nem programozás” volt, egy sci-fibe illő vízió, amelyben megszólítod a számítógépet, elmondod neki a problémát, ő pedig elemzi azt, és saját magát programozza fel. Ez az a pont, amelyet a jövőbelátók már korábban is láttak, de valójában csak most kezdünk közeledni hozzá. Abban az időben a számítógépes nyelvek egész sorával kísérleteztek, amelyek az érthetőség és a hatékonyság közötti kompromisszumot képviselték.
Egy érdekes, bár kissé problémás kompromisszum volt a Basic programozási nyelv (1964). Kezdők számára készült nyelvként jött létre, egyszerű és interpreteres volt, ami azt jelentette, hogy megállíthattad a futó programot, módosíthattad a kódot, megnézhetted a változók állapotát – majd tovább futtathattad a programot. Nagyon kevés erőforrást igénylő nyelv volt, és rendkívül gyorsan meg lehetett tanulni, ezért szó szerint meghódította a 70-es és 80-as évek kis számítógépeit. A Basicet szó szerint minden számítógép-felhasználó ismerte, a LOAD parancs nélkül a legtöbb esetben még a játékokat sem tudtad betölteni!
A Basic nagy hátránya az volt, hogy egyszerűsége miatt nem támogatta az összetettebb adatszerkezeteket, és a programokat is afféle spagettiszerű, átláthatatlan módon írták benne. Sok IT-szakember számára ez volt a legnagyobb rossz, amely a számítástechnikai hallgatók „átnevelését” igényelte. Ennek ellenére a Basic alapvető volt a technológia fejlődése szempontjából – és mellesleg az Altair 8800 számítógépre készült Basicet egy bizonyos fiatal vállalkozó, Bill Gates is megírta – a Basic példányainak eladásai pedig a Microsoftot oda juttatták, ahol ma van (talán ezért volt a Basic interpreter, a GW-Basic, az MS-DOS állandó része).
A számítástechnika azonban más irányokban is fejlődött. Az egyik ilyen irány a mesterséges intelligencia felé tartó nyelvek voltak, mint a LISP (1960) és a Prolog (1972). Ezek a nyelvek formális logikán és azon az elképzelésen alapultak, hogy a problémát csak le kell írni a gépnek, és az képes lesz a megadott információkból következtetni, valamint saját maga levonni a következtetéseket. Ez az elképzelés ma kissé naivnak tűnik, de számos módszer alapjává vált, például az automatikus bizonyításé.
Fontosabb irányt jelentettek a problémák hatékony leírására összpontosító nyelvek – az algoritmikus nyelvek. Ezek az összetett adatszerkezetekre és annak átlátható leírására összpontosítanak, hogyan lehet velük dolgozni. A cél az írott programok olvasásának megkönnyítése, és az architektúrájuk révén a hibák megelőzése. Sok hiba ugyanis nagyon buta – például a ciklusok belsejéből történő kezeletlen ugrások –, ezért a fejlesztők úgy gondolták, hogy minél bonyolultabb ilyesmit megcsinálni, annál kevesebb hasonló hiba keletkezik.
Így jött létre 1960-ban az Algol nyelv, lényegében a mai modern programozási nyelvek elődje. Adatszerkezetei és vezérlési módszerei átkerültek más modern nyelvekbe is, mint a ma nagyon népszerű C, C++ és C# – sőt tulajdonképpen minden modern nyelvbe. Ma az adatokkal való munka a döntő – hogyan vannak az adatok rendezve, hogyan férsz hozzájuk, hogyan véded őket a helytelen használattól és hasonlók. Egy másik jelentős lépést a programozói konvenciók jelentenek, vagyis azok az előírások, amelyek szerint a nagy csapatokban dolgozó fejlesztők haladnak, és amelyek megkönnyítik számukra az idegen kód olvasását és karbantartását, segítenek felismerni a változók jelentését, és általában együttműködésre vezetik őket úgy, hogy egyikük munkája ne rontsa el a másik eredményeit.
Ettől azonban a programozási nyelvek bonyolultabbá váltak – és ismét olyan dologgá lettek, amelyhez csak a profik értettek. A hétköznapi felhasználók számára túl összetettek voltak – és ahelyett, hogy közelebb vitték volna hozzájuk a technológiát, bonyolult akadályt állítottak az emberek és a gépeik közé. Világos volt, hogy a számítógépes nyelvek nem alkalmasak a számítógépek hétköznapi vezérlésére, valami mást, egyszerűbbet és intuitívabbat kell kitalálni: a grafikus felületet.
A számítógépek parancssorozatokkal történő vezérlése soha nem tűnt el teljesen. Még ma is lehet számítógépeket szkriptekkel vezérelni, vagyis az egyes programhívások sorrendjének leírásával. A legtöbb szkript rejtve marad a felhasználók előtt, de még ma is megnyithatod a Windows PowerShellt, és írhatod a saját szkriptjeidet!