• Nie Znaleziono Wyników

Myślenie w języku (?)

Kulturowe konteksty programowania

2.4. Myślenie w języku (?)

(analiza na przykładzie języków składni C)

2.4.1. Kultura programowania

Jeżeli wspólna kultura zakłada obieg treści, to czymś najbardziej naturalnym w tym względzie będzie czynność ponownego użycia kodu. Guru UNIX -a, Eric Raymond powiedział:

Dobrzy programiści wiedzą, co napisać. Wielcy programiści wiedzą, co można ponownie wykorzystać39.

Bezspornie działa to na korzyść oszczędności czasu, ale globalnie: istnie-je w cechach rodzajowych większości języków programowania. Wzór stanowi o zachowaniu płynności tej kultury (w świetle „relatywizmu językowego”: rozu-mienie świata zostaje utrwalone).

O stabilności tego obszaru świadczy również uniwersalny już paradygmat Alana Coopera:

38 Ibidem, s. 323.

39 A. Cooper: Wariaci rządzą domem wariatów…, s. 142–143.

51 2.4. Myślenie w języku (?) (analiza na przykładzie języków składni C)

Podobna psychika ludzi typu homo logicus powoduje, że obyczaje towarzyszące przygotowywaniu oprogramowania są wszędzie takie same. Zadziwiające jest podobieństwo przyjętych sposobów budowania produktów oprogramowanych.

Dotyczy to zarówno wytwórni aparatów fotograficznych, jak i fabryk samo-chodów, banków, czy wreszcie urządzeń marynarki wojennej. Dlatego właśnie produkty tak różne, jak kamery, samochody marki Porsche, bankomaty i krą-żowniki »Aegis« zachowują się podobnie. Ich zachowanie jest rozpoznawalne.

Jest typowe dla komputerów40.

„Kultura programowania” stanowi wypadkową wyabstrahowanej przeze mnie powyżej esencji hipotezy Sapira -Whorfa, ekonomii wykorzystania kodu oraz podtrzymania i aktualizacji swoistego „dziedzictwa”.

W dobie dynamicznie zmieniającej się rzeczywistości technologicznej kul-tura programowania także uległa przyspieszeniu i rozwarstwieniu – jesteśmy świadkami narastającej dywersyfikacji:

Środowisko programistów tworzących aplikacje dla telefonów komórkowych stało się równie podzielone jak cały ten rynek. Śledzenie zmian, jakie zachodzą na tym rynku, jest niemal niemożliwe. Programiści zaczęli być coraz bardziej wyspecjalizowani. Wymogi pisania aplikacji na poszczególne platformy znacz-nie się od siebie różnią. Twórcy aplikacji na telefony przenośne znacz- niejednokrot-nie muszą korzystać z całkowicie odmiennych środowisk programistycznych, narzędzi oraz języków programowania. Przenoszenie programów z jednej platformy na drugą jest niejednokrotnie przedsięwzięciem kosztownym i zło-żonym41.

Najważniejszą sprawą w tej materii uczynię paradygmat obiektowy, przykła-dy języków składni C. W kolejnych podrozdziałach spróbuję się zastanowić nad myśleniem w języku C (czy Thinking in C++ to jedynie chwytliwy tytuł książki, czy wykładnia zasad, styl refleksji?), „działaniem” algorytmu, potwierdzeniem lub przemodelowaniem wcześniejszych założeń. Chcę się również przekonać, na ile ta kultura jest przyspieszona, oparta na aktualizacjach.

2.4.2. Specyfika języków obiektowych

Wedle klasycznej eksplanacji zaproponowanej przez Agnieszkę Szewczyk:

W językach programowania zorientowanych obiektowo podstawowym skład-nikiem nie jest część proceduralna, lecz obiekty występujące w

rozwiązywa-40 Ibidem, s. 146.

41 S. Conder, L. Darcey: Android: programowanie aplikacji na urządzenia przenośne. Przeł.

P. Rajca. Gliwice 2011, s. 44.

nym problemie. Programowanie polega tu na przedstawianiu charakterystyk poszczególnych obiektów:

– opisu danych z nim związanych, – powiązania danego obiektu z innymi,

– strumieni danych przekazywanych między obiektami,

– metod (procedur przetwarzania) związanych z danym obiektem.

