Here is my proposed definition of firmware:
‘Firmware is the art of designing software that successfully controls and/or monitors the physical and natural world through electronics.’
It’s not your father’s definition is it? But I would argue the definition has actually changed over the years.
Words change their meaning when the old meaning no longer has value or is obsoleted by the modern world. This is called (yes there really is a name for this) etymology. For example computer used to mean a person who computes.
Argh! My ears cannot hear it! English!! Engineers hate English! It’s our kryptonite! Which is also why engineers hate writing things down or creating requirement documentation. But a poorly written requirement will wreak havoc and chaos on your project.
So does a poor definition wreak havoc!
So as much as we all profess our love of math and hate (ok have a strong distaste for) English, having no clear definition for what hundreds of thousands of engineers use to define their profession is not helpful.
What is the present definition of the word firmware you ask? Oh it’s a mess. I did some research on this. I’ve also done various surveys on the word through the firmware LinkedIn group. None of it’s pretty.
I went searching for the definition at IEEE’s standards definition database. Sound like the logical source right?
I found 11 different definitions.
Yes 11 variants of a definition that is no longer relevant. Regardless, the going theme seems to be software that resides in non-volatile storage that can be read only by a computer.
Really. Or should I say really not helpful.
How does this convey anything useful and distinguish it from software? Is this what you tell people when they ask you what firmware is? How is this definition really different then saying firmware is software? All that is added to the definition is the software’s residence -- that being non-volatile memory (well at least until you move said firmware into RAM, but I digress).
In an attempt to improve things, many have abandoned the use of the word firmware and replaced it with embedded software. Not sure how this solves anything. In fact I think it makes matters worse. It ties it even tighter to software and lessens the useful distinction.
Yet how many computer scientists do you know that write firmware? I’ve done studies on this and it’s very few. In a recent survey I did of degrees held by firmware engineers, I found that of 377 sampled, 13% held a bachelors in computer science. The great majority (43%) had a bachelor’s degree in electrical engineering. About 80% had an engineering degree of some kind. Clearly there is an important engineering role in firmware that is sorely missing from 1) your father’s definition, and 2) definitions characterizing it as software, which is not a field of engineering.
So firmware is a field of engineering. No, you can’t call it software engineering since this is the engineering of software itself. In fact I still fail to see how calling us ‘embedded software engineers’ is helpful since embedded just categorizes a field of software engineering.
Firmware engineers must have a strong grasp of engineering first and foremost. After that they need a good understanding of electronics. I say this because a well-written piece of firmware should have a driver layer that connects directly to electronic circuits. Also a well-written piece of firmware should also have some kind of device layer where the devices are often electronic sub-systems. For example if you are to measure voltage, you should understand at a high level the electronics that create that voltage. Much of the application layer must rely on engineering concepts. Similarly, if I am controlling a mechanical system through electronic stimulus, I need to have some understanding of both electrical and mechanical engineering.
Eventually you escape the engineering such as in a GUI implementation on a TFT LCD touchscreen. So at some point it departs from engineering yet remains a science -- computer science in fact. It is at this point where the ‘software’ that resides in the non-volatile storage really is purely software.
So which definition do you think would help clarify to friends and family, organizations, corporations, colleges and Universities?
'Software that resides in non-volatile storage'?
Or…
‘Firmware is the art of designing software that successfully controls and/or monitors the physical and natural world through electronics.’
Back to the trenches! Thanks for reading!
Bob Scaccia is President of USA Firmware, a Software, Hardware, Firmware and IoT Consulting and Design Services Company located in Brecksville, Ohio. Bob also runs the largest Embedded Software group on LinkedIn with 14,000 members and growing and has written articles on firmware curriculum, trends, best practices and using object oriented approaches in the C language.
文章评论(0条评论)
登录后参与讨论