1. Poznać algorytmy i struktury danych - sortowanie, reprezentacja liczb w pamięci, kolejki, pętle, drzewa, może i grafy, podstawy logiki matematycznej, zasmakować matematyki dyskretnej, typy algorytmów (rekurencje, metoda dziel-i-rządź i inne)
2. Ogólne zagadnienia programistyczne - pętle, funkcje, operacje bitowe, pierwszeństwo operatorów
3. Poznać czyste C, w konsoli. Wypróbować 1. i 2.

Nauczysz się tworzenia dynamicznych struktur w pamięci (wskaźniki,
WSKAŹNIKI, referencje, wskaźniki

), zarządzania nią, dbania o porządek, poznasz mniej więcej, jak maszyna pracuje, by wykonać pożądane zadanie, bo C jest dość blisko sprzętu. I też będziesz miał okazję zobaczyć kod maszynowy przy odpaleniu debuggera.

Z języków obecnie i powszechnie używanych chyba tylko C jest językiem, w którym kompilator przekłada kod bezpośrednio na kod maszynowy. Poznać operacje plikowe.
4. Poznać ideę programowania obiektowego. Sporo współczesnych języków jest przynajmniej zorientowanych obiektowo (C# i Java z najpopularniejszych, to książkowe przykłady)
5. Ewentualnie przejść na język wyższego poziomu (tj. wyższy poziom abstrakcji) - C++, albo zarządzalne/interpretowane - Delphi, C#, Java, albo jakiś język skryptowy (najlepiej Python, najbardziej, że tak powiem, porządny jest) - one jednak ułatwiając wiele zagadnień rozleniwiają programistę. Wybór zależy od tego, jaki cel ma mieć Twoja zabawa w programowanie. Jeśli chcesz się na razie uczyć, warto zostać przy C/C++. Jeśli Ci się spodobają, można i tutaj szybko osiągnąć konkretny cel, kod jest teoretycznie najszybszy, ale języki wyższego poziomu bardziej skupiają się na szybkim osiągnięciu celu, kosztem pewnej straty wydajności.
6. Poznać API wybranego systemu operacyjnego, oczywiście z racji na dział, Win32.

Tutaj przyda się też już znajomość programowania wielowątkowego, wchodzą operacje asynchroniczne, protokoły komunikacyjne, programowanie sieciowe. Zaczyna się właściwa zabawa.

Jeśli Delphi/C#, to poznać .NET, Windows Forms. Mobilne wersje wszystkiego też są.
7. Bazy danych, SQL - chyba każdy się z tym styka prędzej czy później, nawet jeśli nie planował.
Wiele osób zaczyna naukę "programowania" od klepania stronek w PHP, czego efektem są "problemy" zgłaszane na forach i grupach dyskusyjnych, związane z nieznajomością podstaw programowania, algorytmiki, trudnością w przełożeniu nawet prostego problemu na kod, jeśli ktoś nie pokaże na przykładzie.
Najlepszych książek jest tyle, co programistów.

Dobra na początek może być książka o algorytmach i strukturach danych z przykładami implementacji w języku C. Pewnie jest kilka takich pozycji. Ale musi być wielka i ciężka. Takie są najlepsze.

Z kanonów informatyki mogę polecić "Algorytmy i struktury danych" Knutha. W zasadzie gdy zna się takie podstawy, sam język jest już tylko narzędziem i obecnie programista musi być dość elastyczny (do pracy przyszedłem jako javowiec, teraz chwilowo klepię w Pythonie

).