Every once in a while I'm asked in interviews which I like the best- low level or high level. It seems to me that the implicit message is that they are both a specialty and they want to know which direction I'm heading. The trouble is, I seem to like both. Low level is extremely challenging and often requires a great deal of esoteric knowledge. High level is where all the sexy things happen: applications that people use directly, results that can be easily demonstrated (showed off) in a way that is accessible to everybody, and you get to work with really advanced tools and interact with new technologies. I would really love to do both, even if it means alternating between them (I doubt there are jobs that will let me do both simultaneously), but I'm guessing that the industry rewards specialists more than generalists. Will it really be problematic career wise if I never choose one over the other? Is it practical to alternate between the two in the sense that if I were to leave a job doing one of them, I should experience no friction trying to get a job doing the other (assuming I'm reasonably in the loop)? Are there career opportunities where you get to do both? Do I really have to choose one over the other? 
High level vs. low level programming. Do I really have to choose?
low level;high level
First, Whichever path you choose, be aware that your surroundings might change. :)Also, I don't think you have to choose between one or the other. Rather, your options depend more on the project and the group that you're working with.It's likely that applying for a specialist job at a big corporation, you'd find it hard perform other tasks.It's also likely that a generalist role won't give you time to dig deeper into a small part.It's equally likely that having some generalist skills will make you more efficient at doing specialist work, since you won't have to rely on others as much to forge ahead.It's also possible that a generalist role will need some specialist knowledge, and if you look for a small company or startup that works in the area where you specialize, you could have ample opportunity to shine in your specialist field.I'm actually facing these issues at my current job..I've specialized in C++, OpenGL, 3D-simulations, game engine architecture and such things, but last year I've been using a soldering iron quite a lot (mashing together USB boards, prototypes, servos and motors, as well as tuning and programming these servo controllers). I might also have to make some web site prototypes for a few services that we're need. It's good fun, but I wouldn't want to do it forever, as my specialization wanes a bit, and there's probably others who are better at that anyway. Hopefully the company grows and we can hire more engineers. We're just two C++/Python guys at the moment (with me spending 60-75% of my time on hardware).So, select your projects carefully and you don't have to abandon anything, but you need to check where your career is heading every now and then (as do everyone).