Vital Elements of Grinnell's Computer Science Curriculum
Grinnell's computer science curriculum has several special strengths,
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:
- Functional Paradigm:
Supported by such languages as Scheme, LISP, ML, Miranda
- Imperative Paradigm:
Supported by such languages as Pascal, C, FORTRAN
- Object-Oriented Paradigm:
Supported by such languages as Smalltalk, C++, Java
- Logic Paradigm:
Supported by such languages as Prolog, Gödel
Since different approaches have advantages for different problems,
people involved with computing should be comfortable with several of these
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.
Core courses in theory and systems
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.
Algorithms and theory: All majors take two foundational courses:
Systems: All majors take at least one systems course; both of the following are strongly recommended
Analysis of algorithms
Automata, formal languages, and computational complexity
Computer organization and architecture
Operating systems and parallel algorithms
Software development project(s)
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.
Software development principles and practices examines methodologies for the effective development of large-scale software packages.
Team software development for community organizations provides students experience applying principles to actual projects that serve needs of clients within the community.
Electives provide options and flexibility
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.
Implementation of programming languages
Learning from alumni
Thinking in C and Unix