Grinnell's CS faculty regularly reviews and updates the CS curriculum in response to curricular recommendations, feedback from alumni, and discussions with colleagues around the country. For example, over several semesters, the faculty has drawn upon feedback in discussing alternative approaches for team-based, project courses.
Also since 2010, the major professional computing societies, ACM and IEEE-CS, have been working toward new curricular recommendations for undergraduate CS. The forthcoming recommendations propose adjustments in some areas (e.g., programming languages) and substantial expansion in others (e.g., security).
Recently, synergy between these two efforts has led to a proposal for substantial changes in Grinnell's CS program, including some course revisions, new courses in emerging areas, and increased flexibility in the major.
The CS faculty will present current ideas for a revised CS curriculum and major on Monday, November 11, 2013, at 4:30 in Science 3821, with refreshments served at 4:15 pm in the CS Commons. Everyone interested in computing is encouraged to attend.
Feedback on the draft curriculum and major will be encouraged!
CSC 151, CSC 161, and CSC 207 — the three courses in Grinnell's multi-paradigm, introductory computer science sequence — have been recognized as "exemplar courses" by the ACM/IEEE-CS Task Force on Computing Curricula 2013.
CSC 161 utilizes robotics as an application domain in studying imperative problem solving, data representation, and memory management. Additional topics include assertions and invariants, data abstraction, linked data structures, an introduction to the GNU/Linux operating system, and programming the low-level, imperative language C. The review of CS 2013 identified some refinements of coverage for CSC 161, but substantial changes are not anticipated. The course follows a lab-based format that emphasizes both collaborative learning and individual problem solving.
A continuation of CSC 151, bringing in some concepts more closely tied to the architecture of computers, compilers, and operating systems, such as macro processing, compilation and linking, pointers and memory management, data representation, and software development tools. Additional topics include assertions and invariants, data abstraction, linked data structures, an introduction to the use of the GNU/Linux operating system, and programming in a low-level, imperative language. Variable topic course. Includes formal laboratory work.
This course explores elements of computing that have reasonably close ties to the architecture of computers, compilers, and operating systems. The course takes an imperative view of problem-solving, supported by programming in the C programming language. Some topics include:
Topics in this course are organized into eight modules and a few supplementary labs. A typical modules includes:
In-class laboratory sessions encourage collaborative work — usually working in pairs. In addition, supplementary homework assignments and tests will involve individual work.
The department maintains a page of current and past course offerings.
Computer Science Curricula 2013 (CS2013), national curricular recommendations from the ACM/IEEE-CS professional societies, identify an extensive list of learning outcomes for undergraduate computer science programs. Upon completing CSC 161, students should achieve the following learning outcomes with the specified level of mastery:
Knowledge Unit | Learning Outcome with [Level of Mastery] |
Basic Analysis |
|
Algorithmic Strategies |
|
Fundamental Data Structures and Algorithms |
|
Machine-level representation of data |
|
Fundamentals |
|
Processing |
|
Basics of Counting |
|
Defensive Programming |
|
Robotics |
|
Basic Type Systems |
|
Language Translation and Execution |
|
Advanced Programming Constructs |
|
Algorithms and Design |
|
Fundamental Programming Concepts |
|
Fundamental Data Structures |
|
Development Methods |
|
Software Design |
|
Professional Ethics |
|
Professional Communication |
|
CSC 151, CSC 161, and CSC 207 — the three courses in Grinnell's multi-paradigm, introductory computer science sequence — have been recognized as "exemplar courses" by the ACM/IEEE-CS Task Force on Computing Curricula 2013.
CSC 151 is the first course in our multi-paradigm introductory sequence. Students develop basic facility with designing, implementing, and analyzing algorithms using a functional programming language (typically a variant of Scheme). For the past two decades we have been teaching our first class using a form of the flipped classroom - students read materials in advance of class and then spend class time working with a partner on a set of problems, with the instructor and class mentor providing advice and asking questions.
Starting in 2007, CSC 151 has focused on image computation as its domain for problem solving. That is, students write programs that make images using one of a variety of image-making paradigms, some imperative, some pure functional, some object-oriented.
A lab-based introduction to basic ideas of computer science, including recursion, abstraction, scope and binding, modularity, the design and analysis of algorithms, and the fundamentals of programming in a high-level, functional language. Variable topic course. Includes formal laboratory work.
The department maintains a page of current and past course offerings.
Computer Science Curricula 2013 (CS2013), national curricular recommendations from the ACM/IEEE-CS professional societies, identify an extensive list of learning outcomes for undergraduate computer science programs. Upon completing CSC 151, students should achieve the following learning outcomes with the specified level of mastery:
Knowledge Unit | Learning Outcome with [Level of Mastery] |
Algorithmic Strategies |
|
Fundamentals |
|
Processing |
|
Basics of Counting |
|
Fundamental Concepts |
|
Basics Rendering |
|
Defensive Programming |
|
Functional Programming |
|
Algorithms and Design |
|
Fundamental Programming Concepts |
|
Fundamental Data Structures |
|
Development Methods |
|
Social Context |
|
CSC 312 is a proposed new course in Grinnell's computer science curriculum. It will be a two-credit course that replaces our existing CSC 302, Programming Languages, and CSC 362, Compilers.
Because our multi-paradigm introductory sequence covers many of the core topics in a traditional programming languages course, the new CSC 312 will focus on the implementation of programming languages, primarily through interpretation. It will include some study of syntax (regular expressions and BNF-style grammars) and semantics. It will likely cover the first half of Friedman and Wand's Essentials of Programming Languages.
No current offering
Forthcoming: Learning outcomes from Computer Science Curricula 2013
No previous offerings.
CSC 151, CSC 161, and CSC 207 — the three courses in Grinnell's multi-paradigm, introductory computer science sequence — have been recognized as "exemplar courses" by the ACM/IEEE-CS Task Force on Computing Curricula 2013.
CSC 207 is the third course in Grinnell's introductory computer science sequence and serves as the core gateway
course to the majors. Students develop and analyze core data types (lists, stacks, queues, heaps, trees) and algorithms (primarily sorting and searching). Students also develop facility with object-oriented design. We use the Java programming language.
Starting in Fall 2013, CSC 207 has an experimental theme of Computing for Social Good. Students will work with free and open source projects that relate to the primary content of the course. We will leverage the Android platform for some of this development.
An introduction to the ideas and practices of computation: message passing, information hiding, classes and interfaces, inheritance, polymorphism, and reflection. The course also includes data structures and the associated algorithms, packages and libraries, exceptions, and the use of an integrated software-development environment. Includes formal laboratory work.
Coming Soon
Coming Soon
The department maintains a page of current and past course offerings.
Computer Science Curricula 2013 (CS2013), national curricular recommendations from the ACM/IEEE-CS professional societies, identify an extensive list of learning outcomes for undergraduate computer science programs. Upon completing CSC 161, students should achieve the following learning outcomes with the specified level of mastery:
Knowledge Unit | Learning Outcome with [Level of Mastery] |
Basic Analysis |
|
Algorithmic Strategies |
|
Fundamental Data Structures and Algorithms |
|
Advanced Data Structures Algorithms and Analysis |
|
Fundamentals |
|
Processing |
|
Graphs and Trees |
|
Defensive Programming |
|
Data Modeling |
|
Object-Oriented Programming |
|
Functional Programming |
|
Basic Type Systems |
|
Advanced Programming Constructs |
|
Algorithms and Design |
|
Fundamental Programming Concepts |
|
Fundamental Data Structures |
|
Development Methods |
|
Requirement Engineering |
|
Software Design |
|
Software Construction |
|
Software Verification Validation |
|
Cross-Layer Communications |
|
Social Context |
|
Professional Ethics |
|
Professional Communication |
|
Weinman | |
---|---|
Wolz |
|
Davis | |
Coahran |
|
Curtsinger | |
---|---|
Klinge | |
Rebelsky |
|
Weinman | |
Davis | |
Price Jones |
|
Klinge | |
---|---|
Osera | |
Rebelsky | |
Stone |
|
Walker | |
Weinman | |
Coahran |
|
Stone |
|
---|---|
Price Jones |
|
Osera | |
---|---|
Rebelsky | |
Vostinar | |
Walker | |
Weinman |
Osera | |
---|---|
Stone |
|
Curtsinger |
|
---|---|
Davis | |
Coahran |
|
Gum |
|
Bishop |
|
Walker |
Curtsinger | |
---|---|
Weinman | |
Davis | |
Walker | |
Bishop |
|
Stone |
---|
Osera |
---|
Davis |
---|
Weinman | |
---|---|
Walker | |
Stone |
|
Rebelsky |
|
---|
Rebelsky | |
---|---|
Stone |
|
Vostinar | |
Walker | |
Wolz |
|
Osera |
---|
Rebelsky |
---|
Rebelsky |
---|
Klinge | |
---|---|
Osera | |
Walker | |
Price Jones |
|
Stone |
|
Gum |
|
Jones |
|
Moore |
|
Davis |
|
---|---|
Stone |
|
Rebelsky |
Rebelsky |
|
---|---|
Walker |
Rebelsky |
|
---|---|
Davis |
|
Weinman |
|
Praitis |
|
Coahran |
|
Cunningham |
|
Silkin |
|
Borenstein |
|
Walker |
|
Davis |
|
---|---|
Rebelsky |
|
Walker |
|
Stone |
|
Weinman |
|
---|---|
Rebelsky |
|
Walker |
|
Davis |
|
Stone |
|
Curtsinger |
|
---|---|
Osera |
|
Gum |
|
Bishop |
|
Davis |
|
---|---|
Stone |
|
Silkin |
|
Rebelsky |
|
Walker |
|
Gum |
|
Moore |
|
Sinnett |
|
Rebelsky |
|
---|---|
Walker |
|
Coahran |
|
Moore |
|
Davis |
|
---|---|
Walker |
|
Rebelsky |
|
Weinman |
|
Stone |
|
Kuiper |
|
Bishop |
|
Gum |
|
Moore |
|
---|---|
Rebelsky |
Coahran | spring 2007 |
---|---|
Walker | |
Bishop |
|
Rebelsky |
Davis | |
---|---|
Rebelsky | |
Matocha |
|
Walker |
|
Gum |
|
Silkin |
|
Stone |
|
Flynt |
|
Moore |
|
Jones |
|
---|---|
Moore |
|
Walker |
|
Stone |
|
Stone |
|
---|---|
Coahran |
|
Rebelsky | |
Bishop |
|
Walker | |
Flynt |
|
Walker | |
---|---|
Rebelsky |
Coahran |
|
---|---|
Matocha |
|
Walker | |
Bishop |
|
Moore |
|
---|---|
Stone |
|
Stone |
|
---|---|
Moore |
|
Walker |
|
Jones |
|
Walker |
|
---|
Davis | |
---|---|
Walker | |
Rebelsky |
|
Bishop |
|
Stone |
|
Rebelsky | |
---|---|
Stone |
|
Coahran |
|
---|---|
Gum |
|
Silkin |
|
Stone |
|
Walker |
Stone |
|
---|---|
Moore |
|
Walker |
|
Price Jones |
|
---|---|
Rebelsky | |
Stone |
|
Walker |
|
Stone |
|
---|---|
Rebelsky |
Davis | |
---|---|
Rebelsky | |
Walker |
Stone |
|
---|---|
Rebelsky |
CSC 105.01: The Digital Age (Rodrigues)
CSC 151.01: Functional problem solving (Rebelsky)
CSC 151.02: Functional problem solving (Hamid)
CSC 161.01: Imperative problem solving and data structures (Weinman)
CSC 161.02: Imperative problem solving and data structures (Johnson)
CSC 207.01: Object-oriented problem solving, data structures, and algorithms (Rebelsky)
CSC 207.02: Object-oriented problem solving, data structures, and algorithms (Rebelsky)
CSC 208.01 and CSC 208.02: Discrete Structures (Stone)
CSC 213.01: Operating systems and parallel algorithms (Curtsinger)
CSC 262.01: Computer vision (Weinman)
CSC 301.01: Analysis of Algorithms (Vostinar)
CSC 324.01: Software design and development (Johnson)
CSC 324.02: Software design and development (Vostinar)
CSC 341: Automata, formal languages, and computational complexity (Hamid)
CSC 395.01: Advanced operating systems (Curtsinger)
CSC 151.01: Functional problem solving (Curtsinger)
CSC 151.02: Functional problem solving (Hamid)
CSC 161.01: Imperative problem solving and data structures (Walker)
CSC 161.02: Imperative problem solving and data structures (Johnson)
CSC 205.01: Computational linguistics (Stone)
CSC 207.01: Algorithms and object-oriented design (Stone)
CSC 207.02: Algorithms and object-oriented design (Walker)
CSC 208.01: Discrete Structures (Stone)
CSC 211.01: Computer organization and architecture (Curtsinger)
CSC 211.02: Computer organization and architecture (Weinman)
CSC 295.01: Special topic, "Evolutionary algorithms and artificial life" (Vostinar)
CSC 301.01 and .02: Analysis of Algorithms (Vostinar)
CSC 324.01: Software design and development (Johnson)
CSC 326.01: Software development leadership (Johnson) (Leadership roles within CSC 324.01: Software design and development (Johnson))
CSC 341: Automata, formal languages, and computational complexity (Hamid)
The faculty in computer science, mathematics, and statistics at Grinnell College devote considerable attention to advising incoming students about where they might best begin their coursework. As part of this effort, both faculty and students participate in an on-going research project which uses techniques of artifical intelligence in decision making. While final placement decisions are always the result of discussion between students and faculty, an expert system may be helpful in suggesting possible placements.
In order to utilize this expert system, you may enter appropriate scores into the following table. Leave any box blank, if that information is unavailable.
Grinnell's computer science curriculum has several special strengths, including:
Computer science recognizes at least four problem-solving approaches as being fundamental to work in the discipline. Each approach involves a distinct way of thinking, and each is supported by a range of computer languages. These paradigms may be outlined as follows:
Since different approaches have advantages for different problems, people involved with computing should be comfortable with several of these paradigms.
Grinnell's introductory courses provide students with considerable practice and insight for each of these approaches early in the curriculum, introducing the functional, object-oriented, and imperative paradigms.
Grinnell's curriculum identifies both theory and systems as core areas, and the overall curriculum has achieved international recognition for four-year, undergraduate computer science programs.
People use computers because they can provide services and help in the solving of problems. Thus, many courses and much research throughout the College utilize various aspects of computing. The computer science curriculum includes two upper-level courses with a strong software-development orientation.
The computer science curriculum includes several electives, in addition to courses already mentioned. Students choose electives as well as foundational courses, as they work with their adviser about appropriate alternatives to support their interests and career goals. The following list of electives illustrates the range of topics offered regularly.
|
|