Undergraduate

Sample Curriculum

All Computer Science majors (BA and BS) need to complete a set of required core courses, and for BA students, a set of required courses for the specialization they choose as well. We recommend that a student complete all of the *core courses (C200 or C211, C212, C241 and C343) in the first three semesters. The 200 and 300 levels of these courses sound a little intimidating for freshmen and even sophomores, but that’s just how the numbering system works at IU.

In planning your schedule, we recommend taking courses that both fulfill a requirement and satisfy your personal or professional interests. We also recommend consulting our academic advisors.

Below are sample paths along with recommendation of courses for each of the **specializations.

Intelligent Systems (AI) Specialization

Year 1-first semester: *C200/*C211, M211 (Calculus I), M118 (Finite math)
Year 1-second semester: *C212, *C241, M212 (Calculus II)

Year 2-first semester: *C343, **B365 (DM), M301 (Linear algebra)
Year 2-second semester: **B351 (AI), C291 (C & unix), **B363 (bio)

Year 3-first semester: C335 (Computer Structure), **S320 (Intro to Stat), M311 (Calculus III)
Year 3-second semester: M463 (Intro to Prob), **B403 (Algorithm Design)

Year 4-first semester: P434 (Distributed Systems), **B355 (Robotics), M348 (Discrete math models)
Year 4-second semester: B490 (Computer vision), **B401 (Fundamentals of Computing), **B455 (ML)

Additional useful statistics classes include:
S420 (Introduction to Statistical Theory), S431 (Applied Linear Models I), S432 (Applied Linear Models II), and S440 (Multivariate Data Analysis)

Additional useful mathematics classes include:
M118 (Finite Mathematics), M311 (Calculus III), M348 (Discrete Mathematical Models), M353 (Discrete Mathematics), M413 (Introduction to Analysis), M447 (Mathematical Models and Applications), M463 (Introduction to Probability Theory) (highly recommended)

Explanation for the sample path

Programming Languages Specialization

Year 1-first semester: *C200/*C211, M211 (Calculus I)
Year 1-second semester: *C212 & *C241, M212 (Calculus II)

Year 2-first semester: *C343

Year 2-second semester: C291 (C & unix), **C311 (PL)

Year 3-first semester:
**C335 (Computer Structure),
Year 3-second semester: **C423 (Compilers), **B403 (Algorithm Design)

Year 4-first semester:
**P436 (OS), P465
Year 4-second semester: **B490 (Advanced Functional Programming), **B401 (Theory)

Foundations Specialization

Year 1-first semester: *C200/*C211, M211 (Calculus I)
Year 1-second semester: *C212 & *C241, M212 (Calculus II)

Year 2-first semester: *C343

Year 2-second semester: **C311 (Programming Languages)

Year 3-first semester:
**P423 (Compilers), **M365 (Intro probability and statistics)
Year 3-second semester: **B461 (Database), **B401 (Fundamentals of Computing Theory)

Year 4-first semester:
**B403 (Algorithms), **B504 (Cryptography)
Year 4-second semester: **B415 (Verification), **B455 (Machine Learning)

Systems Specialization

Year 1-first semester: *C200/*C211, M211 (Calculus I)
Year 1-second semester: *C212 & *C241, M212 (Calculus II)

Year 2-first semester: *C343, **C291 (C & unix)
Year 2-second semester: **C335 (Computer Structure)

Year 3-first semester: **P436 (OS)
Year 3-second semester: **P442 (Digital Systems), **B403 (Algorithms)

Year 4-first semester:
Year 4-second semester:

Other recommended courses:
P423 (Compilers) and B441 (Digital Design), P434 (Distributed Systems) and P438 (Intro to Computer Networks)