So, in a thing's components are designed from hardware and software combined.
So you don't just have the software that you write, just have the code,
it's always wired to some kind of different hardware components to make
something happen in the real world or to receive information from the real world.
So a combination of hardware and software, and
this is part of what makes them harder to design than traditional systems.
So, it's not just a traditional software system like desktop software and
all you think about is the code and then you make it run on an arbitrary desktop.
In this case, you're writing software but for a specific hardware platform.
And a hardware platform that may not be developed yet, right?
Actually in big companies this is a big issue, right?
You wanna start writing your software and designing the hardware at the same time.
But how do you write your software when you don't even know what the hardware is
that it's going to be running on.
So, there are lots of different techniques that people use to do that.
In our case though, a little bit simpler, we know that we're using our platform,
but we may not know the details of the circuit.
But still in the end you have to design both sides and they have to work together.
So, the hardware is what really interacts with the physical world.
It does everything.
It receives input from the outside.
It actuates, so it does things on the outside world.
So maybe is has a microphone that picks up sound.
It has a speaker that outputs sounds, something like that.
So, it's the hardware that's actually interacting with the outside world.
But it's actually the software,
usually the software that acts as the intelligence let's say.
So the software takes the data received from the hardware,
interprets it in some way, and then causes the hardware to do something,
orders the hardware to do something.
So for instance, say you've got some kind of sound going on.
The sound and your system's supposed to hear the sound.
And if somebody says a word, then it should trigger a behavior.
So let's say when somebody says, turn on TV, the TV should turn on.
So you'll have a microphone that's receiving the information,
receiving the sound, the words, turn on the TV.
Then, the software will process that information, realize what the words are,
turn on TV.
And then it'll say, whenever I see that I want to turn on the TV.
So, then, it'll have an actuator.
That drives some hardware that actually activates the TV turning it on.
So, that's the way I think about it, the software is the intelligence inside, but
the hardware is actually doing all the work, so you need both.