Programowalność
Super User   

 

To, co odróżnia współczesne komputery od wszystkich innych maszyn, to możliwość ich programowania, czyli wprowadzenia do pamięci komputera listy instrukcji, które mogą być wykonane w innym czasie.

W większości przypadków instrukcje, które komputer wykonuje, są bardzo proste – dodawanie dwóch liczb, przeniesienie danych z jednego miejsca w inne, wyświetlenie komunikatu itd. Instrukcje te odczytywane są z pamięci komputera i zazwyczaj wykonywane są w tej samej kolejności, co w pamięci. Istnieją jednak instrukcje umożliwiające „skok” w pewne określone miejsce programu i wykonanie go z tego miejsca. Ponadto instrukcje skoku mogą być wykonane warunkowo, co umożliwia wykonanie różnych zestawów instrukcji w zależności od uzyskanych wcześniej wyników obliczeń. Ponadto istnieją instrukcje umożliwiające tworzenie podprogramów, pamiętające miejsce z którego wykonano skok, by wrócić do niego po wykonaniu podprogramu.

Programowanie można w pewnym stopniu przyrównać do czytania książki. W większości wypadków słowa odczytywane są po kolei, zdarzają się jednak momenty, gdy czytelnik wraca do wcześniejszego rozdziału lub omija nieciekawy fragment. Komputery mają możliwość wykonania pewnych instrukcji w pętli, dopóki nie zostanie spełniony jakiś warunek.

Można tu użyć przykładu człowieka próbującego zsumować kolejne liczby na kalkulatorze. Dodaje 1 + 2, do wyniku dodaje 3 itd. Przy próbie zsumowania 10 liczb nie stanowi to problemu, jednak już przy tysiącu po pierwsze zajmuje to bardzo dużo czasu, po drugie przy tak dużej ilości operacji istnieje duże prawdopodobieństwo błędu. Komputer z kolei wykona tę operację w ułamku sekundy, przy użyciu prostego programu:

mov #0,sum        ; ustaw sum na 0
mov #1,num        ; ustaw num na 1
loop: add num,sum ; dodaj num i sum
add #1,num        ; dodaj 1 do num
cmp num,#1000     ; porównaj num z 1000
ble loop          ; jeżeli num <= 1000, wróć do 'loop'
halt              ; koniec programu. wstrzymaj działanie

Po otrzymaniu rozkazu wykonania programu komputer wykona serię operacji dodawania. Prawdopodobieństwo wystąpienia pomyłki jest znikome. Komputery jednak nie potrafią myśleć samodzielnie i dany problem mogą rozwiązać wyłącznie według algorytmu przygotowanego przez człowieka. Inteligentna istota, napotkawszy podobne zadanie, mogłaby zorientować się, że do jego wykonania wystarczy użyć prostego równania:

1+2+3+...+(n-1)+n = {{n(n+1)} \over 2}; n=1000

Innymi słowy komputer wykona postawione przed nim zadanie, nie zastanawiając się nad efektywnością wykonanej przez niego „pracy”.