Pierwsze programy komputerowe

Pierwszy program komputerowy powstał, o dziwo, na długo przed zbudowaniem jakiegokolwiek elektronicznego komputera. Dziś programy komputerowe są wszechobecne – od aplikacji w smartfonach po złożone systemy w firmach – jednak początki programowania sięgają XIX wieku i były nierozerwalnie związane z rozwojem maszyn liczących. W tym kompleksowym przewodniku prześledzimy początki programowania, poznamy pierwsze programy i komputery oraz pionierów, którzy przecierali szlaki w tej nowej dziedzinie. Tekst został napisany zgodnie z polskimi zasadami pisowni, z zachowaniem różnorodnej struktury zdań i akapitów, aby przedstawić historię pierwszych programów w sposób ciekawy i przystępny dla każdego czytelnika. Znajdziesz tu zarówno definicje, tło historyczne, jak i fascynujące anegdoty ukazujące, jak rodziło się programowanie komputerów.

Co to jest program komputerowy?

Program komputerowy to zbiór instrukcji, które komputer wykonuje, aby zrealizować określone zadanie. Innymi słowy, jest to algorytm zapisany w formie zrozumiałej dla maszyny. Po uruchomieniu programu procesor komputera przetwarza kolejne polecenia krok po kroku. W początkach informatyki programy były bardzo proste i zapisane bezpośrednio w postaci kodu maszynowego (ciągów cyfr 0 i 1 odpowiadających stanom elektrycznym). Z czasem powstały bardziej zaawansowane języki, dzięki którym programy stały się łatwiejsze do napisania i zrozumienia przez ludzi.

Warto rozróżnić pojęcia: algorytm (czyli opis kroków rozwiązania problemu) oraz program (czyli algorytm zapisany w konkretnym języku programowania i wykonany przez komputer). Na samym początku ery komputerów programy nie miały wygodnej formy plików czy aplikacji, jaką znamy dziś. Były to raczej instrukcje wprowadzane do maszyn za pomocą kart dziurkowanych, przełączników czy taśm perforowanych. Pierwsze programy komputerowe znacznie różniły się od współczesnych – były krótkie, związane z konkretnym sprzętem i często wykonywały jedynie pojedyncze obliczenia lub proste zadania matematyczne.

Pierwsze pomysły na maszyny programowalne

Zanim powstały komputery elektroniczne, istniały koncepcje maszyn, które można uznać za prekursorów programowalnych urządzeń. Już na początku XIX wieku pojawiły się pomysły, aby maszyny mechaniczne wykonywały różne czynności sterowane uprzednio przygotowanymi instrukcjami. Przykładem jest krosno Jacquarda (1801) – mechaniczny warsztat tkacki, który wykorzystywał karty perforowane do automatycznego tkania skomplikowanych wzorów na tkaninach. Wzór utworzony z dziurek na kartach sterował ruchami mechanizmu krosna. Choć nie był to program komputerowy w dzisiejszym rozumieniu, idea zapisu instrukcji na fizycznym nośniku (kartach dziurkowanych) okazała się przełomowa i wpłynęła na późniejszych wynalazców komputerów.

Kilkadziesiąt lat później brytyjski matematyk Charles Babbage zaprojektował urządzenie, które można uznać za pierwszy koncepcyjny komputer. Była to maszyna analityczna (Analytical Engine) – projekt powstały w latach 30. XIX wieku. Maszyna analityczna miała być ogromnym, mechanicznym kalkulatorem o ogólnym przeznaczeniu, wyposażonym w pamięć, arytmometr (do wykonywania działań) oraz jednostkę sterującą. Co najważniejsze, Babbage zaplanował, że maszyna ta będzie programowalna za pomocą kart perforowanych (podobnych do stosowanych w krośnie Jacquarda). Karty miały zawierać ciągi instrukcji – swoisty kod, który mówiłby maszynie, jakie operacje matematyczne ma wykonywać i w jakiej kolejności. Był to wizjonerski pomysł, wyprzedzający epokę o kilkadziesiąt lat. Niestety, ze względów technicznych i finansowych, Babbage nigdy nie ukończył budowy maszyny analitycznej. Projekt pozostał na papierze, jednak jego szczegółowe opisy stały się inspiracją dla przyszłych pokoleń konstruktorów komputerów.

Ada Lovelace – pierwsza programistka na świecie

W historii informatyki szczególne miejsce zajmuje Ada Lovelace (Augusta Ada King, hrabina Lovelace), często nazywana pierwszą programistką. Ada Lovelace żyła w latach 1815–1852 i była córką słynnego poety lorda Byrona. Choć wywodziła się z arystokracji i mogła poświęcić się życiu towarzyskiemu, od młodości pasjonowała się matematyką i nauką. Jej zainteresowania doprowadziły do spotkania z Charlesem Babbage’em. Ada była zafascynowana maszyną analityczną Babbage’a i szybko stała się jej orędowniczką.

W 1843 roku Ada Lovelace opublikowała w renomowanym czasopiśmie naukowym artykuł będący tłumaczeniem z języka francuskiego opisu maszyny analitycznej autorstwa włoskiego inżyniera Luigi Menabrei. Co jednak najważniejsze, Ada opatrzyła ten przekład własnymi, obszernymi Notatkami. Jej komentarze do tekstu były trzy razy dłuższe niż oryginalny opis i zawierały niezwykle nowatorskie przemyślenia. Wśród tych notatek znalazł się algorytm obliczania liczb Bernoulliego – uznawany za pierwszy w historii program komputerowy. Algorytm ten został rozpisany w formie tabeli z ciągiem instrukcji i uwag, które określały, jak maszyna Babbage’a mogłaby wyliczyć kolejne wartości liczb Bernoulliego (ważnej sekwencji w teorii liczb). W swoim programie Ada zastosowała koncepcje takie jak pętle (powtarzanie sekwencji rozkazów) oraz podprogramy wywoływane w razie potrzeby – czyli elementy, które pojawiają się we współczesnych językach programowania.

Należy podkreślić, że maszyna analityczna nigdy nie została w pełni zbudowana, a zatem pierwszy program komputerowy Ady Lovelace nie został w praktyce uruchomiony w jej czasach. Mimo to analiza pokazuje, że program ten był poprawny logicznie – gdyby maszyna istniała, prawdopodobnie wykonałaby obliczenia zgodnie z planem Lovelace. Publikacja Ady wzbudziła uznanie ówczesnych naukowców (doceniał ją m.in. Michael Faraday) i sprawiła, że Ada Lovelace jest dziś powszechnie uznawana za pionierkę programowania. Jej wizja wykraczała poza proste obliczenia – już wtedy przewidywała, że komputery w przyszłości mogą służyć nie tylko do liczb, ale też do tworzenia muzyki czy grafiki, jeśli odpowiednio się je zaprogramuje. Była również świadoma ograniczeń: słynny jest jej komentarz, że maszyna nie potrafi niczego tworzyć, a jedynie wykonuje polecenia człowieka (co dziś nazywamy „Twierdzeniem Lovelace” – stwierdzeniem, że komputer zrobi tylko to, co mu zada programista). Na cześć Ady Lovelace Departament Obrony USA nazwał stworzony w latach 80. język programowania Ada – jest to współczesny język używany m.in. w lotnictwie i przemyśle zbrojeniowym. Upamiętnia to fakt, że to właśnie Ada jako pierwsza dostrzegła potencjał drzemiący w programowalnych maszynach.

