Programowanie czyli jak działają programy

21Jak każda jedna rzecz w informatyce tak i tutaj możemy podzielić opisywaną sytuację na dwie kategorie. Tym razem mówimy o… użytkownikach korzystających z komputera. Dzielą się oni bowiem – jak już wspomniałem – na dwie kategorie. Pierwszą z nich są użytkownicy zwykli, włączają oni komputer po to by zrobić co mają zrobić, albo żeby pograć, albo żeby porozmawiać z kimś. Nie interesują się tym „jak to działa”, ważne dla nich jest tylko żeby działało. Drugą kategorią użytkowników są użytkownicy dociekliwi. Cechują się tym, że lubią grzebać w programach i zastanawiać się nad tym jak działa dana aplikacja. Ci szczególnie komfortowo czują się korzystając z linuxa. Sam system bowiem jak i 90% aplikacji dostępnych na niego jest rozpowszechniana na licencji Open Source. Znaczy to mniej więcej tyle, że dostajemy nie tylko program zupełnie za darmo, ale otrzymujemy przede wszystkim program z otwartym kodem źródłowym, tak abyśmy mogli zaglądać do wnętrza plików i ewentualnie modyfikować te programy według własnego uznania. Zarówno edytując gotowe już programy jak i zaczynając tworzyć absolutnie nowe, autorskie aplikacje wkraczamy w świat programistyki. Programistyka to nauka o programowaniu (cytując encyklopedię). Samo programowanie zaś to nic innego jak sposób tworzenia aplikacji w oparciu o algorytmy. Algorytm natomiast to dokładny sposób na opisanie a następnie rozwiązanie problemu krok po kroku. Przykładowo, aby zrobić program dodający trzeba przygotować algorytm, w którego skład wchodzić będą następujące operacje: uruchomienie programu, podanie jednej liczby, podanie drugiej liczby, wykonanie działania i wydrukowanie wyniku. Gdy mamy przygotowany już algorytm możemy przejść do zapisania go w jednym z wielu języków programowania. Gdy już zaprogramujemy całe działanie należy program skompilować czyli przekształcić go na formę wykonywalną. Wtedy to zapisany przez nas kod programu konwertowany jest w język binarny, który następnie – podczas uruchamiania aplikacji i korzystania z niej – jest przesyłany w czasie rzeczywistym do procesora, a następnie do pamięci RAM umożliwiając działanie aplikacji. Chcąc nauczyć się programować nie są potrzebne specjalne kwalifikacje, tak naprawdę jedyne co potrzebujemy to książki, tudzież tutorialu gdzie opisana będzie struktura interesującego nas języka oraz silna wola i „tęgi” umysł. Dlaczego tęgi umysł? Ano dlatego, że programowanie łączy się przede wszystkim ze zdrowym i logicznym myśleniem oraz z masą obliczeń. Wszystko bowiem musimy robić małymi kroczkami łącząc ze sobą w coraz większe skrypty aż w końcu połączyć te większe skrypty w jeden wielki program. Bardzo łatwo się pomylić dlatego nie możemy zapomnieć o tym, że po każdej większej modyfikacji naszej aplikacji powinniśmy sprawdzić czy ona działa. Programy możemy tworzyć nawet w notatniku, ale zaleca się korzystać ze specjalnych środowisk programistycznych. Pozwalają one na wykorzystywanie gotowych już bibliotek, tagują kawałki kodu tak, aby te były czytelniejsze oraz pozwalają na „szybką” kompilację tymczasową i sprawdzenie czy program działa (po zakończeniu działania programu zaś skompilowany kod jest usuwany).

Programowanie

