Algorytm jest to zbiór czynności, który pozwala osiągnąć cel. Głównym zadaniem algorytmu jest przekształcić dane wejściowe na końcowe dane. Wszystko jest wykonywane w skończonej liczbie kroków. Ten sam problem można rozwiązywać na wiele różnych sposobów. Czasami nie można stwierdzić, które rozwiązanie jest najlepsze dopóki nie zostaną określone dodatkowe założenia.
Przed przystąpieniem do zadania należy określić cel jaki chcemy osiągnąć. Składają się na to dane wejściowe oraz dane wyjściowe. W tym kroku należy określić w jakiego typu zmiennych będą przechowywane dane. Można też się zastanowić czy nie istnieję lepsze typy zmiennych od zazwyczaj używanych (przykładowo w C++ dla liczby naturalnej użyć nie int, a unsigned int).
Drugi krok polega na poszukiwaniu algorytmu, który będzie dokładnie wykonywał kroki określone w specyfikacji. Pierwszy szkic algorytmu nie musi być optymalny. Jednak należy pamiętać, aby na tym etapie zastanowić się czy nie istnieje szansa, aby niektóre kroki pominąć, albo wykonać je w inny sposób. Ten proces nazywany jest wyborem odpowiedniego algorytmu. Oczywiście należy już na tym etapie wiedzieć ile algorytm będzie miał do dyspozycji pamięci RAM czy jaki procesor. Często istnieje możliwość optymalizacji, że wykonywany program zużyje mało pamięci kosztem czasu, albo odwrotnie.
Trzeci krok polega na zapisaniu swoich przemyśleń z poprzedniego kroku w wybranej formie. Nie musi to być od razu kod ostateczny. Może to być lista kroków, zwykły opis słowny, schemat blokowy algorytmu, programu lub w jakikolwiek inny sposób. Chodzi o to, żeby mieć po tym kroku prócz jasno określonego celu wstępną wersją algorytm. Można też użyć formy mieszanej tj. niektóre fragmenty np. w schemacie blokowym zacząć zapisywać używając zapisu w wybranym języku programowania.
Rozpisane rozwiązanie może nie działać dla niektórych zestawów danych, dlatego należy dokonać analizy i dowodu poprawności algorytmu. Jeśli algorytm radzi sobie ze wszystkimi możliwymi zestawami danych określonymi przez specyfikację (w tym danych "skrajnych" tj. duża ilość elementów, albo nietypowe dane) to znaczy, że rozwiązanie jest właściwe i można przejść do pisanie programu.
Po dowodzie poprawności algorytmu można przejść do pisania kodu. Bardzo ważne jest, aby napisany program przetestować. Nawet dla danych rozpatrywanych w poprzednim punkcie. Pozwoli to wyeliminować podejrzenie popełnienia błędu w rozważaniach, a przede wszystkim dowiedzie poprawności algorytmu. Ze względu na pisanie kodu ostatecznego należy dokładnie ocenić efektywność algorytmu: złożoności obliczeniowej czasowej i pamięciowej. Oczywiście czasem znalezienie lepszego rozwiązania jest niemożliwe, ale zawsze warto spróbować to uargumentować. Często prowadzi to do drobnej aczkolwiek sensownej optymalizacji.
Przypuśćmy, że chcemy znaleźć największą liczbę pośród trzech podanych liczb rzeczywistych a, b i c.
Jest to najlepsze rozwiązanie, ponieważ wykonujemy tylko 2 porównania, a nie jak poprzednio 3. Tej złożoności już nie można poprawić ze względu na fakt, że wśród 3 elementów mamy dwie kolejne pary liczb. Użycie tylko jednego porównania jest niemożliwe. Algorytm został ukończony.