Computer Science Department
Courses of Study
CS125s Introduction to R An introduction to the programming language R and how it can be used for statistical analysis and visualization of data. Students will learn how to write basic R programs that can read, write, and manipulate data. They will make use of R functions for executing common statistical analysis and learn how to display the results using graphs and charts. Through a series of projects, students will get experience with writing their own functions, learn how to make use of R documentation and how to extend their own knowledge of the language. One credit hour. Taylor
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. Bender, Wolfe
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. Doore, Harper
[CS153] 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.
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, 152 or 153. Four credit hours. Q. Al Madi, Harper, Wolfe
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
CS251fs 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. Students may not receive credit for both this course and Computer Science 252. Prerequisite: Computer Science 231. Four credit hours. Taylor
CS252s Mathematical Data Analysis and Visualization An introduction to the analysis and visualization of scientific data. Topics include data management, basic statistical analysis, data mining techniques, and fundamental concepts of machine learning. Emphasis is placed on the mathe- matical basis of algorithms, which are then applied to real datasets. As time allows, additional techniques involving linear algebra and calculus are covered. Students also learn how to visualize different types of data, focusing on dis- covering patterns and relationships. Through programming projects, students gain hands-on experience analyzing and selecting appropriate visualizations for real datasets. Students may not receive credit for both this course and Computer Science 251. Prerequisite: Computer Science 231 and Mathematics 253. Four credit hours. 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, 153, or 231. Three credit hours. A.
CS269j 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, 152, 153, or 231. Three credit hours. Maxwell
CS310s Creating Future Worlds: Computing, Ethics, and Society Explores ethical and moral narratives associated with advances in computing/AI technologies. Students will investigate issues in computing ethics highlighting the responsibility of computing professionals to examine the impact of their work on individuals and society. Topics will include: AI bias, digital disparities, autonomous systems, intellectual property law, cybercrime, information privacy and security, tech corporate culture, and professional conduct in a diverse workplace. Students will critically evaluate and apply literature on responsible technology development and professional codes of ethics with evolving technologies. Prerequisite: Computer Science 231. Four credit hours. Doore
CS321f Software Engineering A comprehensive practical introduction to all phases of software development including life cycle models, requirements analysis, design, implementation, testing and validation, maintenance, and evolution, focusing on agile software development. Prerequisite: Computer Science 231. Four credit hours. Al Madi
CS330f Database Design, Development, and Deployment Approaches database systems from the perspective of database designers, developers, and data analysts. The first course will provide a foundation in database design theory,database query languages and reporting methods, accessible information system UX/UI requirements, database management best practices, and new approaches to applying advances in AI to information modeling, storage, and retrieval. It will include both individual and group programming assignments around data modeling and diagrams, current database design modeling (i.e., RDBS, NoSQL, Spatial, Graph, and Hybrid) as well as evolving AI-driven database applications, information retrieval languages (i.e., SQL/NoSQL), data reasoning/extraction approaches, with an emphasis on accessible information systems. Prerequisite: Computer Science 231, 251, or 252. Four credit hours. Doore
[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; network security; and networking programming. The Internet suite of protocols will be discussed in depth. Students will learn about conventional and state-of-the-art computer networks through problem sets and programming projects. 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, Taylor
CS337s Operating Systems A comprehensive overview of the design and implementation of computer operating systems from the early days of computing to modern day. The topics include process scheduling, threading and interprocess communication, memory management, file systems, access control, and security. Prerequisite: Computer Science 231. Four credit hours. Al Madi
[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, 160 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.
[CS342] 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.
[CS343] Neural Networks An introduction to neural networks from biological and machine learning perspectives. Focuses on neural networks for classification and regression involving large image and text datasets. Topics include fundamental design principles; supervised and unsupervised learning; fully connected and convolutional networks; transfer learning. Students obtain hands-on experience implementing and analyzing the neural networks covered each week in regular projects that explore different application areas. Prerequisite: Computer Science 251 and Mathematics 121, 125, 130, 135, or 161; 122, 160, 162 or 165 are recommended. Four credit hours.
[CS346] Computational Modeling Simulation I: Interdisciplinary Science A programming-oriented introduction to techniques in computational modeling and simulation, motivated by applications to the natural and social sciences. Topics may include: dynamical system simulation; finite difference equations; numerical error in simulation; numerical methods for integration; Monte Carlo simulation; cellular automata; and agent-based modeling. Students complete projects in multiple application domains to develop interdisciplinary breadth; to understand explanatory models and methods underlying computational science; and to develop programming style and skills that support easily extended and maintained code. Prerequisite: Computer Science 231 and Mathematics 122, 160 or equivalent. Four credit hours.
[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.
CS353f Interactive Systems I: Interactive Agents, Environments, and Systems A hands-on introduction on designing and building interactive systems. Topics include physical computing, multimodal interfaces, rapid prototyping, multimedia systems, design methodologies, and more. The course incorporates examples of early and contemporary work in human computer interaction and new media art. Prerequisite: Computer Science 251 and 333. Four credit hours. Wolfe
CS359s Finite Fields and Error Correcting Codes Listed as Mathematics 359. Four credit hours. Abdelghany
CS361s 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
[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 (may be taken concurrently). Four credit hours.
CS375fs 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 and one 200-level mathematics or statistics course. Four credit hours. Bender
[CS376] Algorithm Design and Analysis Focuses on rigorous algorithm design and analysis techniques, including asymptotic complexity bounds, NP-Completeness, and correctness proofs for iterative and recursive algorithms. Motivating examples include classic sorting, searching, and optimization algorithms, for problem solving with data structures including arrays, lists, trees, and graphs. Emphasis is placed on concepts underlying general techniques, with applications to the design and analysis of correct and efficient algorithms in the iterative, divide-and-conquer, dynamic programming, and greedy paradigms. Students may not receive credit for both this course and Computer Science 375. Prerequisite: Computer Science 231 and Mathematics 274 (or equivalent). Four credit hours.
[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, possibly augmented by short programming projects. Prerequisite: Computer Science 231 and either Mathematics 274 or 275. Four credit hours.
CS421s Empirical Software Engineering Introduces students to the different approaches of performing empirical studies to solve software engineering problems. The course will focus on quantitative and qualitative research methods including interviews and surveys, design of human experiments, including crowdsourcing, and mining of software repositories. Prerequisite: Computer Science 321. Four credit hours. Al Madi
CS430s Advanced Database Design, Development, and Deployment The second course in the database sequence will center around the design, development, and testing of an accessible real-world information system application through a semester-long project applying foundational knowledge and skills from the first database course (Computer Science 330). The database provide location information about the objects in a public space, the spatial relationships between objects, descriptions of the content objects, and an accessible user interface to that communicates system information in a multimodal format. Prerequisite: Computer Science 330. Four credit hours. Doore
CS431f Advanced Computer Networks Application of the principles of computer networks learned in CS331 to computing-relevant projects and the study of system performance. Students will work in groups to complete a research project that has some measurable and assessable networking features with the option of using mobile test-beds. Students will learn through project design and implementation, experiment development and data analysis, weekly oral presentations and written summaries, a public presentation, and an IEEE-format final report. Prerequisite: Computer Science 331. Four credit hours. Li
[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.
[CS442] 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, 160 or equivalent, and Physics 141 or equivalent. Four credit hours.
[CS443] Computational Neuroscience Focuses on the simulation of human perception and behavior by implementing neural networks that emulate different systems of the brain. Neural systems relating to autonomous navigation — how humans perceive and plan movements through their environments — are a core theme of the course, but a range of human capabilities is considered, such as learning, memory, and vision. Projects provide hands-on experience applying brain inspired algorithms to problems in machine learning, computer vision, and artificial intelligence, such as motion estimation from video, supervised and unsupervised learning of datasets, and agent navigation toward goals in environments with obstacles. Topics include spiking and rate based networks, lateral inhibition, recurrent networks, content addressable memory, plasticity, and neural competition. Prerequisite: Computer Science 343. Four credit hours.
[CS446] Computational Modeling Simulation II: Interdisciplinary Science A research-oriented continuation of Computational Modeling and Simulation I. Students work in teams to complete a semester-long project in an interdisciplinary area, applying computational modeling and simulation techniques to address a research question. This involves all of the following: reading peer-reviewed articles; understanding the context of a research question in a research community; designing and implementing experiments and analyzing their results. Each team will produce a journal-style article and an oral presentation describing their project. Prerequisite: Computer Science 346. Four credit hours.
[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.
[CS453] Interactive Systems II: Special Topics in New Media and Interactive Systems Students in groups will work on a semester-long project in which they design, build and run a human computer interaction study or interactive media arts installation. Students will learn how to conduct a literature review, formulate a question, collect data, evaluate the results and present findings. The course would culminate in a presentation and a report in the style of a conference paper or art installation submission. Prerequisite: Computer Science 353. 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
[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