Break Points
CS Schooling
Jack Ganssle
5/4/2008 3:00 PM EDT
In the olden days embedded folks were mostly EEs who picked up programming skills from their education or on the job training. Now my informal surveys show that, here in the US at least, around half of all firmware developers have CS degrees.
Considering the time needed to obtain a EE degree (5 years is typical) and the expense (an additional year of school plus some universities now have a surcharge for engineering and science) it's reasonable to expect fewer EEs and more CS folks will be entering this field.
So I looked at course requirements mandated by the CS department at one large university. The results backed up Mike's assertions. Required classes in the major program are:
- Object-Oriented Programming I and II (in Java)
- Discrete Structures (in Java)
- Introduction to Low-Level Programming Concepts (no programming requirement I could discern)
- Computer Organization (a bare
introduction to assembly but that appears superficial)
- Organization of Programming Languages (C, Pascal, ML, LISP, Prolog, C++, and
Smalltalk " so many, it's hard to imagine a harried student would
master any of them.)
- Algorithms (no apparent programming)
Numerous electives are required as well. As far as I can tell only one has a programming requirement. Classes offered include networking, security, databases, usability, formal grammars, numerical analysis, crypto and the like. There's a single class " which is not required - on software engineering with dated material (like chief programmer teams) that requires a significant amount of programming.
So a CS major graduates with a minimal exposure to assembly language, and no real C or C++ experience. She's basically a Java whiz who would be baffled by pointers, dynamic memory allocation, resource constraints, or many of the other critical issues faced by firmware folks.
In a recent poll on Embedded.com only 7% of respondents said they have used no assembly at all. 79% have used at least a couple of different assemblies. Though assembly is a diminishing part of our work, it's as essential as word processing.
The same school's EE department requires a C programming class, courses on signal theory, assembly language, and computer organization " even for students pursuing a specialization in power engineering or other non-computer aspect of electronics. Many electives target our work: DSPs, control theory, programming microprocessors, OS design, filters, and the like.
What do you think? Are CS departments missing the mark when it comes to preparing firmware developers for the real world?
Jack G. Ganssle is a lecturer and consultant on embedded development issues. He conducts seminars on embedded systems and helps companies with their embedded challenges. Contact him at jack@ganssle.com. His website is www.ganssle.com.





