Twoja wyszukiwarka

ANETA RELUGA
KOMPUTEROWA WIEŻA BABEL
Wiedza i Życie nr 9/1997
Artykuł pochodzi z "Wiedzy i Życia" nr 9/1997

WSPÓŁCZESNOŚĆ TO PRZEDE WSZYSTKIM PRODUKCJA MASOWA, SZYBKA KOMUNIKACJA, NIEWYOBRAŻALNE TEMPO ROZWOJU ORAZ KOMPUTER. KILKADZIESIĄT LAT TEMU, KIEDY TECHNOLOGIE KOMPUTEROWE BYŁY JESZCZE W POWIJAKACH, ŻĄDNI SENSACJI DZIENNIKARZE ZACZĘLI NA UŻYTEK MAS TWORZYĆ OKREŚLENIA TYPU "MÓZG ELEKTRONICZNY" CZY "MYŚLĄCA MASZYNA". ALE CZY MASZYNA RZECZYWIŚCIE KIEDYKOLWIEK BĘDZIE MOGŁA MYŚLEĆ BEZ POMOCY CZŁOWIEKA - JEGO PROGRAMISTY?

Historia maszyn liczących jest dłuższa, niż sobie to uświadamiamy. Bezpośrednim przodkiem współczesnego komputera jest poczciwe liczydło, którego wynalezienie zawdzięczamy przypuszczalnie starożytnym Babilończykom.

Już w naszej erze zaczęto budować bardziej skomplikowane arytmometry; nie wszyscy wiedzą, że twórcami takowych byli między innymi Blaise Pascal i Gottfried Leibniz.

Koncepcja komputera, we współczesnym znaczeniu tego słowa, narodziła się w Anglii, w latach dwudziestych minionego stulecia. Charles Babbage, niezwykle uzdolniony absolwent Cambridge, zaprojektował "maszynę różnicową", której idea zawierała wszystkie podstawowe elementy współczesnych komputerów: wprowadzanie programu i danych, przechowywanie danych w pamięci oraz możliwość modyfikacji obliczeń w trakcie pracy. Nowością było pojęcie programu - sekwencji rozkazów, która jest wczytywana do maszyny jednorazowo z późniejszą możliwością wielokrotnego wykorzystania.

Na praktyczną realizację zamysłu Babbage'a przyszło czekać ponad sto lat. Przyjmuje się, że pierwszym komputerem elektromechanicznym był "Mark-1" skonstruowany pod kierunkiem Howarda Aikena, pierwszą zaś maszyną cyfrową z prawdziwego zdarzenia był ENIAC.1

Charles Babbage

ENIAC (Electronic Numerical Integrator And Computer) powstał - przypomnijmy - w Stanach Zjednoczonych na zamówienie wojska. Twórcami pomysłu byli inżynier elektronik John Presper Eckert oraz matematyk John Mauchly; w ubiegłym roku Amerykanie uroczyście obchodzili półwiecze maszyny. Programowanie ENIAC-a nie było łatwe. Dane wprowadzało się ręcznie, cyfra po cyfrze. W tamtych czasach nikt jeszcze nie myślał o języku programowania zbliżonym do naturalnego. Proces wprowadzania danych był podwójnie uciążliwy: po pierwsze, ręczne nastawianie przełączników było niewiarygodnie czasochłonne, po drugie zaś w przypadku jakiejkolwiek pomyłki cały proces trzeba było zaczynać od nowa.

Mauchly (z lewej) i Eckert - twórcy ENIAC-a

Sukces Eckerta i Mauchly'ego powtórzono w wielu krajach. Wprowadzano przy tym pewne innowacje w porównaniu z ENIAC-em - dla przykładu EDVAC wykorzystywał już dwójkowy, nie dziesiętny, system liczenia. Również i w Polsce rozpoczęto prace konstruktorskie. W roku 1950 zbudowano maszynę opartą na przekaźnikach; cztery lata później skonstruowano pierwszy elektroniczny analizator równań różniczkowych. W Zakładzie Maszyn Matematycznych w roku 1958 powstała słynna maszyna XYZ (zespół prof. L. Łukaszewicza), mniej więcej w tym samym czasie zespół prof. A. Kilińskiego z Politechniki Warszawskiej stworzył maszynę UMC-1, a po paru latach w Instytucie Maszyn Matematycznych powstała nie mniej sławna seria maszyn ZAM.2 Wszystkie one miały oprogramowanie - przynajmniej początkowo - w swych językach wewnętrznych. Polegało to na wprowadzaniu do maszyny ciągów binarnych, będących odpowiednio zakodowanymi rozkazami. Ciągi takie były całkowicie niezrozumiałe dla osób "niewtajemniczonych", a dokonywanie jakichkolwiek poprawek sprawiało wiele trudności.

