Aug 26, 2024  
2018-2019 Academic Catalog 
    
2018-2019 Academic Catalog [ARCHIVED CATALOG]

Computer Science Courses


Computer Science

Courses

Computer Science

  • CSC 105 - The Digital Age

    4 credits (Spring)
    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.
    Instructor: Osera, Weinman
  • CSC 151 - Functional Problem Solving

    4 credits (Fall and Spring)
    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. For current course content please see the variable topic course listing below or search the online live schedule of courses.

    Prerequisite: None.
    Instructor: Staff
  • CSC 161 - Imperative Problem Solving with Lab

    4 credits (Fall and Spring)
    CSC161 emphasizes concepts 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. For current course content please see the variable topic course listing below or search the online live schedule of courses.

    Prerequisite: CSC 151 .
    Instructor: Staff
  • CSC 205 - Computational Linguistics

    4 credits (Fall)
    Cross-listed as: LIN 205  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: LIN 114  and CSC 151 .
    Note: Plus-2 option available. Not offered every year.
    Instructor: J. Stone
  • CSC 207 - Object-Oriented Problem Solving, Data Structure, and Algorithms

    4 credits (Fall and Spring)
    An introduction to the ideas and practices of object-oriented 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: CSC 151  and CSC 161 .
    Instructor: Osera, Vostinar
  • CSC 208 - Discrete Structures

    4 credits (Fall and Spring)
    Cross-listed as: MAT 208 . How do we “know” that a mathematical or logical statement is correct? What common properties appear among different collections? How might we represent functions, and how can we tell if two functions with different representations are the same? Can we formally describe and understand common diagrams? We consider such questions as we develop both intuition and formal mechanisms for addressing them. Along the way, we explore Boolean logic, proof techniques, sets, structures that include trees and graphs, and more. Students who have previously taken MAT 218  may not subsequently take CSC/MAT 208.

    Prerequisite:   and either   or  . Prerequisite or co-requisite: CSC 161 .
    Instructor: Mileti, J. Stone
  • CSC 211 - Computer Organization and Architecture

    4 credits (Fall or Spring)
    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: CSC 161 .
    Note: Plus-2 option available. Not offered every year.
    Instructor: Curtsinger
  • CSC 213 - Operating Systems and Parallel Algorithms

    4 credits (Fall or Spring)
    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: CSC 161 .
    Note: Plus-2 option available. Not offered every year.
    Instructor: Curtsinger, Weinman
  • CSC 214 - Computer and Network Security

    2 credits (Fall or Spring)
    This course deals with the security of computing systems and the networks over which they communicate, including tools and techniques for undermining or for reinforcing the reliability and usability of computer systems, the theoretical concepts that underlie those techniques, and the ways in which governments, corporations, interest groups, and individuals currently use them.

    Prerequisite: CSC 161 .
    Note: Plus-2 option available. Not offered every year.
    Instructor: Curtsinger, J. Stone
  • CSC 216 - Computer Networks

    2 credits (Fall or Spring)
    Introduction to the communication protocols that make up the modern Internet - their functionality, specification, implementation, and performance. Includes hands-on laboratory work.

    Prerequisite: CSC 161 .
    Note: Plus-2 option available. Not offered every year.
    Instructor: Curtsinger
  • CSC 232 - Human-Computer Interaction

    2 credits (Fall or Spring)
    Cross-listed as: PSY 232  and TEC 232 . Introduction to fundamental principles and methods of human-centered interaction design: Human capabilities and limitations, usability and accessibility guidelines, iterative design, contextual inquiry, task analysis, prototyping, evaluation. Includes hands-on laboratory work.

    Prerequisite: CSC 105 CSC 151 PSY 113  or TEC 154 .
    Note: Plus-2 option available. Not offered every year.
    Instructor: Staff
  • CSC 261 - Artificial Intelligence

    4 credits (Fall)
    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: CSC 161  and CSC 208 MAT 208 , or MAT 218 .
    Note: Plus-2 option available. Not offered every year.
    Instructor: Weinman
  • CSC 262 - Computer Vision

    4 credits (Spring)
    How can computers understand images? This course covers principles in computational vision and their relationship to human visual perception. Topics may include geometry of image formation, image filtering and representation, texture analysis, 3-D reconstruction from stereo and motion, image segmentation, object detection, and recognition. Students implement and evaluate methods on real images in laboratory exercises and an independent project.

    Prerequisite: CSC 161  and MAT 215 .
    Note: Not offered every year.
    Instructor: Weinman
  • CSC 281 - Life Beyond Grinnell - Learning from Computer Science Alumni

    1 credits (Fall)
    This course challenges you to think beyond your time at Grinnell. Alumni with careers related to computer science will tell their own stories so that we can learn how they constructed their lives and careers. They will also provide advice as you think about your own career and life. Readings and assignments will encourage further reflection. Variable topic course. Repeatable for credit when content changes.

    Prerequisite: CSC 151 .
    S/D/F only.
    Instructor: Rebelsky
  • CSC 282 - Thinking in C and Unix

    1 credits (Spring)
    The most successful software designers master a variety of languages, algorithms, and software design methodologies. In this course, you will examine the Unix approach to software design. You will ground that examination, in part, by developing programs that deepen your understanding of advanced techniques of the C programming language. Includes laboratory work.

    Prerequisite: CSC 161 .
    S/D/F only.
    Instructor: Rebelsky
  • CSC 301 - Analysis of Algorithms

    4 credits (Fall and Spring)
    Study methods for designing, analyzing, and implementing algorithms and data structures. The course explores formal and precise mechanisms for analyzing efficiency and verifying correctness and both iterative and recursive algorithms.  Studies also cover a variety of fundamental  algorithms, abstract data types, and data structures. Algorithm design strategies included greedy, divide-and-conquer, exhaustive search, and dynamic programming. Additional topics may include approximation, parallel, or randomized  algorithms.

    Prerequisite: CSC 207  and either MAT 218 CSC 208  or MAT 208  
    Note: Plus-2 option available.
    Instructor: Rebelsky, Vostinar
  • CSC 312 - Programming Language Implementation

    2 credits (Fall or Spring)
    A hands-on approach to understanding the essential concepts of programming languages (such as evaluation, binding, procedural abstraction, state, control flow, data abstraction, types, and inheritance) by writing interpreters that implement those concepts.

    Prerequisite: CSC 207 .
    Note: Plus-2 option available. Not offered every year.
    Instructor: J. Stone, Osera
  • CSC 324 - Software Design and Development

    4 credits (Fall and Spring)
    Provides a foundation for “programming in the  large” and developing high-quality software that  meets human needs. Introduces the software  lifecycle, agile development methods,  professional tools, and software design  principles. Teams will develop software for a  community organization, supported by a faculty  adviser and an alumni technical mentor. Students  will gain experience working with a client, as  well as substantial code base suitable for  inclusion in a professional portfolio. Includes  laboratory work.

    Prerequisite: CSC 207 .
    Instructor: Rebelsky, Vostinar, Osera
  • CSC 326 - Software Development Leadership

    2 credits (Fall and Spring)
    Students lead teams that develop software for a community organization, supported by a faculty adviser and an alunmi technical mentor. Students will gain experience mentoring and supervising peers and working with a client. Offered simultaneously with CSC-324. Students in this course serve as the leaders on the CSC-324  projects. Includes laboratory work.

    Prerequisite: CSC 324 .
    Instructor: Rebelsky, Vostinar, Osera
  • CSC 341 - Automata, Formal Languages, and Computational Complexity

    4 credits (Fall and Spring)
    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: CSC 207  and either MAT 218 ,   or MAT 208 .
    Note: Plus-2 option available.
    Instructor: Osera, J. Stone

