Ilustracja: Wigglestick, z zasobów Stock.Adobe.com

Sztuka Programowania: Filozoficzne i matematyczne źródła informatyki

 

Źródłem potęgi informatyki nie są zaawansowane rozwiązania technologiczne, lecz abstrakcyjna koncepcja, której istotę można zawrzeć na kartce papieru. Gdyby zatem cywilizowany świat nagle się skończył, ale przetrwałaby taka kartka, dałoby się odtworzyć ideę komputera, choćby nawet przy użyciu kamyków i patyczków.

Tekst: Jakub Jernajczyk
Zdjęcia: (Stock.Adobe.com, Wikimedia.org)

W połowie lat siedemdziesiątych XX w. Donald E. Knuth – jeden z pionierów informatyki, twórca systemu TeX – pisał z nieśmiałym optymizmem, iż potrafi wyobrazić sobie czasy, w których „informatyka i matematyka będą obie szanowanymi dyscyplinami” [Knuth, s. 17]. Słowa te stanowiły wyraz nadziei, że informatyce, która była wówczas bardzo młodą dyscypliną, uda się w końcu uzyskać status poważanej nauki. To co nastąpiło w kolejnych dekadach, zapewne wielokrotnie przerosło przypuszczenia uczonego. Choć matematyka nie straciła nigdy zasłużonego miana królowej nauk, to właśnie informatyka uzyskała status najprężniej rozwijającej się gałęzi nauki, posiadającej zarazem najszerszy wachlarz zastosowań.

Początki informatyki jako spójnej dyscypliny naukowej, przypadają na lata sześćdziesiąte XX w., ale jej korzenie sięgają o wiele wcześniej, w zasadzie do czasów, kiedy dopiero kształtowała się myśl naukowa. To, że źródeł informatyki należałoby szukać we wczesnej matematyce, nie jest zapewne dla nikogo większym zaskoczeniem, ale już znacznie mniej oczywisty może się wydawać związek informatyki ze starożytną filozofią.

Dyskretny świat liczb

Komputer dokonuje pełnej unifikacji wszelkiego typu danych w postaci zapisu cyfrowego. Nie tylko liczby, ale też i teksty, statyczne i ruchome obrazy oraz dźwięki uzyskują w pamięci komputera jednolitą, cyfrową postać. Ten, wydawałoby się zupełnie nieczytelny, pozornie przypadkowy ciąg zer i jedynek, dopiero po odpowiednim przetworzeniu (interpretacji dokonanej przez procesor) odkrywa nadzwyczajną złożoność zakodowanych treści.

Koncepcja, jakoby cała rzeczywistość mogła być zbudowana z liczb, pojawiła się już we wczesnej filozofii greckiej. Uważa się, że to Pitagoras jako pierwszy dostrzegł znaczenie proporcji liczbowych w muzyce, zauważając, że podstawowe interwały, takie jak oktawa, kwarta i kwinta, powstają dzięki odpowiednim podziałom struny (w stosunkach 1 : 2, 2 : 3 oraz 3 : 4). Na tej podstawie, i w wyniku obserwacji innych zjawisk przyrodniczych, dających się ujmować w postaci relacji liczbowych, pitagorejczycy wywiedli przekonanie, że cała natura musi być oparta na liczbach, stanowiących zarówno budulec, jak i zasadę świata. Trzeba przy tym pamiętać, że liczby rozumiane były przez wczesnych pitagorejczyków nie jako abstrakcyjne obiekty, zapisywane za pomocą cyfr, lecz w sposób na wskroś fizyczny, jako przestrzenne układy maleńkich korpuskuł (które przedstawiano np. za pomocą rozłożonych na ziemi kamyków). Oparta na liczbie kosmologia pitagorejska stanowiła więc pewną formę pre-atomizmu.

