Forgot your password?
typodupeerror
Education Programming IT Technology

Where Are Tomorrow's Embedded Developers? 245

Posted by kdawson
from the not-like-embedded-reporters dept.
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.'"
This discussion has been archived. No new comments can be posted.

Where Are Tomorrow's Embedded Developers?

Comments Filter:
  • by arivanov (12034) on Tuesday February 12, 2008 @05:40PM (#22397864) Homepage
    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.
  • by BotnetZombie (1174935) on Tuesday February 12, 2008 @06:11PM (#22398444)
    Not only are there probably more than a few people that already have the skills, but I also think that it isn't necessarily too difficult to get people into the mindset needed. I learned programming in C++ but without any real concern for efficiency or memory usage. On a job much later on, I had to write a browser for very limited j2me devices (total memory of 64KB). The browser downloaded, parsed a subset of xhtml, displayed (including images), navigated according to user action and even accepted text input (of course someone will now say that they can do the job in 1024 bytes or less). It was a total pain in the butt to write - however, having to rigorously manage the data structures, memory assigning and releasing, unrecurse functionality that is intuitively recursive in nature etc, I think that this has made me a better programmer. Even though I haven't done any embedded programming I don't think it would be too much of a problem.
  • Re:Digipen (Score:3, Interesting)

    by BSAtHome (455370) on Tuesday February 12, 2008 @06:20PM (#22398604)
    Sorry to be a cynic, but learning these things in classes does not make you an embedded developer. It is the experience in a variety of fields that makes an embedded programmer. For what it is worth, experience in the variety makes you a programmer for nearly all fields.
    Let me give you a simple example; programming an interrupt service routine is probably one of the most difficult things to do the Right Way(TM). When things get smaller, it gets harder. That is where the experience kicks in and you "see" how things are supposed to work and how they hook together (and you finally know how to read data-sheets correctly). It takes years to learn this.

    On the other hand, you have a good chance of getting the hang of it if you practice a lot, whereas the java-code-type-slaves probably never will understand the whole concept of a real embedded system (or what a stable program is in the first place).
  • by Darkn3ss (812009) on Tuesday February 12, 2008 @10:04PM (#22401142)
    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!
  • Re:College Classes (Score:2, Interesting)

    by thegrassyknowl (762218) on Tuesday February 12, 2008 @10:46PM (#22401448)
    CS courses are supposed to be about computer science. If I wanted to learn how to make a webpage I'd just get a good reference and hack at it (or take a summer class).

    I don't meet many CS graduates with any grasp on computer fundamentals. I was actually arguing with someone last week about why Java is the WRONG language to use for a once-off program to edit a column in a database. His response was "but Java is common and everyone knows it AND it's a database language, who knows Perl?". Shows how much he knows - a simple Perl script (or $DEITY help us a Bash script) that read, modified and updated each row according to the desired (not-quite-trivial) operation would have sufficed. The same CS graduate didn't get the concept of an inode-based file system and I thought that was fairly basic CS knowledge.

    I've had engineers come to me and develop entire programs in Java then try and download their class file to a DSP. They sit there dazed wondering why the ICD tools won't accept their class file.

    I've had other engineers develop entire swarths of MFC and DirectX code to do DSP (use GUI and Graph Editors to make program that just runs directx plugins to do "dsp" and not write a single line of C++ themselves) then wonder why they can't get the ICD to load their exe file. I even watched this one guy copy the exe to DSP memory and try and set the instruction pointer to the first word of it.

    I met one CE grad who was tasked with writing a one-off sort. She took three days, spent most of it in books and on the phone to friends trying to work it out. This was a one-off sort that would have been run overnight on a production machine; they decided to change the data ordering. The simplest bubble sort in a 10 line C file would have solved the problem and met the requirements. She tried to write the most highly optimal sort algorithm (fine, I guess) but she couldn't even make it work. In the end I hacked together about 100 lines of code to read the data on stdin, sort it and write it to stdout. Wasn't hard. Didn't use too much memory and finished in about 30 minutes (well within the overnight parameter).

    Of course, these engineers had one thing in common. Like many schools, they took their programming and algorithms classes in the CS faculty because the schools were trying to save money. The CS schools are doing their best to churn out people who know all the buzzword technologies (Java, HTML, AJAX, etc) but have little marketable skill. CS courses seem mostly a left-over from the dot bomb era.

    I've yet to meet a CS grad who properly understands the difference between TCP, UDP and IP. I haven't met one who knows anything about algorithm analysis (or big O notation; I think they were all out getting a lot of Big-O's instead of studying).

    The best computer programmers I've met are electronic engineers with specialty in microprocessor systems hardware and maths/physics people. They seem to get programming much more than the CS-types.
  • Re:College Classes (Score:5, Interesting)

    by xenocide2 (231786) on Wednesday February 13, 2008 @02:49AM (#22402914) Homepage
    The trouble is, a great deal of CS graduates feel that Computer Science is the fastest way not to being an engineer or scientist, but to becoming a programmer. A disturbing number of my fellow students avoid classes perceived to be lots of work, which is exactly what this guy is asking for. Debugging embedded hardware is not easy or simple, and requires massive amounts of attention to detail to get anything to work at all.

    Anderson's question might have been equivalent to "where are all the graphics programmers?" or "where are all the operating systems programmers?" but for one thing: this article presupposes a shortage to convince readers they need embedded skills, because PTR offers training in Linux embedded system programming [theptrgroup.com]. Frankly, the more important skill in embedded systems isn't pipeline stalls, but the Chinese language; most of the work has gone to where the embedded hardware is made: East Asia. Case in point: the only work this guy appears to get is defense contracting, where clients can't outsource / offshore the work.
  • Re:College Classes (Score:3, Interesting)

    by smellotron (1039250) on Wednesday February 13, 2008 @03:05AM (#22402992)

    Some schools might offer good CS courses but the majority of grads I deal with know nothing more than buzzword garbage, and I am not alone in my views; I regularly hear associates complain that they can't get a CS person who knows their ass from an infinite loop.

    I hear you, man. I am a recent graduate myself (UIUC), so I see this from the other side. Our program is pretty good compared to most things that I've heard on the net (and various people I've met from CMU/MIT/Standford/...), but a couple of things to point out:

    • There were a good deal of idiotic undergrad slackers. I wouldn't trust these people to do anything except ride the wave of someone else's success. These were the ones who didn't understand why we used OCaml for one class here, or were expected to use Java at the drop of a hat (gasp, no hand-holding?).
    • There were a few people that were adept at being thrown into a computery environment and just learning. This definitely isn't CS, but these people could set up subversion/trac/apache/whatnot on their home servers, or build a decent Makefile—in short, effective tools users.
    • There were a few people (most of which ended up in grad school) who could really nail algorithms and "true" CS topics. Even though this is the heart of the program, I've met so many people who only came out with a weak grasp of the theory.
    • There were a good amount of people who were capable of programming. Most of the good "true CS" people also fell into this category, since programming is the natural way to express an algorithm. These people showed up a lot in the higher level subject-matter courses, such as networking (yes, TCP/UDP/IP among other things), graphics (OpenGL, raytracing, general linear algebra), etc. Due to the nature of the program, there's not much opportunity for a lot of these types of classes unless you come in with a lot of AP credit or you stay an extra year. This set of people is probably the class of people that you've seen at interviews that seem like they have an OK head on their shoulder, but still don't seem to have a clue about developing software (which is OK, because it's a CS degree, not a 2-year trade school).
    • No one touched assembly outside of the required MIPS coursework. My friends in Computer Engineering did a lot of low-level programming (mostly on x86), but the CS program only covered the bare minimum to understand the physics/logic of a computer, let alone be proficient in handling it.
    • The only professor who cared about anything remotely buzzwordish was Ralph Johnson; that was essentially part of is role, since UIUC doesn't have a separate software engineering discipline. Even still, most of his focus was around architecture and decent real-world software design, rather than AJAX/Ruby/whatnot. Most of the people in his courses were the ones that had relevant software-development experience and would be excellent hires out of school... but they're still a different beast from the research-oriented curriculum that the rest of the school pushes.
  • Re:College Classes (Score:4, Interesting)

    by DaveV1.0 (203135) on Wednesday February 13, 2008 @09:48AM (#22405136) Journal
    They will come from people who bother to learn assembly and C and experiment on their own and can show their worth.
  • by DCheesi (150068) on Wednesday February 13, 2008 @12:30PM (#22407268) Homepage
    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.
  • Re:College Classes (Score:3, Interesting)

    by TheGeneration (228855) on Wednesday February 13, 2008 @03:07PM (#22409614) Journal
    I'm not willing to create things that have the sole purpose of killing other human beings. Sorry.

    In addition, while I'd love to continue advancing my CS skills it has become obvious to me that the only way to make real money in our society is to get a degree of a fake science like economics/business in the form of an MBA. That way you can bullshit like a pro, cheat shareholders out of millions of dollars (maybe even billions!) and provide absolutely no value to anybody but yourself.

    Well done America. We've come so far. The people that can actually DO stuff are second rate to the people who are just professional figureheads.
  • OMG, so true ... (Score:3, Interesting)

    by smcdow (114828) on Wednesday February 13, 2008 @04:11PM (#22410502) Homepage

    ... 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.

The clearest way into the Universe is through a forest wilderness. -- John Muir

Working...