31Korzystanie z komputera oraz z Internetu możliwe jest za sprawą programów komputerowych. Aby jednak taka możliwość była, ktoś musi te programy napisać. Ogólnie takich ludzi określa się mianem programistów, natomiast wykonywane przez nich czynności to nic innego, jak programowanie. Nie jest to wcale tał łatwa umiejętność, jak mogłoby się wydawać. Potrzebna jest do tego naprawdę spora wiedza i odpowiednie umiejętności. Takimi rzeczami zajmują się osoby zainteresowane szeroko rozumianą informatyką – najczęściej posiadają także wykształcenie w tym właśnie kierunku. Programowanie nie sprowadza się tylko i wyłącznie do projektowania programów. Jest to pojęcie o znacznie szerszym znaczeniu. Zaprojektowanie i stworzenie aplikacji to jeszcze nie wszystko – trzeba ja także na wiele sposobów przetestować, a poza tym również utrzymać jej kod źródłowy. Do pisania kodów źródłowych są wykorzystywane języki programowania. Każdy z nich rządzi się swoimi regułami. Poza tym język programowania można stworzyć całkowicie od początku lub też dla odpowiednich potrzeb zmodyfikować taki, który już istnieje. Generalnie rzecz biorąc, programowanie nie jest procesem, który da się zaszufladkować w jednoznaczny sposób. W środowisku osób zajmujących się tą właśnie dziedziną cały czas trwają dyskusje na ten temat. Dla jednych jest to sztuka, dla drugich zwyczajne rzemiosło, a jeszcze inni uważają, że jest to proces o charakterze stricte inżynieryjnym. Jak więc zatem doskonale widać, opinie na ten temat są bardzo mocno podzielone. W każdym bądź razie praca programistów jest bardzo złożona i składa się na nią szereg aspektów. Koniecznie trzeba znać wiele języków programowania i umieć z nimi pracować w rozmaitych środowiskach. Wybór języka, w którym ma być program napisany także do prostych rzeczy nie należy. Najlepszym wyjściem z takiej sytuacji wybranie takiego języka, który przy zaplanowanych względem danego programu zadaniach sprawdzi się najlepiej i będzie najbardziej funkcjonalny. Bierze się tutaj pod uwagę szereg rozmaitych aspektów. Jeżeli zaś chodzi o historię programowania, to nie jest ona wcale tak krótka, jak niekiedy mogłoby się wydawać. Kiedy tak naprawdę powstała pierwsza maszyna charakteryzująca się tym, że jest programowalna – o tak naprawdę można się kłócić. Nie mniej jednak powszechnie przyjmuje się, że były to pierwsze lata dziewiętnastego stulecia, a maszyną takową było krosno tkackie, które zostało zaprojektowane przez francuskiego wynalazcę nazwiskiem Joseph Marie Jacquard. Tak więc próby budowania programowalnych maszyn były podejmowane – z lepszym lub gorszym skutkiem – w wieku dziewiętnastym. Niewątpliwie bardzo dużym przełomem w dziedzinie programowania było wynalezienie tak zwanej architektura von Neumanna, która zresztą jest stosowana do dnia dzisiejszego w znakomitej większości współczesnych komputerów różnego rodzaju. Wiele pomogło także w tym zakresie upowszechnienie się Internetu oraz jego systematyczny rozwój, który z dniem dzisiejszym się nie skończył i trwa nieustannie.

Programowanie niższego rzędu

23Programowanie niższego rzędu, zwane inaczej niskopoziomowym to rzecz całkiem odmienna od zwykłego programowania w Delphi czy C++. Różni się przede wszystkim tym, że w odróżnieniu od programowania wysokopoziomowego (gdzie to procesor decyduje o wykorzystywanych rozkazach na podstawie zawartego kodu) to my decydujemy „co jak i kiedy”. Co to oznacza? Oznacza to mniej więcej to, że budujemy aplikację cegiełka po cegiełce z tym wyjątkiem, że programujemy bezpośrednio na elektronice. Programując bowiem w językach niskiego rzędu (takich jak Assembler) to my decydujemy kiedy i w jakim celu użyty ma zostać dany układ elektroniczny lub kiedy ma zostać wywołany dany rozkaz procesora. Do czego wykorzystuje się tego programowanie niskopoziomowe? Przede wszystkim do tworzenia własnych systemów operacyjnych, albowiem ich podwaliny są właśnie pisane w językach działających bezpośrednio na procesorze. Oczywiście w takich językach jak Assembler można pisać zwykłe programy. Piszą je przeważnie hackerzy (nie mylić z crackerami!), którzy oczekują od napisanej aplikacji wyjątkowej szybkości działania i multiplatformowości. Czemu użyłem terminu „multiplatforma”? Otóż dlatego, że programy pisane w językach niższego rzędu nie są w żadnych wypadku uzależnione od systemów operacyjnych. Nie korzystają one z żadnych bibliotek stworzonych na potrzeby danego systemu i mogą być uruchomione na każdej platformie (aczkolwiek komputer musi w dalszym ciągu być o identycznych lub bliźniaczych architekturach czyli przykładowo, uruchomimy program na tym samym komputerze zarówno pod linuxem jak i pod windowsem, ale na przykład nie uruchomimy już tego samego programu pod Macintoshem bo procesory nimi sterujące są inne). Ważne jest jednak, aby był to program w całości zrobiony z języka niskopoziomowego, w wypadku programu mieszanego mogą narodzić się problemy. Kolejną ważną cechą tych programów, którą już zresztą wymieniłem jest szybkość. Dzieje się tak za sprawą tego, że aplikacje te nie przebywają mozolnej drogi przez wiele układów, tylko od razu „wciskają” się do procesora i ewentualnie (wedle uznania twórcy) osadzone mogą zostać w pamięci RAM. Liczy się jednak sam fakt, mówiący o tym, że aplikacje te nie są analizowane przez procesor, albowiem to procesor w tym momencie ma narzuconą listę rozkazów, którą wykonuje natychmiast, wykonując tym samym program. Mimo tych wielu zalet języki niskopoziomowe nie są aż tak popularne i nie są znane przez dużą liczbę użytkowników głównie ze względu na ogromny poziom zaawansowania i złożoność samego języka, oraz niebezpieczeństwo wynikające z nieprawidłowego użytkowania. Zdarzyć się może, że nieumiejętny programista wymusi na procesorze użycie zbyt dużej liczby rozkazów naraz i owy procesor spali. Trzeba być zatem bardzo ostrożnym przy programowaniu niskopoziomowym bo możemy znacznie więcej stracić niż zyskać, co oczywiście działa również w drugą stronę, przy umiejętnym programowaniu możemy stworzyć naprawdę potężne aplikacje, a z odpowiednią „drużyną” nawet i prosty system operacyjny.

