There are two goals here. Tackle them individually:
Building large complex systems:
Large complex systems come about as a result of two things:
- A vision for some product or service that is
useful and appeals to a large market
- A business plan to get from ground zero to fulfilling your
vision
Accomplishing this may mean partnering with other people. Clearly, you
are interested in the technical side of things - this is your strength.
You may need to find other people who share your vision to help
manage the non-technical side of things. This would include stuff like
raising capital, promotion and marketing. Each member of your group should
bring in a different core strength.
As a technical leader, you need a firm grasp of application
architecture. This is less a nuts-and-bolts programming skills issue than
it is understanding how various design patterns and technologies can be leveraged to achieve
your goals. Learn a bit about as many frameworks and design patterns as you can. You don't need to
become an expert on any one of them until you have a feel for the strengths
and weakness of each with respect to the application you are looking to
build.
Building general CS skills
Theory never goes stale. Obtain a strong background in the science side of your
computer engineering program. Take courses on language theory, discrete mathematics,
algorithm design/analysis, computer architecture, application architecture etc.
These will serve you well for the rest of your career.
Then there is the practical side of the issue: Which languages, technologies and frameworks should you learn about now
to leverage your career (with the hopes of doing something really big). To this end you are already on the right track. Be curious, expose yourself to
as many tools as you can. The more things you know, the easier it is to learn
new ones. Take the time to understand the model each tool is based on and how
it is similar to but different from other tools you have used.
Keep in mind that
programming languages are just the "tools of the trade", not the trade itself. Over time you will
find new tools and discard others.
Putting it all together
Let your imagination work on coming up with that "killer app". Make friends with
people having skill sets complementing your own. Talk and dream about big things together.
Work on developing your core CS skills
Gain some exposure to as many different tools and languages as you are comfortable with. Obtain a
good working knowledge of just the few that you find most useful to whatever you are doing at the
moment. Gaining a mastery of any one tool may take years, but let your
current needs be your guide. Be prepared to let your technical tool set evolve over time.