Embedded Space & Software Development Practices
Embedded Programmers (at least the ones I know) are mostly at liberty to ignore the basic software development best practices, thanks to the simplicity of embedded applications. But, as the embedded processors are becoming more and more powerful, this situation might change soon. In coming years the embedded software applications are bound to become more complex (some embedded segments have already seen this change). Embedded programmers need to realize this inevitable change and start equipping themselves with fundamental knowledge about software development.
I come from an Electronics background. My first job involved hardware design & debugging, firmware development and system integration. The codes (firmware) which I developed were pure assembly level routines. QA Keywords like maintainability, re-usability and testability were at that time aliens to me (and remained alien until an year ago). After a few years, I move to a new job where my key duties involved writing DSP codes and developing multimedia frameworks. This was my first professional exposure to a high (or middle) level programming language : in form of "C". Though we were developing codes in "C" (and a little bit of assembly), the software was still small enough to give us any nightmares.
My next job change was an eye opener in terms of how complex the embedded applications have grown. We were running our application on a full fledged OS (instead of a think or no layer), with half a dozen threads, and the application interacted with a number of libraries. When software grows large (both in terms of lines of codes, and number of interfaces), importance of Software Development Practices come in to picture. It needs to be readable, maintainable (as more than one engineer is going to work on it), reusable (who will like to repeat the same effort in terms of money and time by redeveloping a code from scratch for a similar product), testable (reminds me of sleepless nights) and portable (across platforms). Low coupling and clean interfaces are very crucial for all these aspects.
Irony is that, a majority of embedded software developers are not exposed to these issues. This is because embedded engineers are not always pure software developers. They are hardware engineers, signal processing experts (and likes) who have just extended their domains to write a bit of software.
It is never bad (though it is really tough) to upgrade your skills and be better equipped to face the changing realities. If you like challenges, then it is the time (before it becomes too late) to learn basic of good software development. I will recommend the following two books to start with, and then you can take care of your own.
(1) Agile Software Development
(2) Code Complete
To post reply to a comment, click on the 'reply' button attached to each comment. To post a new comment (not a reply to a comment) check out the 'Write a Comment' tab at the top of the comments.
Registering will allow you to participate to the forums on ALL the related sites and give you access to all pdf downloads.