I tak nastąpił powolny z początku, później coraz szybszy, rozwój maszyn cyfrowych. Skonstruowanie tranzystora półprzewodnikowego (Nagroda Nobla w roku 1956 w dziedzinie fizyki dla Bardeena, Bradleya i Shockleya) zapoczątkowało drugą generację komputerów. Od tego to czasu można mówić o językach programowania.

Maszyna różnicowa Babbage'a odtworzona współcześnie

Czym jest język programowania? Według popularnej definicji to specjalnie zaprojektowany język, za pomocą którego można zapisywać algorytmy przetwarzania informacji przeznaczone dla komputera. Istotne jest zdefiniowanie trzech elementów poprawnego języka:

  • alfabetu, czyli zbioru symboli,
  • składni, czyli zbioru reguł tworzenia instrukcji języka,
  • semantyki, czyli zbioru reguł interpretujących.

Ze względu na uciążliwość programowania w języku maszynowym stworzono początkowo ideę języka asemblerowego. Jest on odrębny dla każdej maszyny i stosowany do dzisiaj. Polega na zastąpieniu instrukcji maszynowych ich symbolami, tzw. mnemonikami. O ile więc, przykładowo, rozkaz "przenieś do rejestru A liczbę 1" mógł mieć postać maszynową: 01001011 00000001, o tyle ten sam rozkaz w symbolice procesora 8080 wygląda następująco:
MVI A, 1 (MVI - MoVe Immediate).

Pomysł znacznie ułatwiający życie programistom nie zadowolił jednak bardziej wymagających naukowców. Zadali oni pytanie - jeśli można stworzyć język asemblerowy, to chyba można bardziej ułatwić sobie życie i wymyślić taki język, który będzie w jakimś stopniu zbliżony do języka naturalnego?

Tak narodziła się koncepcja języka wysokiego poziomu - czyli takiego, który będzie odzwierciedlał raczej charakter algorytmu niż jego maszynową realizację. Taki język wymagałby bądź to kompilacji, czyli wcześniejszego tłumaczenia na formę wykonywalną dla danego typu komputera, bądź też interpretacji, czyli tłumaczenia "w locie".

Pierwszym językiem wysokiego poziomu stał się Fortran (FORmula TRANslation). Zaprojektowano go głównie do obliczeń numerycznych. Opracowano go w latach 1954-1956 pod kierunkiem J. Backusa (współtwórcy tzw. notacji Backusa-Naura) w firmie IBM. Język ten, latami podlegający różnorodnym modyfikacjom, jest obecnie w niewielkim zakresie stosowany do obliczeń fizycznych.

Współczesny komputer typu biurkowego

Kilka lat później, w roku 1959 rozpoczęto prace nad językiem, który nadawałby się do przetwarzania danych ekonomiczno-statystycznych. Przyjęta wersja języka nosiła nazwę Cobol (COmmon Business-Oriented Language); jego główną twórczynią była Grace Murray Hopper. Cobol był typowo opisowy, a jego ograniczone zastosowanie prawdopodobnie pogrążyłoby go w mrokach historii informatyki, gdyby nie fakt, że przez długi czas jego stosowanie zdecydowanie popierał Departament Obrony USA. W roku 1960 w Europie zdefiniowano pod kierunkiem P. Naura język przeznaczony, tak jak Fortran, do obliczeń numerycznych, a znany pod nazwą Algol albo
Algol-60. Był on niejako ambitną odpowiedzią Europy na Fortran, niestety, zyskał umiarkowane zainteresowanie.

W tym czasie powstawało też sporo innych języków, które były informatycznymi efemerydami - któż dzisiaj pamięta o językach SAKO,3 Jas, SAS, Stek czy Cemma? Jak łatwo zauważyć, wszystkie powyższe języki, pomimo pewnych ułatwień na korzyść programisty, ciągle pozostawały językami - jak to się mówi niekiedy w żargonie informatycznym - dedykowanymi, to znaczy związanymi bądź z konkretną maszyną, bądź z konkretnym obszarem zastosowań (obliczenia, ekonomia itp.). Wraz z rozwojem technologii komputerowej i powstawaniem kolejnych generacji maszyn cyfrowych zaczęto poszukiwać rozwiązań bardziej ogólnych. I tak w roku 1964 narodził się Basic.

