Operating Systems vs Compilers

<p>I need to choose between CSE306(OS) and CSE304(Compilers), I don't see how or where I will use operating systems; where as in compilers we will have a huge course project.</p>

<p>An understanding of operating systems will be useful in most industry software jobs, as nearly all software will interact with the operating system at some level.</p>

<p>Compiler topics do come up (particularly when parsing or translating complex input languages), but not as often as operating systems topics. However, writing a compiler does touch upon all major areas of CS – software (obviously), hardware (in code generation and hardware-specific optimization), and theory (lexing and parsing uses language and automata theory), so it is often recommended as preparation for graduate study in CS (operating systems is also often recommended as preparation for graduate study in CS).</p>

<p>The way my OS professor puts it is that there are a ton of OS concepts you learn while taking OS that can be put to use in a variety of contexts. For example, the theory behind scheduling threads is the same theory you’d use for scheduling web server requests. Caching, synchronization, concurrency, general systems design principles…the list goes on. Also I think it’s valuable to know how operating systems work on a fundamental level, as this can inform what you do with higher-level programming.</p>

<p>And dammit, ucbalumnus, I was ready to drop compilers and security next quarter in favor of interning at a really cool company, but now I’m having second thoughts. Making sacrifices sucks.</p>

<p>Edit: I don’t know about your school, but my OS class involves a huge course project (basically implementing key portions of an OS <a href=“http://en.wikipedia.org/wiki/Pintos[/url]”>http://en.wikipedia.org/wiki/Pintos&lt;/a&gt; ). If your class is along the same lines, then you’ll have a big project to work on either way.</p>

<p>In my opinion, sumzup, an internship at a cool company (presumably with interesting projects to work on) will be more valuable than taking a class on compilers.</p>

<p>I was out a few days…doing some golfing in the Caribbean.</p>

<p>Basically, what UCBAlumnus said was right on point. As for me, if there was ANY college course that DIRECTLY applied to my everyday work, it was operating systems.</p>

<p>

</p>

<p>Couldn’t you take compilers and/or security some other quarter instead of next quarter, if you use next quarter for an internship or co-op job?</p>

<p>Our OS class also goes pretty in depth, check out <a href=“http://www.cs.sunysb.edu/~cse306[/url]”>www.cs.sunysb.edu/~cse306</a></p>

<p>I can take both, but I really want to take Computer Game Programming CSE380 instead of OS.</p>

<p>I’m in a terrible position right now. CSE304 can serve as an equivalent for CSE306 in terms of graduating.</p>

<p>Should I just scrap CSE380 off of the list, and take compilers(304) and OS(306)? I guess I’ll somehow hope that I will learn CSE380 on my own?</p>

<p>The reason why I am so keen on taking CSE380 is because the projects they do in 380 are just AMAZING! Microsoft, Google and a bunch of other companies have served as judges in the past in our annual contest(once the semester is over, to see who designed the best game)and then I wanted to take CSE381, which is advanced game programming.</p>

<p>CSE380 is strictly offered in the Fall, 381 in the Spring. But 306 is always offered, however, 381 and 306 might be impossible since I’ll have to take Software Engineering(308, where you team up with 6 members and do something big)in the Spring.</p>

<p>I don’t understand how these outrageous C assignments will help me one day in the workfield.</p>

<p><a href=“http://www.cs.sunysb.edu/~ezk/cse306-f12/hw1.txt[/url]”>http://www.cs.sunysb.edu/~ezk/cse306-f12/hw1.txt&lt;/a&gt;
<a href=“http://www.cs.sunysb.edu/~ezk/cse306-f12/hw2.txt[/url]”>http://www.cs.sunysb.edu/~ezk/cse306-f12/hw2.txt&lt;/a&gt;
<a href=“http://www.cs.sunysb.edu/~ezk/cse306-f12/hw3.txt[/url]”>http://www.cs.sunysb.edu/~ezk/cse306-f12/hw3.txt&lt;/a&gt;&lt;/p&gt;

<p>

</p>

<p>HW #1: Conceptual introduction to encryption - You may decide to work in network security on day.</p>

<p>HW #2: Forking processes is similar to creating hierarchical processes (and concurrent processing) that is the makeup of Unix. This will help you further understand those concepts in your operating systems course…and operating systems is one of the most important (as well as practical and job-applicable) courses in the CS curriculum.</p>

<p>HW #3: Altering Kernels - This is how there are various flavors of Linux (like Fedora, Red Hat, Scientific Linux, etc) exist. The U.S. Air Force has their own version of “secure Linux” which is basically altering the kernel of an exsiting Linux/Unix system and continually making the changes (and new features) open source.</p>

<p>Note: If were a student…I would ask the SAME thing. I often wondered why my CS profs would give these “goofy” assignments. Of course, someof these do not ring a bell until you get into the workforce.</p>

<p>Thanks GlobalTraveler that makes more sense to me now. I’m glad I’m not the only one.</p>

<p>I’ll pass on CSE304 I guess, since I didn’t really enjoy ToC.</p>

<p>I’ll take Multi-core programming instead.</p>

<p>If you want to get into game software, you will still need the OS course. The game software developer needs a good understanding of interaction with the OS (which may be a specialized console OS) for maximum performance. A good understanding of networking is needed for multiplayer or client/server games. A good understanding of security is needed to prevent cheating in the games.</p>

<p>^That would depend, in my opinion.</p>

<p>Console video gaming and “hardcore” desktop gaming would probably require those concepts. Mobile gaming or browser gaming would require considerably less of those concepts, even for multiplayer games (because the backend networking is typically handled with built-in OS libraries, like Game Center for iOS)</p>

<p>Just an alternative viewpoint.</p>

<p>ucbalumnus: I’m on track to graduate spring quarter, and that quarter I’ll probably take Distributed Systems (really excited about this), Networks, and maybe Machine Learning. Compilers and Security aren’t offered that quarter anyways, and I don’t really intend to continue school into the next academic year unless I get into the 5th year master’s program. Hopefully I can learn the same material either elsewhere (maybe in a master’s program) or on my own.</p>

<p>terenc: Yeah, I agree. An internship will probably be more valuable (especially at this company)…it’s just that I want to do all the things! :P</p>

<p>More thread relevant: OS is really just an amazing class. I’m learning so much just by having to implement everything, and I’m guessing this will end up being the most valuable class I take, except for maybe Distributed Systems, which I think will basically be OS on steroids.</p>