Program komputerowy

Program komputerowy (ang. computer program) – sekwencja symboli opisująca realizowanie obliczeń zgodnie z pewnymi regułami zwanymi językiem programowania. Program jest zazwyczaj wykonywany przez komputer (np. wyświetlenie strony internetowej), zwykle bezpośrednio, jeśli wyrażony jest w języku zrozumiałym dla danej maszyny lub pośrednio – gdy jest interpretowany przez inny program (interpreter). Program może być ciągiem instrukcji opisujących modyfikacje stanu maszyny, ale może również opisywać obliczenia w inny sposób (np. rachunek lambda).

Formalne wyrażenie metody obliczeniowej w postaci języka zrozumiałego dla człowieka nazywane jest kodem źródłowym, podczas gdy program wyrażony w postaci zrozumiałej dla maszyny (to jest za pomocą ciągu liczb, a bardziej precyzyjnie – zer i jedynek) nazywany jest kodem maszynowym bądź postacią binarną (wykonywalną).

Programy komputerowe można zaklasyfikować według ich zastosowań. Wyróżnia się zatem systemy operacyjne, programy narzędziowe, programy użytkowe (aplikacje), gry komputerowe i inne. Natomiast programy wbudowane w urządzenia, przechowywane zwykle w pamięci flash, określa się jako firmware.

Terminologia 
Określenie „program komputerowy” jest często używane zamiennie z określeniami „oprogramowanie” i „aplikacja”. Pierwszy z tych terminów podkreśla rynkowy charakter programów – programy (lub ich zespoły) często w połączeniu z bibliotekami, dodatkowymi danymi, wyróżniającą się nazwą i wsparciem producenta (dostawcy) stanowią produkt handlowy. Poprzez aplikację natomiast często rozumie się oprogramowanie bliskie użytkownikowi, to znaczy takie, z którym komunikuje się (często za pośrednictwem przyjaznego interfejsu użytkownika), by wykonać określone zadania (np. zredagować dokument).

Uruchomienie programu 
W najprostszym modelu wykonanie programu (zapisanego w postaci zrozumiałej dla maszyny) polega na umieszczeniu go w pamięci operacyjnej komputera i wskazaniu procesorowi adresu pierwszej instrukcji. Po tych czynnościach procesor będzie wykonywał kolejne instrukcje programu, aż do jego zakończenia. Program może zakończyć się w dwojaki sposób:
 poprawnie – zgodnie z życzeniem twórcy programu i jego użytkownika;
 błędnie – z powodu awarii sprzętu bądź wykonania przez program niedozwolonej operacji, np. dzielenia przez zero lub próby zmiany programu.
Program komputerowy będący w trakcie wykonania nazywany jest procesem lub zadaniem.

Specjalnym rodzajem programu komputerowego jest system operacyjny (występujący często jako zbiór programów). Odpowiada on za opisaną wyżej czynność ładowania i uruchamiania programu. System operacyjny jest jedynym programem sprawującym kontrolę nad sprzętem. Zarządza on zasobami systemu komputerowego (takimi jak pamięć, czas procesora, dostęp do urządzeń peryferyjnych), przydzielając je według określonych kryteriów uruchamianym programom.

Aby jakikolwiek program mógł zostać uruchomiony, sprzęt musi zostać do tego przygotowany. Odpowiedzialne jest za to na ogół specjalne oprogramowanie układowe wbudowane w architekturę komputera. W komputerach klasy PC oprogramowanie to nosi nazwę BIOS lub UEFI i przygotowuje sprzęt do użycia, a następnie startuje program rozruchowy, który ładuje do pamięci system operacyjny i uruchamia go, tym samym przekazując mu kontrolę nad komputerem.

Jeżeli program nie jest zapisany w postaci binarnej, ale w postaci kodu źródłowego czytelnego dla człowieka, nie może być bezpośrednio wykonany przez procesor. W takim wypadku możliwe są dwa podstawowe rozwiązania. Pierwsze z nich polega na skorzystaniu z pomocy specjalnego programu nazywanego kompilatorem. Kompilator tłumaczy kod źródłowy, zapisany w danym języku programowania, na kod maszynowy, dzięki czemu możliwe staje się jego późniejsze uruchomienie. Drugim rozwiązaniem jest skorzystanie z programu interpretera. Interpreter na bieżąco odczytuje kod źródłowy, analizuje go i wykonuje kolejne porcje przetłumaczonego kodu. Programy przeznaczone do interpretacji często nazywane są skryptami. Prócz tego istnieją jeszcze inne pośrednie rozwiązania jak np. kompilacja do kodu bajtowego, JIT albo CIL.

Program a dane 
Program można podzielić na dwie części (obszary):
 część zawierająca kod – składająca się z rozkazów sterujących działaniem procesora;
 część zawierająca dane – składająca się z danych wykorzystywanych i przetwarzanych przez program, np. adresów pamięci, stałych liczbowych, komunikatów tekstowych, danych graficznych itp.
O ile operowanie na danych przez program jest zupełnie normalne i oczekiwane, o tyle operowanie programu na własnym kodzie nie jest typową praktyką. Przewidywanie zachowań programów, które modyfikują własny kod w czasie działania, jest bardzo trudne. Dlatego na ogół przyjmuje się założenie (lub wręcz jest to wymuszane przez system wykonawczy), że obszar kodu programu w pamięci operacyjnej jest tylko do odczytu. Programy nie respektujące tego podejścia to programy samomodyfikujące się, co jest charakterystyczne np. dla wirusów polimorficznych.

Programowanie 
Programowanie jest procesem tworzenia programów (względnie: oprogramowania). Jest to proces cykliczny polegający na realizacji kolejnych etapów:
 edycji kodu źródłowego,
 uruchamianiu programu,
 analizie działania i rejestrowaniu występujących błędów,
 powrocie do edycji kodu źródłowego (pkt 1) w celu poprawienia błędów lub dalszego poszerzania funkcjonalności.
Osobę zajmującą się programowaniem nazywa się programistą. W inżynierii oprogramowania programowanie jest także przedstawiane jako jeden z etapów powstawania i rozwoju oprogramowania.

W dziedzinie programowania wyróżnia się pewne modele działania, takie jak programowanie zespołowe czy programowanie parami. W dobie spadku cen sprzętu komputerowego, dostępności oprogramowania i literatury programowanie może mieć również charakter hobbystyczny. W ciągu lat programowanie stało się rozległą dziedziną o silnych podstawach teoretycznych. Związane są z nim pojęcia takie jak: algorytm, struktury danych, metody numeryczne, programowanie obiektowe, kryptografia i wiele innych.

Zobacz też 

 program użytkowy
 program narzędziowy
 oprogramowanie
 zintegrowane środowisko programistyczne
 kompilator

Przypisy