Narodziny komputerów elektronicznych i początki programowania w praktyce

Po pionierskich pomysłach Babbage’a i Lovelace minęło ponad sto lat, zanim skonstruowano pierwsze działające komputery elektroniczne. Okres II wojny światowej i lat tuż po wojnie obfitował w wynalazki, które z teorii uczyniły praktykę. Wtedy to powstały pierwsze programowalne komputery – początkowo elektromechaniczne, a następnie elektroniczne – na których można było uruchamiać rzeczywiste programy. Początki programowania w praktyce nie były łatwe: odbywało się bez wygodnych ekranów i klawiatur, a programiści często musieli fizycznie łączyć przewody lub ustawiać przełączniki, by „wprowadzić” program do maszyny. Mimo tych trudności udało się stworzyć urządzenia, które wykonały pierwsze prawdziwe programy komputerowe. Przyjrzyjmy się kilku najważniejszym z tych pionierskich maszyn i ich programom.

Konrad Zuse i pierwsze komputery binarne

W Europie niezależnie od prac angielskich i amerykańskich pionierów, Konrad Zuse – niemiecki inżynier – budował własne maszyny liczące. Zuse, zniechęcony żmudnymi obliczeniami inżynierskimi, postanowił zaprojektować urządzenie, które automatycznie wykona rachunki za niego. Jego pierwsze konstrukcje, oznaczone Z1 i Z2, powstały w drugiej połowie lat 30. XX wieku. Kulminacją tych prac był komputer Z3, ukończony w Berlinie w 1941 roku. Z3 był pierwszym działającym, w pełni automatycznym i swobodnie programowalnym komputerem binarnym. Była to maszyna elektromechaniczna – do wykonywania operacji wykorzystywała tysiące przekaźników elektromagnetycznych. Program dla Z3 zapisywało się na perforowanej taśmie filmowej: dziurki w taśmie reprezentowały kolejne instrukcje dla maszyny. Z3 potrafił wykonywać działania na liczbach zmiennoprzecinkowych i był w stanie automatycznie przechodzić do kolejnych rozkazów, co czyniło go prawdziwym komputerem programowalnym (choć nie posiadał jeszcze wszystkich cech późniejszych komputerów, np. tzw. warunkowego skoku pozwalającego na podejmowanie decyzji w trakcie programu).

Konrad Zuse nie tylko zbudował maszynę, ale także pomyślał o udoskonaleniu procesu programowania. Opracował własny język programowania Plankalkül, uważany za pierwszy projekt języka wysokiego poziomu. Plankalkül (co znaczy „plan kalkulacji”) powstał w latach 1943–1945 i zakładał możliwość zapisu algorytmów w czytelnej dla człowieka formie, z użyciem symboli matematycznych, tablic itp. Był to pomysł wyprzedzający swój czas – niestety Zuse nie miał możliwości wdrożyć Plankalküla w swoich maszynach w trakcie wojny, a świat naukowy poznał tę koncepcję dopiero po latach. Mimo to same komputery Zusego znalazły zastosowanie praktyczne: używano ich podczas wojny do skomplikowanych obliczeń inżynierskich, np. w zakładach lotniczych Henschel do analiz aerodynamicznych (m.in. przy projektowaniu skrzydeł samolotów). Programy uruchamiane na Z3 były zatem jednymi z pierwszych działających programów komputerowych – wykonywały konkretne zadania obliczeniowe, zapisane wcześniej na taśmie perforowanej. Co ciekawe, Zuse przypuszczał, że jego maszyna mogłaby grać nawet w szachy, gdyby odpowiednio ją zaprogramować. Nie zdołał tego udowodnić w tamtym czasie, ale współczesne analizy wskazały, że Z3 teoretycznie mógłby przeprowadzić prostą partię szachów (choć bardzo powoli). Niestety oryginalny Z3 został zniszczony w bombardowaniu Berlina w 1943 roku, jednak dorobek Konrada Zusego przetrwał – po wojnie kontynuował on prace (stworzył m.in. komputer Z4, który trafił na uczelnię w Zurychu), a jego pomysły stały się częścią fundamentów informatyki.

Colossus – tajny komputer do łamania szyfrów

W czasie II wojny światowej rozwój elektroniki umożliwił zbudowanie pierwszych maszyn obliczeniowych na lampach próżniowych. Jednym z najbardziej znaczących, choć przez lata utrzymywanych w sekrecie, był brytyjski Colossus. Colossus powstał w 1943 roku w ośrodku Bletchley Park w Wielkiej Brytanii, a jego celem było łamanie szyfrów generowanych przez niemiecką maszynę Lorenz (używaną do tajnej komunikacji dowództwa III Rzeszy). Colossus nie był komputerem uniwersalnym – zaprojektował go inżynier Tommy Flowers specjalnie do zadania kryptoanalizy. Był jednak programowalny w ograniczonym zakresie poprzez przełączanie kabli i wprowadzanie ustawień na panelach (tzw. programowanie ręczne, bez pamięci elektronicznej). Wyposażony w 1500 lamp elektronowych, Colossus czytał dane z taśmy papierowej z prędkością 5000 znaków na sekundę i wykonywał operacje logiczne, by odszyfrować wrogie wiadomości. Pierwszy egzemplarz Colossusa zaczął pracę w grudniu 1943 roku, a kolejne udoskonalone wersje działały w 1944–1945. Programy uruchamiane na Colossusie to w zasadzie procedury analizy szyfru – sekwencje logicznych operacji porównujących wzorce tekstu zaszyfrowanego. Choć Colossus był maszyną specjalizowaną (nie mógł np. liczyć równań inżynierskich jak Z3 ani być łatwo przeprogramowany do zupełnie innych zadań), odegrał ogromną rolę i jest uważany za pierwszy elektroniczny komputer cyfrowy. Przez wiele lat po wojnie projekt Colossus był ściśle tajny, więc jego istnienie i wkład w historię programowania zostały w pełni docenione dopiero pod koniec XX wieku. Z punktu widzenia historii pierwszych programów – Colossus wykonywał jedne z pierwszych praktycznych programów, choć bardzo wyspecjalizowanych (łamaniem szyfru też rządzi algorytm, a Colossus realizował go szybciej niż człowiek).