Dojrzała postać atomizmu pojawiła się w starożytnej Grecji w V w. p.n.e. w myśli Demokryta z Abdery, który za swym mistrzem Leukiposem twierdził, iż cała materia zbudowana jest z niezniszczalnych i niepodzielnych cząstek, które są niewidoczne ze względu na swe bardzo małe rozmiary. Była to więc koncepcja dyskretnej budowy materii. Rozróżnienie na wielkości ciągłe i dyskretne szybko znalazło uzasadnienie na gruncie greckiej filozofii oraz matematyki. Za ciągłe uznawano to, co jest spoiste, w czym nie można wyróżnić najmniejszego elementu składowego, co potencjalnie daje się dzielić w nieskończoność. Dyskretne natomiast jest to, co ma strukturę ziarnistą, składa się z najmniejszych, niepodzielnych elementów. W ujęciu greckiej matematyki wielkości ciągłe można było mierzyć, zaś wielkości dyskretne zliczać. Z tekstów, które do nas dotarły wiemy jedynie, że pierwsi atomiści opowiadali się za dyskretną postacią materii. Nie wiadomo natomiast nic o tym, czy podobną strukturę odnosili także do innych wielkości fizycznych, takich jak np. przestrzeń oraz czas. Tego typu koncepcje pojawiły się jednak w późniejszych odsłonach greckiego atomizmu, głównie u epikurejczyków. Podobne idee były obecne już we wcześniejszej filozofii indyjskiej. Dlaczego tyle uwagi poświęcam tu filozoficznej tezie o dyskretnej strukturze świata? Otóż w zasadzie wszystko, co ma związek z komputerem i rzeczywistością cyfrową ma charakter w pełni dyskretny. Dość wspomnieć chociażby dane, reprezentowane przez odrębne niepodzielne bity, przetwarzane w dyskretnych tyknięciach czasu procesora, czy też prezentację obrazu na dyskretnej matrycy ekranu, która składa się z niepodzielnych pikseli, z których każdy może wyświetlić skończoną liczbę kolorów, określonych dokładnie przez dyskretny zbiór wartości liczbowych.

Trzeba mieć na uwadze, że reprezentacja wszystkich danych w postaci skończonych ciągów zer i jedynek pod wieloma względami nie jest systemem idealnym. Trudności pojawiają się np. gdy mamy do czynienia z liczbami niewymiernymi, posiadającymi przecież nieskończone i nieokresowe rozwinięcia. W takich przypadkach komputery muszą zadowolić się skończonymi przybliżeniami, a z tym wiąże się konieczność szacowania błędów obliczeniowych, wynikających z przeprowadzania operacji na takich przybliżonych wartościach. Pierwsi z problemem istnienia wielkości niewymiernych zderzyli się już starożytni pitagorejczycy. W ujęciu geometrycznym oznaczało to odkrycie tzw. odcinków niewspółmiernych, czyli takich par odcinków, które nie mają wspólnej miary. Odkrycie to wywołało poważny kryzys na styku greckiej matematyki i filozofii, którego zażegnanie zajęło starożytnym uczonym wiele dekad.

Bertrand Russell, wybitny matematyk i filozof XX w., stwierdził kiedyś, że „najbardziej zdumiewający we współczesnej nauce jest jej powrót do pitagoreizmu” [Ifrah, s. 599]. Mówiąc to miał na myśli przede wszystkim spektakularne sukcesy współczesnej nauki w matematycznym opisie świata fizycznego (głównie w zakresie Einsteinowskiej teorii względności oraz mechaniki kwantowej). Dzisiaj słowa Russella można w jeszcze większym stopniu odnieść do zadziwiającego rozwoju technik informatycznych. Choć obecnie prawdopodobnie mało kto zgodziłby się z pitagorejskim opisem rzeczywistości fizycznej, opis ten zdaje się doskonale pasować do tworzonej przez nas równoległej rzeczywistości cyfrowej, w której w coraz większym stopniu wszyscy jesteśmy zanurzeni.

Z powyższych rozważań nie należy wyciągać wniosku jakoby, twórcy komputerów w sposób świadomy chcieli wcielić w życie starożytne idee pitagorejczyków czy atomistów. Zaobserwowane analogie wskazują raczej na podobieństwo mechanizmów myślenia, które ujawniają się w różnych, często bardzo odległych dziedzinach, takich jak filozofia i informatyka.

