After some thought, perhaps the distinctive attributes of embedded systems can be summarized in the following way:
Interaction with the physical world:
Embedded systems generally have a primary goal of interacting with the physical world using sensors and actuators. This in turn encompasses various topics depending on the application, including:
- Real time responsiveness (scheduling, concurrency management, timekeeping)
- Analog & digital interfacing
- Control approaches
- Signal processing
- Coordination via networked and Cloud services
- Reliability, safety, system robustness
Special-purpose computing platform:
Most embedded systems don't use a general purpose computing platform (a desktop comptuer, laptop, tablet, smart phone, etc.). Rather, they use a customized hardware platform that is permanently embedded into the product. (Even those that do use somewhat standardized hardware often have specialized I/O devices attached.) This in turn encompasses various topics depending on the application, including:
- Software optimization (squeezing to fit into a cost-constrained platform)
- Close-to-hardware programming (interrupts, device interfacing)
- Hardware specialization (application-specific hardware, DSP platforms)
- Specialized network protocols
- Special-purpose human interaction devices
- Hardware-dependent testing approaches
- Customized operating system (or custom non-OS task manager)
- Power management
Domain-centric development:
Outside the consumer electronics area, in my experience it is rare to meet a deeply embedded system developer with a primary college degree in computer engineering or computer science. Generally they have a degree more relevant to their product domain. Yet, nonetheless, here they are writing significant amounts of code for a living. Those trained in software development are also missing somewhat different pieces. Regardless of background, developers usually need to understand the following areas:
- General software process and technical practice literacy (for domain experts) / Domain expertise (for software experts)
- Life-cycle support for long-lived, hard-to-update products
- Distributed and federated system architecture design- Domain-optimized development (e.g., model-based design for control systems)
- Domain-specific aspects of security
Looking at this list, it becomes clear that skills such as knowing how to write super-optimized code are merely pieces of a larger puzzle. In general, you need to be at least literate in all the topics above to be a well-rounded embedded system developer. Sure, not everyone and not every project needs deep expertise in everything. But if you're planning on a career in embedded systems you'll likely hit just about everything on the list -- I know that I certainly have. (And, if you're a hiring manager, now you have a shopping list for skills for your senior developers.)
0 nhận xét:
Đăng nhận xét