

Why Learn About Operating Systems? - capkutay

As a CS student, we're all subject to the rigorous, mindf<i></i>* of a course called operating systems. I most likely won't be creating an operating system in the future, so why do all CS students have to learn about OS?
======
cybojanek
The point of the OS class isn't to teach you how to CREATE an OS from scratch,
but to teach you how an OS WORKS. I've interacted with a lot of CS students,
and it boggles the mind how ignorant they are in using a computer. To fully
understand how your program works, you should have a general understanding of
what's going on behind the scenes. It definitively makes you a better coder.
If you understand that a file-system, memory, cpu etc...aren't just black
boxes that "just work", you can code around their bottlenecks.

My OS class was one of the most rewarding classes during my undergrad years.
Don't think of it as a hurdle. Embrace it.

~~~
brudgers
Back in the early 90's, a neighbor was finishing his Master's in CS. We were
having a discussion and I mentioned _Dr. Dobbs._ He'd never heard of it
(though in fairness he did give me a floppy with Mosiac and Winsock).

------
ctylghts
The same reson why we want to know why quantum teleportation works.

Knowing how is really only half of the knowlage your going to need. In most
cases you will never need to go deeper than the userspace level, but in thoes
rare instances you do that understanding is invaluable.

Also dont write off not wanting to write os in the future, its one of the most
rewarding pet projects i have ever worked on.

------
chromejs10
Because OS will give you a better feel for how threading works, for how file
systems work. Just because you (probably) wont be working on OS source code,
doesn't mean the behind the scenes knowledge wont be beneficial because you
will be getting a better grasp of Computer Science as a whole. I have friends
who work on Android apps, and often times they have to dig into the Android
source code to see what the hell is going on. The more sense you can make out
of the code, the easier it will be to find what you are looking for.

Also, it is considered a weeding out course in many schools. It separates
those who are willing to dig deeper into the world of CS and those who will
either quit the major or become a desk drone.

Signed, Your CS112 TA

~~~
capkutay
Thanks...I remember you mentioned some of this to me. My one thought was that
there are some pretty cool applications courses in our department (distributed
system design/AI). Out of the upper division classes, OS grabs my
attention/interest less than others. But I was wrong to assume that learning
about operating systems didn't have applications to what I want to do in the
future with CS. The answers here cleared it up.

------
theshadow
I got the co-op job that I'm doing in January after the interviewer quizzed me
on interrupts for 20 minutes. I was like you when we were studying interrupts
wondering why I need to know about such low level abstraction but lo and
behold it ended up getting me the job. I had a friend who used concepts from
the Automata Theory course (arguably the most esoteric and least practical
course in the Comp Sci curriculum) on his internship. You never ever know what
you're going to end up using in industry esp as an undergrad, therefore having
breadth in your CS knowledge is important.

------
brianwillis
Because sometimes when you're programming you can rely on your language or
framework to abstract away the details of the hardware and operating system.
This allows you to solve easy problems that language/framework designers have
anticipated.

Other times, you'll be faced with hard problems that require you to roll up
your sleeves and mess with the stuff under the hood. Before you can do this,
you need to understand what operating systems do and how they work. If you can
write this kind of code, there will be far more problems that you can solve.

------
tonyarkles
I've taught the labs for my university's Intro OS and Advanced OS courses, and
I've heard this question many times. Here's the short answer: everything you
do will eventually interact with the abstractions that your OS provides you;
sometimes (often?), that abstraction leaks out implementation details. When
you're confronted with an otherwise confusing problem (e.g. Why do I get shit
performance when I read one byte at a time from disk?), understanding what the
operating system is doing is going to be the quick way to figure it out.

------
rhnet
Checkout this awesome post on Facebook's Engineering blog: 'The Full Stack'
<https://www.facebook.com/note.php?note_id=461505383919>

I'm in ECE and I'm taking OS right now.

------
davidhansen
Nice troll.

In the unlikely event you're actually asking in earnest, it's the same reason
electrical engineers learn about electrons, or chemists learn about orbital
shells, or authors learn about Shakespeare, or linguists learn about Latin, or
biologists learn about Mendelian genetics, or physicists learn about Newton,
or military generals learn about Thermopylae.

~~~
Jacquass12321
In addition, while you may not ever make an OS, you will most definitely make
things that have to interact with an OS. Understanding the world your
application lives in and some of the constraints the designers of that OS
faced will make it easier to troubleshoot interaction problems that occur
outside of the borders of your application.

I'm more impressed that OS is considered an exceedingly difficult part of a
curriculum somewhere. I found it a relatively straightforward course, and do
not recall anyone else complaining about it. Most of the difficulty in the
curriculum seemed to center around Theory of Computation and our programming
language concepts course that was in scheme, a lot of people have a really
difficult time with continuation passing and understanding call/cc after all
OO languages.