2 = 10

Podstawą cyfrowej reprezentacji danych, stosowanej we współczesnych komputerach, jest zapis binarny (dwójkowy). Aby zrozumieć zasadę zapisu dwójkowego trzeba najpierw uświadomić sobie istotę zapisu liczbowego, którym posługujemy się na co dzień – pozycyjnego systemu dziesiętnego. Każdy system pozycyjny polega na przedstawieniu danej liczby w postaci kolejnych potęg (wielokrotności) liczby będącej podstawą tego systemu. Potęgi te zapisuje się zwyczajowo od prawej do lewej strony, poczynając od potęgi zerowej. W systemie dziesiętnym, którego podstawą jest liczba 10, cztery kolejne pozycje odpowiadają czterem kolejnym potęgom dziesiątki:

W przypadku zapisu binarnego (dwójkowego) podstawę stanowi liczba 2, a każda wartość przedstawiana jest w postaci kolejnych potęg dwójki: … 23 = 8, 22 = 4, 21 = 2, 20 = 1. Na każdej pozycji może wystąpić cyfra 1 – jeśli dana potęga dwójki stanowi składową reprezentowanej liczby, lub 0 – jeśli dana potęga dwójki nie wchodzi w skład reprezentowanej liczby. Przykładowo, liczba 2 ma zapis binarny w postaci: 10 (0 – gdyż nie potrzebujemy w sumowaniu 20 = 1; 1 – ponieważ 21 = 2).

Pascal. Ilustracja z zasobów Wikimedia.org

Podstawą pozycyjnego zapisu liczbowego może być każda liczba większa od jedynki. Już w połowie XVII w. francuski matematyk Blaise Pascal przedstawił ogólną teorię systemów pozycyjnych, których podstawę stanowi dowolna liczba naturalna, większa lub równa 2. Do dzisiaj, w mniej lub bardziej jawny sposób, korzystamy z różnych systemów liczbowych. Na przykład to, że tarcza zegara dzieli się na 60 minut, a kąt pełny wynosi 360 stopni, stanowi ślad starożytnego systemu sześćdziesiątkowego, stosowanego przez Babilończyków. Z kolei we współczesnej grafice komputerowej często kolor zapisuje się przy użyciu zapisu szesnastkowego, np. FFFFFF to kolor biały, a FF0000 to kolor czerwony.

Generalnie im większa jest podstawa systemu (dwójkowy, dziesiętny, szesnastkowy itd.), tym bardziej zwięzły jest zapis. Przykładowo liczba 2903 w zapisie dwójkowym zajmuje 12 pozycji, w zapisie dziesiętnym 4, w zapisie szesnastkowym 3, a w zapisie sześćdziesiątkowym tylko dwie pozycje. Natomiast zapis sześćdziesiątkowy składa się aż z sześćdziesięciu znaków, zapis szesnastkowy z szesnastu, dziesiętny dziesięciu, a binarny z dwóch. I to właśnie ta ostatnia cecha okazała się jedną z rozstrzygających przy wyborze dwójki, jako podstawy systemu pozycyjnego stosowanego w informatyce. Najłatwiej bowiem konstruuje się układy fizyczne, które rozróżniają tylko dwa stany, niezależnie od tego, czy są to urządzenia mechaniczne, elektromagnetyczne czy też elektroniczne jak współczesne komputery.

Gottfried Wilhelm Leibniz. Ilustracja z zasobów Stock.Adobe.com

Zalety systemu dwójkowego nie ograniczają się jednak tylko do zapisu danych, ale obejmują również manipulacje danymi. Na początku XVIII w. ukazała się przełomowa praca niemieckiego matematyka i filozofa Gottfrieda Wilhelma Leibniza, dotycząca podstaw arytmetyki dwójkowej (sposobu przeprowadzania rachunków w systemie binarnym). Jedną z głównych zalet tego systemu okazała się być niezwykle prosta tabliczka mnożenia, która sprowadza się do czterech wartości (0x0=0, 0x1=0, 1×0=0, 1×1=1), w przeciwieństwie do tabliczki mnożenia w systemie dziesiętnym, zawierającej aż sto elementów.

