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.

Języki programowania

30Korzystanie z rozmaitych, szeroko rozumianych programów komputerowych jest możliwe w głównej mierze dzięki językom programowania. To właśnie dzięki nim możliwe jest tworzenie takich aplikacji. Pod pojęciem języka programowania należy rozumieć zbiór zasad, dzięki którym jest możliwe określenie czy ciąg symboli tworzy ogólnie program (nie zawsze ciąg symboli oznacza to, że jest już programem). Poza tym zasady te odnoszą się także do opisywanych w tym ciągu obliczeń. Reguły rządzące językami programowania podzielić można na dwie podstawowe kategorie, a mianowicie na semantyczne oraz synktatyczne. Za ich sprawą jest wiadome, co trzeba zrobić, aby poszczególne wyrażenia były konstruowane w taki sposób, by były dla komputera zrozumiałe. Język programowania – podobnie zresztą jak i cały proces programowania – nie jest czymś, co da się jednoznacznie zaszufladkować. Języki te bowiem definiuje się w oparciu o kilka bardzo istotnych zasad. Tak więc bierze się pod uwagę ich funkcje. Chodzi mianowicie o to, że zawsze używa się konkretnego języka pod określony program, który ma do spełnienia takie i takie zadania. Musi zatem w odpowiedni sposób przetwarzać polecenia. Ważne jest także przeznaczenie ostateczne programu. Dzięki językom programowania jest możliwe wydawanie komputerom konkretnych poleceń. Za ich sprawą można także kontrolować wiele urządzeń. Ponadto każdy język programowania musi zawierać odpowiednie konstrukcje składniowe oraz moc. Jedne języki są mniej, inne natomiast bardziej skomplikowane. Ogólna ich liczba jest niemożliwa do precyzyjnego oszacowania, ale z całą pewnością należy ją podawać w tysiącach. Poza tym każdego jednego dnia powstaje w tej dziedzinie coś zupełnie nowego, co oczywiście uniemożliwia jakiekolwiek precyzyjne wyliczenia. Sporo spośród znanych obecnie języków programowania zostało stworzonych całkowicie od podstaw. Jednakże znakomita większość z nich jest po prostu kolejną modyfikacją tego, co już wcześniej istniało. Różnorodność w zakresie języków programowania oraz tak ogromna ich ilość wynikają przede wszystkim z tego, że również i potrzeby w zakresie programów są niesamowicie urozmaicone. Nie da się wszystkiego napisać, używając takich samych języków. Rzecz jasna próby ujednolicenia i stworzenia jednego uniwersalnego języka są podejmowane już od dawna, aczkolwiek bez żadnego rezultatu. Nie da się po prostu czegoś takiego stworzyć. Każdą sytuację, w której jest potrzebny jakiś język programowania można opisać na kilka sposobów. Bierze się przy tej okazji wiele rozmaitych czynników i aspektów, jak chociażby wielkość aplikacji, indywidualne preferencje programistów co do pracy z poszczególnymi językami, szybkość programów i mnóstwo innych rzeczy. bez względu jednakże na tak ogromną różnorodność można z powodzeniem wyszczególnić takie same elementy składające się na każdy język programowania. Tak więc wspomnieć w tym miejscu trzeba o składni, semantyce, typie danych, a także o standardowych bibliotekach. Te wszystkie elementy znaleźć można w każdym języku.

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.