Aspekty programów

32Programy komputerowe są esencją dzisiejszego świata. Jak wielka siła tkwi w informatyce możemy przekonać się niemal na każdym kroku. Sterowanie ruchem pociągów, sygnalizacji świetlnej w dużych aglomeracjach miejskich. Ale także w całkiem przyziemnych sprawach programy komputerowe odgrywają dużą rolę. Kto z nas nie spróbował choć raz pobawić się programem graficznym przy obróbce zdjęć. Retuszowanie, wycinanie, zmienianie kolorystyki oraz inne funkcje sprawiają, że każdy z nas może być mistrzem fotografii. Obróbka zdjęć to dobry przykład wykorzystania programu komputerowego w życiu codziennym. Tworzenie albumów rodzinnych nie jest już uzależnione od tego ile ma się wolnych klatek na błonie fotograficznej i czy ma się dodatkowy film lecz od tego ile ma się miejsca na karcie pamięci i czy ewentualnie ma się dodatkową pamięć. Robienie zdjęć w dzisiejszych czasach nie jest zajęciem dla wąskiej grupy posiadaczy aparatów fotograficznych. Obecnie niemal każdy telefon komórkowy posiada wbudowany (lepszy, gorszy) aparat fotograficzny. Samo robienie zdjęć również stało się łatwiejsze. Nie ma potrzeby martwienia się o różne parametry. Wszystkie niedoskonałości możemy zlikwidować przy pomocy programów komputerowych do obróbki zdjęć. Innym rodzajem oprogramowania komputerowego są przeglądarki internetowe. Aplikacje te przenoszą nas w całkiem inny wymiar. Pozwalają nam rozrywkę, zdobywanie wiedzy, komunikację. Coraz częściej dokonujemy zakupów przez Internet korzystając ze sklepów internetowych. Płacąc za zakupy przelewem dokonywanym przez Internet, w internetowym banku. Widzimy, że obok świata rzeczywistego tworzy się świat wirtualny, cyfrowy. Światem tym rządzą programy komputerowe, które są łącznikiem pomiędzy światami. Dzięki nim istnieje możliwość komunikacji dwustronnej. Mają one ogromny wpływ na świat rzeczywisty jak i również wirtualny. Największym osiągnięciem w dziedzinie programów komputerowych to sieć Internet. Internet dziś to coś co pozwala rozwiązać wiele problemów. Można powiedzieć, że Internet to dobrodziejstwo, niestety należy mieć tą świadomość, że Internet to również zagrożenie. Jak wszystko co zostało stworzone przez człowieka, programy komputerowe również posiadają wady (błędy). Błędy te wykorzystywane są przez innych w różnych celach. Czasem są to niewinne żarty, czasem tragiczne rzeczy. W świecie cyfrowym podobnie jak w tym rzeczywistym ciągle trwa walka z tymi, którzy czyhają by zrobić komuś krzywdę. Nieustanna walka ma jednak korzystny wpływ na programy komputerowe. W efekcie tej wojny otrzymujemy coraz lepsze i bezpieczniejsze programy. Najlepszym tego przykładem są przeglądarki internetowe, które jeszcze nie dawno potrafiły przetwarzać tekst i niewyszukaną grafikę. Dziś przeglądarka to swoisty kombajn, który daje nam możliwość czytania tekstu, jak również korzystania z innych multimediów. Wbudowane odtwarzacze pozwalają nam odsłuchiwać audycje stacji radiowych czy programów telewizyjnych. W łatwy sposób możemy sobie sami stworzyć galerię zdjęć i pochwalić się nią światu.