ENIAC – pierwsza elektroniczna maszyna ogólnego przeznaczenia

Równolegle do brytyjskich wysiłków, w USA powstawał ENIAC (Electronic Numerical Integrator and Computer). ENIAC zbudowany został w latach 1943–1945 na Uniwersytecie Pensylwanii przez zespół kierowany przez Johna Mauchly’ego i Prespera Eckerta, finansowany przez armię amerykańską. Ukończony tuż po wojnie (oficjalnie zaprezentowany w lutym 1946 roku), ENIAC był pierwszym elektronicznym, w pełni uniwersalnym komputerem cyfrowym. Składał się z niemal 18 tysięcy lamp elektronowych i zajmował ogromną salę – ważył ok. 27 ton. Co oznacza „uniwersalny” w tym kontekście? Oznacza to, że ENIAC mógł zostać zaprogramowany do wykonywania dowolnego rodzaju obliczeń, nie był maszyną dedykowaną jednemu zadaniu. Był na tyle wszechstronny, że określa się go jako maszynę Turinga kompletą (posiadał logiczne instrukcje warunkowe, pętle itp.).

Programowanie ENIAC-a było jednak niezwykle trudne z dzisiejszej perspektywy. Maszyna nie miała pamięci przechowującej program – program wprowadzano poprzez ręczne przełączanie tysięcy wtyczek i przełączników na panelach. Instrukcje realizowane były przez 20 „modułów” kalkulacyjnych, które należało odpowiednio połączyć kablami. Zmiana programu (np. przejście od jednego typu obliczeń do innego) mogła zająć nawet kilka dni żmudnej pracy, polegającej na przepięciu połączeń i ustawieniu setek przełączników zgodnie z nowym schematem. Pierwsze programy komputerowe wykonane na ENIAC-u dotyczyły głównie obliczeń balistycznych – amerykańska armia wykorzystała go do wyliczania tablic trajektorii pocisków artyleryjskich, co przedtem robiono ręcznie lub za pomocą prostszych maszyn. ENIAC potrafił w kilka sekund wykonać obliczenia, które zespołowi ludzi zajęłyby wiele godzin. To pokazuje, jak rewolucyjny był to postęp.

Warto wspomnieć o ludziach, którzy tworzyli te pierwsze programy dla ENIAC-a. Była to grupa sześciu kobiet: Kay McNulty, Betty Jennings, Betty Snyder, Marlyn Wescoff, Fran Bilas i Ruth Lichterman. Te programistki (choć wtedy nie używano jeszcze tego słowa) ręcznie konfigurowały ENIAC, by wykonywał zadane obliczenia. Musiały one doskonale rozumieć zarówno problem matematyczny, jak i architekturę maszyny – w praktyce tworzyły program poprzez fizyczne zestawienie logicznych zależności. Ich praca długo pozostawała niedoceniona, ale dziś uznaje się je za jedne z pierwszych praktykujących programistów. Programy ENIAC-a nie miały formy kodu źródłowego na papierze, lecz istniały jako zestaw ustawień kabli i przełączników – mimo to były to prawdziwe programy, które mogły automatycznie wykonywać złożone sekwencje operacji. Poza trajektoriami pocisków, ENIAC został szybko zastosowany do innych skomplikowanych problemów obliczeniowych. Już w 1945 roku, tuż przed zakończeniem wojny, zaprogramowano go do wykonania serii obliczeń na potrzeby projektu bomby wodorowej (tzw. projekt Monte Carlo Johna von Neumanna) – był to jeden z pierwszych przykładów wykorzystania komputera do symulacji naukowych.

ENIAC udowodnił potęgę elektroniki – działał tysięce razy szybciej od poprzednich maszyn elektromechanicznych. Jednocześnie jego ograniczenia stały się motywacją do kolejnego kroku w ewolucji komputerów: pomysłu, by program przechowywać wewnątrz pamięci komputera, a nie w kablach czy na zewnętrznej taśmie. Ten koncept, zwany architekturą programu zapisanego, zrewolucjonizował całą informatykę tuż po erze ENIAC-a.

Pierwszy „bug” – anegdota z Harvard Mark I

Zanim przejdziemy do ery komputerów z programami w pamięci, warto przywołać ciekawą historię z początków programowania, która dała początek znanemu terminowi. W 1944 roku w Harvard University powstał Mark I (zbudowany we współpracy z IBM) – olbrzymi kalkulator elektromechaniczny sterowany taśmą perforowaną. Mark I również można zaprogramować za pomocą zestawu instrukcji na taśmie, choć był wolniejszy od elektronicznego ENIAC-a. Przy Mark I pracowała matematyczka Grace Hopper, później znana pionierka oprogramowania. W 1947 roku, gdy Grace Hopper działała przy kolejnym takim komputerze (Mark II), wydarzył się zabawny incydent: komputer zaczął źle działać, a analiza wykazała, że wewnątrz jednej z szaf z przekaźnikami utknął… ćma (nocny motyl), zakłócając działanie przekaźnika. Hopper wydobyła insekta i przykleiła go do dziennika technicznego z dopiskiem „Pierwszy faktycznie znaleziony robak” (ang. bug). Od tego czasu, gdy program działa niepoprawnie, mówimy że ma „bug”, a proces poprawiania błędów nazywamy debugowaniem. Oczywiście, już wcześniej inżynierowie używali słowa „bug” na określenie usterki, ale to właśnie anegdota z dosłownym robakiem unieśmiertelniła ten termin w kontekście informatyki. Grace Hopper zasłynęła później z innych osiągnięć (stworzyła pierwszy kompilator i język COBOL, o czym jeszcze wspomnimy), ale historia pierwszego komputerowego „buga” na zawsze pozostała częścią folkloru programistów.

Era przechowywania programu w pamięci – architektura von Neumanna

Podczas gdy ENIAC wykonywał swoje pierwsze programy, wizjonerzy informatyki pracowali nad ulepszeniem konstrukcji komputerów. Kluczowym usprawnieniem miało być umożliwienie komputerom przechowywania zarówno danych, jak i programu w ich wewnętrznej pamięci. Taka koncepcja oznaczała, że zmiana programu nie wymagałaby już przepinania kabli czy wymiany taśm – wystarczyłoby wczytać nowy zestaw instrukcji do pamięci elektronicznej. Ten pomysł, sformułowany teoretycznie w słynnym raporcie Johna von Neumanna z 1945 roku, dał początek tzw. architekturze von Neumanna, na której opiera się większość komputerów do dziś. Architektura von Neumanna zakłada, że komputer składa się z jednostki arytmetyczno-logicznej, jednostki sterującej, pamięci, urządzeń wejścia/wyjścia – a program (instrukcje) i dane są trzymane w tej samej pamięci i traktowane w podobny sposób. Taka jednolita pamięć pozwala komputerowi modyfikować swój program (np. skakać do różnych instrukcji warunkowo) i czyni programowanie znacznie bardziej elastycznym.

