Jak nauczyliśmy maszyny liczyć i myśleć za nas? Część 18: Coraz bardziej przyjazne języki programowania

Implementacja oznaczona Java 1.0 powstała w firmie Sun Microsystems w 1996 r. i od razu spodobała się użytkownikom. Programy pisane w Javie mogą być łatwo przenoszone z jednego komputera na inny, ponieważ działają na tzw. maszynie wirtualnej.

Publikacja: 10.02.2022 21:00

Język programowania Java jest stale udoskonalany, dlatego co pewien czas udostępniane są jego aktual

Język programowania Java jest stale udoskonalany, dlatego co pewien czas udostępniane są jego aktualizacje

Foto: Alamy Stock Photo/BEW

 

We wcześniejszych felietonach z tego cyklu opisywałem języki programowania, które budowano z myślą o tym, żeby zapewnić maksymalną sprawność programistom. Majstersztykiem w tym zakresie był omawiany w poprzednim felietonie język C. Jest on tak wyrafinowany, że programista może osiągnąć cel (to znaczy zmusić komputer do wymaganego działania), pisząc program złożony zaledwie z kilku komend. W okresie entuzjastycznego upowszechniania tego języka dość popularna była zabawa (i rywalizacja!) programistów, którzy prezentowali kompletne programy w języku C o długości zaledwie jednej linijki. Jak wspomniałem, związany z tym był swoisty konkurs: wygrywał ten program, który takim mikroskopijnym programem potrafił zmusić komputer do najbardziej zaawansowanych i wyrafinowanych obliczeń.

Język C był więc mistrzowskim narzędziem dla mistrzów. Ale komputery chcieli programować także zwykli ludzie, dlatego w połowie lat 90. XX wieku zaczęto się rozglądać za jakimś językiem pozwalającym programować szybko, łatwo i przyjemnie. Takim językiem stała się Java.

Java i obiektowość

Twórcami Javy byli James Gosling, Mike Sheridan i Patrick Naughton. Pierwsza wersja tego języka powstała w 1991 r., lecz miała dość wąskie zastosowanie, bo miała służyć do obsługi telewizji interaktywnej i właściwie się nie przyjęła. Ale nowym językiem zainteresowała się firma Sun Microsystems, która w latach 90. miała dużą „siłę przebicia". Implementacja oznaczona Java 1.0 powstała w tej firmie w 1996 r. i od razu się spodobała. Możliwość stosowania tzw. apletów Javy na stronach www zapewniły wszystkie większe platformy i przeglądarki sieciowe, dlatego tym narzędziem zainteresowali się twórcy i użytkownicy tych stron, a to przełożyło się na mnogość programów pisanych w Javie na całym świecie.

Co spowodowało ten sukces? To, że cechą Javy jest obiektowość. Była to w latach 90. nowa (rewolucyjna!) filozofia tworzenia programów, bardzo aktualna do dziś.

Czytaj więcej

Jak nauczyliśmy maszyny liczyć i myśleć za nas? Część 17: Gwiazda wśród narzędzi programowania – język C

W uproszczeniu mówiąc, we wcześniejszych językach programowania (np. w FORTRANIE) programista opisywał, co komputer ma zrobić, tworząc tzw. procedury, czyli opisy różnych czynności. Utworzone procedury stanowiły treść programu, a podczas jego wykonywania wywoływały jedna drugą, tworząc łańcuch działań, który prowadził do wymaganego celu. Przy tym wzajemnym wywoływaniu procedury przekazują sobie dane i wyniki obliczeń. O procedurach można więc powiedzieć, że działania są w nich prywatne, ale dane w większym lub mniejszym stopniu wspólne. Trzeba przyznać, że nie była to zła koncepcja, bo zbudowano w ten sposób tysiące dobrze funkcjonujących programów.

Ale jak wiadomo, „lepsze jest wrogiem dobrego". Już przy budowie języka Simula w 1967 r. zaproponowano koncepcję programowania obiektowego, rozwiniętą potem w języku Smalltalk, a także wykorzystaną w języku C++. Java wzięła z tych języków to, co najlepsze.

Nie wdając się w szczegóły, które by nas odprowadziły zbyt daleko od rozważań na temat historii informatyki, możemy stwierdzić, że w programowaniu obiektowym tworzone są klasy, wewnątrz których ukryte są dane prywatne, a z zewnątrz dostępne są tylko operacje na tych danych (nazywane metodami). Dzięki temu na owych prywatnych (jak się czasem mówi enkapsulowanych) danych działają tylko dopasowane do nich metody, należące wraz z nimi do poszczególnych klas.