Peter House
5/5/2008 9:35 AM EDT
Of course CS graduates are not ready for embedded design. CS has been and still is mainly focused on Business programming. EE is the best course since it is usually very important to understand the real world which has a big effect on nearly every embedded system.
Does a degree in CS require Calculus, Physics, and any Circuit theory? I believe all three are requirements for 95% of all embedded system design and implementation.
Some CS graduates will do well since they will have an understanding of these things due to intuition or personal studies and interests. Most CS graduates will always have trouble due to a lack of understanding in these critical 3 areas.
Write On Jack.
Sign in to Reply
Bink
5/5/2008 9:44 AM EDT
As an embedded systems programmer/designer, I'd say it is harder for CS people to pick it up, vs. EE. However, if people have the degree that I have (a CE - Computer Engineering) we basically get a mix of EE and CS. Such that we know the hardware and the software, and really fit well into embedded design work.
Sign in to Reply
zzacreek
5/5/2008 5:14 PM EDT
EE is a slowly dying. Case and point look at the expect job growth of computer science vs EE. More and more possible future EE majors are moving over to computers science. When I took computer science I had to take calculus, physics and circuit theory. But on the job training was better.
Also in the article it points out the lack of use of C and C++ in computer science. It has been replaced with java. I personally have used java for embedded systems development. Chips now are shipping with java as an option. Java was made for embedded system development. Another thing is java, c and c++ are just languages anyone can learn them, as long as they understand the logic. Jumping from embedded systems development to normal computer development is not a huge jump. The same I would say with electronic development. Once you can get the logic you can do it.
I also found EE guys out of date, for instance we had an old packing house system that used electronics to grade different fruits. All of this had to be stored on a database. The EE guys struggled to write database and networking side of the application that talked to our embedded systems.
Technology changes fast. Computers are taking on more and more of jobs that electronics once did. Look at cell phones with all the apps and stuff that you can put on them now all thanks to software not a lot of hardware improvements.
You make money in this country with software not the hardware, which is why much of the hardware comes from overseas now. IBM has moved from hardware to software. I can buy cheap electronics overseas, programming small embedded systems to give the feedback I need for the computer to take over and put it into a database that the end user will use and sell it for a fat profit.
Or I can build a car that drives itself using cheap electronics and some awesome software and computer power.
Since i am young i look to the future not the past..
Sign in to Reply
////=^=\\\\
5/8/2008 10:03 AM EDT
The issue is no longer assembler, it's FPGAs.
IEEE academia is treating them as odd man out
With uPs one plans algorithms in the time domain. With FPGAs both time and space can be engineered.
There is a fundamental issue: Maxwell's equations are the foundation of EE. Algorithms and memory are the foundation of CS. In this age of increasing specialization the only solution would appear to be more years of "education" (or starting sooner, say in high school).
Sign in to Reply
jGeisler
5/8/2008 10:52 AM EDT
That's not the half of it, Jack.
There is very little academic emphasis on the things that really must happen to ship products. Writing the code is just a piece of it. What has seemed to me to be far more difficult is figuring out the requirements that code should fulfill, then verifying that those requirements are met.
Another issue that is simply elided is the whole world of configuration management. I guess they figure you'll just learn by osmosis.
Sign in to Reply
CGates
5/8/2008 12:39 PM EDT
I learned to solder about the same time I learned to ride a bike (Daddy was an EE of the analog variety), but my formal training is in software. When I was in collage in the '70s, I saw the shift from dedicated individuals who lived and breathed all things computers (both hardware and software) to pandering to the lowest common denominator in a class (there where actually people in the classes that didn't speak English!), at this time many of the professors quit in disgust! (these where the good professors!)
EEs should not program, no more than Embedded Software Engineers should design circuits, both can perform the other's task, but we both do a poor job of it. I have seen this happen many times, where an EE decides that since he has designed the hardware he is best suited to program it, this isn't the case. ESE don't make this mistake as often as EEs do though.
So we have EE's who are a dying breed with fewer and fewer good ones each year.
CS graduates who have been taught to program web pages and therefore compete with people in foreign countries making a tenth of what they do. (ThatÂ’s 95% of what the schools teach)
Embedded software engineers who learned their craft in dark streets and back alleys, and always have to be compared to foreign CS types in pay by managers who have no clue what it is they do, or the difference between them and a web programmer.
The whole situation is messed up with no obvious solution!
Sign in to Reply
HaiVan
5/8/2008 2:09 PM EDT
I have degrees in CS and EE and that really
helps me design, implement, debug, and test
embedded project much more effectively.
Sign in to Reply
YZF
5/8/2008 5:27 PM EDT
Loaded topic.
Computer Science is about the science of computation. In my experience CS programs have a good balance of theory and application in this area. A good CS program provides a good foundation for writing software but it's only a foundation to be built on.
The output of the program is also a function of the input :-) the qualities of the people going into CS which in turn is a subset of the qualities of people in general.
My ideal software developer (embedded or not) would have some theoretical background coupled with interest, motivation, aptitude and experience.
A CS or EE degree by themselves do not make a good developer. In embedded software some knowledge in both areas is a must but a lot can be learnt on the job. A good developer knows how to learn! My opinion is that it is somewhat easier for a CS to learn the EE knowledge. It's not uncommon to find people designing CPUs that have come from a CS or Physics background. My observation is that a lot of EE's do not "get" CS. They get by but could do much better with some CS theory.
I don't see the value in criticizing universities for not producing embedded developers, they never have and they never will by themselves, there is no production line for good developers. (or good engineers or good anything)
Sign in to Reply
kciszewski
5/8/2008 9:50 PM EDT
I worked for a military contractor when we were building military flight trainers. These are software intensive at the minicomputer level, and also firmware intensive at the microprocessor subsystem level. We were required to document to MIL STD 2167, which was very time consuming. I was doing a system that had a lot of PLDs (small PALs). The government wanted me to document these simple logic designs to MIL-STD-2167!! After a while, I found out why--the government's "technical expert" was a young man who thought that because we "programmed" the PLDs (by installing them in a device programmer), that they were also software!! He knew absolutely nothing about computer hardware or how it was designed or how it worked! I wrote a white paper explaining the difference between gate logic and computer hardware, and was finally able to convince the government that PLDs were not software!!
Sign in to Reply
Bob Incredible
5/9/2008 7:50 AM EDT
Like "softweyr" the college I graduated from (UNC-Wilmington) had three CS tracks, but they were a little different - Systems (OS & compiler design), Scientific (applied math), and Business (databases). I got a double major in Systems and Scientific, but my electronics experience came from my Dad's hobby (enough to allow me to test out of the mandatory electronics classes). If they had wanted to do teach embedded development, it would have been best taught by the chemistry and physics depts, as they were the ones who knew how to interface to the real world. I recently raised this subject with the other college I attended (as a freshman) and their response was that the embedded-type classes were handled by the EE dept.
If I were able to advise a college or university on a field which would help return good jobs to the USA, I would have an Embedded Computer Engineering group which merged the Scientific, Systems, and Electronics engineering programs into a single track - probably a 5 or 6 year program.
The only problem would be that there are too many managers who would not understand the value of the degree, and like Dartmouth's program it would end up as a memory.
Sign in to Reply
alhertan
5/9/2008 3:59 PM EDT
Undergraduate education whether in CS or EE is nothing more than the foundation. I do agree that EE students are better equipped to take on the challenges of a career in embedded systems, I also do think this article misses the point entirely.
The main reason that companies prefered to hire Computer Scientists rather than EE's is because EE's/CE's tend to command higher salaries especially as they progress in their careers.
Outsourcing is nothing but an extension of this and is exacerbating the problem even further. Instead of giving the EE's Embedded systems job to a CS grad in N.America, the jobs are now going to EE's in India commanding less than a third of the salary of a N.American EE.
In the end its all about wages, job security and maybe a bit of job prestige. If these are not there, less students will want to consider embedded systems as a viable career . In turn demand for proper embedded systems training programs whether at university (in either EE and/or CS departments) or at other places will wane, causing the quality of embedded systems engineering in N.America to continue to decline.
The talent is there (in both CS and EE's)....but the money and the bright future isn't....as Cuba Gooding Jr. so eloquently put it "Show me the money"
Sign in to Reply
Formal Methods Guy
5/10/2008 2:44 PM EDT
Alhertan is completely right. No student at
a top CS department is going to go into embedded systems anymore. I know at many of the best schools, CS students are double majoring in business more and more. Pick up and issue of CIO magazine and every piece of advice is DON'T BECOME A PROGRAMMER.
LEARN THE BUSINESS. Embedded folks are often highly isolated from the business side and hence very likely to see their jobs send to a cheap-labor country. I was supervising two students a few years ago who loved embedded programming, but they both took jobs in business consulting. They both had CS + business degrees + math minors from an Ivy League school. They both planned on getting dual CS + MBA degrees. They also expect to make 150K or more in a few years. If that kind of money was available in embedded systems they would have gone that route.
I've noticed different level CS departments have a much
wider range of what they teach than EE departments. I went to what I will kindly
say was a 3rd tier school many years ago and they basically taught their grads the things they need to get a job -- not that much
different than a community college. The core of CS was often neglected. I later got a masters in math while working and then abandoned industry for a PhD in CS at a top ranked school. There, undergrads learned functional programming FIRST -- AS EVERY CS STUDENT SHOULD. Computing is about abstraction not bits and bytes. Sorry my embeded friends. Repeat Computer Science is about abstraction. They also learned Java, C,
and assembler. As they progressed they took classes that taught them to think abstractly as well as to map their abstractions onto hardware, to program FPGAs, build schedulers, etc. They could tell you C programs execute on todays CPUs and performance consequences. Yes they all had Calculus and we encouraged many to take a signals class taught using Ed Lee's great book. Some like my students took
microcontroller programming. Yet the math we really encouraged was Abstract Algebra, Topology, and Logic as these are at the heart of CS where say ODEs, PDEs, etc really have to do with applications rather than CS.
CS is really different that every other engineering area in that it's foundations are discrete math rather than continuous math. Embedded systems is where the CS meets EE and I think it's a rare are where to do deep work you probably have to know both the
discrete foundations of CS and the continuous foundations of EE, but to get those people you will have to pay and provide some job security.
Sign in to Reply
StuRat
5/12/2008 2:08 PM EDT
Schools are learning to adapt, my alma mater has done away with the EE school and replaced it ECE, Electrical and Computer Engineering. Part of the problem, having talked with a high school math teacher this weekend, is the lack of education in problem-solving, logic, Euclidean Geometry, and other abstracts such as music and foreign language. All these help build that engineering abstract mindset that is required. Geezer mode on - in the old days, we didn't learn how to program 8080's, they didn't exist yet, but we learned how to build logic circuits from scratch building blocks, first the individual gates, then the structures. I somewhat agree with the notion that EE's shouldn't program. But a good EE with a good systems background needs to understand programming to write solid requirements for the programmers. Too many horror stories about an EE writing a block of code and specifying the change as "put this code in", rather than spelling out the requirements of what he wanted done, and letting the programmers do what they do best. And when it comes to troubleshooting on the firmware, logic analyzer scale, give me an EE or an EET to sort out the H/W from the S/W. We all have to work together, and it's getting harder because of the environment where the MBA's that get the big salaries and the window wall offices don't have a clue about what we do, or why our contributions are more valuable than an outsourced job shop.
Sign in to Reply
David May
5/15/2008 12:04 AM EDT
People with CS degrees have no business behind the wheel of any embedded system project, nor in any ee environment. They belong programming in SOAP or CGI or Java etc... I really don't understand the premise for this article.
Sign in to Reply
alandmar
5/16/2008 6:21 PM EDT
As a recent CS graduate (2003) I've been an embedded systems engineer for 5 years. I actually left my university, about as well prepared as I could be to be an embedded systems engineer. I had 3 architecture classes that incorporated both MIPS and Motorola 68k assembly. Almost every other class was taught in C, with all the nasty dynamic memory allocation, pointers, and resource constrained systems, while the curriculum was not perfect, it prepared me very well (or at least comparatively).
The problem is, most Computer Science programs are going away from these types of things. Reason being companies like Microsoft donate their products and the departments use them because they're free. Students ask to learn these products(myself included) because it's their perception these are the skills they need (really how much cogniscent exposure does an 18-22 year old get to embedded systems)
No one really existed to educate me or my peers on the importance of embedded systems engineering, or how prevalent it was. I believe therein lies the problem. It's a matter of the industry educating the universities and their students, and getting them excited about embedded work, and working with the universities instructional staff to make sure our needs are met.
David May, I believe your views are very short sighted, to suggest all people with CS degrees have no business in embedded systems is ludicrous. Quite frankly, it's more about your educational background to getting whatever degree you've gotten, than the name on the degree itself. Embedded systems is a synergy of hardware and software people and skills. We need them all to be successful.
Sign in to Reply