Aby ta idea stała się rzeczywistością, potrzebna była technologia szybkiej pamięci elektronicznej. Tuż po wojnie różne zespoły badawcze w USA i Wielkiej Brytanii przystąpiły do budowy pierwszych komputerów z programem przechowywanym w pamięci. Pionierskie projekty to m.in. EDVAC w USA (następca ENIAC-a, projektowany już w 1944–45 według nowych zasad), ACE w Wielkiej Brytanii (projektowany przez Alana Turinga w laboratorium NPL) oraz prototypowe maszyny na uniwersytetach w Manchesterze i Cambridge.

Pierwszy uruchomiony program w pamięci – Manchester Baby (1948)

Zaszczyt pierwszego komputera, który z powodzeniem wykonał program zapisany w pamięci, przypadł konstrukcji brytyjskiej. Była nią tzw. Manchester Baby (pełna nazwa: Small-Scale Experimental Machine) na Uniwersytecie w Manchesterze. Baby była doświadczalnym, niewielkim komputerem zbudowanym przez Frederica Williamsa, Toma Kilburna i Geoffa Tootilla. 21 czerwca 1948 roku Baby po raz pierwszy w historii uruchomiła program komputerowy z pamięci elektronicznej. Program ten składał się z zaledwie 17 instrukcji i służył do obliczenia najwyższego dzielnika liczby $2^{18}$ (czyli 262144). Kod został wprowadzony do pamięci maszyny (pamięcią tą była nowatorska wtedy tzw. tubka Williamsa – rodzaj pamięci CRT, gdzie bity były przechowywane jako punkty na ekranie oscyloskopowym). Po uruchomieniu, komputer iteracyjnie testował podzielniki liczby 262144, zaczynając od tej liczby i schodząc w dół. Program był pomyślany tak, aby zająć maszynę na dłużej i sprawdzić jej niezawodność – dzielenie zrealizowano przez wielokrotne odejmowanie (co było operacją, jaką hardware Baby bezpośrednio wspierał). Baby pracowała przez około 52 minuty, wykonując około 3,5 miliona operacji, po czym poprawnie podała wynik: 131072 (największy właściwy dzielnik 262144). Tym samym udowodniono, że pamięć elektroniczna może z powodzeniem służyć do przechowywania i wykonywania programów. Manchester Baby była konstrukcją eksperymentalną (miała pamięć jedynie 32 słów po 32 bity i bardzo ograniczony zestaw rozkazów), ale zawierała wszystkie podstawowe elementy nowoczesnego komputera. Wkrótce po tym sukcesie zespół w Manchesterze przystąpił do budowy większej maszyny – Manchester Mark I – już bardziej praktycznego komputera, który stał się też wzorem dla pierwszego komercyjnego komputera na świecie (Ferranti Mark I w 1951 roku).

EDSAC i pierwsze programy użytkowe (1949)

Niemal równolegle postępował projekt na Uniwersytecie Cambridge kierowany przez Maurice’a Wilkesa. Tam skonstruowano komputer o nazwie EDSAC (Electronic Delay Storage Automatic Calculator), który po raz pierwszy został uruchomiony w maju 1949 roku. EDSAC był oparty na architekturze von Neumanna (inspirowanej projektem EDVAC z USA) i korzystał z lamp elektronowych oraz pamięci opartej na liniach opóźniających (rtęciowych rurach ultradźwiękowych). To właśnie EDSAC jest uznawany za jeden z pierwszych w pełni użytecznych komputerów z programem w pamięci – służył naukowcom w Cambridge do różnych obliczeń inżynierskich i naukowych. Co więcej, to na EDSAC-u zostały uruchomione jedne z pierwszych prawdziwych programów użytkowych.

Pierwszym programem wykonanym na EDSAC-u (tuż po jego uruchomieniu) było obliczenie tablicy kwadratów liczb od 0 do 99. Trwało to zaledwie kilka sekund, a rezultat (kwadraty tych liczb) został wydrukowany – tym samym pokazano praktyczną przydatność maszyny. W ciągu 2 minut i 35 sekund EDSAC wyliczył wartości, które w sposób tradycyjny zajęłyby o wiele więcej czasu. W kolejnych tygodniach powstawały następne programy: m.in. program generujący listę liczb pierwszych (napisany przez Davida Wheelera) czy program do rozwiązywania równań i funkcji specjalnych. Już w 1949 roku podczas konferencji naukowej zaprezentowano wyniki działania EDSAC-a, co wzbudziło ogromne zainteresowanie środowiska akademickiego.

Ciekawostką jest, że na EDSAC-u powstała także pierwsza gra komputerowa – o czym więcej w dalszej części przewodnika. Sam EDSAC stał się pionierem w innej kwestii: używano w nim jednego z pierwszych assemblerów, czyli programów tłumaczących kod symboliczny na kod maszynowy. Maurice Wilkes opracował tzw. „initial orders” – zestaw początkowych rozkazów EDSAC-a, który pozwalał programistom pisać kod za pomocą mnemotechnicznych skrótów (jak ADD dla dodawania, SUB dla odejmowania itp.), zamiast ręcznie wpisywać długie ciągi 0 i 1. Był to zalążek późniejszych języków asemblerowych i wielkie ułatwienie w programowaniu maszyny.

Pierwsze komputery komercyjne i ich programy

Sukcesy maszyn takich jak Manchester Mark I i EDSAC pokazały, że komputery mogą być użyteczne poza laboratorium. Rozpoczęła się era komputerów komercyjnych – budowanych dla instytucji rządowych i firm. Pierwszym tak zwanym komercyjnym, seryjnie dostępnym komputerem był wspomniany Ferranti Mark I (wprowadzony w Wielkiej Brytanii w 1951), zaraz po nim amerykański UNIVAC I (Universal Automatic Computer). UNIVAC I został zbudowany przez tę samą ekipę, co wcześniej ENIAC, i dostarczony w 1951 roku do Biura Spisów Ludności USA. Jego oprogramowanie umożliwiło m.in. szybkie przetwarzanie danych spisowych. UNIVAC zasłynął również z tego, że w 1952 roku posłużył do prognozowania wyniku wyborów prezydenckich w USA – jego program analityczny, oparty na częściowo wprowadzonych danych, poprawnie przewidział zwycięstwo Dwighta Eisenhowera, zadziwiając widzów telewizyjnych (był to jeden z pierwszych pokazów możliwości komputerów dla szerokiej publiczności).

