Май само аз не съм се разписал, така че и мойто време дойде.
Според много зависи от това към каква област искаш да се ориентираш. Въпреки че във всички случаи ще трябва да се запознаеш с математиката в програмирането, а именно алгоритми и структури от данни. Освен това ако искаш да израстнеш и като акъл, и като професионалист, ще е необходимо да се научиш на тъй наречения "дизайн на софтуер", а именно - в момента в който ти дадат някаква смислена задача да не се втурваш да търсиш с коя функция се правеше еди кое си, а да си представиш нещата на още по високо ниво като блокчета и връзки между тях. Иначе казано - молива, хартията и диаграмите не са отживелица а фундамент в програмирането. Накрая, може би и по важност (според мен), идва познаването на изчислителната техника поне основни понятия. Дори да решиш да се занимаваш с разни уеб глупости (за което наблюдавам, че има сериозен глад, поне в България) трябва да имаш поне елементарна представа какво е това памет, как се заделя, освобождава, достъпва и какво коства това на процесора/ите, хеш, рекурсия, независимо колко добре даден език скрива това от теб. Не е нужно да изобретяваш колелото, но може да е само плюс ако знаеш как работи.
И след този кратък увод ето и моите предложения за езици:
1) C - лично аз го учих с наръчника на Хърбърт Шилд, но подозирам, че нещата щяха да се развият много по-добре ако бях започнал с Кърниган и Ричи (Програмният език С). Невероятно добра книга, кратка, ясна, със страхотни примери в нея. Ще се запознаеш с работата на компютрите на толкова ниско ниво, колкото е задължително за всеки програмист (независимо в каква сфера) (отново лично мнение).
2) Тук вече идва широкия избор - научи някакъв език с добра обектно-ориентирана подръжка. Моят фаворите C++, Java, Python, с РНР, Perl, JavaScript не съм запознат, но другите са изказли различни мнения. На този етап ако все още имаш интерес бих ти препоръчал и една фундаментална книга "Design Patterns", но тя би ти била доста полезна при работа върху истински проекти, заедно с други хора с повече опит в дизайна.
За алгоритмите ... нищо не мога да ти кажа, винаги ми е било скучно да ги изучавам просто, за да ги науча (може би task_struct би казал "You'd better remain poor mathematician"). Обикновено съм разучавал конкретни видове, но съм знаел каква е крайната цел. Както и да е и тях ги разучавам на C, просто на мен ми се вижда най-чист и най-лесно го рабирам.
Накратко мнението ми - започни със С (почти задължително), научи поне един ОО език (C++/Java) не толкова за езика, колкото за да опознаеш принципите на ООП и дизайна.
Поздрави,
Ицо
ПП: Вече съм в екшъна и очаквам яко оплюване