I am new to SE and this seemed like the best place to ask my question, I apologize if is not.

I am pursuing a MS in Electrical Engineering with a focus in embedded systems/architecture. I want to pursue a career in firmware and embedded systems development.

I can take two more courses from the computer science department and I would greatly appreciate advice from anybody with experience in this field on which 2 of the following 4 courses would be most beneficial for a career in embedded systems.

  • Intro to Compilers:
    Techniques for translating modern programming languages to intermediate forms or machine-executable instructions/their organization into compiler. Lexical analysis, syntax analysis, semantic analysis, data flow analysis, code generation. Compiler project for prototypical language.
  • Operating Systems (graduate level, I already took the undergrad):
    Conceptual foundation of operating system designs and implementations. Relationships between operating system structures and machine architectures. UNIX implementation mechanisms as examples.
  • Computer Networks:
    Concepts, principles, protocols, and applications of computer networks. Layered network architectures, data link protocols, local area networks, network layer/routing protocols, transport, congestion/flow control, emerging high-speed networks, network programming interfaces, networked applications. Case studies using Ethernet, Token Ring, FDDI, TCP/IP, ATM, Email, HTTP, and WWW.
  • Wireless and Sensor Networks:
    Enabling technologies, including hardware, embedded operating systems, programming environment, communication, networking, and middleware services. Hands-on experience in programming tiny communication devices

closed as primarily opinion-based by Matt Young, PeterJ, tcrosley, uint128_t, Peter Smith Mar 28 '16 at 14:29

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.


For embedded system work, you don't need the compiler course; the other three are applicable, especially the last one. Since it covers embedded operating systems, and you already took the undergrad OS ourse, you can probably skip the graduate one. That leaves two courses, Computer Networks and Wireless and Sensor Networks, which are both applicable to embedded work.

p.s. The compiler course would be applicable if you were interested in writing optimized back-end code generators for embedded processors, since a lot of emphasis on optimization is typically part of a graduate-level compiler course, but that's a specialty (while interesting) that is quite removed from working on embedded systems themselves. I've done both but that's not the norm.

  • \$\begingroup\$ Thanks for the reply. Compilers sounds very interesting, but it's good to learn what more applicable than others. \$\endgroup\$ – rf22 Mar 28 '16 at 3:19

All of them.

My daily work requires elements from all four. I'd say for entry level positions you might get away with operating systems and computer networks, but employers are also interested in familiarity with different devices, and understanding the compilation process is also a big advantage when optimizing for size.

For a proper career, you want theory more than anything else -- every week a new framework is invented, and any hands-on experience gets worthless rather quickly.

  • \$\begingroup\$ thanks for the reply. I unfortunately can only take 4 courses from the CS department and I have already taken 2, and I know they are all very important. You mentioned networks and OS, would you recommend taking Networks and Operating systems while in school, and the other 2 on my own time after I graduate? \$\endgroup\$ – rf22 Mar 28 '16 at 2:16
  • \$\begingroup\$ Yes, that sounds good as well. You probably won't come across problems that require compiler design knowledge in the beginning, and the hands-on stuff you can learn with a small project outside of university. \$\endgroup\$ – Simon Richter Mar 28 '16 at 15:44

Not the answer you're looking for? Browse other questions tagged or ask your own question.