Java by day...
I recently got asked how a Java programmer by day comes around to work with embedded MCUs by night. We Java developers are famous to think more in giga bytes, which is somewhat counterproductive in the embedded world.
Actually the reason is simple - I started my electronics career before I became a software developer. Back then East Germany was still alive, and electronics was an expensive hobby. So I stayed with quite small projects, more in the sense of small experiments. After the wall came down, it was easier to start real projects - but being in school limits the financial abilities a little bit. And electronics, back then,still meant only small scale stuff for someone starting in the field.
But at the same time I got my first own computer (there was some previous contact due to organized spare time activities, but owning my own one is different). And working with it was much more rewarding, because one gets much faster feedback, and it’s much easier to retract from errors. And so I got sucked into the world of programming - first BASIC, then assembler. I never really lost my affection to the world of electronics - but I discovered that the combination with a computer can be really powerful (adding hardware like stepper motors, displays and such stuff to a computer is even more rewarding than a running program). And there were so many extensions one can build…
When I then started going to university, taking all the electronics stuff was too cumbersome, so it was degraded to weekend work. And so the software won over more and more of my time - and studying Business Informatics didn’t help with that. This was also the time where I got into contact with Java. After having worked with languages like Turbo Pascal, COBOL, C and C++ it was refreshing. And then came my first real job.
It was only 10 years after that I decided to need a hobby to have a diversion from my job, and to get some time for myself. I discovered some old unfinished projects of mine (which have followed me through several homes), and started working on them. And then I found, in the great vastness of the internet, how far hobby electronics have come since then. MCUs were now affordable, and even the programming tools were often free (in the mid 90s, the software for programming a XC9572 cost several hundred bucks)! There were things like the LaunchPad, the Cypress PSoCs or the mbed. I took part in several design contests (and I even won one :)
So how does working on Java compare with all the embedded stuff? In the end they are just different challenges. On may day job I care about building a eCommerce software (or more a platform, depending how one views it) being able to handle millions of orders. So I care more about things like clean APIs, building the right frameworks, implementing the business processes properly, or how to talk properly to an Oracle DB. When working in the embedded world, I think more about how to make best use of the sparse pins, how to implement my stuff in C, and how to choose the right peripheral component. Due to the fast MCUs available now, performance is not really an issue to me (but memory consumption sometimes is).
What I have seen so far is that my day work influences my embedded work - I try to make my software more modular, and I try to come up with a clean architecture in the end. On the other hand, working in a constrained environment helps my in my day work - we care about memory usage and performance there too. And working with all the more-or-less standardized electronics components (its all just volts and amperes, you can always connect them together and it will work most of the times ;-) makes me wish to have that in software too.