Kolejne wczesne zastosowanie komputera w biznesie miało miejsce w Anglii, gdzie firma J. Lyons & Co. (prowadząca sieć herbaciarni) sfinansowała rozwój maszyny LEO. LEO I (Lyons Electronic Office I) uruchomiony w 1951 roku był oparty na konstrukcji EDSAC, ale dostosowany do potrzeb biurowych. Już w 1953 roku LEO I został użyty do przetwarzania danych płacowych – komputeryzując po raz pierwszy dział księgowości. Program naliczający płace pracowników, działający na LEO, był jednym z pierwszych biznesowych programów komputerowych. Okazało się, że komputer liczył pensje w 1,5 sekundy, podczas gdy doświadczonemu księgowemu zajmowało to 8 minut. To udowodniło praktyczną wartość programów komputerowych w świecie poza wojskiem i nauką.

We wczesnych komputerach komercyjnych programy wprowadzało się najpierw poprzez karty perforowane lub taśmy papierowe. Firmy takie jak IBM rozwijały urządzenia wejścia/wyjścia – dziurkarki do kart, czytniki kart, drukarki – dzięki którym można było zapisać program na kartach i wczytać go do pamięci maszyny, a wyniki wydrukować. Standardem stały się karty Holleritha (80-kolumnowe karty perforowane), na których programiści zapisywali kod swoich programów. Komputer po wczytaniu talii takich kart wykonywał zapisane instrukcje. Ten sposób programowania przetrwał aż do lat 70. XX wieku w dużych systemach mainframe. Pierwsze programy komercyjne zajmowały często grube stosy kart – każdy wiersz kodu to jedna karta. Błąd w jednej karcie mógł zawiesić działanie programu, stąd programiści musieli działać niezwykle uważnie.

Podsumowując ten okres: do początku lat 50. XX wieku ludzkość przeszła drogę od abstrakcyjnych pomysłów Ady Lovelace do działających maszyn, które potrafiły wykonywać programy z pamięci i rozwiązywać rzeczywiste problemy – naukowe, wojskowe, biznesowe. Kolejnym wielkim krokiem w historii pierwszych programów było uczynienie samego procesu programowania bardziej przystępnym dla człowieka. To prowadzi nas do narodzin pierwszych języków programowania.

Pierwsze języki programowania

W początkach komputerów programowanie odbywało się wprost w języku maszynowym – ciągiem liczb, które oznaczały kody operacji i dane. Było to nie tylko trudne, ale i podatne na błędy. Szybko pojawiła się potrzeba opracowania wygodniejszych metod tworzenia programów. Pierwsze języki programowania powstawały już w latach 40. i 50., początkowo jako zbiory uproszczonych symboli zastępujących liczby instrukcji (asemblery), a później jako zupełnie nowe, „ludzkie” języki wysokiego poziomu, zbliżone składnią do matematyki lub języka angielskiego. Przyjrzyjmy się, jakie były najwcześniejsze języki i narzędzia, które zrewolucjonizowały sztukę programowania.

Assembler – od kodu maszynowego do symbolicznego

Za pierwszy krok w stronę ułatwienia programowania można uznać wprowadzenie tzw. języka asemblera. Asembler to nie jeden konkretny język, ale koncepcja polegająca na przypisaniu czytelnych dla człowieka symboli poszczególnym rozkazom maszynowym. Na przykład zamiast pamiętać, że kod maszynowy 11011010 oznacza dodawanie, programista mógł napisać po prostu ADD. Program zwany assemblerem tłumaczył później te mnemotechniczne instrukcje na właściwe kody binarne, które rozumie procesor. Pierwsze proste asemblery istniały już dla EDSAC-a (Maurice Wilkes stworzył listę symbolicznych kodów, jak wspomniano wyżej), a także dla amerykańskiego EDVAC-a i innych maszyn z lat 50. W 1949 roku w Cambridge David Wheeler opracował program, który wielu uznaje za pierwszy kompletny assembler – umożliwiający użycie symbolicznych nazw rozkazów oraz adresów pamięci w programie dla EDSAC. Dzięki assemblerowi programowanie stało się odrobinę bardziej zrozumiałe i mniej czasochłonne, choć nadal programista musiał myśleć na niskim poziomie abstrakcji (w kategoriach rejestrów, adresów i instrukcji procesora).

Kolejnym usprawnieniem były biblioteki podprogramów – już w latach 50. istniały zbiory gotowych fragmentów kodu (np. procedury matematyczne), które można było dołączać do swoich programów bez pisania od zera. Jednak prawdziwa rewolucja przyszła wraz z językami wysokiego poziomu.

FORTRAN – pierwszy język wysokiego poziomu

W 1954 roku zespół w firmie IBM pod kierunkiem Johna Backusa rozpoczął prace nad językiem, który miał ułatwić programistom tworzenie skomplikowanych obliczeń naukowych. Efektem był FORTRAN (FORmula TRANslator), ukończony w 1957 roku – powszechnie uważany za pierwszy szeroko używany język programowania wysokiego poziomu. FORTRAN pozwalał pisać programy używając notacji zbliżonej do matematycznej. Na przykład można było wprost zapisać formułę Y = N^2 + 5*X - 7 zamiast ręcznie kodować ciągu instrukcji dodawania, mnożenia i potęgowania. Było to możliwe dzięki istnieniu kompilatora – programu, który tłumaczył kod napisany w FORTRAN-ie na kod maszynowy zrozumiały dla komputera. Kompilator FORTRAN (także autorstwa zespołu Backusa) sam był sporym osiągnięciem, gdyż musiał optymalizować wygodny dla człowieka kod na wydajne instrukcje maszynowe.

FORTRAN od razu zyskał ogromną popularność w środowiskach naukowych i inżynierskich. Był idealny do zadań takich jak obliczenia numeryczne, analiza danych, symulacje fizyczne. Programy w FORTRAN-ie były dużo krótsze i czytelniejsze niż ich odpowiedniki w asemblerze. Można powiedzieć, że FORTRAN zainicjował epokę nowoczesnego programowania – programista mógł skupić się bardziej na formule i algorytmie, a mniej na detalach sprzętowych. Co ciekawe, FORTRAN jest tak udanym językiem, że jego kolejne wersje są używane do dziś w zastosowaniach obliczeniowych (to prawdopodobnie najstarszy wciąż stosowany język programowania).

COBOL – język biznesu