Programowanie wyższego rzędu

22Załóżmy, że zwykły użytkownik komputera chce zostać programistą. Nie jest on jednak po szkole informatycznej lub odpowiednich studiach i wszystko chce robić sam. Pierwsze co musi tak naprawdę zrobić to zdecydować się jaki język programowania chce wybrać. Istnieją dwie główne kategorie takich języków, a mianowicie języki wysokopoziomowe i języki niskopoziomowe. Czym one się różnią? Różnią się przede wszystkim oddziaływaniem na komponenty komputera. Język wysokopoziomowy to język normalny, po skompilowaniu kodu, już jako gotowy program trafia przez procesor do RAMu gdzie zostaje wykonywany. Język niskiego rzędu natomiast oddziałuje bezpośrednio na elektronikę, a konkretniej na procesor. W językach wysokopoziomowych tworzymy program w oparciu o przygotowany algorytm, a następnie zapisujemy ten algorytm w wybranym przez nas języku. Algorytm ten (już pod postacią aplikacji) konwertowany jest na język binarny i w zależności od poleceń jakie wykorzystaliśmy przy tworzeniu programu procesor przy odczytywaniu danej aplikacji uruchamiał będzie odpowiednie układy elektroniczne i wykonywał odpowiednie rozkazy. Każdy język jednak nadaje się do czegoś zupełnie innego. Trzeba więc zastanowić się co tak naprawdę chcemy tworzyć. Gdy stawiamy na programy użytkowe, które korzystać będą z dóbr starych komputerów i systemów operacyjnych DOS polecam zapoznać się z Pascalem oraz Turbo Pascalem, które pozwalają tworzyć programy w trybie tekstowym. Ci z was jednak, którzy będą korzystali ze swoich programów na nowszych maszynach z zainstalowanym systemem 2000, XP lub nowszymi niech zaglądną do sieci i poszukają informacji na temat Delphi. Delphi jest to język programowania wykorzystywany przede wszystkim do tworzenia aplikacji użytkowych, bazuje on na okienkach (formach), z których stworzona jest aplikacja. Delphi ma zarówno pełne wsparcie dla DirectX jak i dla OpenGL dlatego aplikacje możemy tworzyć zarówno dla systemów firmy Microsoft jak i dla systemów z rodziny Linux. Trzecim najbardziej popularnym i z pewnością najbardziej optymalnym w zastosowaniach jest język C++ będący prawdziwym kombajnem. Do właśnie w nim pisane są najpopularniejsze aplikacje, a także nasze ulubione gry komputerowe. Jest to język współpracujący przede wszystkim z systemami Windows. Za jego pomocą przy odpowiednich umiejętnościach stworzyć możemy na prawdę zaawansowane aplikacje. Nie zapominajmy jednak, że tworzenie programów to rzecz jedna, a pisanie zaawansowanych gier komputerowych to rzecz całkiem odmienna, albowiem w przypadku gier musimy się zaopatrzyć w coś więcej niż w samą znajomość języka programowania. Nie mówię tu oczywiście o tytułach takich jak saper czy kółko i krzyżyk ponieważ to można zrobić nawet w starym, dobrym Pascalu. Mówię tu o tytułach rozbudowanych, które korzystają z masy oddzielnych bibliotek, w które nie tylko trzeba się zaopatrzyć, ale następnie je skonfigurować odpowiednio. Potem zostaje najtrudniejsza rzecz, czyli sprawa grafiki i fizyki. Musimy znaleźć zadowalający nas silnik graficzny i wpleść go do programu. Następnie przy tworzeniu animacji i innych podobnych rzeczy musimy pamiętać o prawach fizyki, które również powinniśmy w takiej grze zamieścić. Jak widzicie więc pisanie gier to „ciężki kawał chleba”. Nie dziwota zatem, że nad jedną grą pracuje dzień w dzień nawet przez kilka lat studio profesjonalnych programistów.