What was/is your Computer Science program like?

I am having a mild identity crisis, and exploring various avenues for my education. There have various people that suggested I look into computer science. I know that layman view computer science and programming as being synonymous. However, I know enough to know this isn’t true.

If I considered a degree in Computer Science, what should I do to prepare myself for the coursework, and what were the majority of your classes like? What did the majority of your classes consist of? Programming, math, etc. I know it varies depending on the school, but I’m curious as to your experience since I’m relatively clueless based on course descriptions.

Thanks

I’m technically not a computer science major but here are some courses I’ve taken or currently taking, just to give you an idea:

Intro to EECS (6.01) - Python, search algorithms, state machines, circuits, probability

Software construction (6.005) - lots of Java, good software writing, interfaces, GUIs, concurrency, race conditions

Algorithms (6.006, 6.046) - divide and conquer, shortest path algorithms (incl. all pairs shortest path in O(V^3)), linear programming, max flow, randomized algorithms, P, NP, NP-complete complexity classes (P stands for “polynomial time”)

AI (6.034) - minimax, support-vector machines, neural nets, constrained search

Computation structures (6.004) - more circuits, logic gates, processors, Assembly language, pipelining, etc. (Currently taking this one)

As you can see, a lot of if depends on what you take, as CS covers a ton of topics from high-level to low.

Most of my courses (except for 6.046) require some amount of programming, while 046 is more theoretical.

I’ve heard a lot of math is involved. Do you think there is any benefit to majoring in computer science over a math major and learning how to program yourself? Someone once told me that for computer science you should love math, but not expect to be a programmer by the end. He told me only about 1/4 of their degree plan was programming, while the rest varied.

If your actual goal is a career in computing, majoring in math would be a roundabout way of going about it compared to majoring in CS, unless CS is non-existent, is extremely weak, or is a misnamed IT major at your school so that you would have to learn the CS on your own anyway.

A quarter to a third of the degree plan will likely be CS courses with programming assignments and projects, which will give you plenty of practice in that area. There will be additional math and theoretical CS courses; depending on the school, there may be some science or engineering course requirements as well. But there will also be breadth (humanities and social studies) requirements and free electives in your schedule as well.

This is what varies.

I am in the middle of a CS program, and nearly every class has used programming. Often, it will be as a tool for math, but you still get plenty of programming. In about 2 years of classes, I have only had a single CS class that didn’t use programming: the highest level “Theory of Computation” class. They were all math heavy for sure, but they all relied on programming as well.

A good/great CS program will cover most of:

Basic Programming and Design - Programming and some Math
Object Oriented Design - Programming
Software Development - Programming
Algorithms and Data Structures - Math and some Programming
Computational Theory (or something along these lines) - Math
Computer Systems - Low Level Programming and Technical Knowledge
Operating Systems - Low Level Programming and OS Design
Computer Networks - Programming and Technical Knowledge
Programming Languages - Neither and both in some ways, you design and evaluate languages
Compilers - High Level Programming
Artificial Intelligence - Math and Programming

If a school has most of these covered and frequently offered, then you should be good.

As you will notice, much of this is programming, but math plays a key role. You don’t need to be in love with math, but it is an underlying idea that drives programming, so a good handle on it is key.

Hope that helps!

Lots of math for my kid’s program.

CS and Math, while beneficial to each other, are separate. Sure, you can learn to code on your own, but the majority of what you’d take as a math major won’t be applicable to CS. You would also be missing out on the theory of CS and wouldn’t understand what is going on on a lower level.

I’m a sophomore math and CS double major (BA) at an LAC. I’m ahead in terms of sequence, however, and also am a grader for CS, so I know a lot about many of the courses. So I can give you an overview over my academic plan in terms of my majors. I want to go into cryptography/cryptanalysis, which is an intersection of both, so my electives are tailored towards background needed for that. I should note that there are some things that aren’t typical about my school, since we are an LAC. Many schools require complex analysis and diff eq for math majors and operating systems for CS, which are electives for us.

My CS major has a lot of coding for the beginning and intermediate classes, but once you move above there, some of the courses are more theory or math courses. It varies greatly based on what electives you choose.

Both require:
-Intro to Computing with lab, which is basic java and an intro to program. I actually took the equivalent at a CC in high school. Lots of coding in this one. I’m actually the grader for one of the sections this semester.
-Calc 1. I took AP calc BC so I’m not sure how heavy they are at my university.
-Linear Algebra. Took this last fall. What can I say, it’s a math course. It’s relatively straight forward; I don’t think most of the CS people had a problem with it. I should note that the prereq for the course is either Calc 2 or Discrete Structures (see below), so you do NOT have to take Calc 2 as a CS major.

Our CS Major also requires:
-Data Structures with lab. Very, very code heavy. Covers basic data structures such as linked lists, vectors, bags, heaps, and trees, and also more advanced topics such as recursion . Done in Java. Took this last fall and was the grader for the course last semester.
-Discrete Structures for Computing with lab. Took last semester. Despite the name, is actually more a math course. Not much coding at all, but coding done in Java and some work done with LaTeX. It’s a very dumbed down version of Fundamentals of Abstract Math (see below). Covers very basic logic, very basic proof techniques (direct, contraposition, contradiction, induction), basic set theory, and basic combinatorics and probability,
-Software Systems Development. Currently taking. Lots of coding (no tests or quizzes). Learn C/C++, how to use UNIX through terminal/command line, then second part of course is software systems development.
-Computer Organization. Currently taking. Very code heavy. What most schools call Computer Architecture. Learn Instruction Set Architecture, basics of processors, MIPS Assembly, etc.
-Algorithms. Plan on taking next semester. It’s more a math class.
-Design and Implementation of Programming languages. Senior course. I’ve heard that this course is a lot of math and coding.
-Three 300-level CS electives, of which I am planning on taking database systems (decent amount of coding), intro to compiler construction (decent amount of coding), computer security w/lab (decent amount of coding), and I’m trying to fit in Theory of Computation (essentially a math class; probably won’t fit though).

Our Math Major also requires:
-Calc 2. Took AP Calc BC.
-Multivariate Calculus. Took in HS.
-Fundamentals of Abstract Math. Took last semester. Has Linear algebra as a prereq. Covers basic logic, proof techniques (same as Dicrete, plus strong induction, both with harder proofs), set theory, basic group, ring, and field theory.
-Abstract Algebra 1
-Real Analysis 1. This is actually cross registered with CS and can be taken as a CS elective, but this is not an option if you’re a math major too, since you need it for math credit.
-four 300-level math electives, of which I am planning on taking Numerical Analysis, Probability, Coding Theory, Number Theory (currently taking), and Mathematical Statistics.

It would be a very good idea to include this course, given your majors and goals (and it probably is not that much work compared to a CS course with programming projects). If you can fit it in, it would be a good idea to take it before you take the compiler course that you intend to take.

Post #7, thats a required class at my kid’s university and it’s all Math and proof. No programming.

@ucbalumnus Yes, I am trying hard to fit it in, since you previously suggested I take :slight_smile: (that was a while ago.

I also wanted to add that there is math involved in both Data Structures and Computer Organization (Architecture). The former requires math for calculating things like Big Oh and the latter involves lots of math when it comes to determining processing speed and efficiency, and converting bases (binary, hex, decimal), plus two’s complement and floating point representation.