Wkrótce okazało się, że inne dziedziny także potrzebują swoich wyspecjalizowanych języków. W szczególności sektor biznesowy i administracja chciały wykorzystywać komputery do przetwarzania danych, raportów, księgowości – a więc do zadań gdzie manipuluje się dużą ilością danych w formacie tekstowo-liczbowym. W 1959 roku, z inicjatywy rządu USA i przy udziale firm komputerowych, powstał język COBOL (COmmon Business Oriented Language). Jedną z głównych osób zaangażowanych w jego stworzenie była Grace Hopper – ta sama, która lata wcześniej tropiła pierwszego „buga”. COBOL został zaprojektowany tak, by przypominał język angielski – składnia jest bardzo opisowa, zdania programistyczne wyglądają niemal jak zwykłe zdania: np. ADD WYNAGRODZENIE TO SUMA_GLOWNA GIVING RAZEM. Celem twórców COBOL-a było, aby kod był czytelny dla osób nietechnicznych, np. menedżerów. COBOL okazał się strzałem w dziesiątkę dla zastosowań biznesowych: przez dekady używano go w bankowości, ubezpieczeniach, administracji rządowej do pisania systemów księgowych, ewidencyjnych, rozliczeniowych. Był tak popularny, że szacuje się, iż w pewnym momencie większość wszystkich kodów na świecie stanowiły programy COBOL. W kontekście pierwszych programów warto zauważyć, że COBOL to jeden z pierwszych języków, gdzie program nie jest ciągiem zagadkowych symboli, lecz przypomina czytelny raport – to kierunek, który później rozwinął się w wielu nowoczesnych językach.

Lisp i początki sztucznej inteligencji

Również w latach 50. narodziła się dziedzina sztucznej inteligencji (AI), a wraz z nią zapotrzebowanie na języki lepiej nadające się do przetwarzania symboli, list, drzew i nieliniowych struktur danych. W 1958 roku John McCarthy opracował język Lisp (LISt Processing). Lisp był drugim (po Fortranie) wysokopoziomowym językiem, który przetrwał do dziś. Charakteryzowała go odmienna filozofia – zamiast nastawienia na formuły matematyczne, Lisp operował na listach symboli i umożliwiał łatwe tworzenie funkcji, rekurencji i dynamicznych struktur danych. Zyskał zastosowanie w badaniach nad AI, ponieważ dobrze nadawał się do tworzenia programów uczących się, analizujących język naturalny czy prowadzących wnioskowanie logiczne. Pierwsze programy sztucznej inteligencji często powstawały właśnie w Lispie. Przykładowo, we wczesnych latach 60. napisano programy potrafiące rozmawiać z użytkownikiem w ograniczony sposób (takie jak słynna ELIZA – „psychoterapeuta” udający konwersację po angielsku), a także programy rozwiązujące zadania z zakresu twierdzeń logicznych (np. Logic Theorist z 1956, choć ten akurat był napisany w IPL, innym wczesnym języku). Lisp, dzięki swojej elastyczności, stał się rodziną języków wykorzystywanych do dziś w niektórych obszarach (np. w programowaniu funkcyjnym, do sztucznej inteligencji – w postaci dialektów Scheme, Common Lisp).

Inne pionierskie języki

W tym okresie (lata 50. i wczesne 60.) pojawiło się więcej języków programowania: ALGOL (język o bardzo czytelnej strukturze blokowej, stworzony przez międzynarodowy komitet – miał duży wpływ na późniejsze języki), PL/1, BASIC (1964, prosty język edukacyjny dla początkujących), a w 1970 także Pascal (jako narzędzie do nauki programowania strukturalnego). Jednak z punktu widzenia „pierwszych programów” najważniejsze były te opisane powyżej – to one utorowały drogę dla całego bogactwa oprogramowania, które miało nadejść. Dzięki nim programy przestały być domeną wąskiej grupy specjalistów, a zaczęli je pisać także naukowcy czy przedsiębiorcy do swoich celów.

Pierwsze programy w różnych zastosowaniach

We wczesnych dekadach rozwoju informatyki komputery były wykorzystywane nie tylko do poważnych obliczeń wojskowych czy naukowych, ale też do celów rozrywkowych i eksperymentalnych. Choć może się wydawać, że gry komputerowe czy wirusy komputerowe to wynalazki dużo późniejsze, ich zalążki pojawiły się już w pionierskiej erze programowania. Dla pełnego obrazu przygody z pierwszymi programami, przyjrzyjmy się kilku ciekawostkom: pierwszej grze komputerowej, początkowym próbom stworzenia inteligentnych programów oraz pierwszemu „złośliwemu” oprogramowaniu.

Pierwsza gra komputerowa

Pierwsza gra komputerowa powstała wcześniej, niż moglibyśmy przypuszczać. Już w 1952 roku na uniwersytecie w Cambridge młody badacz Alexander „Sandy” Douglas napisał na komputerze EDSAC grę OXO – była to komputerowa wersja kółka i krzyżyka (tic-tac-toe). Gra wyświetlała się na ekranie oscyloskopowym podłączonym do EDSAC-a. Gracz mógł za pomocą telefonu bakelitowego (pełniącego rolę prymitywnego kontrolera) wybrać pole, a komputer stawiał kółko lub krzyżyk, starając się grać perfekcyjnie. OXO umożliwiała rozgrywkę człowieka z komputerem – to prawdopodobnie pierwszy przypadek interaktywnej gry na komputerze z prostą sztuczną inteligencją (program decydował o swoich ruchach). Co prawda OXO nie była szeroko znana (EDSAC stał w laboratorium, nie istniały jeszcze monitory ani sieci, by grę dystrybuować), ale zapisuje się w historii jako pionierski program rozrywkowy.

W kolejnych latach pojawiły się inne eksperymentalne gry. W 1958 roku w USA stworzono Tennis for Two – symulację tenisa działającą na oscyloskopie, opracowaną przez Williama Higinbothama na komputerze analogowym. Z kolei w 1962 roku grupa studentów z MIT napisała na komputerze PDP-1 grę Spacewar! – była to strzelanka kosmiczna dla dwóch graczy, uważana za pierwszą cyfrową grę, która zyskała większą popularność wśród społeczności komputerowej (program Spacewar! rozprzestrzeniał się wraz z kopiami PDP-1 do różnych ośrodków). Te wczesne gry dowiodły, że programy komputerowe mogą służyć nie tylko poważnym celom, ale także zabawie. Stanowiły też poligon doświadczalny – programiści uczyli się, jak generować grafikę na ekranie, jak obsługiwać interakcję z użytkownikiem w czasie rzeczywistym, co później przydało się w rozwoju interfejsów i systemów czasu rzeczywistego.

Sztuczna inteligencja – pierwsze programy uczące się i rozmawiające

Idea tworzenia programów zachowujących się inteligentnie fascynowała ludzi od zarania informatyki. Alan Turing już w 1950 roku rozważał kryteria, kiedy można uznać komputer za myślący (słynny test Turinga). W połowie lat 50. oficjalnie narodziny dziedziny AI ogłoszono na konferencji w Dartmouth (1956), ale pierwsze programy AI powstawały tuż przed i tuż po tej dacie.

