Dualna natura programów komputerowych
Semina
Nr 16
Scientiarum 2017
s. 24–42
DOI: http://dx.doi.org/10.15633/ss.2483
Izabela Bondecka-Krzykowska
Dualna natura
programów komputerowych
Pytając o to, czym jest informatyka, spotykamy się z opinią, że jest
to dyscyplina nauki zajmująca się tworzeniem programów komputerowych. Systemy komputerowe stały się bowiem nieodłączną
częścią naszej codzienności; coraz trudniej wyobrazić sobie rzeczywistość bez różnego typu komputerów i działającego na nich oprogramowania. Powstaje zatem pytanie: czym jest program komputerowy?
Wydaje się, że każdy informatyk wie, co to jest program i w jaki
sposób wpływa on na działanie komputera, wiedzę tę bowiem wykorzystuje w praktyce, tworząc i badając oprogramowanie. Jednak niewielu z nich zdaje sobie sprawę, jak ciekawym bytem jest
program komputerowy z punktu widzenia filozofa. Rozważmy podstawowe kwestie ontologiczne z nim związane, rozpoczynając od
odpowiedzi na to – z pozoru proste – pytanie: czym jest program
komputerowy?
1. Definicje programu komputerowego
Z pojęciem programu (i programowania) stykają się już dzieci
w szkole podstawowej. Przy przeglądaniu szkolnych podręczników
informatyki znajdujemy zazwyczaj określenia programu komputerowego zbliżone do definicji podanej przez Grażynę Kobę:
Dualna natura programów komputerowych
25
Program komputerowy to ułożony w odpowiedniej, logicznie powiązanej kolejności zestaw instrukcji dla procesora mówiących, co ma robić z dostarczonymi informacjami i w jakiej kolejności1.
Definicja ta traktuje program jako ciąg poleceń (instrukcji) dla
komputera (procesora), określających jego zachowanie podczas wykonania programu. Jednak nie każdy taki ciąg skłonni jesteśmy
uznać za program komputerowy – tworzące go instrukcje powinny
bowiem mieć odpowiednią formę. Jakie zatem cechy powinien posiadać ciąg poleceń, by móc być nazwanym programem?
Naturalne wydaje się określenie programu jako sekwencji symboli opisującej obliczenia zgodnie z pewnymi regułami, zwanymi
językiem programowania2. Taka jego definicja w naturalny sposób
rodzi pytania o to, czym jest ów „język” oraz jaki jest jego związek
z samym programem. Najprostszym rozwiązaniem tej kwestii jest
stwierdzenie, że język programowania to zbiór reguł (rozumianych
syntaktycznie) określających m.in. zasady budowania struktury programu oraz sposób tworzenia wchodzących w jego skład instrukcji.
Wydaje się jednak, że jest to zbytnie uproszczenie, sprowadza bowiem program do ciągu napisów, pomijając inne istotne jego aspekty, związane np. z wykonaniem i wykorzystaniem programu.
Można również rozumieć programowanie w sposób czysto pragmatyczny, twierdząc, że jego efekty są narzędziami lub środowiskiem pracy ludzi. Programy tworzy się bowiem w celu rozwiązywania problemów z użyciem komputera. Projektuje się je zatem tak,
by mogły jak najlepiej odpowiadać na potrzeby użytkowników3. Należy jednak pamiętać, że istnieją obiekty nieuznawane powszechnie za programy, które podpadają pod taką definicję. Zapis algorytmu, np. w postaci schematu blokowego czy pseudokodu, może
zawierać instrukcje stworzone dla rozwiązania pewnego problemu
1
G. Koba, Informatyka. Podstawowe tematy. Podręcznik informatyki dla gimnazjum, Wrocław–Warszawa 2009, s. 9.
2
Por. M. Ben-Ari, Understanding Programming Languages, Chichester 2006.
3
Por. C. Floyd, Outline of a Paradigm Change in Software Engineering, w:
Computers and Democracy: A Scandinavian Challenge, ed. G. Bjerknes, P. Ehn,
M. Kyng, K. Nygaard, Hants 1987, s. 191–210.
26
Izabela Bondecka-Krzykowska
przez komputer, ale przecież nie każdy taki zapis skłonni jesteśmy
nazwać programem. Co zatem wyróżnia programy spośród wszystkich ciągów instrukcji?
Poszukując odpowiedzi na to pytanie, możemy odnieść pojęcie
programu do sprzętu, na którym jest on wykonywany. James H. Moore podaje następującą definicję:
Program komputerowy jest zbiorem instrukcji, które komputer może
wykonać (lub co najmniej istnieje efektywna procedura przekształcenia
ich do postaci, którą może on wykonać), by zrealizować zadanie4.
W sformułowaniu tym autor kładzie szczególny nacisk na możliwość wykonania ciągu instrukcji przez maszynę, jaką jest komputer, uzależniając tym samym pojęcie programu od pojęcia komputera. Instrukcje uważane są bowiem za program jedynie wtedy, gdy
może wykonać je maszyna. Algorytm, rozumiany jako ciąg instrukcji,
możemy traktować jako program tylko wtedy, gdy został on przedstawiony w formie umożliwiającej jego wykonanie przez komputer.
Zaletą definicji Moore’a jest to, że pozwala ona na proste odróżnienie dwóch podstawowych pojęć informatyki: algorytmu i programu. Wymaga ona jednak pewnych precyzacji. Wydaje się, że występujące w niej pojęcie „komputer” powinno się ograniczyć do maszyn
obecnie istniejących. W przeciwnym wypadku każdy ciąg instrukcji jest programem, ponieważ nie można wykluczyć możliwości powstania w przyszłości urządzenia odpowiedniego do wykonania tego
ciągu. Jednak przyjęcie tego dodatkowego założenia powoduje, że
pojęcie programu uzależnione jest od istniejących obecnie komputerów – tym samym status obiektu jako programu może ulegać zmianie. Pewne ciągi instrukcji dzisiaj nie są programami (gdyż nie ma
komputerów, na których można je wykonać), ale mogą stać się nimi
w przyszłości. I na odwrót – dawne programy komputerowe dzisiaj
nimi nie są, gdyż nie ma już maszyn, na których działały. Ten zmie4
J. H. Moore, Three Myths of Computer Science, „The British Journal for the
Philosophy of Science” 29 (1978) no. 3, s. 214 (jeśli nie zaznaczono inaczej, tłum.
własne).
Dualna natura programów komputerowych
27
niający się w czasie status obiektów jako programów komputerowych
przeczy powszechnej intuicji związanej z tym pojęciem.
Przedstawione powyżej uwagi dotyczące definiowania programu
komputerowego pokazują, że niełatwo jest określić cechy i status
ontologiczny obiektu nazywanego programem komputerowym. Jest
on jednak bytem niezmiernie ciekawym z punktu widzenia filozofa.
Tradycyjnie w filozofii, wśród wielu rodzajów bytów, wyróżnia
się dwa podstawowe: abstrakcyjne oraz konkretne. Zazwyczaj nie
mamy problemów z zaklasyfikowaniem większości obiektów, z którymi mamy do czynienia na co dzień. Urządzenie, jakim jest komputer, podobnie jak samochód i drzewo, to przykłady bytów konkretnych (fizycznych). Z kolei liczby, zbiory i algorytmy są obiektami
abstrakcyjnymi. Gdzie w tym podziale znajduje się miejsce dla programów komputerowych? Czy programy są obiektami konkretnymi
(związane są bowiem z działaniem komputerów), czy też abstrakcyjnymi (gdyż są zapisem algorytmów)? Rozwiązanie tej kwestii ma
swoje znaczące konsekwencje praktyczne, m.in. prawne, związane
z ich ochroną. Inaczej regulowane są bowiem kwestie ochrony własności w przypadku obiektów fizycznych, a innym prawom podlegają dobra niematerialne. A może programy komputerowe są obiektami o szczególnym statusie, a regulacje prawne z nimi związane
muszą dopiero powstać?
2. Dualna natura programów komputerowych
Rozwiązanie kwestii związanych ze statu (...truncated)