Everyone 'a dime a dozen' can't do it. I want to be the best. There's only a small percentile of people that have a strong design sense and can also program, and do it well. That is my goal.
I suggest you audit CS classes at Berkeley or Stanford if at all possible. I'm also a very practical programmer, but being exposed to the ides and theory are important, if for no other reason than you are aware they exist and gain an expanded ability to conceive of what is possible.
I think you're on the right, niche, track in a way: design and program. You're missing something else too: Operational Support (i.e.: Sys-Admin, Net-Admin). These days people are looking for a creature by the type of "DevOps": can program and do operational support.
The future is definitely a little bit bleaker for coder generalist because the current trend is leaning toward making sure everybody can code to some degree (which surprisingly is led by Microsoft Sharepoint, InfoPath, Access, VBA, Excel, LightSwitch and not Rails + JavaScript) because let's face the fact: hiring is expensive, hiring a software developer is even more expensive.
Soon the requirement would probably be: to design (UI), to program, to test, to maintain, to support operation, and to understand business.
Maybe you should explore the market a little bit further than the two skill set you mentioned because of 2 things:
1) There is a possibility that one day that making a good looking software is not as hard as it used to be once people catalogue the patterns and best practices. Once these patterns, best practices, and the tools exist, suddenly the bar of creating good looking UI and decent usability becomes lower and cheaper.
2) Not everyone wants to pay premium on good UI. These days, programmers can come up with a decent workflow and minimal UI and people are OK with that as long as it solves their business problem.