Jednym z pierwszych był Logic Theorist (1956) stworzony przez Allena Newella i Herberta Simona. Program ten potrafił dowodzić twierdzenia logiczne – na wejściu otrzymywał założenia i tezy do udowodnienia z rachunku logiki, a następnie metodą heurystycznego przeszukiwania sam znajdował dowód. Logic Theorist udowodnił kilka twierdzeń z „Principia Mathematica” Whiteheada i Russella, w tym jedno w sposób nawet elegantszy niż oryginalni autorzy – to było sensacyjne osiągnięcie jak na tamte czasy, pokazujące, że program może wykonywać czynność kojarzoną z ludzką inteligencją (dowodzenie matematyczne).

Innym wczesnym przykładem jest program do gry w warcaby napisany przez Arthura Samuela (od lat 50. rozwijany na komputerach IBM). Program Samuela nie tylko grał, ale też uczył się na podstawie rozegranych partii, udoskonalając swoją strategię – był to jeden z pierwszych przykładów machine learning. Już w 1962 roku program ten potrafił pokonać przeciętnego amatorskiego gracza w warcaby, co wówczas uznano za spory sukces AI.

Wspomniana wcześniej ELIZA (powstała ok. 1966 roku, autor Joseph Weizenbaum) to z kolei przykład pierwszego chatbota – programu udającego człowieka w konwersacji. ELIZA symulowała psychoterapeutę prowadzącego niezobowiązujące rozmowy z pacjentem. Mechanizm działania był prosty: program wyszukiwał w wypowiedzi użytkownika słowa kluczowe i według schematu generował pytania pogłębiające (np. użytkownik: „Czuję się przygnębiony”, ELIZA: „Dlaczego czujesz się przygnębiony?”). Mimo prostoty, wielu użytkowników miało wrażenie, że komputer faktycznie ich rozumie – co było ciekawym eksperymentem na polu interakcji człowiek-maszyna. ELIZA była napisana w języku Lisp i zapoczątkowała całą rodzinę późniejszych programów dialogowych.

Te wczesne programy AI pokazały, że komputerowe algorytmy mogą robić znacznie więcej niż liczyć kolumny cyfr – mogą grać, prowadzić rozmowę czy samodzielnie ulepszać swoje działanie. Oczywiście ich możliwości były skromne w porównaniu z dzisiejszą sztuczną inteligencją, ale stanowiły pierwsze programy eksplorujące pojęcie inteligentnego zachowania.

Pierwszy wirus komputerowy

Na koniec mniej chwalebny, ale interesujący wątek: pierwsze złośliwe oprogramowanie. Gdy tylko komputery zaczęły się komunikować w sieciach, a użytkownicy dzielili się programami, pojawiła się możliwość pisania kodu, który samodzielnie się rozprzestrzenia i ingeruje w działanie systemów – czyli wirusów komputerowych. Pierwszym odnotowanym przypadkiem takiego programu był Creeper, napisany w 1971 roku w środowisku eksperymentalnej sieci ARPANET (prekursora internetu). Creeper nie był destrukcyjny – jego działanie polegało na tym, że przenosił się z komputera na komputer (minikomputery PDP-10 z systemem TENEX) i wyświetlał na ekranie komunikat: „I’m the Creeper: catch me if you can!” („Jestem Creeper, złap mnie, jeśli potrafisz!”). W odpowiedzi na niego stworzono program Reaper, który miał za zadanie wytropić i usunąć Creepera – był to zatem pierwszy antywirus. Choć Creeper miał charakter żartu, pokazał koncept wirusa komputerowego w praktyce.

W kolejnych latach powstały bardziej szkodliwe wirusy, zwłaszcza wraz z popularyzacją mikrokomputerów w latach 80. Pierwszym wirusem na komputery osobiste (PC) był prawdopodobnie Brain z 1986 roku, napisany przez braci z Pakistanu – infekował dyskietki systemu MS-DOS, zmieniając sektor rozruchowy. Wirus Brain rozprzestrzenił się globalnie i zapoczątkował erę konieczności ochrony oprogramowania przed złośliwym kodem. Jednak to już lata znacznie późniejsze niż czasy „pierwszych programów”. Wspominamy Creepera jako ciekawostkę: nawet w romantycznym okresie początków programowania znalazł się „figlarz”, który napisał program samopowielający się. To dowód, że programy komputerowe od początku miały bardzo różnorodne oblicza – od poważnych, przez rozrywkowe, aż po psotne.

Pierwsze programy komputerowe w Polsce

Historia pionierskich programów komputerowych ma również polski rozdział. W Polsce po II wojnie światowej dynamicznie rozwijała się informatyka, choć początkowo zmagała się z ograniczonym dostępem do nowoczesnego sprzętu. Mimo to już w latach 50. powstały w naszym kraju pierwsze komputery i – co za tym idzie – pierwsze programy napisane i uruchomione przez polskich inżynierów.

Za pierwszy polski komputer uznaje się maszynę o nazwie ARR (Analizator Równań Różniczkowych), skonstruowaną w 1954 roku pod kierownictwem prof. Leona Łukaszewicza. ARR był maszyną analogową (czyli działał na innej zasadzie niż komputery cyfrowe typu ENIAC – rozwiązywał równania różniczkowe za pomocą elektrycznych układów analogowych). Choć ARR nie wykonywał programów w postaci sekwencji instrukcji, był ważnym krokiem – pokazał, że Polska może budować zaawansowane urządzenia liczące.

Prawdziwa era programów cyfrowych w Polsce zaczęła się jednak wraz z konstrukcją komputera XYZ. Projekt budowy komputera cyfrowego ruszył pod koniec lat 40. za sprawą grupy entuzjastów skupionych wokół prof. Kazimierza Kuratowskiego i wspomnianego Leona Łukaszewicza. Pierwsze lata to teoretyczne przygotowania – co ciekawe, polscy inżynierowie początkowo nie mieli dostępu do żadnego działającego komputera, więc programować uczyli się „abstrakcyjnie”, na papierze, studiując nieliczne zagraniczne publikacje i dokumentacje. Termin „komputer” zresztą nie był wtedy w użyciu – mówiono o „maszynach matematycznych” lub „mózgach elektronowych”. Zespół, który powstał w ramach Instytutu Maszyn Matematycznych PAN, intensywnie pracował nad własną konstrukcją i wreszcie w 1958 roku uruchomiono pierwszy polski komputer – nazwany XYZ właśnie dlatego, że był prototypem (traktowano tę nazwę jako tymczasową, ale tak już pozostało).

