• Overview
• Pedagogy
• CS/Math Placement for Incoming Students
• Check your CS/Math Placement
• Faculty
Henry Walker, Chair, Marge Coahran, Janet Davis, Samuel Rebelsky, John Stone, Jerod Weinman
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 discipline of computer science includes all aspects of the effective use of computers. Core areas within the undergraduate curriculum include multiple views of problem-solving, hardware design, operating systems, data organization (structure) and processing (algorithms), software design, concepts of programming languages, and the theory of computation. Some topics, such as networks and compilers, explore elements of computer systems in more detail, while other areas, such as artificial intelligence, computational linguistics, and simulation, integrate computer science with interdisciplinary studies.
Formal coursework is concentrated within the Department of Computer Science. Introductory courses emphasize multiple views of problem-solving, each with a different supporting computer programming language. The curriculum emphasizes basic concepts and fundamental techniques; and courses make extensive use of MathLAN, the local-area network we share with the Department of Mathematics and Statistics, which includes about 170 workstations and six servers. Our outstanding facilities include several computer-equipped classrooms, an open lab, and convenient study and tutoring areas.
The computer science major prepares students who plan careers in computer science, in the use of computing in other disciplines, in teaching, or in other professions. The curriculum is strongly influenced by national recommendations of such professional bodies as the Association for Computer Machinery, the Computer Society of the Institute of Electrical and Electronics Engineers, and the Liberal Arts Computer Science Consortium. Students regularly supplement this formal coursework with independent projects, internships, and student-faculty research. In addition, students often work with faculty throughout the College on a variety of special projects that involve computing.
A minimum of 32 credits in the department, including
In addition, computer science majors are required to take Mathematics 218.
Computer Science courses numbered below 151 do not satisfy major requirements.
To prepare for these courses, most majors will take the standard introductory sequence (Computer Science 151, 161, and 207). Students with significant background in computer science, such as Advanced Placement course work, can often take Computer Science 153 in lieu of 151 and 161.
Most majors will prepare by taking the standard prerequisites for Mathematics 218 (Mathematics 131, 133, and 215), but students with significant background in mathematics can often bypass one or more of them.
All majors are encouraged to take statistics (Mathematics 209 or 335-336), Physics 220, and a course in technology and society (such as a foundation course in Technology Studies). Students considering graduate school in computer science should take both Computer Science 211 and 213. Students planning to work in industry should take Computer Science 323 or 325 together with coursework in another discipline that uses computing in a significant way. Student considering a career in computing are encouraged to participate in an independent project, internship, or research experience.
To be considered for honors in computer science, graduating seniors, in addition to meeting the College's general requirements for honors, must demonstrate excellence in the major. The department applies the following criteria:
| 105 The Digital Age | (Spring) | 4 credits |
|---|
A study of core topics and great ideas in the field of computer science, focusing on underlying algorithmic principles and social implications. Topics may include multimedia and hypermedia, networks, architecture, programming languages, software design, artificial intelligence, databases, cryptography, and the theory of computing. Includes formal laboratory work. Prerequisite: none. COAHRAN, WEINMAN.
| 151 Functional Problem Solving | (Fall or Spring) | 4 credits |
|---|
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. Includes formal laboratory work. Prerequisite: none. STAFF.
| 153 Computer Science Fundamentals | (Spring) | 4 credits |
|---|
Study of basic concepts of computer science, with an emphasis on problem-solving techniques from functional and imperative perspectives. Functional elements include data types, procedures as first-class objects, recursion, and binding. Control structures, linked data structures, memory management, macro processing, compilation and linking, and data representation provide basic elements of imperative problem-solving. Additional topics include an introduction to GNU/Linux operating system. Includes formal laboratory work. A student who receives credit for Computer Science 153 cannot receive credit for Computer Science 151 or 161. WALKER.
| 161 Imperative Problem Solving and Data Structures | (Fall or Spring) | 4 credits |
|---|
A continuation of Computer Science 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. Includes formal laboratory work. Prerequisite: Computer Science 151. COAHRAN, WALKER.
| 201 Memory Management, Data Representation, and Formal Methods | (Spring) | 4 credits |
|---|
Study of machine-level representations of data and techniques for managing storage, using formal methods of program design and a low- or mid-level programming language, such as C. Topics include Boolean logic and proof, language semantics, assertions and invariants, numerical approximations and errors, pointers, memory allocation and deallocation, and the run-time stack. Prerequisite: Computer Science 152, or 153, or Computer Science 151 and additional programming experience in an imperative language; or permission of instructor. COAHRAN. [Last offering: Spring 2009]
| 205 Computational Linguistics* | (Fall) | 4 credits+ |
|---|
An examination of computational techniques for producing and processing text in natural languages and an introduction to the theoretical basis for those techniques, both in linguistics and in computer science. Topics include generative grammars, parsing, algorithms for automatic indexing, information retrieval, and natural-language interfaces. Prerequisite: Introduction to General Linguistics 114, and Computer Science 151 or 153; or permission of instructor. J. STONE.
| 207 Algorithms and Object-Oriented Design | (Spring) | 4 credits |
|---|
An introduction to the ideas and practices that characterize the object-oriented model 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. Prerequisite: Computer Science 161. WEINMAN.
| 211 Computer Organization and Architecture* | (Fall) | 4 credits+ |
|---|
Study of both traditional and alternative computer architectures. Introduction to digital logic, microcode, Von Neumann architectures, data representations, fetch/execute model, RISC/CISC, instruction formats and addressing, machine and assembly language, memory architecture and algorithms, I/O architecture, and elements of distributed systems. Includes formal laboratory work. Prerequisite: Computer Science 161, or 153, or permission of the instructor. COAHRAN, WALKER.
| 213 Operating Systems and Parallel Algorithms* | (Fall) | 4 credits+ |
|---|
Study of the principal components of typical operating systems and an introduction to parallel algorithms. Topics from operating systems: storage management, scheduling, concurrent processing, synchronization, data protection, and security. Discussion of models of parallelism and algorithms for problems in such areas as lists, trees, searching, sorting, graphs, geometry, and strings. Includes formal laboratory work. Prerequisite: Computer Science 161, or 153, or permission of the instructor. DAVIS, WEINMAN.
| 232 Human-Computer Interaction | (Spring) | 4 credits |
|---|
Study of methods and principles for user-centered design through laboratory exercises and a significant team design and evaluation project. Consideration of human capabilities, emerging technologies, social impacts, and alternative views of the design process. Prerequisite: Computer Science 161 or 153 or permission of the instructor. DAVIS.
| 261 Artificial Intelligence* | (Fall) | 4 credits+ |
|---|
An introduction to current principles, approaches, and applications of artificial intelligence, with an emphasis on problem-solving methods, knowledge representation, reasoning with uncertainty, and heuristic search. Study of a range of AI approaches, such as rule-based systems, neural networks, and systems for machine learning. Review of several applications areas such as game playing, natural language processing, robotics, theorem proving, and perception. Prerequisite: Computer Science 161, or 153, or permission of instructor. STAFF.
| 301 Analysis of Algorithms | (Fall) | 4 credits+ |
|---|
Study of structures used to organize data and of the algorithms used to manipulate these structures. Assignments to implement data structures and to use them in computer science and other applications programs. Emphasis on mathematical principles behind the data structures. Prerequisite: Computer Science 207 and Mathematics 218; or permission of instructor. COAHRAN.
| 302 Programming Language Concepts* | (Spring) | 4 credits+ |
|---|
Description and analysis of key issues in the design, syntax, semantics, and implementation of programming languages, with examples from several high-level languages, illustrating important paradigms (functional, object-oriented, imperative, declarative). Additional topics may include denotational semantics, type-inference algorithms, program verification, and the lambda calculus. Prerequisite: Computer Science 207 or permission of instructor. J. STONE, REBELSKY.
| 323 Software Design* | (Spring) | 4 credits+ |
|---|
Study of software life cycle and its consequences. Consideration of various algorithms with an emphasis on strategies that can be applied. Emphasis on design, coding, testing, and documenting of large software packages through work on a large project. Prerequisite: Computer Science 207, or permission of instructor. STAFF. [Previously numbered CSC 223]
| 325 Databases and Web Application Design* | (Fall) | 4 credits |
|---|
Study of database theory and design along with software development methodology. Emphasis on design principles and methods, project management, and the use of appropriate tools. A large project provides motivation and practical experience. Prerequisite: Computer Science 207 or permission of instructor. WALKER.
| 341 Automata, Formal Languages, and Computational Complexity | (Spring) | 4 credits+ |
|---|
A formal study of computational devices, their related languages, and the possibility and difficulty of computations. Examples are pushdown automata and Turing machines, context-free languages and recursively enumerable sets, and the halting problem and NP-completeness. Prerequisite: Computer Science 161, or 153, and Mathematics 218; or permission of instructor. J. STONE, WALKER.
| 362 Compilers* | (Fall) | 4 credits+ |
|---|
Study of traditional and modern techniques for implementation of high-level languages, through either interpretation or translation to low-level languages. Topics include formalisms for describing syntax and semantics of languages, theory of parsing, regular expressions, intermediate languages, and optimization. Students construct interpreters or compilers for high-level languages. Includes formal laboratory work. Prerequisite: Computer Science 207 or permission of instructor. REBELSKY, J. STONE.
| 364 Computer Networks* | (Spring) | 4 credits+ |
|---|
This course focuses on the communications protocols used in computer networks: their functionality, specification, verification, implementation, and performance. The course also considers the use of network architectures and protocol hierarchies to provide more complex services. Existing protocols and architectures are used as the basis of discussion and study. Includes formal laboratory work. Prerequisite: Computer Science 211 or 213 or permission of instructor. DAVIS.
This document is available on the World Wide Web as
http://www.cs.grinnell.edu/