As a CS student, we're all subject to the rigorous, mindf* 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?
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.
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.
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.
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).
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.
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.
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.
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.
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.
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.
11 comments
[ 2.9 ms ] story [ 31.7 ms ] threadOther 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.
I'm in ECE and I'm taking OS right now.
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.
My OS class was one of the most rewarding classes during my undergrad years. Don't think of it as a hurdle. Embrace it.
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.
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.
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