Klasy są wzorcami, według których w trakcie pracy programu tworzone są obiekty. Z jednej klasy można wytworzyć bardzo dużo obiektów, które mają taką samą budowę, ale zawierają różne dane. Obiekty porozumiewają się ze sobą, przekazują i wykonują polecenia, a efekt jest taki, że ich współdziałanie prowadzi do realizacji celów stawianych całemu programowi. Brzmi to może trochę skomplikowanie, ale działa bardzo dobrze, bo poszczególne klasy mogą projektować różni programiści. Nie muszą się oni porozumiewać ze sobą, wyjaśniając, co i jak robią, bo wystarczy, że pokażą, jakie właściwości mają zbudowane przez nich klasy oraz jak można ich używać. To, co „w środku", nie musi być ujawniane, co bardzo ułatwia pracę w zespołach wieloosobowych tworzących wspólnie różne programy. Co więcej, całe biblioteki gotowych klas można pozyskiwać z różnych źródeł i wykorzystywać, nie zajmując się tym, jak te klasy są zrobione.

Tworzenie klas jest też ułatwione, bo możliwe jest dziedziczenie ich zachowań i właściwości. Oszczędza to programiście bardzo dużo niepotrzebnej pracy.

Wirtualna maszyna Javy

Programy pisane w Javie mogą być łatwo przenoszone z jednego komputera na inny, ponieważ działają na tzw. maszynie wirtualnej. Jest to odmienny sposób działania niż przy wcześniej omawianych językach programowania. W tych wcześniej omawianych przypadkach pogram pisany przez programistę w jakimś języku (np. w FORTRANIE) musiał być tłumaczony z tego języka do formy kodów wewnętrznych sterujących elektroniką komputera. Tego tłumaczenia dokonywał program nazywany translatorem, który na każdym typie komputera musiał być inny, bo zestaw kodów wewnętrznych każdego typu komputera był inny. Rodziło to czasem trudności, bo translatory na różnych komputerach miały różne wymagania i program bez kłopotu tłumaczony na przykład na IBM 360 nie dawał się przetłumaczyć na PDP 11.

Twórcy języka Java postanowili z tym skończyć. Program napisany w Javie jest tłumaczony przez translator do postaci tzw. kodu pośredniego. Żaden komputer tego kodu nie rozumie, program będzie więc wykonany przez wirtualną maszynę Javy. Jeśli zatem na określonym komputerze ma być wykonany program napisany w Javie, to ten komputer najpierw musi mieć zainstalowaną ową wirtualną maszynę Javy. Ta wirtualna maszyna to program (tzw. emulator), który powoduje, że prawdziwy fizyczny komputer „udaje", że jest ową wirtualną maszyną Javy, i posłusznie wykonuje program zapisany w kodzie pośrednim.

Ze względu na popularność Javy producenci różnych komputerów instalują na nich owe emulatory (oczywiście na każdym komputerze dopasowane do konkretnej elektroniki), dlatego prawie zawsze możemy program w Javie na dostępnym komputerze uruchomić, chociaż metoda ta ma jedną wadę: program przez to „udawanie" maszyny wirtualnej wykonuje się wyraźnie wolniej, niż gdyby był napisany w jakimś innym języku, dla którego dostępny byłby porządny translator. Ale coś za coś: wolna praca w zamian za możliwość używania tego samego programu na każdym (prawie) komputerze. Język Java jest stale udoskonalany, dlatego co pewien czas udostępniane są aktualizacje. Aktualna (w momencie pisania tego artykułu) ma numer 15.

Dodatkową zaletą języka Java jest to, że pisane w nim programy mogą być wykonywane w sposób współbieżny, to znaczy nad wykonaniem jednego programu może pracować równocześnie wiele procesorów, a nawet wiele oddzielnych komputerów połączonych w sieć. Bardzo przyspiesza to wykonywanie programów i dobrze pasuje do współczesnych struktur komputerów, które coraz częściej mają w swojej strukturze kilka procesorów albo przynajmniej kilka tzw. rdzeni, czyli wydzielonych części jednego procesora mogących równocześnie wykonywać różne czynności.

Czytelny i publicznie dostępny Python

Programy komputerowe czytają nie tylko wykonujące je komputery, ale również ludzie. Dotyczy to zwłaszcza aktywistów ruchu tzw. wolnego oprogramowania, którzy sprzeciwiają się dominacji wielkich firm komputerowych drogo sprzedających wytworzone przez siebie programy i nieudostępniających żadnych informacji na temat ich budowy i zasad działania. O tym ruchu napiszę w jednym z późniejszych felietonów, bo to zdecydowanie temat na osobne opowiadanie, ale tutaj chcę odnotować, że aktywista tego ruchu – Guido van Rossum – w 1991 r. podjął próbę stworzenia języka programowania, który byłby skuteczny na komputerach, a jednocześnie bardzo czytelny dla ludzi.

