Computer Science Department
Courses of Study
CS151fs Computational Thinking: Visual Media An introduction to computational thinking: how we can describe and solve problems using a computer. Using the Python language, students will learn how to write algorithms, manipulate information, and design programs. They will learn about abstraction, how to divide and organize a process into appropriate components, how to describe processes in a computer language, and how to analyze and understand the behavior of their programs. The projects will focus on manipulating images or generating complex and interesting scenes and animations each week through writing well-constructed programs. Students may not receive credit for both this course and Computer Science 152 or 153. Four credit hours. Q. Eaton, Layton
CS152fs Computational Thinking: Science An introduction to computational thinking: how we can describe and solve problems using a computer. Using the Python language, students will learn how to write algorithms, manipulate information, and design programs. They will learn about abstraction, how to divide and organize a process into appropriate components, how to describe processes in a computer language, and how to analyze and understand the behavior of their programs. The projects focus on: (1) reading, writing, managing, and analyzing data; (2) modeling ecological systems using population and agent-based approaches; and (3) simulating physical systems with gravity and collisions. Students may not receive credit for both this course and Computer Science 151 or 153. Four credit hours. Q. Codabux
CS153f Computational Thinking: Smart Systems An introduction to computational thinking: how we can describe and solve problems using a computer. Students will learn how to write algorithms, manipulate information, and design programs. They will learn about abstraction, how to divide and organize a process into appropriate components, how to describe processes in a computer language, and how to analyze and understand the behavior of their programs. The projects will make use of Arduino embedded devices connected to sensors and motors to create smart systems that can sense and react to their environment. Students may not receive credit for both this course and Computer Science 151 or 152. Four credit hours. Q. Eaton
CS197f Introduction to R An introduction to the programming language R and how it can be used for statistical analysis and visualization of data. Prepares students to use R in other courses they may be taking in the same semester or later. Students will learn how to write basic R programs that can read, write, and manipulate data. They will make use of and write their own functions for executing common statistical analysis and learn how to display the results using graphs and charts. This four-week course is built around a set of eight short projects. Students are required to attend two 50-minute lab sessions per week, one session per project, and to review and complete preparatory materials prior to each session. One credit hour. Maxwell
CS231fs Data Structures and Algorithms Focuses on the common structures used to store data and the standard algorithms for manipulating them. Standard data structures include lists, stacks, queues, trees, heaps, hash tables, and graphs. Standard algorithms include searching, sorting, and traversals. Along with implementation details, students will learn to analyze the time and space efficiency of algorithms and how to select appropriate data structures and algorithms for a specific application. In homework, labs, and programming projects, students will implement their own data structures and make use of existing libraries to solve a variety of computational problems. Prerequisite: A grade of C- or higher in Computer Science 151 or 152. Four credit hours. Q. Codabux, Layton, Taylor
CS232f Computer Organization Computer organization focuses on how computers work. Students learn the fundamental hardware components, including storage (RAM, hard disks), input/output mechanisms, and the central processing unit (CPU). They learn how components are designed and built on several levels, including the design of electrical components, machine language, and assembly language. They also learn to program in assembly language for one or more simple processors. Students learn primarily through projects where they design digital circuits, design components of a CPU, or write programs in assembly language. Prerequisite: Computer Science 231. Four credit hours. Maxwell
CS251s Data Analysis and Visualization Prepares students to apply computational data analysis and visualization approaches to real information from a variety of disciplines and applications. Data visualization is the interactive visual exploration of 2-D and 3-D graphic information using techniques that highlight patterns and relationships. Data analysis incorporates data management, data transformations, statistical analysis, data mining, and machine learning. Through programming projects, students will gain hands-on experience with the fundamentals of data analysis and visualization using data from active research projects at Colby and other institutions. Prerequisite: Computer Science 231. Mathematics 253 required for section B only. Four credit hours. Layton, Taylor
CS267j Interactive Digital Media Digital forms of text, sound, images, and video enable rapid communication and manipulation of large amounts of information. Digital sensors provide easy access to information about the environment. Connecting sensors with digital media enables the creation of artistic installations with dynamic narratives that respond to a user's actions. Students will learn to manipulate digital media and collect sensor data using both applications and their own computer programs. By combining the two, they will create their own artistic installation and demonstrate it at the end of the term. Prerequisite: Computer Science 151, 152, or 231. Three credit hours. A. Maxwell
[CS269] Computer Game Design Focuses on the process of taking stories, situations, puzzles, or challenges and defining them so a computer can execute the construct within which the game resides. Students will design a 2-D computer game using a standard game engine. Topics include game design, artistic concepts, image manipulation, game scripting, and artificial intelligence. Students will work in groups to design and develop a 2-D game to be distributed at the end of the term. Each group will make weekly presentations to the class, demonstrating their progress in game design. Prerequisite: Computer Science 151 or 152. Three credit hours.
[CS331] Computer Networks An introduction to fundamental concepts of computer networks and widely used networking technologies. Topics include application protocol design; principles of congestion and error control protocols; network routing; local, wireless, and access networks; and network programming. The Internet suite of protocols will be discussed in depth. Students will engage the material through programming projects and written assignments. Prerequisite: Computer Science 231 and 232. Four credit hours.
CS333fs Programming Languages A survey of programming languages and paradigms focusing on the design of programming languages and comparing and contrasting different language families, including imperative, object-oriented, functional, and logic paradigms. Topics include syntax, context-free grammars, parsing, semantics, abstract representations of programming processes and structures, memory management, and exceptions. Students will undertake small programming projects in various languages and more extensive projects in two languages of their choice, presenting the characteristics of their chosen languages to their peers at the end of the term. Prerequisite: Computer Science 231. Four credit hours. Taylor
[CS336] Parallel and Distributed Processing An introduction to the principles and applications of parallel and distributed computing, with an emphasis on parallel computing. Within the context of (1) multi-threaded programming with POSIX threads and (2) MPI programming, we study dead-lock avoidance, load-balancing with appropriate data distribution schemes, basic parallel abstractions such as scan and reduce, parallel sorting algorithms, and performance analysis. Students will learn through a series of programming projects and problem sets. The final project is a significant report analyzing the performance of three sorting algorithms. Prerequisite: Computer Science 231 and 232. Four credit hours.
[CS341] Systems Biology I An introduction to the field of molecular systems biology, which aims to understand the mechanisms underlying complex biological processes. Key to this endeavor is the process of formulating and analyzing mathematical models. Students will learn how to develop, simulate, and analyze ordinary differential equation models of biological systems as well as to read and understand relevant journal articles and perform in-depth analysis of model dynamics. Prerequisite: Computer Science 231, and Mathematics 122 or equivalent, and one of the following: Biology 163 or 164; Statistics 212, Mathematics 253, or a 300-level course; or any 300-level computer science course. Four credit hours.
CS342f Embedded Systems Introduction to the design and use of embedded systems. Students will engage in hands-on exploration of the real-time control of microcontroller platforms and sensorimotor devices by designing and implementing their own electromechanical prototypes. Students will use C++ and basic circuit theory to interface with off-board sensors and actuators, giving their prototypes the ability to sense and respond to the physical world. Prototyping projects will be accompanied by student-generated technical documentation that supports the end user and ensures reproducibility. Students will become true makers and masters of any device with a data sheet. Prerequisite: Computer Science 231, Mathematics 122 or equivalent (can be taken concurrently), and Physics 141 or 143. Four credit hours. Eaton
[CS351] Computer Graphics An introduction to computer graphics covering 2-D graphic primitives, clipping graphic objects to boundaries, linear transformations, creating and representing 3-D objects, converting 3-D models into 2-D images, and rendering complex 3-D scenes made of thousands of polygons. Students will build a comprehensive 3-D rendering engine in sequential weekly projects for which they generate images and develop portfolios of their own work. Prerequisite: Computer Science 251. Four credit hours.
CS361f Object-Oriented Design Object-oriented design focuses on the art and science of designing programs so that they are reusable, readable, maintainable, extensible, and robust. Students will learn object-oriented design techniques for producing such software, focusing on learning good programming style, object-oriented design principles, and design patterns. Students will also examine case studies of moderately large programs, will learn to use tools such as CRC cards and the UML, and will undertake significant programming projects. Prerequisite: Computer Science 231. Four credit hours. Skrien
[CS363] Robotics Addresses the problems of controlling and motivating mechanical devices to act intelligently in dynamic, unpredictable environments. Major topics will include sensing, navigation and control, mapping and localization, robot perception using vision and sonar, and robot kinematics. In addition to short homework assignments, more extensive projects will be undertaken using both existing software and implementing students' own algorithms on medium-sized mobile robots capable of functioning in human spaces. Projects will focus on enabling the robots to execute tasks, explore, and interact with people and objects in their environment. Prerequisite: Computer Science 231 and 251. Four credit hours.
CS365s Computer Vision Investigates designing computer programs that extract information from digital images. Major topics include image formation and acquisition, gray-scale and color image processing, image filters, feature detection, texture, object segmentation, classification, recognition, and motion estimation. Students are introduced to classic and contemporary vision techniques with examples for homework and programming assignments drawn from biological and medical imaging, robotics, augmented reality, and digital photography. They will develop a medium-scale vision system using data from active research projects at Colby. Prerequisite: Computer Science 231 and 251. Four credit hours. Maxwell
CS375f Analysis of Algorithms Focuses on classical algorithms in computer science and the analysis of the space and time efficiency of such algorithms as those that sort arrays and lists and search various data structures, including lists, trees, graphs, and strings. All major categories of algorithms are discussed, including iteration, divide and conquer, brute force, exhaustive search, greedy, dynamic programming, and approximation. Unsolvable and intractable problems are also covered, as is the role of NP-completeness. If time permits, some parallel and distributed algorithms will be discussed. Students will learn through problem sets and short programming projects. Prerequisite: Computer Science 231. Four credit hours. Aaron
CS375Ms Analysis of Algorithms Same as Computer Science 375, but with additional mathematics/statistics prerequisite. Prerequisite: Computer Science 231 and one 200-level mathematics or statistics course. Four credit hours. Aaron
[CS378] Introduction to the Theory of Computation Focuses on formal languages, automata, computability, complexity classes, and undecidability. Languages discussed include regular languages, context-free languages, and recursively enumerable languages. Both deterministic and non-deterministic forms of the corresponding machines (finite automata, push-down automata, and Turing machines) are also discussed. Unsolvable and intractable problems are addressed, as is the role of NP-completeness. Students will learn through problem sets and short programming projects. Prerequisite: Computer Science 231 and either Mathematics 274 or 275. Four credit hours.
[CS431] Advanced Computer Networks Students will learn the fundamental concepts of wireless sensor networks, study current research in depth, and explore novel ideas in this area. In the first stage, students will read papers, learn commonly used networking tools, and write reports. In the second stage, they will work in groups to propose, research, write, and orally present a standard IEEE/ACM conference paper. Prerequisite: Computer Science 331. Four credit hours.
[CS441] Systems Biology II The application of principles learned in Systems Biology I to a particular biological system. Students will work in interdisciplinary teams to complete a project focusing on one biological system and one or more mathematical models of this system. Involves reading journal articles, designing and running numerical experiments, analyzing results, and presenting challenges and results. Culminates in both a poster presentation and a comprehensive journal article-styled report and oral presentation. Prerequisite: Computer Science 341. Four credit hours. N.
CS442s Computational Physiology: Bioinspiration in Design and Control Application of principles learned in Computer Science 342 to biologically inspired design and control, and the use of electromechanical prototypes as testbeds for hypotheses in the biological sciences. Students will work in teams to complete a research project that tests a hypothesis from the physiology of locomotion or bioinspired robotics using an electromechanical prototype of their own design. Involves writing weekly summaries and critiques of published journal articles, designing and running physics-based simulations and electromechanical experiments, analyzing results, and presenting original research. Culminates in a poster presentation, an IEEE-format conference paper, and an oral presentation. Prerequisite: Computer Science 342, Mathematics 122 or equivalent, and Physics 141 or equivalent. Four credit hours. Eaton
CS451f Advanced Computer Graphics Focuses on advanced algorithms for rendering both hyper-photorealistic and non-photorealistic images of objects and scenes. Topics will include ray tracing, radiosity and other global illumination methods, animation, motion capture and mapping, modeling unique materials, modeling painting and drawing techniques, and other topics selected by students. Each week students will prepare written summaries and critiques of technical papers in computer graphics. Programming projects will include OpenGL, a photorealistic project, a non-photorealistic project, and a final project of the student's choice. Prerequisite: Computer Science 351. Four credit hours. Maxwell
CS461s Object-Oriented Software Systems Students will learn how to design and implement a significant software project that is robust, maintainable, extensible, and modular, building on their experience in Computer Science 361. The focus will vary from year to year. For example, students may gather specifications and then analyze, design, and implement a business application or dynamic website following standard software engineering practices. Students will learn through creating, implementing, and refining their own software designs in an iterative design process. Prerequisite: Computer Science 232 (may be taken concurrently) and 361. Four credit hours. Skrien
[CS481f, 482s] Minor Capstone Independent project and capstone experience for minors. Taken in tandem with a course in the student's major to develop a computing project in consultation with his or her computer science advisor that relates to or extends a topic from the related course. Two to four credit hours.Faculty
[CS483J] Honors Research in Computer Science Noncredit.
CS491f, 492s Independent Study Independent study in an area of computer science of particular interest to the student. Prerequisite: Permission of the instructor. One to four credit hours. Faculty