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. Four credit hours. Q. Eaton, Skrien
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. Four credit hours. Q. Codabux, Skrien
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, Li, 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. Li
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. Eaton, Taylor
[CS267]    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.
[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.
[CS321]    Computer Networks and Security An introduction to key concepts in computer and data networking from both operational and security perspectives. Topics include data networking protocols, common network architectures, the Internet, computer and network threats, and applied network and system security. Topics will be applied and compared to real-world examples that help form perspectives on the modern networked world, its history and future, and its broader role in the information age. Students will engage the material through programming projects and written assignments. Prerequisite: Computer Science 231. Four credit hours.
CS325j    Web Programming The art and science of building dynamic (interactive) websites. Students will learn the fundamentals of the Internet and its HTTP/TCP/IP protocols, HTML and CSS, and how to use them to create well-designed web pages that follow industry standards. They will learn to program in JavaScript to create client-side dynamic web pages, in PHP or another language to create server-side dynamic web pages, and in SQL to create, access, and modify a relational database. Finally, they will learn about XML, DOM, and AJAX, and how to use them to add Web 2.0 features to web pages. Prerequisite: Computer Science 231. Three credit hours. Skrien
[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. Li, Maxwell
CS336s    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. Taylor
CS341f    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. Taylor
CS351s    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. Maxwell
[CS361]    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.
[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.
[CS365]    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.
CS375s    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. Skrien
CS378f    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. Skrien
CS397f    Software Engineering I An introduction to the concepts of software engineering. Starts with development life cycle models, such as agile development, and then continues to cover project planning, requirements specification, object-oriented analysis and design, software testing techniques, software maintenance, and configuration management. Students will learn these concepts by working in teams to apply them to real-world software design problems and develop software applications. Prerequisite: Computer Science 231. Four credit hours. Codabux
[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.
CS441s    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. Taylor
[CS451]    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.
[CS461]    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.
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
Maxwell 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
CS498s    Software Engineering II Students will apply the concepts and techniques studied in Software Engineering I to a software project. Students will capture and analyze requirements and design, implement, and test an application following software engineering best practices. Students will learn how to continuously improve their software through maintenance activities such as program comprehension and re-engineering and will be exposed to some of the latest research in software engineering. Prerequisite: Computer Science 397. Four credit hours. Codabux