## Ben Burns | Navigating CICS's Requirements

The goal of the blog post is to help clarify the introductory math + CS requirements for a CS degree at UMass, talk a little about how the courses are related and depend on each other, and give some advice on which combos are best to avoid.

The information in this post is up to date as of July 2024, and is aimed at students pursuing a BS in Computer Science. The BA in computer science, which I ended up finishing, has different requirements, and I talk a little bit about the BA at the end. The requirements for the CS degree change periodically, as do the content of the individual courses, so this post will gradually become dated info.

The official CICS webpage has the most up to date information on the degree requirements. However, they don't always include best practices on which courses to take when, information on which classes depend on others (lack of a formal prerequisite does not mean taking class A wouldn't make class B easier), and so on. It's worth noting that this post contains a lot of my *opinions*, and that giving useful and specific advice applicable for all students independent of background, goals, etc. is difficult if not impossible. Everyone has their own opinions on what you should take when, but be careful when taking advice from people that cannot explain their reasoning.

Throughout this post I include a few examples of schedules I think are well-arranged, and a few examples of what I'd advise not to do. The main text of the post are my opinions on how to go about working your schedule.

### What are your goals?

Everyone has different goals when scheduling their courses. Three common ones are speed running your degree to graduate in 3 years (or less), taking courses that make you competitive for high-paying companies, and preparing for graduate school. The main balancing act when scheduling the required courses (intro, core, and math requirements) is finishing the courses fast enough to take lots of cool electives and graduate, but avoiding stacking tons of difficult courses early on into your college career before you have adjusted to the workload, made friends, and enjoyed college a little bit. Consider if you want to err on the side of scheduling too many or too few courses per semester when designing your schedule, balancing burning out and being bored (or falling behind on your degree). Your career-specific goals matter more when it comes to picking electives (more on that in a future post).

### CICS Degree Requirements

I break the CS course requirements into "core courses", classes which you are required to take, and electives, where you have 4-7 slots for courses you pick. In general, it's best to complete all of your required courses first, then start to take electives, as the majority of the electives require one or more core requirements as a prerequisite. Another reason you should take core courses first is that you will be taking courses primarily with students in your year, and will have plenty of students in all of your classes, which helps you make friends and lightens your course load considerably.

The computer science course requirements include:

- The "intro sequence":
- CICS 110
- CICS 160
- CICS 210

- The core requirements:
- CS 220
- CS 230
- CS 240
- CS 250
- CS 311

- The math requirements:
- Math 131
- Math 132
- Math 233 (or STAT 315)
- Math 235

### Planning out the intro sequence

The easiest part of the sequence to plan are the intro courses (110, 160 and 210). You take the three in order, typically in your first three semesters. It is in your best interest to take these courses as early as possible, as delaying an intro sequence course delays the rest of your CS degree considerably since you will unlock all the electives one semester later.

If you took the AP CSA exam and got a 4 or 5, you can transfer the credit for CICS 110. This will let you take 160 in your first semester. If you have prior programming experience, but did not have access to CSA in high school, then there is typically a placement exam offered during the first week of semester that gives students the opportunity to test out of 110 and/or 160. It is not common to test out of 160, but I would highly recommend testing out of 110 if you have the prior experience since doing so gives you access to core requirements starting your second semester (which either lets you space out courses more or to speed run your requirements faster).

CICS 160 and CICS 210 may be offered in the Winter and/or Summer semesters. If you are not entering UMass with AP CSA credit, it may be work taking 160 in your first winter (if offered) to get ahead/catch up on your CS requirements. Again, since the intro sequence is linear, the longer you take to finish the intro sequence, the longer it takes to get to the fun courses. I especially recommend winter 160 to students with BC calculus credit but no CSA credit.

### Planning out the math requirements

Like the intro sequence, the math requirements are fairly linear: you take calculus I (Math 131), then calculus II (Math 132), then calculus III and linear algebra (Math 233 and Math 235). It is most common to just take these courses in numerical order, one per semester.

As with the intro CS sequence, it is possible to place out of Math 131 and Math 132 through AP exams. I am not familiar with a placement test for the calc courses, but that doesn't mean it doesn't exist. Scoring a 4 or 5 on AP Calc AB gets you out of 131, and scoring a 4 or 5 on AP Calc BC gets you out of both 131 and 132.

Math 233 and Math 235 share 132 as a prerequisite, meaning you can take both at the same time. This can be beneficial, as the 233 content requires understanding of vectors and linear algebra (the very first unit is vector calculus). Some background is introduced in 233, but (in my opinion) not enough for a complete understanding. That being said, taking both concurrently plus multiple CS 200s (more on that later) in the same semester can be a considerable workload, so you have to be careful.

If you are also a math major, plan to pick up a math major, and/or are a freshman with Calc BC credit, an industrious plan is to take 233 and 235 at the same time. Having all of 233, 235, and Math 300/CS 250 unlocks most if not all upper level math courses.

