+++Computer Science I: Programming Methodology (http://academicearth.org/courses/programming-methodology)
+++Computer Science II: Programming Abstractions (http://academicearth.org/courses/programming-abstractions)
+++Computer Science III: Programming Paradigms (http://academicearth.org/courses/programming-paradigms)
Of course you can throw in there:
+++Introduction to Algorithms (http://academicearth.org/courses/introduction-to-algorithms)
+++Data Structures (http://academicearth.org/courses/data-structures)
You could focus on developing for the web and work with tools that make dealing with the challenges of the internet easier.
You could focus on developing for a computer system, writing in low-level languages that help you take advantage of a system's hardware.
You could even focus on developing for an integrated circuit that doesn't even qualify as a full "computer" to most people.
Each of these avenues will lead you to different languages, tools, and paradigms.
So, the (rhetorical) question is, what are you trying to accomplish?