Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!

 



Forgot your password?
typodupeerror
×
Programming IT Technology

Career Path for Embedded Software Developers? 39

timmgrant asks: "Inspired by a love of technology I have always wanted to develop embedded software for consumer electronics. I have just finished a computer science degree and have now been looking for work in that industry but it seems that every job in this field requires previous professional experience in embedded programming. For those that have made it into this field (or any other specialised field) what path did you take? What steps do you propose would take me closer to my ultimate goal?"
This discussion has been archived. No new comments can be posted.

Career Path for Embedded Software Developers?

Comments Filter:
  • by LarryRiedel ( 141315 ) on Tuesday January 22, 2002 @03:22AM (#2880847)

    Maybe in an abstract/theoretical sense "previous professional experience" is required, but in practice I have found there is an open position to be filled and there is a hiring manager and people in the department, and maybe someone in human resources and/or a recruiter, and getting the job requires convincing them I am the best candidate and that I can do the job.

    As far as "professional" experience, I think experience having done something which was real and actually used for something is often close enough to "professional" experience. Nowadays it is nice that there are some relatively high visibility "open source" projects which can be used to get something approaching "professional experience".

    If there is a candidate who appears to be a better "fit" for the "need", they will get the job. Sales is sales. Getting hired for a job is making a sale.

  • Basic Stamps (Score:4, Insightful)

    by Perdo ( 151843 ) on Tuesday January 22, 2002 @03:38AM (#2880872) Homepage Journal
    Design your own USB coffee maker or animitronic toy. Put a real robot in robot wars [robotwars.co.uk] instead of a glorified remote control car. Break in by doing not begging

    Other [hvwtech.com] Sources [parallaxinc.com]
    • Re:Basic Stamps (Score:3, Interesting)

      by stephend ( 1735 )
      What you're saying is build a portfolio, which I think is very interesting.

      I think it was in Steve McConnells (excellent) After the Gold Rush [amazon.com] that it's pointed out that in a lot of industries expect them (artists, photographers, models, mainly arty type stuff), but it's not something that the IT industry bothers with. With web and embedded project I really do think that this makes sense.
      • Re:Basic Stamps (Score:1, Informative)

        by Anonymous Coward
        Note that this experience can be gained while in school as part of class projects. It isn't necessary to build your own robot for Robotwars to gain experience.
  • be modest (Score:4, Informative)

    by jilles ( 20976 ) on Tuesday January 22, 2002 @03:44AM (#2880884) Homepage
    No sane software architect is going to unleash a fresh college graduate on his multi million dollars worth of software. Expect to do relatively uninteresting work like e.g. testing for a while if you are hired by a company doing embedded systems development.

    Only when you prove your skills internally will they let you do some more interesting work. Also keep in mind that for the more cool kinds of jobs in companies doing embedded development there is quite a bit of competition internally. Nobody wants to do testing forever and the more experienced people usually end up getting the more interesting jobs simply because they are better at it and know the system better (it typically takes years to master even modestly sized systems).
    • My company has actually taken quite the opposite approach. We are doing bleeding-edge signal processing, and we almost solely hire fresh M.Sc.EEs for development positions because they tend to be more knowledgable about the latest technologies than their more "experienced" counterparts. Then we let the the experienced guys do much the testing since they know what to look for, so it takes less time to find the bugs.
  • Getting Embedded (Score:4, Insightful)

    by PeteABastard ( 542565 ) on Tuesday January 22, 2002 @04:15AM (#2880928)
    I'm currently working writting embedded Forth. My previous jobs were C++ desktop stuff.

    The things that I think helped me getting this job were a good level of hardware knowledge (I was a motherboard tech with IBM for a year) and specific skills relevant to the current position (Forth and good maths as I have a physics degree). It also helped that there are very few Forth programmers in Australia so my employers had few applicants, especially as the R&D office is in a rural area.

    I hope to use this position to gain embedded skills that are transportable to future work, so I dont mind the daily 140km round trip.

    I have friends who do embedded work, and most of them come from an electronic engineeering background. They have a much closer skill fit than pure CS degrees normally do.

    Most of the embedded jobs advertised, when I was last looking, wanted Embedded C & Unix experience or experience with a particular technology (ie networking, phones, etc). They dont ever seem to advertise for graduate programmers.

    From an employers point of view (I used to be R&D manager for a small company) new graduates are a risk. Some complete their degree, but dont really like to code and you only find out once you've hired them. Also there is a lot not taught about professional proggramming in Universities, so there will be a learning curve. For these reasons you try to hire experienced people for the more critical or demanding areas, and let graduates prove themselves elsewhere first.

    With all this in mind you might do best to try and find a position where you can prove your programming skills, and pick up some technology
    skills on the way, so your second job is in the embbeded area.

    Small companies will probably allow you more scope for learning and taking on new duties, so a regular programming job with a small shop that also does embedded work may be good.

    Hope some of this is helpful

    Peter
    • but dont really like to code and you only find out once you've hired them

      I can't possibly imagine anyone going through four years of college as a CS major, especially with all those math and physics requirements, and then deciding that he doesn't like to code. That's like someone who has an M.D. and doesn't like to be near sick people. I've never known anyone like you're talking about, and I've been programming for 20+ years. If anything, most of the software engineers complain that they don't do enough coding.

  • Embedded Systems (Score:5, Informative)

    by Detritus ( 11846 ) on Tuesday January 22, 2002 @07:53AM (#2881231) Homepage
    You need more than a CS degree. Can you read schematics, use test equipment, fix/modify hardware?
    • Detritus is right. Embedded programming isn't just a case of programming on machines that don't have a monitor. It requires a much more intimate knowledge of hardware. 99% of these jobs are going to go to electrical engineers. Good luck on finding that other 1%, particularly when you have no real experience programming.
      • Re:Embedded Systems (Score:3, Informative)

        by Chelloveck ( 14643 )

        Agreed. Although in my experience about 2/3rds of embedded programmers have EE degrees and 1/3rd have CS degrees. So it's not quite as dismal as it may sound for a BSCS.

        And there are embedded companies which recruit and hire new graduates. Usually this is done at on-campus job fairs. New grad jobs are rarely advertised. They don't need to be; there's always a stack of fresh resumes to wade through. The only jobs advertised are the hard-to-fill positions that actually need a lot of experience and a proven track record.

        Go to job fairs. Mass-mail your resume out to the big guys, and go out of your way to find smaller companies. Be active in some sort of embedded side-project, and make sure to talk that up. When I'm interviewing I love to see that the candidate likes this stuff well enough to do it in the off-hours.

        • Also, I'm sure that your college had an embedded systems course of some sort. Go talk to the professor that teaches that class. Ask him/her if they know of any job openings in that field.

          Also, since this is Slashdot, maybe you should play with one of the Real-Time Linux Operating Systems and become familiar with them. Learn what it means to have a Real-Time OS, about Threads and critical sections, etc. The more you know, the more likely someone will hire you :-)
  • I'd see if you can get yourself in the door by doing other work for them besides embedded work. Do they have some sort of GUI front end that goes with their device? Diagnostic tools? Or even in house development aids? If you can get any job working for a company you like, your odds are better that eventually you'll get a chance to work on some of the embedded stuff, especially once they know you've got some knowledge of the subject (assuming in that degree of yours you got some embedded experience :)).
  • This definitely was the long way, but I started by doing firmware testing and system integration testing and then more complex things like business analysis and system specification. Familiarity with electronics though is a must; this seems to make the difference between an embedded programmer that can or cannot make an impact on the project. Oh... and most managers who do hiring & firing are old school: thou shalt have a Ph.D. to be able to craft code (or at least a masters and 7 years experience).
  • I have no degree. I was hired for my current job because I had taught myself linux and C. They wanted me to do some application writing for an embedded linux box. Later on, some driver writing. True, its wussy as far as "embedded" is concerned, but it was a beginning. From there, simple knowledge of C and assembly fundamentals were all that was necessary to do some programming for 8051 microcontrollers, AD18xx DSPs, and soon I'll start work on some code to run on an ARM core. In the meantime, though, they have me learning more about hardware via soldering together my own ISA board, at my request. =)

    My suggestion is to find a job which involves minor embedded stuff while not being the main focus of the job, so you can ease yourself into it. Knowing linux, java, or other highlevel constructs can get you such a job, but won't be used too much later on when you get to lower level things. I think knowledge of an assembly language or two is far more important. (I still don't know x86 very well, but I learned MOS6510 assembly a long time ago, which I haven't used directly, but the fundamentals have helped)
  • Co-Op or Internship (Score:5, Informative)

    by Phaid ( 938 ) on Tuesday January 22, 2002 @10:49AM (#2881737) Homepage
    Can't say it enough, working in your chosen field during college gives you a huge advantage in this regard. I work in embedded development, and my work experience during school was invaluable in jumpstarting my professional career.

    During my junior and senior years, I worked at a laser printer manufacturer [qms.com], maintaining and upgrading code for older products. It wasn't super glamorous, but I also wasn't just getting coffee for people, and I learned more in that year and a half than I did in the entire rest of my academic career.

    After graduation, I had no trouble getting exactly the kind of work I wanted. I went to work on transportation projects [ezpass.com] at a major defense contractor [lockheedmartin.com] for a few years, went back into the printer industry [lexmark.com] for a few years after that, and am now a senior engineer at a consulting firm working on several traffic management and wireless messaging solutions.

    When I graduated in 1994 the market was already fairly competitive, and someone who had real experience working in a team with other engineers, burning ROMs, documenting software, and producing embedded code which ran in real products, had an obvious advantage over someone whose experience consisted solely of implementing linked lists and writing papers on finite automata. With today's large numbers of out of work developers, and the proportionately larger number of CS graduates entering the market, it's incredibly important to distinguish yourself.
  • I'd suggest downloading either QNX or a Linux/BSD distro that was tailored to it, and start coding on it. QNX is very popular as an embedded OS.
  • Most embedded products are more than just "code" - they are a product. Selling yourself as a "coder" will not get you very far, especially with so many experience telecom guys now out of work and also looking for jobs.

    One way to get more very sellable and concrete experience would be to go back to school and get a Master's in an engineering field - most likely EE, but other areas are possible too.

  • by Uttles ( 324447 ) <[moc.liamg] [ta] [selttu]> on Tuesday January 22, 2002 @12:38PM (#2882456) Homepage Journal
    Get a computer engineering degree with a focus on hardware (in the later years you can take specialized classes,) and while you're in school enlist in the cooperative education program and do your co-ops with hardware companies.
  • Catch 22 (Score:3, Informative)

    by selectspec ( 74651 ) on Tuesday January 22, 2002 @12:40PM (#2882471)
    There is a catch 22 with embedded software design in that the development hardware is essentially unavailable outside of the industry. You can't just go buy eval boards on your own.

    However, you can learn to write your own boostrap loader, and you can work with some of the free OS's.

    OS work, porting, bootstrapping and driver engineering force you to work hands on with the hardware. Plus, the components are available off the shelf. I'd get involved in any of the driver or porting projects with NetBSD or Embedded Linux. This will give you a needed skill set for alot of embedded companies that are putting full OS's in their boxes. They are good stepping stones to the "for-loop" OS or the embedded OS's like QNX and VXWorks.
    • There is plenty of hardware out there a newbie can cut their teeth on. You can experiment with Z80/ARM using Gameboy and MIPS using Playstation or Nintendo64. See comment 2882923 for a possible job path.
  • It takes time (Score:2, Insightful)

    by jsfetzik ( 40515 )
    My education was specifically in embedded micro processor systems and it took me over six months to land a job in the area.

    As mentioned elsewhere, even if they are asking for certain experience send you resume anyway. Many times what is listed in a job posting are what the ideal requirements. Often they will not find anyone that meets all of them. This was true in my case. They told me I didn't get the job offer because of my lack of experience. They ended up calling a month later to offer me the job after the two people ahead of me on the list that they did offer the job to didn't work out. One didn't show up, and the other was found to have 'imbelished' their resume a bit more then they could accept.

    Finally, as mentioned elsewhere as well, embedded systems development is as much hard knowledge as software. You may not be designing the hardware yourself, this was true for my, but you had better have a real good understand of the underlying hardware and how it works. This also includes being able to use scopes and logic analysers.
  • prove yourself (Score:1, Interesting)

    by Anonymous Coward
    I got in by having worked on GPL stuff for videogame consoles. Nothing major, just too much time hacking around with remote gdb sessions, and lots of low level z80/arm (gameboy) and mips (ps,n64) assembly. Experience counts, and coming straight from a CS degree where everyone else had ~0 experience made it easier. It also shows that you are interested, most of the graduates from my course couldnt give a damn about programming, yet I spent my nights and weekends hacking away at demos and disassembling the proprietory libraries so I could reimplement my gpl libs. The HR people might not realise how important this kind of stuff is, but engineers should, self motivation is important!
  • These are a couple of companies that make commercial embedded OS products. Find out what these companies are looking for. Since they are the ones making the OS's, you can see what kind of considerations will be valuable in actually _using_ the OS's. Make a list of the attributes listed in the job postings for the companies to see what kind of knowledge is required. If you can work on developing the OS, you can surely use it to develop other things.
  • Most of the low-level embedded SW designers I know are HW engineers. Sorry. Most really cool low level stuff is _in_ the chips. VLIW anyone?

    Now RTOS and CSP in embedded SW requires real CS skills (like knowing your algos and about deadlock prevention etc etc). As does writing VLIW compilers!

    In any case the only thing that matters is access to the field and experience You have to get into somewhere that is doing sub-apps work. And embedded processors are everywhere. Try some (or all) of the following.

    Universities: Find one with a dept that that is doing ES projects and re-enroll. (Post-grads are considered almost human ;-)

    get an internship or job with the right division of a consumer device mf'tr. From Ericsson to Palm to Sega to the microwave makers. Then volunteer your way into testing (dev. or mftr) or support for embedded s/w. It's an extremely good laerning experience and no-one wants to do it!

    Hack. Build stuff! Get one of the miriad of programmable devices out there (see the ratshack cattledog). Write some serial port drivers for your Palm or PC. Reprogram the EFI in your car with your Palm!

  • (Pardon the random nature of this free assosciation epic...)

    I had a big advantage in that I originally trained as an electronics technician (with an A.S.) before going for my C.S. degree. The best thing you can do as an embedded guy is to know hands on hardware. I don't know how many C.S. grads I've interviewed who literally could not change a fuse, to say nothing of reading schematics.

    When interviewing, I found many HR types separated the wheat from the chaff by seeing what test equipment you know. Here are some gizmos you should (eventually) be able to use:

    • An oscilliscope.
    • Logic analyzer.
    • Protocol analyzer.
    • In circuit emulator (even though other emulation technologies are squeezing them out).
    • Voltmeter.
    If you take any hardware classes or do any hobbyist stuff, beg your instructor/mentor to teach you how to use these toys. Often, the type/model of tool is irrelevant if you know why it would be used and what its limitations are.

    Even if you don't assemble or repair complex computer systems for a hobby, any sufficiently complex mechanical work can help show your ability to learn (knowing how to lift and strip a VW engine indicates you can take apart something complex, diagnose a problem, put it back together, and handle the myriad of unexpected problems that crop up in such an operation).

    If you're looking into the hobbyist route, Windows CE (yes, the one from that company) is available for a free 60 day trial here [microsoft.com]. It would show a lot of initiative to grab the eval edition, play with it, and build and boot an old 486/Pentium CEPC (PC running windows CE). Don't start pitching yourself as a CE expert, but indicate you have "recreational experience" with it.

    Finally, embedded development is (by definition) a multi-disciplinary exercise. Having some chemistry gives you a leg up in interviews at a company that makes blood analysis equipment, mechanical skills helps in printers, motion control and other stuff. And understanding how to work with marketing guys instead of against them lets you write requirements that mean something to a customer instead of just being an empty document.

  • I would also like to find out similar info. Am based in London, UK and am doing a Software Eng. HND.

    Mainly program in C & Perl but also have an Electronics diploma.

    Would ideally like to work on open source projects, or using an embedded Linux.
  • A couple of previous posts have pointed out that you need to have hardware experience in addition to a CS degree. I completely agree, and I also agree that getting the exact hardware experience required by a certain employer is a challenge because of the lack of publicly available eval boards. A great way to gain integrated hardware and software experience is industrial automation. Many custom machine builders are using C/C++ (and other languages) on a variety of chips and Real Time Operating Systems and are desperate for coders that are willing to roll up their sleeves and dive into the hardware to get the job done. While not highly glamorous, you can gain real hardware/software experience, solve thorny problems and learn to code for 24/7 uptime and high-safety situations. After a few years in this field, you will be able to approach nearly any chipset/board/RTOS situation, fire it up on the bench, and start banging code. Once you can show potential employers you understand and can deal with the challenges associated with embedded coding, making the move to "commercial" embedded development will be much easier.

One man's constant is another man's variable. -- A.J. Perlis

Working...