*Bwogger Daniel Ortega-Venni is back with a new major spotlight! Welcome to the world of CS-Math.*

With major declaration around the corner, Bwog is back to give all you sophomores and first-years some guidance as to what majors may be the best for you! This time, we’re discussing Computer Science-Mathematics, which may be longest name for a major I’ve ever heard of.

**Requirements:**

The Computer Science-Mathematics Major is an interdepartmental major meant to “provide substantial background in each of these two disciplines.” In essence, it’s like double-minoring in both fields. To complete the major, you need a minimum of 45 credits, divided as follows:

- 20 of the credits come from
**Computer Science classes**. These include such well-known (and, in some cases, much-feared) classes as Intro to Java and Advanced Programming. All the classes except Advanced Programming and Discrete Math are three credits, so plan wisely. There isn’t much leeway regarding classes you can skip, but if you scored a 5 on the AP exam, you are recommended to take the honors version of Introduction to Computer Science. There is also a four-credit honors version of Data Structures. - 19-21 of the credits come from
**Math classes**. You are required to take one of three calculus sequences, all of which require taking Calculus I and II. From there, you have three options: (1) take Calculus III, IV, and Linear Algebra, (2) take Accelerated Multivariable Calculus and Linear Algebra, or (3) take Honors Math A and B. Option one will totals 18 credits, option two grants you 13 and option three gives you 14. In addition to this sequence, you also have to take an Undergraduate Seminar in Math (either I or II) and Introduction to Modern Algebra, which gives you an additional six credits. More information regarding classes you can skip based on your AP scores can be found here, under the “Placement in the Calculus Sequences” header. - Six credits come from
**electives**. These can be in either math or computer science. A list of possibilities can be found here, but you can also reach out to your major advisor(s) to request for a different class to be counted.

**Overview of the Classes:**

**Computer Science Classes:**

*Disclaimer: I have not taken the honors classes, so I cannot comment on them.*

- Introduction to Computer Science and Programming in Java: As it says on the tin, this is an intro class that focuses on getting your hands dirty with Java. As a result, it isn’t intended to be too difficult, but your mileage may vary on how easy the class actually is. The programs you will code for homework vary from ones that print out how much change is owed to ones that simulate plating poker. The exams may ask you to code on paper and you will need to be prepared to do so for any other programming courses.
- Data Structures in Java: You need to have taken Intro to Java to take this class. A step-up from Intro that focuses more on the various ways data is stored in Java. Again, your mileage may vary on just how much more difficult this class is than its predecessor, but I don’t recall it ever getting too bad. Programming assignments vary from reversing a linked list to implementing an algorithm for finding the shortest path between two points on a graph.
- Advanced Programming: I’m currently in this class, so I cannot make any remarks as of now. However, this class is a change from the previous two in that you learn how to code in C and C++. You need to have taken Data Structures to take this class and are expected to learn how to submit your work using git (you will be given a tutorial early in the semester).
- Discrete Math: Less coding-oriented, but still requires you to have taken an intro course in programming. It also helps to have some familiarity with python because you will occasionally have coding assignments for this class. More often, however, you will be doing problem sets that focus on the main topics of the class, which include logic, how to write proofs as well as number and graph theory. I took this class when the pandemic hit, so I didn’t have a midterm and the final was purportedly made easier for us. However, on the whole, this class wasn’t too much of a hassle and is definitely the most math-y computer science class you will be taking.
- Computer Science Theory: Requires having taken Discrete since you will be doing a lot of proofs in this class (and no coding). There are four main units: regular languages, context-free languages, recognizable/decidable languages, and time complexity. This class is the most theoretical of the computer science classes, and as a result, it can get very confusing very quickly. I recommend taking advantage of the group work policy (you are allowed to work with up to two other people on the assignments), as it helps to talk through the thought process with others. I took this class online as a result of the pandemic, so rather than having a midterm and a final, we had an exam on three of the units. These were slightly easier than the homework assignments.
- Fundamentals of Computer Systems: Disclaimer that I was taking this when the pandemic hit so my experience will be very different from most others. The main emphasis of this class is computer organization and how certain elements work. What’s unique about this class compared to the rest on this list is that you will be made to sign up for a study group consisting of one TA and some other classmates. These study groups will meet once a week and are meant to clarify some things from the lecture and help you with the problem sets. My teacher did not grade our problem sets – they were just practice. This class is not coding-based, so, again, it may take you a while to get into the swing of things.

