Beth, nice article, and very timely. The first thing that comes to mind is that many organizations doing embedded design have hardware engineers doing software. The reason for this is that most people think that anyone can write code. I have seen it. And yet, we have, as your story points out, more and more software content in products. I get involved in judging senior projects at some local universities from time to time. These are all in hardware disciplines. In each case, there is a microprocessor invovled. The main reason for this is the complexity of some of the projects. There is simply not enough time to develop a hardware solution, even if they could get it built. On the other hand, the students do not have a good background in software and point out that this was the most difficult part of their project. The schools are attempting to remedy this.
My background is in the spacecraft industry. The projects were large and complex and expensive. We had a strong systems engineering group. We also had functional teams with all the various disciplines. There were several mechanical (mechanisms, stress, thermal, materials, etc.), electrical (power, logic, controls) and software engineering. There were also manufacturing engineering functions and a large engineering support group (read drafting or CAD). A project would draw people from each of the functonal groups. So, by design, we had the multidisciplinary teams. This worked well. We often used system design languages and made the decision of whether to implement in hardware or software well down in the process.
In recent times, I have been more involved in the commercial embedded world (among other things). I notice things coming into vogue such as requirements traceability, higher level languages (C++ for C) and OOP techniques. These things are being supported by the CAD vendors and are being driven, I think, by the involvemen of the software engineers.
I think we will see a real shift in how these projects are done as these techniques are applied more widely.
That's a great point, Naperlou, regarding hardware engineers writing code for their embedded designs, instead of software engineers. I never saw the potential flaw in this, because indeed we've been encouraging engineers who don't have software smarts to learn how to write programs for their designs. So you make a great point. However, I don't think the problem is that anyone thinks they can write code. Hardware engineers are being encouraged to write code out of necessity -- mainly head count shortages. It also short-circuits the necessity for writing out detailed specs/requirements that can be thrown over the wall to software. I.e., the hardware designer has it all in his/her head, and can just happily begin coding. So that enables the company to meet its time-to-market deadlines, with the results that your message predictably implies.
Beth, thanks for a great article. I've been hearing about this trend for several years in system design, most recently in embedded systems and then in machine vision systems and networks. It's interesting to see the growth in the importance of software to product differentiation finally reach a > 50% threshold: over 50% of companies interviewed in the survey saying, in more than one way, how important it's become. And the trend has certainly become visible more recently in end-products like cars, industrial products, and medical devices, while it's been continuing to be true in electronics for a long time. Managing the resulting complexity, in several dimensions, is going to be quite a challenge. The first thing that occurs to me is how this may force even more integration of software, and modularization of code, to make things easier and faster.
I think PTC making what is a pretty sizeable investment (a $300 million acquisition) in the software development space shows just how significant this trend is and how important is it that the mechanical, electrical, and software development tools serve some sort of integrated platform as opposed to how they traditionally reside today, which is primarily silos.
Also, Naperlou's description of the multidisciplinary teams at work in the spacecraft industry could and probably should serve as a model for design teams across myriad industries going forward.
Agree completly Alexander. I have worked on many embedded projects. Some where a software engineer writes the code for the hardware from a spec, some where the hardware guy does everything himself (out of necessity as you pointed out). The later projects always outperform the former in terms of time to complete and overall cost as well as after/design problems. That is not to say that it should be done that way in every case. Rather, projects should be evaluated from the start as to which method is a best fit. Something that is almost never done.
Model-based design and the ability to use software simulations is something that is beginning to gain traction in automation and control as well. Machine builders and designers will be to reduce development time and costs as these tools become more mainstream. Automation equipment definitely fits into the category of software-intensive product designs; often the basics of the machine's hardware has been developed over decades. But there is a definite need for tools which connect and unify thinking through the design process and the actual code to run the machine. Should be an interesting area for growth in automation.
I am a mechanical engineer. Look at the old, say, adding machines, cash registers printers, etc. There are a lot of old machines that for the life of me, I cannot figure out what they were used for. At that point, I am sure the mechanical engineers' brain was slowly turning into potato salad.
Then came software, hydraulics, etc. - and the mechanical engineers' sanity was spared.
Now it looks like the software people are going to need to be rescued.
It is time for self-learning and self-programming products.
I don't know what it will be, but it won't be software - it is reaching it's limit.
Once after being subjected to a marketeer's breathless pitch on a worldbeater of a new product, I buttonholed the product's programmer -- what was along for the ride. When I admitted to being puzzled about the utility of some of the "features" of the product, the programmer cheerfully admitted that that Marketing Department had tossed them into the product-definition specification to "uniqify" the product! I mean, how many friends and acquaintenances do you have who have purchased expensive "smart" cellular phones, that have upwards of thirteen or more functions *except the most vital one for a portable product; A Porta Potty), and use them only to make phone calls, text, and play pinball?
Processing power -- CPU cycles are now essentially free, or at least incremental cycles are -- has finally reached the point where graphical programming tools are supportable. They're being used in the real world -- witness the success of LabView -- and they're a big help to mechanical engineers and other non-programmers who need to create software. At the same time, we haven't yet seen the limitations of these tools surface because we're still at relatively early stages and at the same time the tools are still not really applicable for real-time apps and those where user safety is an issue. My point is that we're going to see continued development of drag-and-drop as MEs and hardware-only folks have needs for more capabilities. Then we'll see how far these tools can go.
In the big scheme of things, the whole field of software is relatively new, and it still suffers a lot from growing pains. There is still way too much bad software out there.
Part of the problem with programming in general is the perception that anybody can do it - because almost anybody can. But there is a huge (and sometimes unrecognized) cavern between "programming", and writing solid, production-ready software.
In my opinion, writing code that is functional, maintainable, and solid, takes a level of expertise that is seldom achieved, even by fairly experienced programmers. However, I think it is true of most fields that the really good work is done by a very small percentage of the people who are truly passionate about what they are doing.
Hopefully as the field of software matures and develops, the quality level will go up, and the development cycles will go down.
Festo's BionicKangaroo combines pneumatic and electrical drive technology, plus very precise controls and condition monitoring. Like a real kangaroo, the BionicKangaroo robot harvests the kinetic energy of each takeoff and immediately uses it to power the next jump.
Design News and Digi-Key presents: Creating & Testing Your First RTOS Application Using MQX, a crash course that will look at defining a project, selecting a target processor, blocking code, defining tasks, completing code, and debugging.
Focus on Fundamentals consists of 45-minute on-line classes that cover a host of technologies. You learn without leaving the comfort of your desk. All classes are taught by subject-matter experts and all are archived. So if you can't attend live, attend at your convenience.