Leibniz  zasłużył się również jako autor ważnych prac z zakresu logiki, dziedziny, której rozwój był jednym z kluczowych warunków powstania informatyki. Logika zrodziła się na łonie starożytnej filozofii. Jej pierwszym systematycznym ujęciem była Arystotelesowska teoria sylogizmów, opisująca sposoby wyprowadzania wniosków z istniejących przesłanek. Klasycznym przykładem sylogizmu jest rozumowanie: każdy człowiek jest śmiertelny (przesłanka pierwsza); Sokrates jest człowiekiem (przesłanka druga); zatem Sokrates jest śmiertelny (wniosek). Z biegiem wieków logicy zaczęli jednak odchodzić od badania relacji pomiędzy konkretnymi, wyrażonymi w postaci werbalnej zdaniami i w coraz większym stopniu przykładali uwagę do operacji na abstrakcyjnych symbolach. Ich prace zaczęły przypominać raczej formuły matematyczne niż klasyczne językowe wnioskowania. Dzięki stopniowej matematyzacji logiki, w szczególności zaś dzięki pracom 19-wiecznego angielskiego matematyka George’a Boole’a okazało się, że logiczny rachunek symboliczny można z łatwością wyrazić w zapisie dwójkowym. Tym sposobem system binarny okazał się być podstawą nie tylko dla zapisu danych, ale również dla matematycznych i logicznych operacji na tych danych. A od takich operacji droga do prawdziwego programowania nie była już daleka.

Kartonowe dyskietki

Mało kto pamięta dzisiaj o dyskietkach. Powoli zapominamy też o płytach CD i DVD, a przecież jeszcze całkiem niedawno, chcąc pracować w zaawansowanym programie lub zagrać w złożoną grę, trzeba było taką aplikację najpierw załadować do pamięci komputera z zewnętrznego nośnika. Obecnie prawie wszystko ściągamy w mig z sieci, a cały proces odbywa się za pośrednictwem tego samego ekranu, na którym widzimy następnie działanie aplikacji. W efekcie, powoli zaciera się dawna intuicja ładowania do komputera czegoś z zewnątrz. Okazuje się jednak, że owa „ładowalność z zewnątrz” (wciąż obecna, ale nie mająca już tak silnej konotacji fizycznej) była jednym z kluczowych warunków powstania komputera.

Pascaline autorstwa Blaise Pascala. Ilustracja z zasobów Stock.Adobe.com

Od początku XVII w. tworzone były liczne mechaniczne urządzenia liczące, na czele ze słynną Pascaline autorstwa Blaise Pascala czy też bardziej zaawansowanym arytmometrem Leibniza. Z biegiem czasu tego typu urządzenia stawały się coraz bardziej precyzyjne i z powodzeniem mogły wspomagać rachmistrzów w wykonywaniu podstawowych działań matematycznych. Tym, co je jednak ograniczało był brak możliwości zmiany sposobu działania, wynikający z ich sztywnej konstrukcji. Mogły one wykonywać jedynie taki zestaw działań, jaki został z góry przewidziany przez konstruktora urządzenia. Wykonanie innych działań wymagało skonstruowania nowej maszyny.

W końcu pojawiła się jednak idea, aby umożliwić zmianę sposobu działania maszyny w zależności od zestawu poleceń wprowadzanych do niej z zewnątrz. Co ciekawe, idea ta nie zrodziła się w środowisku twórców maszyn obliczeniowych, lecz wśród francuskich mistrzów tkactwa. W wyniku połączenia kilku istotnych wynalazków, na początku XIX w. powstało krosno Jacquarda – „pierwszy w pełni automatyczny warsztat tkacki, sterowany za pomocą systemu dziurkowanych kart” [Ifrah, s. 677]. Odpowiednio perforowany karton zawierał rozkazy dla maszyny, dzięki którym, bez dodatkowej ingerencji operatora, na tkaninie powstać mógł zakodowany wcześniej wzór. Była to więc zapowiedź wprowadzanego z zewnątrz programu komputerowego.

