Encyclopadia Britannica definiuje program komputerowy jako „1) szczegółowy plan lub procedurę 2) rozwiązania problemu 3) za pomocą komputera; konkretnie – niedwuznaczną, uporządkowaną sekwencję poddających się obliczeniom instrukcji koniecznych do osiągnięcia takiego rozwiązania.
Ad. 1) Ten aspekt programu komputerowego wynika z wyrażenia go w języku programowania, a więc w sformalizowanym języku symbolicznym wyrażającym zestaw instrukcji dla komputera”. Jest to – inaczej niż np. kod Morse”a lub cyfrowa postać treści komunikatu przesyłanego faksem – język służący do instruowania komputera przy wykonywaniu określonego zadania, a nie język służący do komunikowania treści między ludźmi. W związku z rozwojem języków programowania komputerowego mówi się zwykle o języku maszynowym, języku asemblera i językach wyższego poziomu. Niektórzy informatycy wskazują niekiedy w dyskusjach na to, że język nie będzie językiem programowania, jeśli nie będzie spełniał kryterium tzw. kompletności w sensie Turinga”4. Kryterium kompletności w sensie Turinga mieści się w zakresie znajdującej się na pograniczu informatyki i matematycznej logiki teorii obliczalności. Jednak inni informatycy uważają, że to dodatkowe kryterium bez ważnej przyczyny zawęża zakres pojęcia języka programowania.
Ad. 2) „Rozwiązanie problemu” nie jest jasnym elementem definicyjnym. W grę wchodzą co najmniej trzy możliwości: a) rozwiązanie zewnętrznego problemu, b) wewnętrznego lub c) zapewnienie działania urządzenia.
a) Rozwiązanie problemu zewnętrznego może polegać np. na umożliwieniu opracowania i wydrukowania tekstu, umożliwieniu przeprowadzenia złożonych kalkulacji, oczyszczeniu systemu komputerowego z wirusów itp.
b) Rozwiązanie problemu wewnętrznego może polegać na zapewnieniu współpracy wewnętrznych elementów programu komputerowego lub współpracy danego programu komputerowego z innymi programami komputerowymi. Nie jest to teza odkrywcza, bo już kilkanaście lat temu dostrzegano elastyczny i złożony charakter programu komputerowego „, który jest zbudowany w ten sposób, że dodanie funkcji jest możliwe i nie powoduje utraty użyteczności programu, przy czym wykonalne bywa także odejmowanie funkcji. Spostrzeżenie, że rozwiązanie problemu współpracy poszczególnych elementów programu komputerowego samo w sobie stanowi problem, zyskało z czasem na znaczeniu, ponieważ rozwój języków programowania przebiegał w kierunku usprawnienia struktury programu komputerowego. Mianowicie nowsze języki programowania to tzw. języki obiektowe, oparte na kapsułkowaniu danych. Kapsułkowanie danych polega na tym, że „całość programowania jest dokonywana poprzez tzw. obiekty. Obiekt ( … ) stanowią dane razem z procedurami (segmentami programu) przeznaczonymi do działania na tych danych. Kapsułkowanie odnosi się do faktu, że dane obiektu są dostępne tylko przez metody (procedury), jakie zostały postawione do dyspozycji. Programowanie dokonuje się przez kreowanie obiektów które wysyłają sobie nawzajem wiadomości, takie zadania mogą być wykonane wspólnie przez uruchamianie nawzajem swoich metod””. Przy tak rozwiniętej strukturze języka programowania rozwiązanie wewnętrznego problemu swoistej interoperacyjności niejednokrotnie jest samo w sobie twórcze i wymaga stworzenia obszernego ciągu instrukcji.
c) W grę wchodzi także rozwiązanie problemu w sensie sposobu działania urządzenia. Właśnie taki problem rozwiązują tzw. mikrokomputery i procesory wbudowane działające na podstawie „wdrukowanych” w nie elementów informatycznych.
Przyjęcie, że tak naprawdę w definicji programu komputerowego chodzi jedynie o tę pierwszą możliwość (rozwiązanie zewnętrznego problemu) zawężałoby zakres pojęcia „program komputerowy” w stosunku do objęcia tym pojęciem również pozostałych dwóch możliwości (rozwiązanie problemu wewnętrznego, zapewnienie funkcjonowania urządzenia).
Ad. 3) Komputer to w zasadzie urządzenie do przetwarzania, przechowywania i wyświetlania informacji. Kiedy omawia się genezę komputera, wskazuje się m.in. na liczydło, a w XX w. – na kalkulator. Komputer osobisty (PC – ang. Personal Computer) niewątpliwie odpowiada klasycznej, trójelementowej definicji komputera jako urządzenia do przetwarzania, przechowywania i wyświetlania danych, bo te właśnie funkcje spełniane są przez typowe elementy komputera osobistego (procesor, pamięć, monitor)”. Wśród najnowszych komputerów wskazuje się jednak na mikrokomputery, tj. „małe komputery, zbudowane wokół mikroczipu”, a przede wszystkim na wbudowane procesory (ang. embedded processors) będące „małymi komputerami, które używają prostych mikroprocesorów do kontroli funkcji elektrycznych i mechanicznych. (…) Wbudowane procesory pomagają kontrolować automatykę lotniczą i przemysłową, a także są powszechne w samochodach oraz zarówno w dużych, jak i małych urządzeniach gospodarstwa domowego. Ich konkretny rodzaj, procesor sygnału cyfrowego (ang. digital signal procesor – DSP) stał się aktualnie tak rozpowszechniony, jak mikroprocesor. Jest używany w telefonach komórkowych, telefonach cyfrowych, modemach kablowych i części wyposażenia stereo”. Także niezbędne do przesytu danych w Internecie routery i serwery przetwarzają i przechowują dane, wykorzystując procesor i pamięć, podobnie jak konieczne do odbioru telewizji cyfrowej dekodery. Wynika z tego, że najszerszy sposób rozumienia komputera nakazuje objąć tym pojęciem cały zestaw urządzeń wykorzystywanych w telekomunikacji i w życiu codziennym. Dochodzi się do wniosku, że istotą współczesnego komputera jest przetwarzanie danych, natomiast możliwość podłączenia urządzeń peryferyjnych jest drugorzędna.
[powyższy post ukazał się pierwotnie jako fragment publikacji w ZNUJ w 2010 r., której współautorem jest informatyk z PAN, dr Łukasz Maśko; post zawiera cytaty z następujących źródeł:
- Hasło „computer program” w: Encyclojxedia Britannica Online, na stronie: http://search.eb.com/eb/article-9025053 (odczyt: 22.07.2009 r.): a detailed plan or procedure for solving a problem with a computer; more specifically, an unambiguous, ordered sequence of computational instructions necessary to achieve such a solution.
- D. Hemmendinger, hasło „computerprogramming language”, w: Encyclopcedia Britannica Online, na stronie: http://search.eb.com/eb/article-9025054.
- http://pl.wikipedia.org/wiki/Kompletrio%C5%9B%C4%87_Turinga.
- hasło „Turing Vollstaendigkeit” na stronie: http://de.wikipedia.orglwiki/Turing-yollst%C3%A4ndigkeit, „Berechenbarkeitstheorie” na stronie: http://de.wikipedia.org/wiki/Berechenbarkeitstheorie, a także „teoria obliczalności” na stronie: http://pl.wikipedia.org/wiki/Teoria_obliczalno%cS%9Bci.
- J Barta, R. Markiewicz, Główne problemy prawa komputerowego, s. 35 (gdzie jest mowa o opartych na własnej idei subprogramach w ramach programu), s. 39 (o interfejsie będącym częścią programu komputerowego), a także 5. 43 (o zestawach instrukcji).
- G.G. Belford, hasło computer science, w: Encyclopedia Britannica Online, na stronie: http://search.eb.com/eb/ article-9109626.
- P.A. Freiberger, M.R. Swaine, hasło computer, w: Encyclopedia Britannica Online, na stronie: http://search.eb.com/ eb/article-91 17728.]