**Math Classes:**

*Disclaimer: I did not take Calculus I.*

- Calculus II-IV: I took these classes in my first three semesters at Columbia and they all mainly mesh together. They are standard math classes with two midterms and a cumulative final and several problem sets (though I also had weekly quizzes in my Calc II class). In terms of difficulty, I would say Calculus II is the easiest as it more directly relates to Calculus I, Calculus IV is the middle ground, and Calculus III is the most difficult. Calculus II and III assigned the homework on WebAssign whereas Calculus IV gave us pdf files for our homework. These classes collectively cover everything from integrals to Lagrange multipliers to spherical and polar coordinates. Note that despite the naming of the classes, you can take Calculus III without having taken Calculus II.
- Linear Algebra: Requires having taken Calculus III. This class is all about matrices and how to manipulate them which is harder than it sounds, at least it was for me. Once again, this class involves weekly problem sets, two midterms, and a final.
- Undergraduate Seminars in Mathematics I or II: Requires having taken two years of calculus and one year of additional math classes. This is the wildcard of a math class. In this class, you will be asked to give your own lesson on math and that is basically your entire grade (apart from perhaps attendance and participation). Four different topics will be announced at the start of the semester – among the ones that were offered when I took the class were random permutations and knot theory – and you will sign up for one. The TAs that lead these sessions will try to pick a time that works out for everyone and, once that is sorted out, every person in that group will sign up for a date and topic to present. These presentations are expected to last for about an hour and, while you can work in pairs, each person is still expected to talk for 60 minutes. You are graded on your command of the material and how well you can teach it to others. The downside is that it all basically rests on this one presentation, but the upside is that when you’re done, you can sit back and relax! Note that you do not need to take both semesters of this class and you will not be at a disadvantage if you take the second one without taking the first one – I and II just signify when in the year it is offered.
- Introduction to Modern Algebra I: This class is the hardest math class you will ever take. You mainly learn about group theory and the homework will almost always ask you to prove various statements rather than simply compute something (note that you will not be taught how to prove, though! You are expected to know already or learn on your own). Structure-wise, it is the same as the calculus sequence: you take two midterms and a final and complete various problem sets.

**Electives:**

I took Analysis and Optimization and am currently taking Combinatorics.

- Analysis and Optimization: Requires having taken Calculus II, III, and Linear Algebra. This class is a bit of an oddball content-wise, as it seems to combine elements from all of the above classes with some Ordinary Differential Equations thrown in for good measure. As a result, parts of this class will feel like a review while others will feel like new material all together so it may feel a bit disjointed. However, I’m inclined to say that, overall, it isn’t too bad of a class but keep in mind that I took this class online and the tests were open-notes. Speaking of tests, the structure of the class is the same as always (two midterms, a final, problem sets).
- Combinatorics: As I’m taking this class right now, I can’t comment too much on it, but this class focuses on counting and the only assignments you have are two midterms and a final. Since this class is an elective, it isn’t intended to be super difficult but make sure you don’t let the lack of homework relax you too much.

**Department Newsletter:**

You should be automatically enrolled in both the Computer Science and Mathematics newsletters when you apply for the major. These are mainly sent out with information regarding events and opportunities for the major, but for your sake, you should create a filter for them (especially the Computer Science one), otherwise, your inbox will fill up very fast.

**Applying for the Major:**

You don’t need to do anything special to apply for the major beyond declaring it when it’s your time to do so. Just note that you will have two academic advisors since the major is interdepartmental.

**Last-Minute Tips:**

- The biggest piece of advice I can give prospective majors is to take Discrete Math
*before*you take Intro to Modern Algebra. There is some overlap between the two, as they both deal with sets and proofs, and I think that if I had taken them in that order as opposed to Modern Algebra and then Discrete, I would have been much better off. - Find a study buddy! Latch onto them! Struggle through problem sets together! Math and Computer Science classes can be very daunting classes but they definitely feel more daunting if you’re trying to figure out the problems all by yourself late at night. Of course, respect the Academic Integrity policy, but even just telling each other how much you hate coding a poker game will do wonders for your stress levels.
- Plan your semesters out ahead of time! Since many of these classes are intro/standard classes for the full math/computer science major, they are more or less guaranteed to be offered every semester. This is great if you want to make sure that you don’t take too many math classes at once, for example.

*computers via Bwog Archives*