Many of us software engineers remain stuck in one or two technology domains. Reason is a mix of easy money on switching jobs and HR screening which do not let us cross-over to different product domain.
This pattern is good if one wants to be a jobber and stay happy working. To be a pro in one domain, one has to extra-ordinarily focus on particular technology. Unfortunately, this does not always happen in job.
Looking beyond it, one needs to see different worlds to have a diversified experience. Every domain has different patterns and work flows. Focus is different depending on the product and technology.
I consider myself lucky to have worked on a variety of products in Telecom, Embedded, VLSI tools, financial trading in last 10 years. Each domain has its own technology focus. Based on my experience, I am sharing my bits of experience below.
Telecom: Protocols development: Requirements are generally clear through RFCs, standard documents. Focus is on meeting specifications, adding distinguishing features.
Embedded: Real-time software, which is close to the hardware involving data processing on the fly. C/C++ and Assembly are language of choice. Focus is on smart usage of hardware with minimal software stack.
VLSI tools: Heavy softwares focus on extracting maximum of CPU and available memory. Language is not a barrier. Advanced algorithms, data structures along with multiprocessing, multi-threading.
Financial trading domain: Low latency smart software. Plethora of technologies are involved. Will write more on this in a separate text.