Komputer XYZ był lampową maszyną cyfrową, wzorowaną częściowo na architekturze IBM 701 (amerykańskiego komputera z początku lat 50.). Miał pamięć na lampach oscyloskopowych (linie opóźniające) i działał z szybkością około 1000 operacji na sekundę. Programiści w Zakładzie Aparatów Matematycznych (bo tak nazywała się placówka budująca XYZ) wreszcie mogli uruchomić prawdziwe programy. Jak wyglądało programowanie takiej maszyny? Otóż XYZ nie miał od razu rozwiniętych urządzeń wejścia-wyjścia – początkowo dane i programy wprowadzano za pomocą przełączników i prostych mechanizmów, a wyniki obserwowano np. w postaci migających lampek lub na ekranie oscyloskopu. Jeden z inżynierów wspominał, że praca wyglądała tak: programista siedział przy pulpicie XYZ, naciskał klawisz „dalej” (step), który powodował wykonanie kolejnej instrukcji programu, a następnie na oscyloskopie sprawdzał stan liczników i rejestrów, by zobaczyć efekty. Było to jak ręczne, interaktywne wykonywanie programu – w ten sposób testowano i uruchamiano pierwsze kody.

Pierwsze programy uruchomione na XYZ dotyczyły zadań matematycznych i naukowych, często o znaczeniu praktycznym. W tamtym okresie, podobnie jak w przypadku ENIAC-a, jednym z motywatorów rozwoju komputerów były potrzeby wojskowe – w Polsce także planowano wykorzystać maszyny cyfrowe do przeliczników artyleryjskich (czyli do wyliczania tabel strzelniczych dla artylerii). Pojawiły się też zastosowania cywilne: obliczenia statystyczne, rozwiązania równań itp. Należy wspomnieć, że równolegle tworzono kolejne egzemplarze i ulepszenia – po XYZ przyszły komputery ZAM-2, ZAM-41 i inne, budowane seryjnie od początku lat 60.

Polscy informatycy od początku starali się również rozwijać własne narzędzia programistyczne. Leon Łukaszewicz i jego zespół stworzyli jeden z pierwszych w Europie Środkowo-Wschodniej języków algorytmicznych – SAKO (System Automatycznego Kodowania). SAKO, uruchomiony na komputerze XYZ około 1960 roku, był prostym językiem wysokiego poziomu, który pozwalał pisać programy w przystępniejszej formie niż kod maszynowy. Był przeznaczony do zastosowań naukowo-technicznych i stanowił duże ułatwienie dla użytkowników komputerów w Polsce. Można powiedzieć, że SAKO to polski odpowiednik wczesnych języków jak Fortran (choć na mniejszą skalę). Umożliwił szybsze tworzenie oprogramowania dla rodzimych maszyn. W kolejnych latach powstały też inne języki i systemy (np. język ALGOL został zaadaptowany na polskie komputery, a później tworzono języki takie jak ALGOL 4 czy OSP).

Ciekawostką językową z tamtego okresu jest fakt, że w oficjalnych dokumentach starano się unikać angielskich nazw. Słowo „komputer” było zastępowane określeniami typu „maszyna elektronowa cyfrowa” lub „maszyna matematyczna”. Również polskie czasopisma popularyzujące naukę wyjaśniały społeczeństwu, że nadchodzi era „mózgów elektronowych” zdolnych wykonywać programy ułożone przez człowieka.

Dzięki wysiłkom polskich inżynierów, już na początku lat 60. w Polsce istniało realne oprogramowanie działające na naszych komputerach – były to jedne z pierwszych programów komputerowych w tej części świata. Wykonywały obliczenia dla nauki (np. wyliczenia do konstrukcji mostów, do badań fizycznych), służyły administracji (choć na szerszą skalę informatyzacja przyszła dopiero później) oraz oczywiście celom wojskowym. Historia pierwszych programów w Polsce pokazuje, że mimo ograniczonych środków, zdołaliśmy dołączyć do światowej rewolucji informatycznej już na jej starcie.

Dziedzictwo pierwszych programów i rozwój informatyki

Od czasów Ady Lovelace i jej teoretycznego algorytmu, przez uruchomienie pierwszych programów na maszynach lat 40. i 50., minęło już wiele dekad. Pierwsze programy komputerowe – choć skromne pod względem liczby instrukcji czy wykonywanych zadań – zapoczątkowały erę, w której programowanie stało się jedną z najważniejszych aktywności technicznych ludzkości. Każdy współczesny system operacyjny, każda aplikacja mobilna czy gra komputerowa ma swoje korzenie w tamtych pionierskich dokonaniach.

Dziedzictwo pierwszych programów to przede wszystkim wypracowanie fundamentalnych koncepcji: przechowywanie programu w pamięci, używanie języków programowania, tworzenie struktury danych, debugowanie, a nawet dzielenie się oprogramowaniem z innymi. Wiele terminów i idei zrodzonych w tamtych czasach przetrwało do dziś. Określenia takie jak bug, kompilator, assembler, pętla, podprogram – wywodzą się właśnie z doświadczeń lat 40. i 50. Również niektóre języki mają rodowód sięgający początków informatyki (FORTRAN i COBOL wciąż są używane w swoich niszach, Lisp również).

Patrząc na współczesne programowanie, łatwo zauważyć ogromny postęp: dzisiejsze programy mogą liczyć miliony linii kodu, działają na niezliczonych urządzeniach jednocześnie, a tworzą je zespoły programistów z pomocą zaawansowanych narzędzi. Jednak podstawy ukształtowane przez pierwsze programy pozostały takie same – nadal piszemy algorytmy (choć w znacznie nowocześniejszych językach), które następnie komputery dokładnie i mechanicznie wykonują.

Warto też docenić pionierów: pionierki i pionierów programowania, którzy często w atmosferze eksperymentu i intelektualnej przygody wypracowali metody, bez których nie byłoby dzisiejszego świata IT. Ada Lovelace, Konrad Zuse, John von Neumann, Grace Hopper, John Backus, Maurice Wilkes, Alan Turing i wielu innych – to dzięki nim programy komputerowe wyszły z fazy ciekawostki i stały się fundamentem współczesnej technologii.

Na zakończenie tej podróży przez historię pierwszych programów komputerowych można pokusić się o refleksję: czy ci pierwsi programiści przewidywali, jak daleko rozwinie się ich dziedzina? Ada Lovelace marzyła o maszynach tworzących muzykę – i dziś komputerowe syntezatory są codziennością. Pionierzy z lat 40. pewnie nie wyobrażali sobie miliardów komputerów w kieszeniach ludzi (smartfonów) ani internetu łączącego cały świat – ale to właśnie ich praca utorowała drogę do tych osiągnięć. Każdy, kto dziś uczy się programowania, zaczyna od prostych programów – być może wypisania na ekranie „Hello, world”. W pewnym sensie to echo pierwszych programów sprzed ponad 70 lat, które też były z pozoru proste (wypisanie ciągu liczb, zagranie w kółko i krzyżyk, obliczenie tablicy strzeleckiej), a jednocześnie brzemienne w skutki dla przyszłości. Pierwsze programy komputerowe były skromnymi krokami ludzkości w nowy świat – okazały się one jednak wielkim skokiem ku erze informacji, w której obecnie żyjemy.