# Breaking down CS courses for freshmen

I'm a student putting together a slide geared towards freshmen level students who are trying to understand what the importance of various classes in the CS curriculum are. Would it be safe to say that this list is fairly accurate?

• Data structures: how to store stuff in programs
• Discrete math: how to think logically
• Bits & bytes: how to ‘speak’ the machine’s language
• Advanced data structures: how to store stuff in more ways
• Algorithms: how to compute things efficiently
• Operating systems: how to do manage different processes/threads
-
I think this question will be well served at cstheory.stackexchange.com –  Pankaj Upadhyay Nov 13 '11 at 6:55

I don't think it's fair to characterize discrete math as "how to think logically". All math (or most of it, anyway) involves logical thinking, but discrete math isn't any more or less about logic than is algebra or calculus. It's about things like learning the properties of fields and rings, that you generally won't have been exposed to in previous math classes. To make a long story short, while there's certainly logical thinking involved, there's quite a bit that's pretty basically just a type of math you (probably) haven't done much of previously. It's probably also worth mentioning that a fair amount of programming is based fairly directly on various forms of discrete math -- for example, public key cryptography is mostly based on rings and/or fields, and symmetric cryptography tends to be based mostly on group theory.

I think the characterization of data structures as just how to store stuff is a bit short-sighted as well. Although they generally try to do so, it's really quite difficult to separate algorithms from data structures -- many algorithms are dedicated to building and maintaining specific data structures, so what's called a "B tree" (for example) refers as much or more to the algorithm than the data structure itself. Likewise, the computations involved in a fair number of algorithms depend intimately on specific data structures (or at least data structures with specific properties).

-
Thank you very much for your response. I did feel that I was over-generalizing discrete math and I'm glad you pointed that out. –  Avinash Nov 12 '11 at 16:08
@JerryCoffin All your examples (groups, rings, fields) are drawn from abstract algebra, but what most people would call discrete math is much broader than that. Discrete math describes pretty much any sort of math that deals with countable things, including: graph theory, set theory, combinatorics, number theory, game theory, etc. Logic would certainly be included since it generally involves a limited number of discrete states. Thinking logically might not properly describe discrete math, but it likely squares with many students' experience in taking those courses. –  Caleb Nov 13 '11 at 20:06

Here is my list:

Data structures: how to represent simple types of information for programming.

Discrete math: understand that programming is based on mathematically provable principles

Bits & bytes: how computers represent and transmit information and instructions

Advanced data structures: how to represent more complicated types of information

Algorithms: how to compute things efficiently (and correctly)

Operating systems: how computers manage the sharing of computer processors, memory, disk space, and communications among several competing programs

-