Thread: Becoming An Embedded Software Engineer

  1. #1
    Registered User
    Join Date
    Nov 2012
    Posts
    12

    Becoming An Embedded Software Engineer

    Hello, Everyone.

    I am a third year electrical and computer engineering student currently studying in a Canadian University.

    I am at a point where I have to choose my courses to define my career focus.

    I really enjoy working with software and embedded system.
    Therefore, Embedded Software Engineer seems to be a good fit for my interests and skills.

    I had some experience with board level design and firmware development.
    And a basic understanding of digital protocols such as I2C, SPI.
    I also have some projects using Raspberry pi and beagle board Xm.

    However, "embedded software" is still a very vague and broad term for me.

    I believe It is to do with "driver" , "talking with hardware" and "operating system".

    But I do not have a deep understanding about exactly what they do. Like the software engineers working in Blackberry, Apple etc.
    Are they all considered as embedded system engineer?
    What differentiates them from "normal" software developers.

    So,Here are my questions,
    1) How many kinds of embedded software engineer are there? and What do they do mostly?

    2) What course do i need to take to become a professional in this field.
    etc
    Do i need to understand electrical engineering side of course?
    such as
    Digital/analog electronics?
    Communication system?(DSP)
    Power system
    Field Wave?
    Or i should just stick with computer side of courses.
    such as
    Computer hardware
    Operating system
    Computer network
    database.
    Operating system

    3) What kind of company would hire Embedded Software Engineer? What is the career outlook?( I am currently looking for my long internship(12 month), was wondering which top tech company should i consider)

    Sorry for the long text.

    Thanks in advance.

    Best Regards
    Eddy

  2. #2
    TEIAM - problem solved
    Join Date
    Apr 2012
    Location
    Melbourne Australia
    Posts
    1,907
    Companies who hire Embedded Engineers design gadgets.

    I would consider myself an Embedded Systems Engineer.

    My degree is a Bach. of Electronic Engineering.

    My job requires me to design electronic circuits (both analogue and digital), and program any microcontrollers I used.

    I (personally) don't use an OS on the devices I program, but Embedded Software Engineers may if they need to.

    Wiki has good pages on this:
    Embedded system - Wikipedia, the free encyclopedia
    Embedded software - Wikipedia, the free encyclopedia
    Fact - Beethoven wrote his first symphony in C

  3. #3
    Registered User
    Join Date
    Jun 2011
    Posts
    4,513
    Echo Click_here on pretty much everything.

    The answer to most of your questions rely on what exactly you want to do. Think of "embedded programming" as a sliding scale, with "mostly hardware" on one side and "mostly software" on the other.

    On the "mostly hardware" side, a programmed device is usually used to supplement the surrounding circuitry. This requires more of the "electrical engineering" knowledge, since you're more involved with circuit design and analysis. The programmed devices are usually "dumb", just another component in a circuit, and the programs might involve mapping input bits to output bits. This kind of embedded programming might be used for, say, designing things from toasters to industrial machines.

    On the "mostly software" side, you are much more focused on the code. This requires more "computer engineering" knowledge, since you're likely dealing with an OS on chip, much more sophisticated code, greater use of data structures and complex algorithms, multiple layers of protocol, etc. This kind of programming might be used for higher tech devices, such as, say, smart phones or network devices.

    Mind you, these definitions are grossly over-simplified, but hopefully give you an idea of the range of embedded programming you can choose to follow.

    So figure out where on the scale your interest lies, and this will give you an idea of where to start studying.

  4. #4
    C++まいる!Cをこわせ!
    Join Date
    Oct 2007
    Location
    Inside my computer
    Posts
    24,654
    I would hire an embedded software engineer to write the software for the hardware.
    I would hire an embedded (hardware) engineer to make the hardware for the software.
    But above all, I would hire an engineer who knows both.

    Well, to be a little bit more specific... to write software, you don't need to know electronics. Digital electronics... analog electronics... signal analysis... don't need it. You need to know how a CPU works, how to talk to hardware (bits and bytes), how to write algorithms and data structures, and so on. The reverse is true for a hardware engineer.
    But a good software engineer is not a good hardware engineer and the reverse is true. But when you write hardware, you need to have the software in mind, and when you write the software, you need to have the hardware in mind, so knowing both is a really good asset.
    Last edited by Elysia; 09-17-2014 at 07:59 AM.
    Quote Originally Posted by Adak View Post
    io.h certainly IS included in some modern compilers. It is no longer part of the standard for C, but it is nevertheless, included in the very latest Pelles C versions.
    Quote Originally Posted by Salem View Post
    You mean it's included as a crutch to help ancient programmers limp along without them having to relearn too much.

    Outside of your DOS world, your header file is meaningless.

  5. #5
    Registered User
    Join Date
    Jun 2011
    Posts
    4,513
    Quote Originally Posted by Elysia View Post
    I would hire an embedded software engineer to write the software for the hardware.
    I would hire an embedded (hardware) engineer to make the hardware for the software.
    But above all, I would hire an engineer who knows both.
    Too vague to be a useful statement. This is simply not possible for advanced technology design, since it requires in-depth knowledge of several different disciplines to complete.

    You already know what's involved with software design.

    Hardware design could require any or all of the following:

    Circuit analysis
    Digital circuit design
    Analog circuit design
    RF circuit design
    Isolated ground planes
    Stray capacitance
    Clock skew
    Phase Lock Loops
    Control systems
    Impedance matching
    Amplitude/frequency/phase modulation/demodulation
    Antenna theory/wave propagation

    In fact, this list can be further broken down into disciplines. RF design and testing is a black art unto itself.

  6. #6
    C++まいる!Cをこわせ!
    Join Date
    Oct 2007
    Location
    Inside my computer
    Posts
    24,654
    Of course you would have experts in both fields, but you would do well to have at least some people with mixed knowledge areas who can bridge the gap between hardware and software.
    Quote Originally Posted by Adak View Post
    io.h certainly IS included in some modern compilers. It is no longer part of the standard for C, but it is nevertheless, included in the very latest Pelles C versions.
    Quote Originally Posted by Salem View Post
    You mean it's included as a crutch to help ancient programmers limp along without them having to relearn too much.

    Outside of your DOS world, your header file is meaningless.

  7. #7
    Registered User
    Join Date
    Jun 2005
    Posts
    6,815
    Quote Originally Posted by zhangz64 View Post
    I really enjoy working with software and embedded system.
    You need to be more specific with that description. What type of embedded system? What type of software on that embedded system, and what programming language(s)?

    Quote Originally Posted by zhangz64 View Post
    I had some experience with board level design and firmware development.
    There are many types of board, and different approaches of developing firmware for different devices.

    It's fine if that is what you mean by embedded development, but there are numerous other types.

    Quote Originally Posted by zhangz64 View Post
    However, "embedded software" is still a very vague and broad term for me.
    You're not alone there. Embedded software has many meanings. It can refer to developing bespoke firmware for some hardware (you mentioned Raspberry Pi and BeagleBoard-Xm) but it can also refer to other things.

    Quote Originally Posted by zhangz64 View Post
    I believe It is to do with "driver" , "talking with hardware" and "operating system".
    That's one of many possible interpretations.

    The one I work by is that embedded software is "software written to control devices that are not typically thought of as computers".

    That is pretty broad, but excludes mostly home based PCs or servers in a typical server farm. But it does include lots of things. Some of the small ones are ADSL modems (modern ones are computing devices with firmware, data storage, etc), SCSI controllers. Some devices that often aren't associated with computing at all are stereo receivers (software or firmware based), personal video recorders, modern cars (which are fundamentally software controlled) and aircraft (e.g. significant parts of the control systems on modern Boeing and Airbus aircraft are software-based). Modern CPUs (from Intel, AMD) are typically developed as software (with processes to instantiate devices based on the software).

    Not all embedded systems even involve an operating system .... the application software on such systems communicates directly with the hardware, rather than relying on the operating system to behave as intermediary.

    Quote Originally Posted by zhangz64 View Post
    But I do not have a deep understanding about exactly what they do. Like the software engineers working in Blackberry, Apple etc.
    Are they all considered as embedded system engineer?
    By various definitions, they are embedded systems engineers. To a lot of people, a Blackberrys or iPods or iPhones are not thought of as computers, but they are computing devices. Software engineers at Blackberry and Apple, among other things, write the software platform (Blackberry or iOS) that allows "Apps" to run on devices, and develop Apps. Those tasks may be viewed as types of embedded development. Those same developers might also join different teams to write infrastructure for cloud services, App Stores, voice translators, etc etc - technically those developments are not necessary considered "embedded", but they are certainly things that provide features needed by the embedded software on the phones, tablets, etc.

    Quote Originally Posted by zhangz64 View Post
    What differentiates them from "normal" software developers.
    What defines a "normal" software developer? Most software developers are (ummm) individuals.

    Seriously though, embedded software developers are not all that different from other software developers. They target some hardware or software platform, exploit use features of that platform, and they use programming languages and tools to get the job done. Good software developers (embedded or not) will use a disciplined and methodical approach, and poor developers will not.

    The only difference is that embedded software developers often work in a sphere where their software is not overtly present, but it does something for people. People don't like their devices to fail. Users of a PVR complain bitterly if their PVR doesn't reliably record a movie. Toyota has occasionally received less-than-favourable attention for software problems that prevent their cars from stopping on freeways. Regulated industries like aviation and nuclear power insist on control software that is demonstrably highly reliable and has a low likelihood of triggering unsafe behaviours (which means the developers are required to offer evidence that the software does only what is required). The military don't want their missiles targeting friendly forces due to a control software fault.

    Quote Originally Posted by zhangz64 View Post
    1) How many kinds of embedded software engineer are there? and What do they do mostly?
    No idea. Lots. How many types of other software engineers are there?

    Quote Originally Posted by zhangz64 View Post
    2) What course do i need to take to become a professional in this field.
    It depends what type of work you want to do. There is not a "one size fits all" course that makes someone suitable for all types of software development, embedded or not. If you want to develop aircraft control systems, it's probably better to do courses in aeronautics in addition to computer science. If you want to develop firmware for advanced electronic device controllers, it is probably a good idea to do electrical engineering.

    That said, a lot of "embedded" work is learned on the job. People are hired based on problem solving skills, not on having completed specific courses. The courses are only valuable to the extent that they make you competent with the basics, and provide evidence you can usefully tackle technically challenging problems. If there is an interest in particular courses, those courses will be subjects that are relevant to the problem domain (e.g. as I said, aeronautics is relevant to people developing aircraft control systems) or that provide some grounding you can build on to develop skills needed in particular jobs.

    Quote Originally Posted by zhangz64 View Post
    3) What kind of company would hire Embedded Software Engineer? What is the career outlook?( I am currently looking for my long internship(12 month), was wondering which top tech company should i consider)
    All sorts of companies. You'd probably be better off with a company that considers software important to their business, rather than a "its just software" attitude that will often reflect an attitude that software developers are disposable nerds.

    It's like any job - your career is what you make of it. Some people use software development as a stepping stone to working in management. Some love the "hands on" software or hardware aspects so much that they never leave it. Some people decide to raise families instead of pursuing a career in software development.

    The key in any job is to keep growing your skills. And to make sure you have some deep skills, as well as a broad selection of less deep skills. The thing is, virtually everything in computing changes regularly. Hardware capabilities change quite rapidly, so software techniques to exploit the hardware features change. State of the art in software doesn't change nearly as fast as hardware (hardware evolution is actually unique in its continuous rate of change) but there are still things to keep learning - be they new languages, better techniques in languages you already are acquainted with, new design approaches, etc
    Last edited by grumpy; 09-18-2014 at 05:57 AM.
    Right 98% of the time, and don't care about the other 3%.

    If I seem grumpy or unhelpful in reply to you, or tell you you need to demonstrate more effort before you can expect help, it is likely you deserve it. Suck it up, Buttercup, and read this, this, and this before posting again.

  8. #8
    Officially An Architect brewbuck's Avatar
    Join Date
    Mar 2007
    Location
    Portland, OR
    Posts
    7,396
    An embedded software engineer is just a software engineer who knows how to deal with the constraints typically imposed in embedded environments.

    You need to be concerned with code size, memory use, and performance to a much greater degree than somebody writing web services or phone apps.

    You also frequently need to interface with very specialized software or hardware. So you need to be able to grasp APIs. And these APIs can be complicated, poorly designed, or both.

    You need to be comfortable working in an environment that doesn't provide a rich set of debugging tools. You may even need to invent your OWN debugging tools from time to time.

    Typically, your code will be interacting with other code and hardware, not users -- and you will make use of this fact to the utmost in order to fit into all the other constraints. The result is your code may often be brittle (difficult to change) and highly specialized, and you may end up reworking it -- even fully rewriting it -- again and again and again, as the industry moves forward. So you need to have patience and detachment.

    You need to know how to get on the phone with somebody who is screwing up your stuff and play hardball over the requirements. Because the requirements are often so draconian that you cannot afford NOT to.

    Apart from that... the coding is the same...
    Code:
    //try
    //{
    	if (a) do { f( b); } while(1);
    	else   do { f(!b); } while(1);
    //}

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Software Engineer C++
    By std10093 in forum Projects and Job Recruitment
    Replies: 0
    Last Post: 07-16-2013, 08:15 AM
  2. Searching for a Contract Embedded Software Engineer
    By VCSinc in forum Projects and Job Recruitment
    Replies: 0
    Last Post: 03-20-2013, 11:53 AM
  3. Searching for an Embedded Software Engineer
    By VCSinc in forum Projects and Job Recruitment
    Replies: 0
    Last Post: 03-20-2013, 11:50 AM
  4. software Engineer - Fluendo Embedded, Barcelona
    By czarici in forum Projects and Job Recruitment
    Replies: 0
    Last Post: 07-03-2009, 08:35 AM
  5. We are finding a few software engineer
    By alusbulent in forum Projects and Job Recruitment
    Replies: 0
    Last Post: 09-04-2006, 01:57 PM

Tags for this Thread