Przytaczam tę anegdotę (autentyczną!) z okresu, który bym zaliczył do prehistorii współczesnej informatyki, żeby przypomnieć, iż z traktowaniem oprogramowania jako towaru, który trzeba kupić, początkowo były duże trudności. Wynikało to m.in. z faktu, że w początkowej fazie rozwoju informatyki użytkownicy sami sobie pisali potrzebne programy. Ja też tak przez wiele lat pracowałem i wszystkie programy, które wykorzystywałem m.in. do przygotowania doktoratu, pisałem własnoręcznie. Przypomnę teraz w skrócie, jak to programowanie w tamtych czasach wyglądało.
Kartka z odległej przeszłości
Sposób programowania, który tutaj chcę opisać (jako ciekawostkę historyczną), dotyczy sytuacji z przełomu lat 50. i 60. ubiegłego wieku. Jednak sięgając do bardziej odległej przeszłości, warto przypomnieć, że pierwszy program został napisany w roku 1840. Napisała go Ada Augusta Lovelace, córka poety Byrona i admiratorka prac (nieukończonych) Charlesa Babbage'a nad programowalną maszyną matematyczną, którą powszechnie uważa się za pierwszy komputer. Program obliczania kolejnych tak zwanych liczb Bernoulliego Ada napisała w uzupełnieniu do tłumaczonego przez nią zapisu wykładu Babbage'a wygłoszonego na Uniwersytecie w Turynie i zanotowanego przez Luigiego Federica Menabreę. Więcej na ten temat można przeczytać w „Rzeczy o Historii" z dnia 25 czerwca 2021 r.
Jak zatem programowano komputery w początkowych latach rozwoju informatyki? Pierwsze komputery programowano z użyciem języka maszynowego. Program składał się z rozkazów, które elektronika komputera mogła bezpośrednio wykonywać. W odniesieniu do tych najdawniejszych programów używane były także określenia „kod binarny" albo „postać wykonywalna". Taki sposób programowania teoretycznie był w użyciu tylko do początku lat 60. XX wieku, ale ja sam używałem języka maszynowego do programowania komputerów jeszcze na początku lat 70. Nie byłem w tym odosobniony, bo w tym okresie funkcjonowały jeszcze sprawne technicznie komputery poprzedniej generacji (w moim przypadku była to Odra 1013), dla których nie było jednak translatorów języków algorytmicznych. Zaraz wyjaśnię, co to jest język algorytmiczny i do czego potrzebny jest translator, ale najpierw domknę wątek programowania w języku maszynowym.
Otóż mając do wyboru natychmiastowy dostęp do komputera, który akceptował tylko język maszynowy, albo czekanie w długiej kolejce do komputera nowej generacji, którym w latach 70. na AGH była Odra 1304, wybierałem użycie tej starszej maszyny. Dodam, że kolejka brała się stąd, że ówczesna AGH, ogromna uczelnia techniczna, miała jeden (!) komputer nowej generacji, był on więc obciążony przez całą dobę. Ja sam niektóre obliczenia prowadziłem na nim w zdobytym z trudem „okienku czasowym" od godziny 4 do 6 rano w niedzielę!
Wracając do programowania w języku maszynowym, warto wspomnieć, że program w takim języku składał się z rozkazów, które w komputerze zapisywane były jako łańcuchy binarne (złożone wyłącznie z zer i jedynek). Na szczęście programista mógł te rozkazy zapisywać w wygodniejszym systemie oktalnym (ósemkowym), ale i tak była to straszna mordęga. Każdy rozkaz zawierał kod operacji, to znaczy zestaw bitów nakazujący procesorowi wykonanie jakichś operacji (np. dodania albo porównania dwóch liczb), a dodatkowo trzeba było podać w rozkazie informację, gdzie są te liczby (podając adresy komórek w pamięci, gdzie były one umieszczone) oraz gdzie umieścić wynik. Było to skrajnie niewygodne, ale ja sam jestem żywym (jeszcze...) przykładem, że było to możliwe.
Koncepcja translatora
Niewygoda programowania w języku maszynowym (w dodatku na każdym komputerze innym!) spowodowała odruch zdrowego buntu u pionierów informatyki, którzy doszli do następującej konkluzji: „Dlaczego to ja mam się uczyć języka komputera? Niech komputer nauczy się mojego języka!".