Języki programowania zorientowane obiektowo opierają się na trzech funda-mentalnych pojęciach:

– zagnieżdżenia (obiektu w obiekt), – dziedziczenia (cech lub metod),

– polimorfizmu (grupowanie metod i cech pod specjalnymi identyfikatorami)42. Zastanawiam się jednak, w jaki sposób przedstawione powyżej kwestie mogłbyby być zrozumiane przez humanistę – osobę, która na co dzień nie działa w zaprezentowanym dyskursie. W poszukiwaniu adekwatnej translacji na grunt humanistyki cyfrowej z pomocą przyszła wykładnia zamieszczona w Wiki- Books – programowanie obiektowe zostało wyjaśnione na przykładzie sytuacji zakupów w sklepie:

Podstawowymi bytami, którymi operujemy, są obiekty oraz klasy, które cał-kiem nieźle odzwierciedlają rzeczywistość wokół nas. Próba wyrażenia wy-cieczki do sklepu po zakupy przy pomocy funkcji będzie wyglądać nienatu-ralnie i zupełnie nieintuicyjnie, tymczasem bardzo łatwo możemy ją opisać obiektami. Idziemy do sklepu i bierzemy jeden z dostępnych obiektów kla-sy koszyk. Wiemy, że we wszystkich koszykach możemy umieszczać towary.

Wędrując wśród półek, do koszyka wrzucamy obiekt klasy chleb, która jest szczególnym przypadkiem towaru. Nasz chlebek znajduje się w koszyku, ale na półce są jeszcze inne takie obiekty, które mogą zostać wzięte przez innych klientów. Bierzemy też masło i jakiś napój (wszystko to obiekty odpowiednich klas) i z tym wszystkim wędrujemy do obiektu kasa, któremu przekazujemy nasz koszyk. W kasie dowiadujemy się, ile pieniędzy musimy przekazać, aby pobrane obiekty stały się nasze. Po zapłaceniu odbieramy nasze obiekty i bie-rzemy je do domu, czyli obiektu klasy dom43.

Obiekt jest w związku z tym „wszystkim”. Jego „jądro” składa się ze stanu (czyli odpowiednich danych) oraz zachowania (czyli realizujących te dane proce-dur w odpowiednich kontekstach) – w przeciwieństwie do programowania pro-ceduralnego, gdzie te dwie jednostki traktuje się w oderwaniu od siebie. Waż-nym i naturalWaż-nym elementem jest również umiejętność komunikacji pomiędzy poszczególnymi obiektami.

42 A. Szewczyk: Informatyka: aspekty humanistyczne. Szczecin 1996, s. 46.

43 WikiBooks: Czym jest programowanie obiektowe?. Źródło: http://pl.wikibooks.org/wiki/

PHP/Czym_jest_programowanie_obiektowe%3 (data dostępu: 17.08.2013).

53 2.4. Myślenie w języku (?) (analiza na przykładzie języków składni C)

Programowanie obiektowe ma ułatwić pisanie, konserwację i wielokrotne użycie programów lub ich fragmentów. Największym atutem programowania, projektowania oraz analizy obiektowej jest zgodność takiego podejścia z rze-czywistością – mózg ludzki jest w naturalny sposób najlepiej przystosowany do takiego podejścia przy przetwarzaniu informacji44.

W związku z powyższym stwierdzeniem, dla założeń omawianego paradygma-tu, zasadna staje się „metafora sklepowa”. Intuicyjność, logiczność i ekonomicz-ność w wykorzystaniu kodu stanowią o najlepszym zbliżeniu „obiektowości”

do zasad naszej własnej kultury.

Kluczowe dla tej rozprawy jest „zrozumienie” języka Objective -C (hybry-dy języków C i Smalltalk). Jego popularność wzrosła w momencie powstania w 1988 roku systemu NeXT, a po dziś dzień jest on używany w komputerach Apple (system Mac OS X) oraz do programowania aplikacji (iOS dla iPhone‘ów i iPadów). Kwestia kluczowa, sygnalizująca wypatrywane przeze mnie w róż-nych aspektach „przyspieszenie”, zawiera się w wykorzystaniu niewielkiej biblio-teki uruchomieniowej zamiast klasycznej maszyny wirtualnej45.

2.4.3. Kreacja w Objective -C –