|
I do software for other engineers almost exclusively, what you would call "low level". Frameworks, APIs, compilers, query engines, highly concurrent code, distributed systems, etc. The "hard" stuff. (I've done embedded too) Building tools is what I truly love to do, they support business use cases, and I understand them, and I build my tools accordingly. For me it's the most fulfilling kind of software development. You need to know your stack to the metal, but you may not need to tinker with it. For example, I do a lot of Java, but high performance Java, I understand CPU cache access times, and roughly what hotspot will generate, what the OS will do, etc. and have the tools to check my assumptions. I don't do the low level stuff unless absolutely necessary, but I use the tools I have to their limit. You get deep knowledge of software stacks, and get to do experiments, and get to use all the cool algorithms and techniques, and even develop a few new ones. The part I love most, is that you keep learning. There's so much to learn and it's wicked fun. I've done high-level stuff, but I end up liking things like rendering engines or layout engines rather than building a dialog box. I'm ranting, so TLDR: learn your stack, fully, to the transistors if you can, and pick the spot where you have most fun. Money will follow. |