Where Are Tomorrow's Embedded Developers?
An anonymous reader writes "In a similar vein to the previous discussion about the New York professors taking Java to task for damaging Computer Science education, Mike Anderson of the PTR group wonders why it's so hard to find good embedded developers these days. 'As for today's CS programs, it seems that long gone are the computer architecture classes, writing code in assembly language (or even C at this point) and engineering software economics. In fact, a large number of CS majors apparently believe that everything can be implemented in a virtual machine and that both memory and [CPU] cycles are infinite.'"
I'm in my late 30s and have been doing embedded development since college. Back then we built finite state machines in PALs and complete embedded systems using microsequencers and UV eraseable ROMs. We both built (hand wired) and programmed the systems from scratch. Doing that gives you a very good appreciation for what's going on. That kind of stuff just isn't done much anymore in college. From what I can see, there aren't many good embedded programmers more than a few years younger than me. It looks like good embedded programmers (whatever their age) will be in demand and well paid for many years to come. :)
The reason you can't find any is that you are looking in the wrong college department. Your embedded device programmers are computer engineering majors and not computer science majors. Most of them are bad at programming in C though since they don't understand that resources should be treated as a scare item and the professors don't teach them that they are. Furthermore the college where I'm at doesn't teach ARM or x86 assembly, it teaches LC3 instead... what a joke that is.
:)
However some students, like myself, know x86 assembly and understand the value of memory and cycles. If you have a particular job in mind and want to pay for me to drop out and move though then I'd be glad to jump on with your company. Just let me know.
Used to be an embedded developer for devices, but then I got interested in Ruby on Rails (it was much more fun).
I think there are probably more than a few people out there that have the skills, but have been moved into other paths by market forces. They will come back if you pay them enough, but that is unlikely to happen, so they will probably stay where they are.
The profession has become domesticated.
The new graduates are uncomfortable with: "Klingon multitasking systems do not support "time-sharing". When a Klingon program wants to run, it challenges the scheduler in hand-to-hand combat and owns the machine." They have to use java, schedulers, vm protection, etc.
On a more serious note, to do real embedded programming you need to know data representation in and out because you tend to manipulate your data directly, no band-aids allowed. Until the embedded systems will support band-aids as used in todays college it will be a profession for the myopic geeks with grey pony-tails or the ones who are way on their way to well developed pattern boldness.
Baker's Law: Misery no longer loves company. Nowadays it insists on it
http://www.sigsegv.cx/
That's what I rejoined school for.
;)
My dad is an EE, and does embedded work for vehicle systems.
My granddad was an EE, and did the early work on embedded missile guidance systems. He was a ham operator also.
I'm also a ham operator, program in C fluently, and have a knack for getting electronics to do what it wasn't intended for.
I'm going for my EE at IUPUI. I'm also learning Japanese, and also working on my commercial FCC license.
My plan: there's a large amount of Japanese factories located here (Columbus, IN), and I have connections with a few of them. There was recently a job offering (60k embedded EE, 1-2 yrs exp) that one would go to Japan for. I'd jump on that, if I could. Also, with the spectrum opening, equipment implementation will happen roughly when I get done. Either way, I'm going to be making a "livable" wage
If I could travel abroad, I would. We only have one life. I'm going to make mine fun.
Good for them; Alan Turing believed it too.
how to invest, a novice's guide
I'm neither surprised by this nor do I necessarily find it something to get up in arms about.
There's not really time in a 4 year degree (well, along with all the other crap that goes into it) to teach someone the kinds of things you need to know to be a good business application developer and to teach someone the kinds of things you need to know to be a good embedded applications developer.
A good embedded developer needs experience with languages that run "close to the metal" of the machine, needs to know how to manage memory, needs to know how the machine architecture works, needs to know how to perform optimizations within that world, etc.
A good business applications developer needs experience with languages that abstract or hide a lot of the above details in order to let them focus on business logic, needs to know a decent amount about databases, needs to know about software architecture and design patterns, needs to know about networking, generally needs to know something about UI design, etc.
Yes, there's some overlap.
Speaking as someone with a college education emphasizing the former and a career emphasizing the latter, I'm not convinced this is a terrible thing. There are a lot more business style applications that need writing in the world than embedded applications. That specialization and the need for it I don't see going away any time soon, but it's the exception rather than the rule, and I'm not convinced there's something holier about understanding the guts of the machine than in understanding how to design a complex system for extensibility, maintainability, high availability, or whatever best suits the project.
The reason for Java/C#'s popularity isn't because of the VM, it's because of the huge accompanying frameworks that allow for rapid development which is in most cases much more important than efficient cpu/memory usage these days. Build one of these frameworks for C/C++ and you will find it much easier to compete with newer langs.
An education is no excuse for willful ignorance.
Mea navis aericumbens anguillis abundat
Digipen (digipen.edu) has a Computer Engineering degree whose first graduating class graduates this year (I am one of them). The whole point of the degree is embedded systems development. Starting sophomore year, we have to develop an embedded system every year, including a functioning operating system for it. We take classes on control systems, state machines, RTOS (we have to make a kernel in 4 weeks), digital signal processing, among others. We are required to use assembly almost exclusively, and are required to learn the assembly language of PIC chips, freescale coldfire, and ARM. Embedded developers are right here :)
The relevant question is, how many embedded-system hackers are needed? If only .1% of job opportunities are for embedded-system hackers, then there really isn't much incentive for people to learn to hack embedded systems. If embedded hacking is a lucrative field with attractive opportunities, then hackers will follow. We saw it happen with other forms of hacking, we even saw it happen with web-page hacking. If there is a need for embedded hackers, it will be filled (guided by Adam Smith's Invisible Hand).
Yo. (Hopefully) future embedded software engineer right here. Currently majoring in Computer Engineering with a CompSci minor. I actually just enrolled in an embedded applications class this semester. Seems like a popular class, too - offered fairly often, and good enrollment each time from what I hear.
Even though the majority of the CS classes at my university are Java-based, there're still required architecture classes that use assembly and C, along with several EE courses. Just because many colleges are abandoning lower-level programming doesn't mean they all are.
Programmer: an ingenious device that converts caffeine into code.
Maybe the Electrical Engineering Department is training device programmers, not the Computer Science Department.
I have been thinking this for a long time. I finally managed to get a job doing embedded programming, but I did manage to get a lot of preparation for it in my undergraduate CS courses -- particularly in my Compiler class and my Operating Systems class. We also had an assembly class (16 bit x68) and a computer architecture class so they helped some, but less than you'd think. My main source of knowledge has been my curiosity of how things worked under the hood and looking into embedded programming on my own. A lot of embedded programmers are electrical engineers, but engineers tend to program a certain way and use the 'everything is a nail' approach and make bad use of the tools they work with when coding. CS people tend to make their own mistakes when doing embedded programming, and both groups tend to not understand what compilers can and cannot do to produce better code.
If you're a company looking for a skilled embedded developer, reply to this with the name and contact information for your company. I'll give you a call, and if you're offering more than I make now, I'll consider giving you an interview.
I taught myself to code on an Amstrad CPC 6128 (128k of ram in two 64k banks, z80a processor - so not exactly "embedded" .. but optimization was important), but since then it's been VB, Java, and Delphi.
I'd love to get my teeth into something embedded. But what? Can anyone recommend a fun device to play with?
"An education is no excuse for willful ignorance."
ignorance of what? DO you think it's the responsibility of CS professors to educate students on every possible application of CS principles? No. Does every CS student want to become an embedded programmer? No. Does every student even want to become a programmer? No.
Programming is a tool that's used in Computer Science, not what's learned.
over here
Its important that there is SOME background taught for the more niche jobs (lets face it: not that many people end up working in these fields, proportionaly speaking, even if you just consider the top tiers of jobs to filter out people without degrees and/or the poorly self taught ones), a lot even, but it sure is a heck of a lot easier to find someone who understands the code of an embedded device's kernel, than it is to find someone who knows the difference between Bridge and Strategy and State patterns.).
More Niche fields should be in optional classes, and more mainstream (yet still theoric. Don't go teaching technology specifics...and Java is good to teach high level theory in a language agnostic manner, if done well) in the main classes... As it is now, you have people who are forced to take classes that teach things they'll never even hear about again, yet many colleges don't even have (not even optional!!) a class that touch relational model theory. Thats sad.
As stated by every Intro to Algorithms prof, you can optimize something to death with low level and hard to follow code, but if your algorithm sucks you've wasted your time. Are vo-tech ASM monkeys really gonna know how to do algorithm analysis and design? I could probably write bubble sort in 4 x86 instructions that would out preform all other bubble sorts on the same system, but I can also mathematically prove that most every other sort in any other language is better for large sets of randomly sorted data.
I can do embedded development. I've a little experience with assembler on about half a dozen platforms, and know most of the quirks of C. A friend of mine is 10 years older than me. He grew up in an era when everything on a personal computer was essentially the same skill set. He knew at least as much as me 10 years before I graduated, and has been learning ever since. When I graduated, all the embedded developer jobs went to him and others like him. There were a lot more people for these jobs than there were applicants.
But the embedded developers are getting older. And they're leaving the field, either going into management or retiring from the field. The industry didn't think ahead. All the promising graduates went in different directions because they didn't have the option. I could have gone into the field if anyone would have had me. I would have been seen as highly skilled in embedded systems. Instead I'm seen as highly skilled in the field I chose. Everyone else the same age as me is in the same position. We all have skills in areas that don't map well to embedded development.
Nobody leaves university with the skills the industry needs. They all leave with the potential to develop these skills. The industry hasn't been developing these skills. It needs to change. Embedded software development companies need to hire graduates just for the sake of hiring graduates. You don't need to start when they're at university.
Yet CS is the department in which programming is taught. Hence the tendency for one to equate the two (CS and application programming).
Not long ago "computer science" didn't even exist: it was all taught in math departments. Once it became quite clear that most developer types can't handle vector calculus that changed.
Yet I wonder - what is computer science without the ability to actually program the computer? Discrete math, algorithms, and some theory. Interesting, but (not quite) useless.
I am very small, utmostly microscopic.
Perhaps tomorrow's embedded developers are programming today's desktops.
The desktop machine I learned to program on was an Acorn RiscPC. Later in life, I helped write the embedded firmware in the Rio Karma portable MP3 player. Rio Karma had two 90MHz ARM CPUs, 16Mbytes of RAM, and 20Gbytes of disk. That would have been one kick-ass RiscPC. If anything, programming and optimisation techniques learned on late-80s and early-90s desktops are too "embedded" for a lot of today's embedded programming.
And to those advocating hiring EE graduates for embedded programming: unless your device isn't far north of a toaster on the embeddedness scale, please also hire people with broader or higher-level software expertise for system design and architecture. It's not the same skill as squeezing one more instruction out of a loop, you find people with one skill and not the other, and any medium- or large-scale software project needs both skills (whether in the same person, or through good collaboration).
People go on about the spectrum of computing, software/assembler/logic/gates/transistors; what some don't realise is that there's a spectrum even within software. Some really good, tight, expert coders just can't see the bigger picture. I've seen medium-scale software architected by the toaster contingent: it wasn't pretty.
Peter
lol
Sorry, would that be the Java that was originally conceived for set-top boxes and is ubiquitous on mobile phones? That Java? If anything, I would say that Java has done more for embedded development than any other language in the past decade or so.
Yet I wonder - what is computer science without the ability to actually program the computer? Discrete math, algorithms, and some theory. Interesting, but (not quite) useless.
While I don't entirely disagree I think you're discounting the huge amount of low-complexity programming work there is to be done, where you can make good use of code monkeys who don't really understand the project and/or couldn't design an effective solution on their own.
Try this plan:
1. Hire 1 good programmer
2. Hire 1 good analyst
3. Hire 1 good Q/Aer
4. Have 1 and 2 work together to produce comprehensive, prescriptive specifications of the system
5. Have 2 and 3 work together to produce a comprehensive, prescriptive test suite
6. Hire 6 code monkeys who can read the specs -- which will include descriptions of any complicated algorithms -- to code the thing
7. Hire 6 Q/A monkeys who can read the specs -- which will include acceptance parameters -- to test the thing
That's a team of 15 people, half of the coders, and only 1 of them who really needs to understand what's going on, or to be able to design complicated algorithms. There are certainly limitations to the kind of coding that can be done on such a team, but there are lot of things such a team *can* do, and can do quickly and cost effectively.
There is not a huge business need for this type of programming knowledge so guess what - it's not taught as much in school. There are still plenty of people interested in this stuff. We regularly see articles about developers from all over the world working on the Linux kernel. Doesn't that require knowledge of computer architecture, assembly and C programming skills? The OSDev scene is full of people like this (see my homepage). I'm sure there are lots of embedded hobbyists that have regular codding jobs if you look for them. I can code in x86 asm and C but at the end of the week it's usually Java that pays the bills.
My Hello World is 512 bytes. But it's also a valid Fat12 boot sector, Fat12 file reader, and Pmode routine.
I certainly would have liked to do embedded programming. I really enjoyed my OS and Embedded Systems classes in college. As a result, when I was in the market for a new job, I was specifically looking for embedded systems work.
.Net applications. Now, if I look for a new job, the only companies that would call me back are .Net jobs, with maybe a Java job once in a while. It doesn't matter how proficient in C++ I am, it seems.
The problem was that any job pretty much wanted several years of experience, and greatly preferred a EE or Comp E degree. I had a CS degree and no formal experience in embedded. Any experience I had was through my classes, as my personal projects tended to focus in other areas.
Not that it matters anyway. My first job was doing
I'd like to do some embedded projects personally, but I wonder if any employers would care. It always seems like the HR goons only care about professional experience, unless your informal experience and personal projects catch the eyes of a techie.
What can I do? I understand that they need qualified people, but its not as if all of us CS guys can't work outside of a VM.
Not long ago "computer science" didn't even exist: it was all taught in math departments. Once it became quite clear that most developer types can't handle vector calculus that changed.
Yeah sure, that's why most CS departments I've heard about, pretty much required a minor in math.
Yet I wonder - what is computer science without the ability to actually program the computer? Discrete math, algorithms, and some theory. Interesting, but (not quite) useless.
There's a lot of CS that came before computers. It was just called math. I really don't know how useless it would or wouldn't be without computers. But whether it's useful or not, isn't really relevant to what CS is.
You sound bitter. Can't write assembler?
Kevin Smith on Prince
Tell people to go get vocational training if they want ASM monkeys.
This is a troll, right? A subtle reversal of the old "tell people to go get vocational training if they want Java monkeys" line?
It should be self-evident that it takes more knowledge, skill, and ingenuity to write a correct program in a low-level language, and have it run sufficiently fast on underpowered hardware, than it is to write a correct program in a high-level language on leading-edge hardware.
Or anyone who took time to learn C properly. Doing some assembly wouldn't hurt either.
I am currently trying to get into this kind of development, but it seems like all postings for such jobs want tons of experience. My university clearly failed me in this department, so it seems like the only option is to find some router and write a custom firmware for it or do some other kind of embedded program. The only problem with this is I fathom it will take quite some time to get the necessary skills to work at it professionally, and I would imagine one would lose interest in a year. Takes experience to get experience it seems.
On the flip side unless you fully understand the hardware how can you write good optimised C code? In C you might use a long (assume long is 32 bits for now!) to hold a counter. But the assembler programmer will know to stay clear of longs because he's programming a 16 bit CPU, or maybe longs take a performance hit.
After 17 years of writing application code - I just got sick and tired of sockets, threads, and shitty toolkits like MFC, GTK, and Qt.
Not that these constructs will ever truely disappear from my life, but christ that got old.
So I took the plunge, dusted off my (very dated) assember and architecture texts, revisted a couple of device drivers I wrote in the course of getting my masters, then convinced an employer to hire me at my current salary level to write device drivers and learn FPGA programming (Verilog).
They said "OK - be a *very* quick learner and we will keep you for longer than four months."
Sounds like a deal to me.
I am very small, utmostly microscopic.
As someone who finished whis BEng in Computer Engineering this year I have to ask, where are the embedded jobs?
I hunted around looking for any assembly/vhdl/c job I could find and only found one which didn't require 2 years expearence, they didn't get any message back to me until 2 months after I'd applied. I applied to roughly 35 "entry level" jobs dealing with embedded devices. None were interested because I lacked two years expearence. In the time it took the only one to get back to me I'd been contacted by a C++/Java company had a phone interview went up and been personnally interviewed and been offered the job.
The real kicker is the embedded jobs paid less, didn't mention any benifits and wanted more work out of me. I think the real issue is most companies aren't willing to invest in graduates unless its for business positions. It is difficult to get 2 years expearence when everyone demands 2 years for their entry level jobs. Which leads to a shortage since no one gets offered a embedded job so Universitys don't bother going into too much detail since 99% of their students will never use it.
A: Sitting in Electrical Engineering classes, most likely in India.
At the University I attend, all of the embedded-related subjects are Microelectronics Engineering controlled, and all of the Software Engineering subjects are controlled by the Engineering-oriented segment of Information Technology. They used to be two separate schools borrowing some subjects from one another and complaining how the other areas that each teaches aren't applicable enough (Software Engineering in Micro is not real Software Engineering, Programming in IT is too high-level for Micro applications, etc.), now they are in the 'Engineering' school.
This divide is propagated by the students, with most Micro students being lacklustre coders (from disinterest), and most Software students not giving a fig about the hardware. There are very few people doing a double-degree with Software and Micro, not just because it's hard, but because the culture clashes. A lot of people I've met in Software, however, started in Micro (myself included).
Marry this with the fact that intake of students tends to be in the Business-related degrees, the number of IT and Electronics professionals is dropping and the schools themselves are beginning to struggle.
The problem, as I see it, is one of glamour and financial success. Students are being wooed into the industries where the money is as being financially successful allows for a highly glamourous lifestyle and therefore required for 'sane' living. Engineers are once again being typified as dwelling in the basement of the company, working for schekels and getting no recognition.
This shows that the major problem, as ever, is a social one. IT is once again unpopular for the money and a lot of medium-large size companies (where most graduates end up) still consider IT in the realm of making sure Windows Server and Office are installed and running properly for those people who do the 'real' work. This is what I think students are currently seeing and they are not interested in being the mechanics of the information age.
So, where are the embedded developers? Well, I'm on my way (I hope), but I don't know of that many others following suit for exactly the reasons above (and the embedded courses tending to be post-graduate isn't helping, either).
</rant>
jaminJay "I bet someone guesses which Uni. I'm at..."
Leela: "Is all the work done by children?" Alien: "No, not the whipping."
Jeff Bonhag
35 Oak St.
Rhinebeck, NY
I disagree. It may take more time, but I don't think that it takes any more skill or ingenuity, seeing as how the conversions between high-level thought processes and low-level code are pretty much mechanical. It does of course require a different knowledge set, but that knowledge set isn't necessarily harder to obtain. In the end, this argument strikes me as one more salvo in the endless 'my-language-is-better' flamewar, subtly hamstrung with the fallacy that programming is mostly about syntax.
I am an embedded system engineer. I have a Bachelors in Electrical and Computer Engineering and a Masters in Electrical Engineering. I spent my last years in school in the infinitely useful embedded systems program at the University of Colorado, taking among other classes, Real-Time Embedded Systems http://ece.colorado.edu/~ecen5623/ under the insightful guidance of Dr. Sam Siewert. I learned what an embedded systems engineer was from him. As I continue to develop and meet other embedded system engineers I notice that many embedded system engineers have similar "round about" trajectories into the discipline. A common refrain is, "my company needed this little micro-controller programmed to do ... and I volunteered." What I'm getting at is embedded systems engineers come from a diverse background and seemed to eventually gravitate into doing the profession full time. The really good ones keep honing and developing their CS skills.
And that's why I hate when GCC complains when I'm using an unsigned char as an array index on an AVR.
The embedded developers are out there, just go to uProcessor forums, These are all the different people that may be the embedded developers of tomorrow. Not many people want to program in Assembler/C anymore, its much easier to use Perl/Ruby/Java/C#...(insert abstracted language here) that takes all the Hardware out of the picture and just leaves the software problems at hand. In a sense why would any developer(software) want to have to deal with the low level mechanics/Memory management/Registers... anyway when most platforms have a high level language that lets them abstract the hardware so They don't have to work with it. Its much easier to say Vector myVector = new Vector() than to try and figure out how much memory they are going to need for something, then allocate it on the stack, then use pointers null characters and other low level "voodoo". And as for colleges teaching about infinite memory and cpu cycles, why not. I'm not saying you shouldn't be aware of the limitations and advantages of your hardware platform, but the computer industry has made such leaps and bounds as far as hardware is concerned every year that its not easy to pick what constraints you should conform to. in the 90's 4Gigs of ram was unheard of for a end user's PC, even a power user of any sorts and was most likely limited to mainframes if even they had that much. The embedded community is pretty much the same way, why try and write your stuff and cram it into a 8 bit platform when you can have dual Arm cores with media processing capabilities in hardware. And hell even some GPS chipsets have a python interface in them! and Java runs on most embedded platforms now too. it seems to me, we carry in our pockets the technology of 5-10 years ago. 400Mhz X-Scale processors, Multi processor embedded devices. that being said, Imagine what you could process on an AMD64X2 machine/Core2 Duo if you had no OS overhead and were writing all of your software in Assembly. Well a lil off topic, oh well, could have been worse :)
After getting a BSEE, I looked for four months for an embedded job which didn't somehow involve blowing up dark-skinned people. No dice. Everywhere, I got punted for having no work experience.
Then I decided to go back to software, and got two jobs within a week. I chose the one a 15min bike ride from my house. The salary is about $20,000 more than I'd be making in EE.
This is why I am not an embedded programmer.
Cretin - a powerful and flexible CD reencoder
In your example, the Bus Factor is 1. Dangerous.
Slashdot is proof that Sturgeon's Law applies to mankind.
I currently have an embedded Linux job. Note that I have over 25 years of programming experience in general, though not so much in embedded systems specifically. I'd gotten rather badly pigeon-holed as a Windows programmer in the last decade because my last several jobs were Windows programming--very frustrating, because I detest programming in Windows and very much wanted a Linux/Unix/etc programming job. Unfortunately, when your 20 year-old jobs say System V Unix and your 5 year-old jobs on the resume say Windows, they offer you Windows jobs...
I managed to land my current job because of two things: I have 25 years of programming experience in C/C++, and because I tinker heavily with Linux as a hobby. I got into Linux From Scratch for a while because I was sick of SuSE Linux's aggressive handholding, and wanted to get to know my system all the way down at the inittab level, like I did when I was working with System V supermicros way back when. Thanks to Linux From Scratch, I was up on shell scripting, compiling entire toolchains and systems from source code, and knew how init scripts worked, which got me the job.
Okay, having learned Python to maintain a mapping utility for a certain MMORPG also helped clinch the deal, since the internal testing website is written in Python and Perl, and part of my job is helping maintain it.
I'm still amused that I got the best job I've had in 15 years because of my hobbies.
---dragoness
Maybe it used to be that way. For all I know, it might still be that way in a few places. It's pretty silly for a school to expect that of their students, though, as that's not what the industry needs. You should pick math as a minor if that's something you really love. There are always plenty of jobs for people in various math-centric areas like DSP, and if that's your thing, more power to you, but don't pick it because someone expects you to do so. That's just dumb.
While computers can do math very quickly, computer programming and mathematics are still largely unrelated fields. You can program computers to do heavy duty math, and this is frequently done in some areas like audio and video compression, DSP, graphics compositing, 3D animation (writing the apps, not using them to create models and stuff), and other specialized fields. However, even for people working on software that does heavy math, there are still almost always additional developers working on non-math parts of the project---UI designers and coders, file format engineers, etc.
Once you look beyond the limited projects that are heavily math-centric, the math focus falls off fairly rapidly. For every one person who does that, there are probably several thousand software engineers working on web apps and CGI, several thousand working on large database systems, hundreds working in Cobol for banks, a few hundred working on miscellaneous open source tools, fifty on productivity apps, ten people working on operating systems, etc. (I'm pulling these numbers out of my backside, but you get my point.)
One thing I've noticed working in the industry is that the math background is heavy among older folks, but not nearly so much among recent college grads. That's a good thing. Having a more diverse workforce ensures that you are able to rapidly adapt to new demands, enables you to more easily come up with solutions to problems because you aren't all looking at it from a single perspective, and so on.
Further, IMHO, having a seemingly unrelated minor or double major opens up a lot of doors that you otherwise wouldn't have. A lot of people in CS have double majors or minors in biology, chemistry, etc. and go on to work in biotech firms. A lot of people in CS have a background in music (the two areas of study are fairly strongly correlated from what I've seen) and go on to work in related areas. And so on.
Indeed, the whole point of a minor (or a double major if you are so inclined) is to provide additional breadth beyond the skill set of your major---to open your eyes to new possibilities of convergence of multiple fields. Nowhere is that more important than in computer science. Computers have permeated almost every aspect of our lives. Once computers moved beyond being used as giant calculators and started being used in the home, on people's work desktops, etc., we found a growing need for people with a deep understanding of both computers and a myriad of other areas. Pushing people to choose a math minor fails to take this into account, and results in an overly homogeneous workforce that is highly skilled at doing only a subset of what is needed. In the long run, you'll find that such policies are short-sighted.
Check out my sci-fi/humor trilogy at PatriotsBooks.
I think a large part of the problem is the job market. Most job postings go by the "X years of Y" rigamaroll with very few people looking to hire what they should be looking for: talented new blood. I am one of many many computer engineers I know who opted to go into programming rather than suck down some totally shit entry level job for lack of on the job experience, even though I've been building microcontroller systems for years.
I've heard outside the US the embedded market is a lot less corporate and a lot more about small teams of elite engineers. The US does not have this culture anymore. Bootstrapping is left to people who've already made bank. This is damning us.
The amazingly sweet thing is that embedded is getting rediculously easier. System on chips have just about everything onboard you'd need for most embedded computers (some PHY, memory, connectors aside) and while more serial and p2p busses require stricter timing, the availability of cheap high quality fabs and the ability to forgoe routing a wide pci bus snaking from chip to chip to chip, well, I can only wonder how much longer the corporate model will endure.
All thats left is the availability of small volume runs packaging and I think the scene will be in "upheaval" mode.
I agree, however for a much different reason. I feel that C++, *.NET, Java, etc. is the entire reason that computers need to be consistently faster and have more cores. The reason, being Object Oriented programming. The companies putting this crappy software out (all of the big names go here, with etc. at the end) don't have a clue how to make things efficient, they simply are paid to get the programs out the door as quick as possible, regardless of the performance. Embedded Engineers have to do things a completely different way. We don't have more time than perhaps 25-50 MHz to do everything that we need to accomplish, and with that time, we have to accomplish everything that a PC programmer takes for granted with an OS! I graduated as an Electronic Engineer. During my summer internships, I worked closely with an embedded developer with a background in CS. He didn't really understand the hardware like the Electronics Engineer does, but he was able to make it do what he wanted. During my time there, he convinced me to pick up a minor in CS. Because of my graduating, and my realizing after a year of attempting a CS minor, that I learned everything I needed to be an Embedded Engineer in my EE studies, so I decided to not finish up the minor and just graduate normally as an EE. Being hired on full-time, they paired me up with my original mentor's replacement. He was the type that belonged in a large team, and he would screw up his section of the project and take 3 weeks to update something that a competent person could do in 3 days, but the company didn't realize it until I started working closely with him, and went to the boss-man and told him that this fellow was holding me back. Just before he was going to get fired, he up and quit on me! I was upset, but he really didn't have a clue. Now, instead of the Embedded Engineer being the bottleneck, the Electronics Designer is the bottleneck because I work closely with him to write all of his test-software, which quickly turns into the finished product. However...there aren't that many people that I knew from college that wanted to go into this field. They all wanted to become GAME PROGRAMMERS! However, when they were seniors and job-searching, they realized that they were going to be developing desktop applications for the rest of their lives. The best programs I've seen for Embedded Engineers thus far has been at the local community colleges with tech degrees. Good luck finding them when you need them!
The guy who wrote the article is either an idiot or is out right lying.
The reason so many people stay away from the kind of degrees he wants them to get is because there are very few jobs in those fields and the jobs that do exist are poorly paid when you look at them on an hourly basis. Not to mention that the smart young people he wants to con into being his cheap labor are smart enough to look around and see the thousands of unemployed and unemployable 40 something engineers. They are smart enough to "just say no" to working 60+ hour weeks for 20 years just to be left with no job and no hope of a job in their 40s.
When the smart young people see that they can make a good living working reasonable hours until they retire doing the kind of work he wants them to do, the smart young people will demand that colleges offer that training and colleges will find a way to offer it. Until then, he should understand that most of the smart young people are too smart to be conned by people like him.
The whole article is nothing but misdirection. He wants to make people think there are good jobs out there so they will get the training they need for the jobs and then... he can hire the cream of the crop for sweat shop salaries and work them for sweat shop hours until they wise up. At which time he will fire them an hire more people who have been conned into the same trap. The article is nothing but a self serving con job aimed at both students and colleges.
I call bullshit on the entire article.
Stonewolf
What happened to the embedded developers? The industry got rid of them...
So if it doesn't have any now, then it really can't look elsewhere to blame anyone.
I started out as a R&D engineer working with video game technology, but essentially, it was all embedded work... I lived and breathed machine code and logic - to me software and hardware were one in the same, a symphony of technology with blurred distinction between the two. I remember sitting down with six spare GAL16v8s and a couple of low-power walkie talkies and a spare afternoon and built myself a radio modem for fun. That was the sort of work I used to do.
But there weren't many people like me - Assembly programmers were hard to find, even back in the 80s and most engineers fresh out of university just didn't know how to write real-time code in assembly language properly - didn't know how to write fault-tolerant code or build a spinlock as the starting point for your application. Didn't understand the necessity of understanding how many cycles an instruction took or how to watch for errors by measuring the duty cycle of the interrupt pin with a logic probe.
So the people who employed hardware designers (back then, if you knew machine code, you usually had a hand in the design of the system as well) found that it was difficult to get replacement engineers. As a result, they couldn't employ similar salary replacements and as old engineers got tired of being mistreated and poorly paid, they simply left and went off to do something different.
Industry responded to the lack of engineering by eliminating the need for the machine code engineers - they moved away from the embedded design with assembly to embedded design with C or even to outsourcing the product they needed, and the hardware got designed by dedicated hardware engineers.
Once again, any real skill in the area was lost as employers wouldn't pay for experience and the best engineers realised they would never be paid what they were worth, so left to do something else.
Then the industry got around this constraint by using really powerful embedded devices - basically a complete PC ready to run whatever PC programmers could write for it.
That's where we're at now. The skills left the industry because the industry wouldn't pay what they were worth... If you can make more money at another job (in my case at the time, selling PCs and Journalism) then why would you keep on developing hardware for a company that doesn't want to pay what you're worth?
I'm seeing the same thing now in Network Analysis... The world is full of network technicians (and I include many people who consider themselves engineers in that description, but don't really know how to actually measure things or understand the technology they work on) but has very few network engineers.
The solution for me? I got smart and moved to management.
I'm a lousy manager ( really, I suck at it ) but I try hard and for once, my contribution is recognised by the company I work for financially... And I have a family to look after.
Would I even go back to engineering or even embedded engineering?
I would love to go back, I really would. I can sit in front of circuits all day and build something and I enjoy every second of it, but I can't afford to do company critical work that won't feed my family or pay my bills.
So unless the industry is prepared to pay for skilled people, and by pay I mean pay them more than they would get being a manager or an accountant or even a journalist, then they will leave.
The other embedded engineers I know all did the same thing... One works on an offshore oilrig, another as a miner, one went to a call centre. One even opened a grocery business. These are all smart people and although they all miss working with electronics and embedded designs, they have families to feed too.
GrpA.
Enjoy science fiction? "Turing Evolved" - AI, Mecha, Androids and rail-gun battles. What more could you want?
Seriously, I'm not surprised there aren't more embedded developers. There's next to no graduate Application Developer positions available right now where I am. I don't think I've seen a single Embedded Role come up recently. Admittedly, Wellington, New Zealand is a bit of a small sample size (then again, there's a disturbing number of IT jobs available given the population), but even so...
Doesn't seem to be any point in specializing in Embedded Development, because, as others have said, it's too hard to get a job in it.
You'd be pigeon-holing yourself into a market where there aren't enough entry-level positions to go around. Sure, if you got a job you'd be set, but if you didn't, you'd be kinda stuck. At least if you pigeon-hole yourself as a Microsoft C# Developer, then you'll always have work (you may not enjoy it, but it will be work).
Me, I'm just wondering why people dislike hiring Graduates so much. Sure, most people would have hired during the Graduate Recruitment part of the year, but I would have thought there would be more people out there looking to recruit Graduates given there's a shortage of experienced workers, and them train them up. Apparently I was being a little on the hopeful side. Well, actually, I was being far too hopeful. Managed a few interviews, but there's always been someone with more experience to take the job I wanted. *sigh*. That, or I'm not enough of a 'people person' which kinda hurts when you're looking for a software development role. Looks like it's a support role for me until I can find something better. Assuming I can even get a support role with just a degree and no experience.
If you want to do embedded systems development, it's cheap. If you know what you're doing. You can get an Atmel ATMega128 board with a little LCD display and a few pushbuttons for about $50, a JTAG programmer cable for about $20, and a complete development environment with simulator, debugger, and C compiler for free. Even C++ works; GCC supports the thing.
Unfortunately, you can't get all this stuff in one box with a nice little "Embedded Development for Dummies" book. There are environments well supported for hobbyists, such as the Basic STAMP (late 1970s technology) and the PIC (1980s technology). But they're so retro it's embarrassing.
I'm not saying it's a good career choice, but serious programmers ought to do a little low-level work on a tiny machine just to know what it's like.
"Until the embedded systems will support band-aids as used in todays college it will be a profession for the myopic geeks with grey pony-tails or the ones who are way on their way to well developed pattern boldness."
Oh like when SUN had their Java chips, or Harris had their Forth chips.
That is to say, after picking a set of classes to take over 4 years that would satisfy all the requirements, there were few if any additional classes necessary to make up the hours required for graduation, thus, not much latitude to pick classes for interest or grade padding outside of that list.
Isn't that the point of the C99 header stdint.h ? For your example, I could use a fast_uint16_t and let the local platform configuration handle what that actually means.
Type sizes aside, I agree with you, though. If you don't understand low-level compiler/machine details, you can't possibly expect to bend the language to your performance-obsessed will. This holds for all languages; it's just that in some cases (Java/Lua/Python/Perl6/...) the "machine" you need to learn is a virtual machine, and you end up inspecting bytecodes instead of asm.
Right now I'm looking for entry level positions doing embedded systems work. This is what I want to do. The problem is that every job position I've looked at wants at least 2 years of professional experience. If you look up the article author's company, his most basic level positions say "The candidate should have a minimum of 2-5 years experience of embedded software development" and their FAQ page says "We are pretty fussy about who we hire. That is to say that if you are a true real-time, or embedded, engineering professional with 5+ years of experience, with any RTOS..." In that context, his article reads like a whine-fest. Everybody has to start somewhere. If nobody offers entry level positions, how do they expect to hire people into the field?
Either he can offer entry level jobs and bitch that nobody can do them, or he can shut up. Seriously. Take a risk or two. Start offering newbies jobs, Mr. Anderson, and then you'll have room to complain.
Who on earth needs a skillset like that?
Then, he will scoop up all of the unemployable engineers at slave labor wages, laughing the entire time while sitting atop his throne made of golden skulls. In fact, this article was probably penned while he sat atop said throne.
And he would have gotten away with it, too, if it weren't for you meddling kids.
If you want someone to program the low-level guts, look for a EE with some programming experience, or a Computer Engineer. CS major programs just aren't designed for that kind of work.
My company understood this ten years ago. I'm a EE major with a computer "concentration", which is typical of who we were hiring back then for programming work; we hired very few pure CS majors at the time.
When I started, we made home-grown OSes (or lived without them!) and had to really try for efficiency. Now, with modern processing power, we run Linux or an off-the-shelf RTOS, and program applications in much the same way as a PC programmer. Aside from interfacing with the peripheral hardware, we don't do much that's uniquely "embedded" anymore, and efficiency only really matters in a few specific areas. So now we can hire CS majors to do most kinds of work.
What truly time/space crunched design we do have mostly occurs in the specialty FPGAs, which are still largely the domain of EEs.
This is hyperbole and a misrepresentation at that. Students dont VALUE memory and cycles the same way because software is not about efficiency anymore, it's about development speed. We sacrificed the ability to make efficient code for development speed (VMs) and the only people who seem to be unhappy are the people who specialize in efficiency. When you start paying ridiculous amounts of money for embedded developers, you'll be surprised how many people will flock to it. Welcome to America.
Often wrong but never in doubt.
I am Jack9.
Everyone knows me.
I have a CS degree. I'm comfortable with C++ and would be with embedded architectures if I just had the training. For my Assembly class, we didn't do MIPS. We did sort of an abstract assembly learning language (think Pascal for assembly). In said language, I implemented int mul and div, as the language didn't provide that. So yes I'm very comfortable having all my data right there interspersed with my instructions. Just give me 3 months, and I'll bust my ass and get up to speed on your platform. Oh yeah, silly me, the industry doesn't do that any more. At one point, I even really wanted to go somewhere like Intel or Nvidia. I thought that would rock the shit, working on low level graphics stuff. When I mentioned that in an interview process for a job not related at all to embedded, the guy thought I was crazy.
Which is why I'm in IT right now and going back for engineering. With engineering, you have state exams to certify you know what you're doing. Now, this is just a generalization, but overall, management argues with actual engineers much less than they do with software people. Because engineering is much older and its effects can sometimes cause lives. Oh, but the talking down to programmers and software designers never ends.
Although I love code, I'm going back because engineering is so much more professional. You know, you might actually get an iota of respect. Talented candidates for embedded apps are all around. But some of the best people get turned off by the (actual or perceived) attitudes of those entrenched in the industry. Where are they? Maybe you're turning them away.
And probably the better question is, where's the market? Besides military apps, isn't it inevitable that this will move to places where people can afford to work for less?
Billy Brown rides on. Yolanda Green bypasses Gary White.
... large number of CS majors apparently believe that everything can be implemented in a virtual machine and that both memory and [CPU] cycles are infinite.Not an embedded system, per se (more like a "headless system"), but I was involved in a project where certain aspects of the design (aspects that I had no input into) more or less assumed infinite memory and CPU.
The design itself on paper was beautiful: symmetric, orthogonal, intuitive, complete.
But when implemented, the design SUCKED because it ran like molasses on a cold day. Everything that could be done to increase its performance was tried, and in the end its performance still sucked. The whole thing had to be re-designed, and rebuilt from scratch. The original designers (C.S. degrees, of course) howled about "engineering hacks" the whole time.
The final design was uglier on paper, but it ran several orders of magnitude faster than the original.
In the course of every project, it will become necessary to shoot the scientists and begin production.
BS: Having dealt with Adaptec and Diamond and trying to get them to work with OpenSource drivers, I have to say that most EEs could not write modular software to save their lives.
In the mid 1990s, we were unable to program drivers for the Diamond video cards because some asshat had decided that there was no need to put the PAL dot clock selector input latch tables in a sane location with a recognizable table terminator, because he/she decided that "everyone will be using INT 10 BIOS calls in real mode in order to set video modes on the cards, so why bother?". This was almost as much for hardware protectionism as it was to allow them to swap out PAL contents and ROM contents in tamdem without redesigning hardware - particularly, component layout and printed circuit artwork - to get "whole new video cards". We ended up doing MD5s of the ROMs and setting up our own PAL tables based on what we got as a checksum.
Adaptec did a similar thing on their AHA29xx SCSI controllers, for fear that drivers written for them would would with someone else hardware, just like the BusLogic controllers worked with the AHA152x, 154x, 172x, and 174x card drivers. So they invented an arcane abstraction layer called "HIM", for downloading the SCSI sequencer software to RAM on the card, and relied on the license on the sequencer software to save them from clones. But they screwed up the implementaiton of the HIM, and the OpenSource community ended up having to write their sequencer software to work around the bad abstraction.
So we ended up with a bunch of cards that didn't work in non-Intel hardware (MIPS, DEC Alpha, PPC, etc.), or with non-Microsoft supplied OSs. All because some firmware writers couldn't be bothered to think in terms of interface abstractions, and felt they could write better code than a CS or SWE person (at the time, CE was not an option as a major).
So I call BS on the ability of people who understand the glass understanding how the glass is going to be used by the cusomers that buy it.
For the record:
- I am educated as a physicist, computer scientist [software engineering emphasis], and applied mathematician
- I consider myself a member of the previous generation of embedded software developers, though not my entire career has been embedded.
- I think the next generation of embedded developers are coming places like Taiwan and the poorer countries in Europe, where limited access to modern hardware means that they have to work harder with less, and lack of "a big market" means half of them are off hacking things like iPhones to make them work with the local infrastructure.
-- Terry
First, let me tell you that your examples may be too specific (I've never done DSP and seldom written a program where the difference between TCP, UDP and IP mattered), but I think the main problem is your sample :). I teach CS at SPSU (in an Atlanta suburb); our undergrads need to take an analysis of algorithms class, and a distributed systems class (plus a networking class). I've taught both algorithms and distributed, and guarantee most of our students learn those concepts (OTOH they're not required to take an embedded systems class or DSP).
We're a good school, but I don't think we're exceptional in our programs; so I think you just have a very skewed sample
I bet this would sell better than one might think.
I am very small, utmostly microscopic.
One perfectly chosen word!
The only stable state is the one in which all men are equal before the
Was I the only one surprised by the authors assertion that GPS is not a real-time operation?
Last I checked GPS was one of the most time-critical operations in regular consumer use?
What say you?
I'd like to defend starting with Java. I'm currently mentoring a 14 year old who is learning programming. He started with Java, a year or so ago (after a little bit of hacking around in Visual Basic). The advantage I see is that it's let him quickly get experience with quite a variety of programming: GUI interfaces, sound, a client/server network application with multiple threads and synchronization. He's scary bright, but even he couldn't have done that in C in that time. I think it's worthwhile to have that kind of variety before he starts going into more detail, because it will give him a context to put the details in. He's about to go into a magnet high school run by engineers, so he's going to get the hardware and C++. I certainly wouldn't want to see him stick with Java for the next 5 years, but I think it was a good place to start. I'd certainly expect any computer scientist to have substantial experience with different types of programming, and the languages and tools that go with them.
I've programmed in everything from assembly to Java. (I even taught a course in COBOL once.) I don't share the disdain for Java that many here seem to. Obviously I wouldn't write the Linux kernel in it (yes, my pawprints are in the Linux kernel), but I like it for quite a variety of tasks. I prefer not to make things more difficult than necessary. If you don't need to do your own memory management, why not let Java do it for you? It's less error-prone. (And part of a computer science education is to make sure you know when this makes sense and when it doesn't.) I still haven't made my mind up about Ruby, but in principle I'm interested in languages that are at a higher level than Java.
I've been around long enough to have lived through exactly the same arguments when we switched from assembly to higher level languages. There are always arguments that we lose essential goodness. But I'm not convinced.
We must act soon. Many of the "greybeards" of embedded systems development are getting close to retirement age. We must try to capture their collective knowledge before it's lost and pass it on to the next generation of engineers. The U.S. embedded systems industry has a systemic problem that needs a holistic solution before we lose our technical edge. Even a "soft science" major knows you're required to quantify your claims to be taken seriously. Clown!
All 19 hijackers were known terrorists 09-10-2001. Lack of FBI intelligence does not justify warrantless wiretaps..
I write embedded code for a wide range of robotics and dedicated hardware. My suggestion is to build something that you will use. This makes your quest much more interesting. Sorry, never went to college, had to teach myself, so cant say what they have for classes and direction from that point of view.
Display controller, at least 5 fields, or as desired. This could easily be used to for displaying weather information etc. Say, Wind Speed, Direction, Temp. Time.
Example: Display controller, rs232 controlled.
Some suggestions, a display controller that would receive rs232 from your computer. Say using one of the microchip processors, they have ones that have a tcp stack, or rs232 on chip (need level converter) (costs 20$) these require only a resistor and cap for clocking but your will prefer a crystal to keep within drift spec's of the rs232.
This will teach you low level work in assembler, and you can also talk to it using your pc and VB if you desire, to acquire information and send it to the controller.
Then you have the options of using a display controller or controlling the displays directly. The total cost will be low, you will be programming in assembly, (assembler is free) and have something you can use. If your just interested in the programming and not interested in figuring out the hardware, drop me a line, and ill send you some schematics.