Question

I know that it is possible to get into software development without a degree in computer science, but is it possible (or rather, common) to be able to get an embedded programming job without the computer science degree (or any engineering degree as well)?

Was it helpful?

Solution

Dijkstra once said "computer science is no more about computers than astronomy is about telescopes." You don't need a degree to program, though it helps to know how to use the instruments necessary for programming. Assuming you can, I see no reason why you shouldn't be able to.

However you'd need to get your foot in the door, and if you can't do that with a degree, you're going to have to be able to demonstrate it instead. My advice to you is create an impressive demo of some sort.

OTHER TIPS

Some background in electronics (or at least a desire to get into it) is pretty much needed to be successful in embedded programming. I've been doing this for 30+ years, and did the formal way (BSEE + MSCS), but I've run across a lot of good self-taught embedded programmers along the way. They all had one thing in common though -- somewhere in their background they had some electronics education (formal or otherwise).

You're going to be doing a lot of bit twiddling and working with lots of low-level I/O registers, with so-called datasheets that might run several hundred pages, like this one (so if that document doesn't look interesting, forget about embedded programming). You'll be using lots of serial busses like UART, SPI, I2C, and USB. Eight and 16-bit timers. Lots of interrupts.

You don't have to be able to design a circuit, but it's best if you learn to read a schematic since you will probably be probing a circuit board with an oscilloscope or logic analyzer.

Assuming you're working with medium-sized devices, that might have only 32K to 256K of program memory, and 4K-16K of RAM, you'll probably be doing most of your programming in C -- but C with proprietary extensions (different for each chip), because most of these processors are Harvard architecture and have separate address spaces for fast RAM, extended RAM, and code space and pointers can get really complicated.

(I consider small micros to be ones with just a few K of program memory and a few hundred bytes of RAM. Those are still mostly programmed in assembly. Then there are larger microprocessors that can run Linux and have MB of flash and RAM, but that's not really where main-stream embedded programming is either.)

As noted by Neil, in a lot of cases, a Bachelors degree in computer science is going to be more about getting your foot in the door with an entry level job than anything else. Likewise, it is also one of the check boxes that HR departments are going to be looking at when they are filtering applications and at some companies, the degree is mandatory for the given job, but they usually aren't software companies.

In terms of getting your foot in the door without a degree, some sort of proof that you know what you are doing is going to be needed so it might be a good idea to look around to see if there is some sort of class that you can take on the subject. This would give you some formal training that you can list on your resume and would also give you a chance to interact with people that know the subject so they can point out some things that might take you longer to come across on your own. Also, you might want to look into user groups that are in your area and start attending meetings so. The networking opportunities that such meeting get your name out there if you get a chance to do a demo at one of the meetings.

A degree isn't needed for any programming job but it certainly helps get you through the door.

I'm guessing that there may be ways to work your way up within a company or ways to get a role based on stuff you've done in your spare time but I'd imagine that 95% of people in IT in all areas have degrees. Maybe not Comp Sci degrees (I don't - mine is electronic engineering and I've worked with historians who were good coders), but degrees in something.

But if for one reason or another you don't want to or can't go to university there will be alternatives, you just need to work out what they are.

For low-level programming, you need to know some electronics and circuits, and some of the math behind it. Not a ton per se, but enough.

A degree is always nice.

I started my career back in 2006 as software developer, I worked in many companies during 2006 to 2011 but believe me nobody asked me about my qualifications (degree). The interviewed just asking the field related questions nothing about degree.

As a hiring manager for various companies whose core products include embedded system, I can say that I would simply not hire anyone who did not have a degree in either CS or EE from an accredited institution. The degree shows that the person is committed to a deep understanding of their field and will not simply blunder through problems.

I have, on multiple occasions, taken over groups in which a mix of degreed and non-degreed engineers were on the team... My observation is that, by far, the non-degreed engineers were lightweights and were suitable only for certain grunt-work types of programming where they couldn't do any real damage. The architectures and real thinking had to be done by the guy with degrees.

It makes sense too, when you think about it... the original poster of this thread is essentially saying "I want bypass the learning curve and just jump to front of the line". I'm not saying it is impossible, but when you finally land that embedded job you've been seeking you might be surprised at all the things you find you don't know.

Licensed under: CC-BY-SA with attribution
scroll top