Developer Dictionary: Operating System
Tags: beginners, computerscience, codenewbie, firstyearincode
Published: 2020-09-16 12:14:39

**This post is part of a resource called Developer Dictionary. More about why I'm writing this [here](https://connectthedots.dev/developer-dictionary/)**

>Familiarity – even if it implies no real understanding at all – can dull the sense of mystery. Educators who wish to cultivate the sense of  wonder therefore face the challenge, as the education philosopher Kieran Egan noted, of defamiliarising the familiar.*

***

You may be thinking "operating system? I already know what that is!" And yes, you know about Mac and Windows. You may even recall those goofy commercials where two actors are playing the role of an operating system. You've probably debated the virtues of iOS vs. Android with family members and questioned their smartphone of choice? So you already have an idea of what an operating system is. But why do we need this Thing? What is inside this mysterious box? What does it do?

##Why Operating System?

We have computer hardware and we have applications that run on that hardware. If we got a computer without any software on it — just the processor and memory — we wouldn't be able to do much with it. Even if it had keyboard and mouse for user input, when we press those keys nothing would happened. We would see nothing on the screen. We need some software installed that knows how to talk to the hardware, as well as how to interpret use inputs and provide users with output.
Even if we're talking about a server, that does not interact with users directly, we still need some software to manage its various tasks and manage the memory allocated to different type of work.

###In Search of an Analogy

What's a good analogy for an Operating System(OS)? I was thinking of air traffic control maybe. The job of an air traffic controller is to direct airplanes in certain airspace – those taking off, those in flight, and those landing — so that no one crashes into anything. This is a difficult job but also very specific and well defined. So nah, too easy. 
What about an analogy with the human brain - our brain processes various inputs and generates various outputs. Some of the inputs for consideration might be:  
"I'm hungry", 
"I need to use the restroom",
"I hear a loud noise in the other room", 
"I have a meeting in 30 minutes, better type faster and finish this writing".

Similarly on a computer, something needs to process all these actions:

 "User just opened another browser tab, need to allocate some more memory",
 "Someone inserted headphones, need to redirect audio output to headphone jack from the speakers", 
"Someone is rapidly smacking keyboard keys, better send the correct electric currents to the liquid crystal display (LCD) of the monitor screen. So those letters display on screen and the user can see what they're typing."
"Just launched a zoom meeting need to stream video, audio, process network I/O, schedule this program on the processor with appropriate priority".
 
And many more. This is what an OS is 'thinking' about constantly. Let's take a look at some of the components of an OS. [Keep Reading](https://connectthedots.dev/os/)