Dualna natura programów komputerowych

Semina Scientiarum, Jan 2017

The paper is devoted to the discussion on ontological status of the computerprograms. The most popular conceptions are presented and critically discussed:programs as concrete abstractions, as quasi-particular objects (similar to musicalpieces), as mathematical objects (of different kinds), and finally – programas digital pattern. Advantages and disadvantages of those approachesare pointed out and some possible solutions are proposed.

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)


This is a preview of a remote PDF: http://yadda.icm.edu.pl/yadda/element/bwmeta1.element.ojs-doi-10_15633_ss_2483/c/2483-2276.pdf
Article home page: http://yadda.icm.edu.pl/yadda/element/bwmeta1.element.ojs-doi-10_15633_ss_2483?q=bwmeta1.element.ojs-issn-2391-6850-year-2017-volume-16;0&qt=CHILDREN-STATELESS

Izabela Bondecka-Krzykowska. Dualna natura programów komputerowych, Semina Scientiarum, 2017, Volume 16, DOI: 10.15633/ss.2483