Special Topics-Fall

  • CSC 295-01 - Special Topic: Evolutionary Algorithms and Artificial Life

    4 credits (Fall)
    Evolutionary Algorithms and Artificial Life are subfields that study the use of evolution in computational contexts. Evolutionary algorithms can be used to improve  solutions to engineering problems past what humans have been able to do and artificial life is used to model and predict the evolutionary dynamics of natural systems. In this course, students will complete projects covering a range of cutting-edge research in these fields.

    Prerequisite: CSC 207 .
    Instructor: Vostinar
  • CSC 395-01 - Advanced Special Topic: Molecular Programming and Nanoscale Self-Assembly

    4 credits (Fall)
    Molecular programming is an interdisciplinary field that aims to program both the function and structure of matter at the nanoscale. The primary focus of this course is an overview of the most  prevalent molecular programming language: the chemical reaction network. We will explore their ability to compute, how they are programmed, and how to compile them into physical molecules. We will also survey methods of self-assembly, including DNA origami and DNA tile self-assembly.

    Prerequisite: CSC 161  and CSC 208 .
    Instructor: Klinge

Special Topics-Spring

  • CSC 395-01 - Advanced Special Topic: Advanced Operating Systems

    4 credits (Spring)
    Students will build on their experience from CSC 213 by exploring prior work in operating systems research, and conducting their own OS research project. Readings will be drawn from classic and recent papers in OS research. Meanwhile, students will work in small teams to identify an important problem in the field, design and develop a solution to that problem, evaluate their work, and present their findings.

    Prerequisite: CSC 213 .
    Instructor: Curtsinger

Variable Topics - Fall

  • CSC 151-01 & 02 - Functional Problem Solving (Data Science)

    4 credits (Fall)
    In these sections of CSC 151, we will ground our study of functional problem solving in approaches related to the practice of data science. In particular, we will explore and develop algorithms and programs that gather, reorganize, filter, combine, analyze, and visualize both structured and unstructured data. The course employs a workshop format: In most class sessions, students will collaboratively explore a variety of problems and collections of data. Includes formal laboratory work.

    Prerequisite: None.
    Instructor: Curtsinger, Hamid

Variable Topics- Spring

  • CSC 151-01 & 02 - Functional Problem Solving (Digital Humanities)

    4 credits (Spring)
    In this section of CSC 151, we will ground our study of functional problem solving in approaches related to the digital humanities, investigating ways in which computing changes the ways in which people write and analyze texts. In particular, we will examine models of documents, develop dynamic narratives, and design algorithms and visualizations that help us explore and analyze corpora and individual texts. The course employs a workshop format: In most class sessions, students will collaborate on a variety of problems. Includes formal laboratory work.

    Prerequisite: None.
    Instructor: Rebelsky, Hamid

Variable Topics - Fall and Spring

  • CSC 161-01 & 02 - Imperative Problem Solving & Data Structures (Robots)

    4 credits (Fall and Spring)
    This section of CSC 161 will utilize robotics as an application domain in studying imperative problem solving, data representation, and memory management. Additional topics will 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 course will utilize a workshop style, in which students will frequently work collaboratively on a series of problems. Includes formal laboratory work.

    Prerequisite: CSC 151 .
    Instructor: Johnson, Walker, Weinman