Programowane kartami perforowanymi krosno zaprojektowane we Francji, w oparciu o koncepcję autorstwa angielskiego matematyka Charles’a Babbage’a. Ilustracja z zasobów Stock.Adobe.com

Koncepcja ładowania zewnętrznych programów do urządzeń obliczeniowych podjęta została w drugiej połowie XIX w. w projekcie maszyny analitycznej autorstwa angielskiego matematyka Charles’a Babbage’a. To mechaniczne urządzenie, mające w zamierzeniu twórcy rozwiązywać wszelkie problemy matematyczne, zawierało już w zasadzie większość elementów charakterystycznych dla współczesnych komputerów: 1) układ wejścia, odczytujący dane oraz instrukcje z perforowanych kart, 2) stanowiący pamięć maszyny „magazyn”, 3) odpowiadający dzisiejszemu procesorowi „młyn” oraz 4) układ wyjścia, drukujący wyniki na perforowanych kartach. Chociaż

Warto tu jeszcze wspomnieć, czym jest program komputerowy i jaka jest jego relacja w odniesieniu do bardziej ogólnego pojęcia algorytmu. Otóż „algorytm jest logiczną ideą ukrytą w programie” [Bolter, s. 93], zaś program to konkretna implementacja danego algorytmu. Algorytm definiuje się jako jasno zdefiniowany ciąg reguł, które pozwalają wykonać dane zadanie w skończonej liczbie kroków. Za jeden z najstarszych algorytmów uznaje się opisaną w Elementach Euklidesa metodę wyznaczania największego wspólnego dzielnika dwóch liczb. Natomiast samo słowo algorytm pochodzi od nazwiska średniowiecznego arabskiego matematyka Al-Chuwarizmiego, które w zlatynizowanej wersji przyjęło formę Algorismi. Jeśli zatem istotę informatyki dostrzega się w badaniu algorytmów, jak czyni to np. Donald E. Knuth, należałoby przyjąć, że faktyczny początek tej dyscypliny sięga czasów starożytnych.

Komputer na papierze

Mogłoby się wydawać, że kolejnym naturalnym krokiem w stronę powstania prawdziwego komputera powinna być fizyczna realizacja projektu maszyny analitycznej Babbage’a. Owszem, podjęto takie próby, jednak to nie one doprowadziły do rewolucji informatycznej. Fundamentalne okazały się opracowane w pierwszej połowie XX w. abstrakcyjne, matematyczne modele maszyn cyfrowych, autorstwa Alana Turinga i Johna von Neumanna.
Zainspirowany ideami i projektami Babbage’a Turing opracował teoretyczny model maszyny składającej się z: 1) nieskończonej taśmy, na której w odrębnych komórkach zapisywane mogą być symbole, np. zera lub jedynki, 2) głowicy poruszającej się wzdłuż taśmy, potrafiącej odczytać i zmienić wartość znaku w danej komórce, 3) zestawu reguł działania, stanowiących program maszyny. Pojedyncza maszyna potrafiła realizować tylko jedno proste zadanie obliczeniowe, ale łącząc kilka różnych maszyn można było już wykonywać bardziej złożone zadania. To doprowadziło Turinga do koncepcji uniwersalnej maszyny, która potrafi rozwiązywać wszelkie zadania obliczeniowe, sformułowane w języku symboli. Chociaż maszyna uniwersalna może wydawać się wydumaną i w praktyce niemożliwą do zrealizowania koncepcją, okazuje się, że w sensie logicznym jest ona równoważna ze współczesnym komputerem. Innymi słowy, żadne zadanie obliczeniowe, którego nie można zrealizować za pomocą uniwersalnej maszyny Turinga, nie może też być zrealizowane przez choćby najbardziej zaawansowany komputer. Problemy, których nie może rozwiązać maszyna Turinga ani żaden komputer określane są mianem problemów nieobliczalnych.
Pełnej syntezy teoretycznych osiągnięć z zakresu badań nad maszynami cyfrowymi dokonał amerykański logik i matematyk John von Neumann. Przełomowym rozwiązaniem okazało się sprowadzenie danych oraz programów do tej samej postaci kodu binarnego, który mógł być ładowany do pamięci komputera. Programy stały się więc specyficznym typem danych, które podobnie jak każde inne dane mogły być w prosty sposób zastępowane i modyfikowane. Opisana przez von Neumanna ogólna architektura komputera uwzględnia: 1) jednostkę sterującą, 2) jednostkę arytmetyczno-logiczną, 3) pamięć, służącą do przechowywania instrukcji oraz danych, 4) urządzenia wejścia oraz 5) urządzenia wyjścia. Jednostka sterująca wraz z jednostką arytmetyczno-logiczną tworzą razem procesor (CPU).

