Revision of Upper-division courses from Tue, 2009-07-28 13:25

Introductory Course CSC 151

Core Courses and Electives

Grinnell's introductory courses introduce fundamental views of problem solving and different supporting programming languages. Upper-level courses fall into two main categories:

Core Courses: Requirements for the CS Major

Introductory Course CSC 151

Core courses address fundamental topics that are recommended by national curricular guidelines. The Computer Science Major incorporates these core topics into mandated courses:


  • CSC 301, Analysis of Algorithms (fundamental problem-solving techniques, corresponding data structures, and analysis of efficiency)
  • CSC 341, Automata, Formal Languages, and Computational Complexity (the theory of computation— connecting with perspectives of the liberal arts)
  • "under-the-hood" courses:
    • CSC 211, Computer Organization and Architecture (hardware basics)
    • CSC 213, Operating Systems and Parallel Algorithms (fundamentals of parallel computation)
  • upper-level, language-oriented courses:
    • CSC 302, Programming Language Concepts (design alternatives and implementation possibilities)
    • CSC 362, Compilers (utilization of langauge theory to translate high-level programs to machine-level code)
  • software development methodology and team-based software development projects:
    • CSC 323, Software Design (development of large-scale programs based on object-oriented problem solving)
    • CSC 325, Databases and Web Application Design (use of databases and scripting languages in developing Web-based systems)

To address pragmatic issues of scheduling (e.g., students considering off-campus study), the major requires only one of CSC 211 or 213, one of 302 or 362, and one of 323 or 325. Both 211 and 213 are strongly recommended, and together these courses address content areas of the national curricular guidelines.

Electives, Mentored Advanced Projects (MAPs), Special Topics

Introductory Course CSC 151

The Computer Science Department offers a range of electives to extend student backgrounds beyond the undergraduate core. In addition to regularly scheduled courses, special topics courses address particular interests of both students and faculty.

Some recently-offered electives have included artificial intelligence, computer networks, computer graphics, computational linguistics, and human-computer interfaces.

Complementing regular courses, students work with faculty on a wide range of guided reading courses, independent projects, and mentored advanced projects.