Cóż, trudno policzyć, ile się uczyłem. „Symfonia” krążyła po domu przez zdecydowaną większość mojego życia i wiedza jakoś przesiąkała, choć moje zrywy do nauki programowania były tyleż liczne co krótkie. W pisaniu prymitywnych programów z lubością wprawiałem się w okresie gimnazjalnym, ale nic sensownego nie stworzyłem. Dopiero wraz z początkiem liceum wpadłem w tryby ekstremalnego kursu algorytmiki. Jakkolwiek „skończyłem” go… przedwcześnie, to jednak zapewnił mi solidne podstawy teoretyczne pod pisanie bardziej złożonych programów. Tak naprawdę bez znajomości algorytmów i struktur danych programowanie nie ma sensu — trzeba nie tylko znać język, ale i mieć w nim coś do powiedzenia.
Potem to już tylko praktyka: w 2006 roku zainicjowałem pierwszy bardziej znaczący projekt: AI do silnika Spring (reimplementacja Total Annihilation). Razem z Dragonem rozwijaliśmy go przez kilka miesięcy. Nie osiągnął sukcesu i w sumie zakałapućkaliśmy się w pewnym momencie w różnych problemach tak bardzo, że odechciało nam się kontynuacji prac; niemniej zdobyliśmy nieco doświadczenia i obycia zarówno z C++ jak i środowiskiem Visual Studio. Projekt VCMI ruszył z końcem maja 2007 roku. Było to drugie znaczące przedsięwzięcie jakie podjęliśmy z Dragonem, za prace wzięliśmy się zaraz po zdaniu matury. Mieliśmy wtedy chyba wciąż jeszcze więcej uporu niż umiejętności… jak widać ten pierwszy jest ważniejszy dla przeżycia projektu.
Gdzieś zaraz na początku „Symfonii” była taka złota myśl: „Aby pisać, trzeba pisać”. Ona chyba najtrafniej odpowiada na twoje pytania. Żadna szkoła, żadne studia nie nauczą Cię dobrze programować. Co najwyżej zmuszą Cię do zbudowania pewnych podstaw, ale to samo w sobie nie jest wiele warte. Jeśli idzie o programowanie praktycznie wszystkiego nauczyłem się sam, w toku prac nad kolejnymi projektami. Poszukując rozwiązań wyzwań, przed jakimi stawałem oraz ucząc się na własnych błędach. Nie powiedziałbym, żebym w ciągu blisko trzech lat studiów nauczył się czegoś, co konkretnie mi się przydało do VCMI. C++ znałem na wyraźnie wyższym poziomie niż był nauczany. Nie twierdzę tutaj, że studia informatyczne nic programiście nie dają — bo dają sporo, poszerzając ogólną wiedzę i horyzonty informatyczne. Studia informatyczne są na pewno przydatne, niemniej nie są ani koniecznie ani wystarczające, by zostać programistą zdolnym do napisania gry. Nigdy nie zastąpią samodzielnie zdobytego doświadczenia.
Tak więc po pierwsze, staraj się jak najwięcej tworzyć. Postaw sobie jakieś możliwie proste, ale jednocześnie konkretne cele i dąż do ich realizacji. Różne minigry (nawet typu kółko i krzyżyk) są zawsze dobrą wprawką, nawet jeśli będziesz wynajdywać koło po raz n-ty. Czego się przy tym nauczysz, to już twoje. Po drugie, radzę jak najszybciej oswoić się z jakimś solidnym środowiskiem programistycznym, ze szczególnym poleceniem Visuala. Wielu lekceważy ten element, ale dobrze dobrane IDE jest ogromnie ważnym czynnikiem wpływającym na efektywność i wygodę naszej pracy. Naucz się obsługi debuggera. Nikt nie pisze od razu bezbłędnych programów, kluczowe jest by móc szybko odnajdywać błędy; nadto sama umiejętność krokowego wykonywania programów i śledzenia zmian zachodzących w ich wnętrzu jest pożyteczna także dydaktycznie (np. analiza działania jakichś przykładów).
Jeśli idzie o biblioteki, to trudno mi coś doradzić — do C++ jest ich ogromna ilość. Zasadniczo bibliotek szukasz i (jak znajdziesz) uczysz się, gdy potrzebujesz zrealizować jakąś konkretną funkcjonalność. Dopiero pod jej i twojego programu kątem, można dokonać rozważnego wyboru.
Wyjątkiem jest może zbiór bibliotek Boost, w którym jest sporo możliwości ogólnego zastosowania, które mogą się okazać przydatne praktycznie we wszystkich programach — ale nie polecałbym tych bibliotek początkującym.