Dzięki implementacji ogólnej architektury von Neumanna powstały pierwsze komputery elektroniczne. Choć układy elektroniczne okazały się jak dotąd najbardziej efektywnym rozwiązaniem, należy pamiętać, że abstrakcyjna idea komputera może być zrealizowana przez bardzo różne struktury fizyczne. Nietypowa implementacja komputera opisana została w powieści science-fiction pt. „Problem trzech ciał” autorstwa Cixin Liu. W wirtualnym świecie, wzorowanym na starożytnych Chinach za czasów panowania Pierwszego Cesarza Qin Shi Huanga, pojawia się potrzeba przeprowadzenia skomplikowanych obliczeń, którym nie są w stanie sprostać najwybitniejsi matematycy cesarstwa. W tym celu z trzydziestomilionowej armii cesarza zostaje utworzony żywy komputer. Jego najmniejszym elementem jest bramka logiczna, złożona z trzech żołnierzy, wyposażonych w dwie chorągiewki – białą i czarną. Żołnierz odpowiadający za wyjście bramki podnosi odpowiednią chorągiewkę w zależności od tego, jakie chorągiewki podnieśli żołnierze odpowiadający za dwa wejścia tej bramki. Dla przykładowej bramki typu OR wyjście podnosi białą chorągiewkę, jeśli obydwa wejścia są białe. W innych wypadkach (czarna-czarna, czarna-biała, biała-czarna) wyjście podnosi zawsze czarną chorągiewkę. W podobny sposób funkcjonują pozostałe typy bramek logicznych. Przy zaangażowaniu 10 milionów bramek logicznych udaje się odtworzyć architekturę komputera, która na wyższych poziomach organizacji uwzględnia takie podzespoły jak procesor, pamięć RAM, magistralę systemową, twardy dysk oraz urządzenia wyjściowe. Pomijając naturalny czynnik ludzkiego błędu (który w powieści również został uwzględniony), taki żywy komputer musi działać tak samo poprawnie jak maszyna Turinga oraz każdy inny komputer oparty na architekturze von Neumanna. Przykład ten pokazuje zatem dobitnie, że źródłem potęgi informatyki nie są wcale zaawansowane rozwiązania technologiczne (choć są one oczywiście kluczowe z perspektywy wydajności komputerów), lecz abstrakcyjna koncepcja, której istotę można zawrzeć na kartce papieru, a następnie odtworzyć w różnych warunkach fizycznych. Gdyby zatem cywilizowany świat nagle się skończył, ale przetrwałaby taka kartka, szybko dałoby się odtworzyć ideę komputera, choćby nawet przy użyciu kamyków i patyczków.

Osiągnięcie ewolucyjne