Oczywiście programy w innych językach programowania są też czytelne dla człowieka. Sam czytałem dziesiątki programów pisanych przez inżynierów i naukowców w FORTRANIE i C++, musiałem sprawdzać programy pisane przez studentów w Pascalu, gdy się zajmowałem nauczaniem ich programowania, analizowałem programy w COBOL-u jako doradca prezesa banku BPH ds. informatyki itp. Wiem więc z własnego doświadczenia to, co napisał w swoich artykułach Guido van Rossum: czytanie programu zajmuje człowiekowi znacznie więcej czasu niż jego napisanie.

To stwierdzenie skłoniło go do stworzenia języka, który będzie bardzo czytelny dla człowieka. Stworzył język Python, którego translator udostępnił za darmo wszystkim chętnym do użytkowania, ale także do dowolnych przeróbek. To ostatnie jest możliwe, ponieważ kod źródłowy translatora Pythona (napisany w języku C) też został przez twórcę udostępniony i jeśli ktoś chce, to może sobie zrobić własną odmianę języka Python na swój wyłączny użytek, zmieniając reguły oryginalnego języka. Tego ostatniego nie warto jednak robić, bo powstało bardzo dużo użytecznych programów w języku Python, które tworzą przebogate biblioteki „gotowców" – ale oczywiście pisanych w oryginalnej wersji Pythona.

Dzięki dużej czytelności kodu programu w Pythonie (uzyskanej za sprawą uproszczonej gramatyki i specjalnej formy pisania kodu z licznymi wcięciami pozwalającymi śledzić myśl twórcy algorytmu) programy pisane w tym języku po ich publicznym ogłoszeniu mogą być czytane bez wysiłku przez każdego. Powoduje to, że inni programiści mogą wykryć niezauważalny dla twórcy programu błąd albo mogą zaproponować korzystną modyfikację.

Python, podobnie jak wcześniej omówiona Java, ma wszystkie mechanizmy potrzebne do tego, żeby programować w nim w sposób obiektowy. Jednak w odróżnieniu od Javy, która metodę programowania obiektowego narzuca jako jedyną możliwą, Python pozostawia decyzję programiście. Jeśli chce, może programować obiektowo. Ale jeśli woli inaczej, to może programować z użyciem procedur. Dostępne jest także programowanie funkcyjne oparte na rachunku lambda dla programistów, którzy wcześniej używali języków operowania na symbolach – np. LISP, o którym napiszę w następnym felietonie.

Na koniec warto przytoczyć ciekawostkę. Otóż budząca skojarzenia z gadami nazwa języka została nadana przez Rossuma z powodu jego fascynacji brytyjskim serialem komediowym „Monty Python's Flying Circus" („Latający cyrk Monty Pythona"). Ale i tak zauważyłem, że nazwa Python budzi obrzydzenie u wielu pań, z natury na ogół nielubiących węży. Czyżby na wspomnienie pewnej historii w rajskim ogrodzie?

Autor jest profesorem AGH w Krakowie

 

We wcześniejszych felietonach z tego cyklu opisywałem języki programowania, które budowano z myślą o tym, żeby zapewnić maksymalną sprawność programistom. Majstersztykiem w tym zakresie był omawiany w poprzednim felietonie język C. Jest on tak wyrafinowany, że programista może osiągnąć cel (to znaczy zmusić komputer do wymaganego działania), pisząc program złożony zaledwie z kilku komend. W okresie entuzjastycznego upowszechniania tego języka dość popularna była zabawa (i rywalizacja!) programistów, którzy prezentowali kompletne programy w języku C o długości zaledwie jednej linijki. Jak wspomniałem, związany z tym był swoisty konkurs: wygrywał ten program, który takim mikroskopijnym programem potrafił zmusić komputer do najbardziej zaawansowanych i wyrafinowanych obliczeń.

Pozostało 93% artykułu
2 / 3
artykułów
Czytaj dalej. Subskrybuj
Świat
Wojna Rosji z Ukrainą. Dzień 786
Materiał Promocyjny
Wykup samochodu z leasingu – co warto wiedzieć?
Świat
Wojna Rosji z Ukrainą. Dzień 785
Świat
Wojna Rosji z Ukrainą. Dzień 784
Świat
Wojna Rosji z Ukrainą. Dzień 783
Materiał Promocyjny
Jak kupić oszczędnościowe obligacje skarbowe? Sposobów jest kilka
Świat
Wojna Rosji z Ukrainą. Dzień 782