I am a programming language fanatic. Parsers, lexers, garbage collection, lambdas, clojures, thread pools, messaging protocols, etc. I love it all. (Well, I distinctly don't like working with Flex and Bison.)
I am a software developer. Rarely do I get to gestate in the wonderfully convoluted world of programming language design. Rather, I work with legacy systems, build new features, APIs and products. It's all about factoring code down into the smallest, simplest, usable modules. Test that code to hell and make sure everyone else can run your tests, too. Make sure it's readable and even more importantly: understandable. Factor, reduce, compress, strip, pare and crop until it hurts. Minimalism, man.
Software development is a dual world: Code, bytes, data and directly measurable properties that can be maximized, minimized and analysed ad infinitum. The other half is people - the so called "soft" skills. It's all about communication! Surprisingly, this is very similar to practical coding: Make sure you understand what you are communicating about. Distill the concept down into it's simplest, purest form and communicate that as directly as possible with as little clutter as possible. Good communication allows productive work to follow.