Basic (Beginners' All-purpose Symbolic Instruction Code) na długie lata stał się najpopularniejszym, a zarazem najbardziej krytykowanym językiem programowania. Jego popularność lawinowo wzrastała w czasach upowszechnienia się tanich komputerów domowych (oczywiście, określenie "tani" ma tu znaczenie względne).

Autorzy Basica, profesorowie John G. Kemeny i Thomas E. Kurtz, postanowili stworzyć język dla entuzjastów programowania, co im się w pełni udało - jeszcze kilka lat temu w wielu liceach nauczano Basica na lekcjach informatyki. Był on również w miarę uniwersalny; ze względu na "liniowość" programowania w nim zalicza się go do grupy tzw. języków konwersacyjnych, czyli takich, w których program może być wprowadzany i interpretowany linia po linii. Główną jego wadą był brak tzw. strukturalności, co poważnie utrudniało rozwiązywanie niektórych problemów.

Program w języku Pascal

Pod koniec lat sześćdziesiątych, już w epoce komputerów wykorzystujących układy scalone, powstał w Stanach Zjednoczonych język Logo.4 Miał on zachęcić dzieci do kontaktów z komputerem. Wbrew niektórym opiniom nie był on wcale prymitywny - przeciwnie, jego możliwości pozwalały na zastosowanie go do rozwiązywania problemów związanych z badaniami nad sztuczną inteligencją. Powstało wiele narodowych wersji Logo, w tym również i polska. Jego popularność obecnie jest niewielka, choć odegrał swą rolę w kształtowaniu myśli programistycznej.

Mniej więcej od tego czasu możemy mówić o różnorodności interesów. Z jednej strony trwały prace nad tworzeniem coraz to lepszych, łatwiejszych języków uniwersalnego zastosowania, z drugiej zaś zwiększenie możliwości komputerów drugiej, trzeciej i czwartej generacji wymogło powstanie języków specjalnych zastosowań, takich jak języki symulacyjne, operujące na listach czy wspomagające przetwarzanie logiczne.

Spośród języków uniwersalnych wyróżnić należy Pascala. Został on opracowany przez szwajcarskiego uczonego Niklausa Wirtha na początku lat siedemdziesiątych. Jest typowym językiem strukturalnym - oznacza to, iż pewne problemy, wymagające podjęcia określonych decyzji (w wyniku spełnienia kilku niekoniecznie powiązanych ze sobą warunków), mogą zostać opisane za pomocą jednej procedury, wewnątrz której występować będą tzw. rozgałęzienia i pętle, być może zagnieżdżone. Dzięki zwięzłości i czytelności stosowano go nie tylko do celów edukacyjnych, ale także do tworzenia programów użytkowych i systemowych, szczególnie dla komputerów osobistych.

Program w języku C

Drugim językiem, mającym ogromne znaczenie w historii programistyki, jest język C. Został on zdefiniowany w roku 1972 przez Dennisa Ritchiego, pracownika Bell Laboratories. Język C w sposób niezwykle udany łączy wszystkie najlepsze cechy języka wysokiego poziomu z niektórymi możliwościami udostępnianymi jedynie przez języki asemblerowe. Po drugie zaś, kompilatory C są standardowym wyposażeniem systemów UNIX (pierwsza wersja UNIX-a została napisana właśnie w tym języku), co zapewnia szybki start każdemu programiście, który chce pisać w C. Obecnie większość istniejącego oprogramowania użytkowego i systemowego została napisana w C.

Jedną z ciekawostek w historii programistyki jest język Ada, stworzony dla Departamentu Obrony USA w roku 1979 przez francuski zespół z firmy CII-Honeywell-
-Bull, kierowany przez Jeana Ichbiaha; nazwę swoją zawdzięcza legendarnej już postaci lady Ady Augusty Lovelace, córki lorda G. G. Byrona oraz gorącej propagatorki idei Ch. Babbage'a.

Język ten stał się standardem dla rządu USA i NATO jako zalecany do użycia w realizacji tzw. "misji krytycznych". Jest niezwykle potężny i ma uniwersalne zastosowanie, nie należy jednak do najłatwiejszych i jak dotychczas zyskał sobie popularność w bardzo ograniczonych, elitarnych kręgach naukowców oraz programistów.

Spośród języków specjalizowanych warto wymienić te najbardziej znane: Prolog, Simula i Lisp. Prolog jest językiem o charakterze nienumerycznym i znajduje zastosowanie w pracach nad sztuczną inteligencją, przetwarzaniem symboli i automatycznym dowodzeniem twierdzeń. Simula, język powstały w Norwegii, wykorzystywany jest podczas symulacji wielu złożonych procesów fizycznych, chemicznych, mechanicznych i innych. Lisp (LISt Processing) używany jest natomiast do przetwarzania struktur o charakterze listy.

Komputer PDP-1

Koniec lat osiemdziesiątych i obecne lata przyniosły zasadniczą zmianę w stylu programowania. Z początku wprowadzono i upowszechniono pojęcie obiektu, czyli elementu mającego określone cechy, oraz operacji na obiekcie. Językiem czysto obiektowym jest Smalltalk. Również w istniejących już językach wprowadzono rozszerzenia pozwalające na programowanie z wykorzystaniem obiektów; najbardziej znane jest rozszerzenie języka C, czyli C++. Ogromną popularność zyskał też Visual Basic firmy Microsoft. Obserwujemy także powstanie i rozwój tzw. języków czwartej generacji (typu 4GL), których cechą jest całkowite odcięcie się od maszynowej postaci danych i programu. Służą one głównie do programowania baz danych; trudno zresztą nazwać je językami, gdyż w rzeczywistości sam język stanowi tylko jedno z narzędzi do tworzenia i zarządzania oprogramowaniem. Znanym przykładem będzie tutaj SQL - język, którego odmiany służą do tworzenia aplikacji dla takich baz danych, jak Informix czy dBase. Także Delphi - rozszerzenie języka Pascal o programowanie obiektowe i elementy zbliżone do struktur SQL, dzieło firmy Borland - musi zostać zaliczony do tej grupy.

PDP-1 - konsola sterownicza w zbliżeniu

Historia języków programowania nie jest długa, ale jej bogactwo przewyższa wiele zjawisk, z jakimi mieliśmy dotąd do czynienia. Co będzie dalej? To trudne do przewidzenia. Obecnie stosowane są zarówno na wskroś nowoczesne wersje SQL, jak i "staruszek" Fortran. Programiści - ci profesjonalni, jak i amatorzy - na przemian używają C++ i języków asemblerowych. Informatyk pracujący w dwóch firmach może posługiwać się Prologiem w jednej z nich i Smalltalkiem lub Pascalem w drugiej. Jest wysoce prawdopodobne, że czytelnik - zwłaszcza ten korzystający z Internetu - słyszał także o językach HTML i Java; nie omawiam tutaj tych narzędzi współczesnej informatyki, ponieważ nie są to języki programowania, a wyspecjalizowane języki do tworzenia dokumentów, opisujące ich (nieraz bardzo złożony) wygląd. Nie zmienia to faktu, że i one tworzą "szum w komputerowej wieży Babel"...

Chaos jest jednak tylko pozorny - "w tym szaleństwie jest metoda". Czyż problem nie polega wyłącznie na wybraniu odpowiedniego narzędzia do odpowiednich celów?

Zdjęcia: Internet

1 Są to sprawy dość kontrowersyjne: obecnie pierwszeństwo "w ogóle" przypisuje się niemieckiej maszynie Z-3, stworzonej przez Konrada Zusego, oraz angielskiej maszynie Colossus. Zob. artykuły Bogdana Misia: Pierwsze... nr 7/1997 oraz I stał się ENIAC... nr 4/1996 "WiŻ" (Red.).

2 Maszyna XYZ była modelem laboratoryjnym (przedprototypem) serii ZAM-2.

3 Ten akurat język wart jest przypomnienia; to pierwszy polski język wysokiego poziomu (nazwa jest skrótem od słów System Automatycznego Kodowania), opracowany przez zespół pod kierownictwem prof. dr. (wtedy docenta) Leona Łukaszewicza. Podobnie warto wspomnieć język SAS (System Adresów Symbolicznych), który był rodzajem asemblera i poprzedzał SAKO. Oba języki opracowano dla maszyn XYZ i ZAM-2.

4 Jest to słynny "język żółwia", nazywany tak od symbolu graficznego, którego ruchem po ekranie steruje programista. Stworzyli go słynny dydaktyk Seymour Papert oraz Wallace Feurzeig w MIT.

ANETA RELUGA jest studentką informatyki na Politechnice Gdańskiej. Od dwóch lat stale współpracuje z miesięcznikiem "PC Magazine Po Polsku", gdzie publikuje artykuły fachowe i publicystyczne.