Ale teď zpátky k tématu. Podle mě je stejně důležité, jako se naučit programovat, naučit se neprogramovat. Základem by mělo být vždycky vyřešení konkrétní úlohy a to může být nejrychlejší v tabulkovém procesoru, v databázi typu Access, v nějakém programu pro statistiku atd. Tedy zvládnout doménu, ve které se úloha nachází, porozumět zadání a korektně vyřešit úlohu v nejkratším možném čase. Pochopit význam Parettova pravidla a nesnažit se v řešení jít dál, než je nutné. Troufám si tvrdit, že není špatné začít zrovna tady.
Další úrovní je pak logicky naučit se jazyk, který má dostatečně velkou abstrakci a velkou zásobu standardních knihoven. Navrhoval jsem Python, ale existují i jiné alternativy (třeba Ruby). V takovém jazyce je možné snadno vyřešit spoustu úkolů bez velké námahy a bez vynalézání kola.
Pokračoval bych algoritmizací - naučit se základní algoritmy (řazení, binární vyhledávání, procházení do šířky a do hloubky) a porozumět datovým strukturám typu strom nebo hash. Naučit se základy OOP a pochopit jeho výhody i nevýhody. Zde je možné pokračovat v Pythonu (Ruby...) nebo zkusit třeba Scalu, Javu, C#. Statické jazyky vedou k lepšímu pochopení úlohy typů, parametrizace, variance apod.
Další krok je naučit se teorii složitosti (Amdahlův zákon), základy vícevláknového / víceprocesového programování (synchronizace, komunikace apod.) a zjistit, že existují úlohy, které jsou paralelizovatelné a úlohy, u nichž dominuje sekvenční složka.
Naučit se SQL, vztahy mezi tabulkami, normální formy, pochopit význam indexů, případně si něco zjistit o relační algebře. Nastudovat si význam a použití uložených procedur.
Teprve pak bych doporučoval nořit se hlouběji do operačního systému, naučit se C a případně C++, pochopit, jakým způsobem se alokuje paměť, naučit se pointerovou aritmetiku atd.
Co zbývá? Exkurze do jiných paradigmat (funkcionální a logické programování), ASM, textové algoritmy, základy konstrukce kompilátorů atd. atp.
Samozřejmě lze jít i jinou cestou - začít si programovat milion šestý grafický nebo textový editor v C, udělat si framework, který už existuje (a pravděpodobně je daleko lepší, než ten, který si člověk bez dostatečných zkušeností a s omezeným časem udělá sám a i tato cesta člověka mnohé naučí. Osobně doporučuju jít obecně "odshora dolů" a ne naopak. Ale to je na každém.