I recommend taking 233 and 235 concurrently if you are at least a semester ahead on your math requirements, for example if you have Calc 1 credit but no AP CSA, or Calc 2 credit with AP CSA, as you will be able to finish 233 and 235 before you unlock the CS 200s.

Doing this has two benefits: it prevents nightmare semesters later on that stack 4 or more of the tougher required courses, and fills in your schedule early on when you have less math + CS courses available. *Do not take 233 and 235 concurrently with 2+ CS courses*, it will be too much work. Additionally, if you are really looking to get into research in theoretical computer science or ML, the sooner you takes these courses the better.

If you are not intending to pick up a math major, or aren't in a rush, then there is no reason to take both 233 and 235 at the same time. Again, it is useful to know linear algebra when you take 233, I'd recommend taking 235 first if it fits your schedule better. There is no incentive to take 233 earlier than 235 since most CS courses that require 233 also require 235 (for example, CS 589. CS 389 doesn't officially require 235, but you need to know linear algebra to understand what is going on). 235 is also seen as easier than 233, and so stacking 233 with certain CS 200s can lead to a lot of work.

You have the option to take STAT 315 (formerly named STAT 515) instead of Math 233. **I highly recommend that you do not do this**. The only students I have personally spoken to that have done this are people aiming to take the easiest courses possible *and* graduate as early as possible. STAT 315 is not a bad course, but it has large overlap with CS 240, and (like 240) assumes familiarity with double integration taught in Math 233. If you want to go into machine learning, robotics, or mathematics, calc III is a *necessary* prerequisite. An argument can be made that, if you just want to do (for example) UI/UX design or cybersecurity, you won't ever need calc III, and you are fine to take an easier workload if it means graduating early. However, I recommend 233 *because* it is more challenging (meaning you will get better at thinking abstractly) and because, if you end up ever switching interests to one of the above, you will need calc III.

### Planning out the core requirements

It's important to schedule the core requirements carefully, as some of the courses have considerably more workload than others. Some courses (such as CS 311) differ significantly from Fall to Spring.

You also need to consider the combinations of courses. Before the intro sequence went from 2 to 3 courses (when all 200s required CS 187), the college forbid students from taking the "programming 200s" (CS 220 and CS 230) together and from taking the "theory 200s" (CS 240 and CS 250) together. Additionally, 220 and 250 are commonly seen as the more difficult 200s, so you might try to schedule them in separate semesters. Therefore, it was most common that students paired 220 with 240 and 230 with 250.

However, with the 3 course intro sequence, the programming 200s now require CICS 210 as a prerequisite, whereas the theory 200s require CICS 160 and Math 132 as prerequisite. Most students will have completed Math 132 by the time they complete CICS 160 (the only way to finish 160 first is if you have CSA credit but no AP Calc credit, or if you fail 132 while taking 160). This means most students will unlock 210, 240, and 250 at the same time.

With the new intro sequence, you are no longer disallowed from taking 220 + 230 concurrently or 240 + 250 concurrently. Doing so is certainly possible (in fact I recommend this arrangement), it will just mean lots of programming projects one semester and then lots of proofs in the other.

If you enter UMass without AP CSA or Calc, you get put into a tough spot. If you take all courses as soon as you unlock them, you go from taking two (rather straightforward) required courses per semester in your freshman year to taking four intensive courses per semester in your sophomore year. I cannot in good faith recommend that you take 200s in your junior year: I took 230 and 240 as a junior that had just added CS, and knew practically no one in my class (in fact, everyone I knew was a former student of mine that I had as a UCA). This results in a pretty tough sophomore year, but I think this is the most effective schedule to take.

As I said before, taking 235 before 233 prevents stacking the theory 200s with 233.

If you have AP credit, you might have the opportunity to take programming and theory 200s concurrently. This is your choice: do you prefer to have a mix of proofs and coding (i.e., you don't want a semester of all proofs) or do you prefer to minimize context switching between theory and practice? I found taking only theory courses to be easier than taking a mix, and I like to "theme" my semester to minimize context switching (more on this in the electives post), so I'd prefer to take the proofs courses one semester and the programming courses the next.

It is a popular opinion among students that the 200s are some of the most challenging undergraduate courses, and that the 300- and 400-level electives tend to be easier and/or less work. This means that stacking more than three 200s (CS and Math) simultaneously leads to an intense workload. I'm not saying to avoid taking 4 or more math and CS classes concurrently, I did it almost every semester, but you should be careful about the *jump in workload* from, for example, a semester of just 160 + 132 to a semester of 210 + 240 + 250 + 233, as the workload would likely be more than double.

### CS 311

When it comes to scheduling required courses, CS 311 is an exception in that the homework and exams change significantly depending on the instructor. Historically, the course was taught by Dan Sheldon in the Fall and Marius Minea in the Spring. I took Sheldon's version of 311 in Fall 2022, and was Head UCA for Sheldon and Parvini's Fall 2023 installation.

Marius's version of 311 has a reputation for having more difficult homework and exams (but that's not to say Sheldon's version is easy either). Both instructors are phenomenal, so you should make the decision about when to take 311 based on your goals and the rest of your schedule. Taking 311 with a heavy workload is not advisable in general, but taking Marius 311 on top of a busy sophomore spring and/or graduate courses can lead to lots of homework and not very much time to absorb the content in your classes. Be very careful about taking Marius's 220 and 311 concurrently, the workload is a lot (but anecdotally worth it if you can pull it off, per my friends).

If you are planning to go into software engineering, then you can largely avoid upper level theoretical classes. CS 311 is the exception to this, as most modern interviews are packed with algorithms content, so your command of the 311 material will go a long way in your interview prep and performance (you will see LeetCode problems in 311). Therefore, it might be in your best interest to take Marius's version of the course to get practice with harder problems. If you want to go into theoretical computer science (for example, if any of CS 501, CS 514, or CS 611 interest you) then I recommend taking Marius's version if it fits your schedule.

If you have no AP credits and are not able to take winter and summer courses, taking 311 ASAP slots it in your fourth semester with 233/235, 220, and 230. This causes back-to-back heavy semesters, with the 220 + 311 combination being an intense workload by itself, and I would put 233 in the fall and 235 in the spring here to avoid stacking more work onto the spring.

The typical fix is to push 311 back to your junior year Fall. However, if you really want to take Marius's 311 (either for learning, interview practice, or to get 311 ASAP for prereqs), taking CICS 160 in your first winter would help a lot here. You could then swap 240 and 220 to get a more manageable (and more traditional) course split. Both semesters will still be difficult, but I'd prefer this over waiting an extra semester for 311.

As someone who UCA'd for winter 311, I cannot generally recommend that you take 311 during a 6-8 week summer or winter session as the course just moves too fast for students to properly make connections between topics and absorb the concepts. Unless you are acing 250 (as in, *at least* 90+ on every homework, doing well on the exams, you could tutor someone on any 250 topic on the spot), take 311 in a Fall or Spring when you have more time to absorb the content.

### Picking between the BS and the BA

The majority of UMass CS students graduate with a BS in computer science. On top of the course requirements listed above, the BS requires

- Seven additional electives (including IE): four 300+ courses (not including 311) and three 400+ courses
- Two lab science courses

In comparison to the BS, the BA in CS requires strictly fewer math and CS courses. The requirements for the BA are

- The intro sequence:
- CICS 110
- CICS 160
- CICS 210

- Three of the four core requirements (your choice):
- CS 220
- CS 230
- CS 240
- CS 250

- Shortened math sequence:
- Math 131
- Math 132
- Any 200+ MATH course, RE 211, RE 212, STAT 240, STAT 501, or STAT 315

- Five additional 300+ electives (including IE)
- Four-Course Outside Concentration
- Language requirement

In my opinion, if you just complete the BA requirements and nothing else, you are not getting your money's worth on CS courses. CS 311 is an extremely important course, and I recommend all CS majors take it. Similarly, you can get away with taking significantly easier math courses through the BA than through the BS. For example, if you got a 4 or 5 on AP Stats, the credit transfers as STAT 240, meaning having both AP Stat and BC Calc gets you out of all math requirements for the BA. In contrast, BS students take multivariate calculus nad linear algebra, which are much harder (and two additional courses to take). Taking easier courses is not always to your benefit, but you can always pick the degree path with strictly fewer requirements now, and then switch to the BS if you satisfy the requirements later.

The two BA requirements that you don't satisfy by completing the BS (in other words, the only two things preventing the BA from being a strictly shorter degree than the BS) are the four-course concentration and the language requirement. However, there is a very important exception to the foreign language requirement where students pursuing a BA in CS as their second major do not have to take the language requirement if they didn't already have to for their primary major. This means that the only thing that the BA adds for secondary majors is the four-course concentration, which your primary major will automatically satisfy as well.

This means that, if you are pursuing a double major with CS, it is in your best interest to make your other major your primary, and make your secondary CS degree into a BA, since the BA will now have strictly fewer requirements. If your other major is math (the most common combination),

- The four-course outside concentration will be automatically fulfilled by your math electives
- You automatically fulfill the math requirements by your math degree's core requirements
- You only have to take three of the four 200s if one doesn't fit your interests or schedule
- You only have to take 5 electives, one of which can be a math course (Math 551 or Math 411)
- If you are a math computing concentration, you already have to take 311 and either 501 or 575/513, which is 2/5 of your electives

### What did I take?

My schedule is weird, as I added the CS major as a junior, so it's probably not too helpful to the median student (I also took the old intro sequence). I took CS 250 in my freshman year to replace Math 300, and then took 230 + 240 + 311 to round off my BA core in my third fall. The more interesting part of my schedule was how I went about choosing electives (and why I started my CS degree so late), which I'll talk about next time.