Dyskretny zapis cyfrowy, arytmetyka dwójkowa, logiczny rachunek symboliczny, mechaniczne maszyny obliczeniowe, algorytm, program ładowany z zewnątrz, uniwersalna maszyna Turinga, obliczalność, nierozstrzygalność, architektura von Neumanna… To zaledwie ułamek koncepcji i wynalazków, które przyczyniły się do powstania komputera i rozwoju informatyki. W związku z tym nie sposób wskazać jednego, czy też głównego wynalazcy tej dyscypliny. Jest to bowiem wielki projekt cywilizacyjny, rozwijany przez wieki, przez licznych uczonych. Nie należy też zakładać, że na początku tej drogi ktoś z góry przewidział ostateczny cel, do którego konsekwentnie dążyły następne pokolenia. Przeciwnie, droga ta była kręta i pełna ślepych uliczek. Przypominała raczej proces ewolucyjny, w ramach którego testowane były różne koncepcje, ale przetrwały tylko te najlepsze, czy może najlepiej przystosowane. W tym sensie, w perspektywie historycznej, powstanie informatyki porównać można chyba tylko do powstania pisma alfabetycznego, które kształtowało się wedle podobnych ewolucyjnych mechanizmów przez kilka tysięcy lat. Godnym uwagi jest przy tym fakt, że obydwa te wynalazki – pismo alfabetyczne i komputer cyfrowy – bazują na w pełni dyskretnych systemach zapisu informacji. Czyżby zatem w poszukiwaniu źródeł informatyki należało też uwzględnić znacznie starszą historię pisma?


Jakub Jernajczyk
Akademia Sztuk Pięknych im. Eugeniusza Gepperta we Wrocławiu
Artysta wizualny, matematyk, popularyzator nauki. Profesor na Wydziale Grafiki i Sztuki Mediów oraz dziekan Szkoły Doktorskiej Akademii Sztuk Pięknych we Wrocławiu. Interesuje się głównie poznawczą rolą obrazu oraz relacjami sztuki i nauki. Strona internetowa: www.grapik.pl


Literatura:
1. D. Bolter, Człowiek Turinga, Warszawa 1990
2. Cixin Liu, Problem Trzech Ciał, Poznań 2020
3. Harel, Rzecz o istocie informatyki. Algorytmika, Warszawa 2000
4. Ifrah, Historia powszechna cyfr, t. II, Warszawa 2006
5. E. Knuth, Informatyka i jej związek z matematyką, [w:] R. Murawski, Filozofia informatyki. Antologia, Poznań 2014, s. 14-21.
6. Marciszewski, P. Stacewicz, Umysł – Komputer – Świat. O zagadce umysłu z informatycznego punktu widzenia, Warszawa 2011
7. Reale, Historia filozofii starożytnej, t. I, Lublin 2008
8. Russell, Dzieje zachodniej filozofii, Warszawa 2012
9. Sady, Dzieje religii, filozofii i nauki. Od Talesa z Miletu do Mahometa, Kęty 2010.

 

Partnerzy cyklu Sztuka Programowania

Oprogramowanie jest niemal w każdym urządzeniu z naszego otoczenia. Od skomplikowanych komputerów, serwerów, centrów obliczeniowych, prze telefony komórkowe czy choćby elektryczną szczoteczkę do zębów. Każdym urządzeniem steruje oprogramowanie.

Poprosiliśmy liderów z branży, aby pomogli nam w przygotowaniu serii artykułów o sztuce programowania. Dzięki ich uprzejmości mogliśmy poznać ludzi tworzących najbardziej zaawansowane oprogramowanie. Mogliśmy zrozumieć, dlaczego programowanie coraz częściej nazywane jest sztuką.

Dziękujemy wszystkim za wsparcie i współpracę!

Sztuka Programowania: Filozoficzne i matematyczne źródła informatyki

Reklama B1

Zmieniaj świat wspólnie z nami

Dobre dziennikarstwo, wartościowe treści, rzetelne i sprawdzone informacje.
Tworzymy przestrzeń ludzi świadomych.

Wszystkie artykuły dostępne są bezpłatnie.
Abyśmy mogli rozwijać tą stronę, potrzebujemy Twojego wsparcia.