Computer Science (CS)

CS 102A -  Computing in Context  
Credits: 4  

A set of courses exploring interesting applications of computing in a variety of disciplines. These courses are primarily intended for students who wish to satisfy the QR requirement and enhance their abilities to apply computing to the solution of quantitative problems.

Prerequisites: Students who have not already completed CS 206 may enroll. Courses are offered periodically depending on faculty availability.   
Note(s): Fulfills QR2 requirement.  
CS 102C -  Computing in Context  
Credits: 3  

A set of courses exploring interesting applications of computing in a variety of disciplines. These courses are primarily intended for students who wish to satisfy the QR requirement and enhance their abilities to apply computing to the solution of quantitative problems. Courses are offered periodically depending on faculty availability.

Note(s): Fulfills QR2 requirement.  
CS 102D -  Computing in Context  
Credits: 4  

A set of courses exploring interesting applications of computing in a variety of disciplines. These courses are primarily intended for students who wish to satisfy the QR requirement and enhance their abilities to apply computing to the solution of quantitative problems. Courses are offered periodically depending on faculty availability.

Note(s): Fulfills QR2 requirement.  
CS 103 -  Structured Prog Basic  
Credits: 3  
CS 106 -  Introduction to Computer Science I  
Credits: 4  

An introduction to the principles of design, implementation, and testing of computer programs. The course covers language features such as control structures, classes, file I/0, and basic data structures including arrays. Other topics include recursion and fundamental algorithms, such as elementary searching and sorting algorithms. May not be taken for credit by students who have taken or are currently taking CS 107, CS 206, CS 209 or CS 226.

Prerequisites: Placement in AQR or completion of a FQR course or MA 108 or PH207.   
Note(s): May not be taken for credit by students who have taken or are currently taking CS 107, CS 206, CS 209 or CS 226. Fulfills QR2 requirement.  
CS 107 -  An Introduction to Computer Science with Animations and 2D Games  
Credits: 4  

An introduction to computer science. Students will develop simple 2D games, animations and simulations using the Java programming language and Processing, a Java package designed to make programming accessible to visual artists. The course introduces the fundamental techniques of computer programming, software design, and algorithm development.

Note(s): May not be taken for credit by students who have taken or are currently taking CS 106, CS 206, CS 209 or CS 226.  
CS 206 -  Introduction to Computer Science II  
Credits: 4  

Fundamentals of software development and algorithm design. Topics include recursion, data structures, analysis of algorithms, and program verification.

Prerequisites: CS 106 or CS 107 or permission of instructor.  
CS 209 -  Data Structures and Mathematical Foundations  
Credits: 4  

An introduction to data structures and the mathematical foundations of algorithms. Properly organizing the data within a software application is critical to the efficiency of the application’s execution as well as the ease with which the application is developed. This course will introduce the fundamental data structures used in computer science, including linked lists, stacks, queues, priority queues, search trees, and hash tables. In addition, the course will introduce foundational discrete mathematical concepts used in the design and analysis of algorithms, including mathematical induction, asymptotic analysis and recurrence relations.

Prerequisites: CS 106 or CS 107 or permission of instructor.  
CS 225 -  Applied Data Science  
Credits: 4  

An introduction to Knowledge Discovery and Data Mining (KDD), also known as Machine Learning. Students will gain hands-on experience with a variety of concepts and tools associated with the field of KDD. Students will also study and apply KDD processes, tools, and techniques, working with small and large data sets representing various business domains and problem types. The class will cover topics such as common database interactions (relational, document, and graph databases), data set creation, data quality analysis, dimension reduction, variance and bias in data, classifier types, and model assessment approaches.

Prerequisites: MA 104 or MA 204 or a similar statistics course.   
CS 226 -  Software Design  
Credits: 4  

An introduction to building complex software. Students will explore object-oriented (OO) programming and design patterns in depth. We will also focus on developing skills for testing and debugging of software.  Finally, we will utilize a set of frameworks related to software development and testing.

Prerequisites: CS 106 or CS 107.  
CS 230 -  Programming Languages  
Credits: 4  

An introduction to different programming language paradigms: functional, logic, and object-oriented programming. Students will also study language concepts such as regular expressions, syntax grammars and semantics. Specific topics may include Perl, Scheme, Java, C++, and Prolog.

Prerequisites: CS 206 or CS 226 and CS 209.  
CS 275 -  Introduction to Research in Computer Science  
Credits: 1  

An introductory exploration of research in computer science. The students, in collaboration with a faculty mentor, will participate in a research project in a particular area of computer science. The research projects may, for example, include designing new algorithms for computational problems, surveying the research literature, implementing existing algorithms from the research literature, or performing computational experiments.

Prerequisites: Permission of instructor.   
Note(s): Students may enroll for CS275 four times in their careers, but may take no more than two in any given semester. Does not count toward the CS major. Must be taken S/U.  
CS 275H -  Introduction to Research in Computer Science  
Credits: 1  

An introductory exploration of research in computer science. The students, in collaboration with a faculty mentor, will participate in a research project in a particular area of computer science. The research projects may, for example, include designing new algorithms for computational problems, surveying the research literature, implementing existing algorithms from the research literature, or performing computational experiments. 

Prerequisites: Permission of instructor.   
Note(s): Students may only take four CS 275H courses in their careers and may take no more than two in any given semester. If two are taken in a single semester, each must be a different section. CS 275H may not be counted toward the CS major. Must be taken S/U.  
CS 276A-D -  Selected Topics in Computer Science  
Credits: 1-4  

Topics that complement the established lower level course offerings in computer science will be selected. May be repeated for credit.

Prerequisites: Permission of instructor.  
CS 277 -  Topics in Computer Science with Lab  
Credits: 4  

Topics that complement the established lower level course offerings in computer science will be selected.   

Prerequisites: Permission of instructor.   
Note(s): May be repeated for credit.  
CS 305 -  Design and Analysis of Algorithms  
Credits: 4  

A study of techniques used to design algorithms for complex computational problems that are efficient in terms of time and memory required during execution. Students will also learn the techniques used to evaluate an algorithm's efficiency. Topics include advanced sorting techniques, advanced data structures, dynamic programming, greedy algorithms, amortized analysis, graph algorithms, network flow algorithms, and linear programming.

Prerequisites: CS 206 and MA 215 or CS 209; and MA 111 or both MA 108 MA 109 or MA 113.  
CS 306 -  Computability, Complexity, and Heuristics  
Credits: 4  

Using abstract machine models to measure the complexity of computational problems and to explore the limits of computational power. In addition, students will investigate strategies to deal with intractable computational problems when they arise. Topics include finite automata, Turing machines, undecidability, NP-completeness, approximation algorithms, heuristic algorithms, and experimental algorithmics.

Prerequisites: CS 305.  
CS 318 -  Introduction to Computer Organization  
Credits: 4  

An introduction to multilevel machines, including basic components of a computer, digital circuits, Boolean algebra, microprogramming, machine and assembly languages, and operating systems.

Prerequisites: CS 206 or CS 226.   
Note(s): Does not count toward the mathematics major.  
CS 322 -  Artificial Intelligence  
Credits: 4  

An introduction to the field of artificial intelligence. The course covers the main techniques used to develop computer programs to solve problems that we normally think of as requiring intelligence. Topics include search, games, knowledge representation, logical reasoning systems, and machine learning.

Prerequisites: MA 111, or both MA 108 MA 109, or MA 113; and CS 305; and CS 206 or CS 226.  
CS 325 -  Computer Graphics  
Credits: 4  

Computer graphics involves using computers to generate images, as opposed to generating images using cameras. Computer graphics images typically try to mimic reality. In this course, students will explore the necessary background for further study in computer graphics. Students will explore the basics of human vision that influence the way computers generate images; projections from three-dimensional space to two-dimensional space; various models of real-world entities such as lighting, surface reflectance, and color; and classic algorithms in computer graphics that students will implement and with which they will have the opportunity to experiment.

Prerequisites: CS 226 and CS 209, or CS 206; and MA 200.  
CS 326 -  Software Engineering  
Credits: 4  

An exploration of software engineering and organization principles vital to building large enterprise-scale applications. Leveraging the lessons-learned from readings and using management tools, the class will form a software development team focused on designing, developing, and deploying a multi-tier application. Includes significant reading and programming effort.

Prerequisites: CS 226 and CS 209; or CS 206.  
CS 327 -  Computer Networks  
Credits: 4  

An introduction to the fundamental concepts of computer networks. Students will learn how the Internet works. Students will explore real data as it passes through a network; learn how data is interpreted and forwarded from the source to the destination address; implement services to send, transport, and receive data correctly; devise analytical techniques to better understand data collected from real network users; and gather information about known network security attacks.

Prerequisites: (CS 206 or CS 209) and CS 318.  
CS 328 -  Mobile Computing  
Credits: 4  

An introduction to the design, implementation and publishing of mobile applications. Students will learn how to take their innovative ideas from conception to a working prototype mobile application through a series of rigorous hands-on programming assignments and group projects.

Prerequisites: CS 226 and CS 209; or CS 206.  
CS 329 -  Operating Systems  
Credits: 4  

An introduction to operating systems: software that safely and fairly shares computer hardware resources among multiple, simultaneously running applications. Topics covered include computer processor (CPU) sharing and scheduling, memory virtualization and management, and file systems. Students will complete programming projects to implement concepts in a real operating system.

Prerequisites: (CS 206 or CS 209) and CS 318.  
CS 330 -  Programming Languages  
Credits: 3  
CS 371A-D -  Independent Study in Computer Science  
Credits: 1-4  

Special study in computing outside of the regular departmental offerings.

Prerequisites: Consent of department.  
CS 376A -  Advanced Topics in Computer Science  
Credits: 3  

Advanced topics that complement the established course offerings in computer science will be selected.

Prerequisites: Permission of instructor.   
Note(s): May be repeated for credit.  
CS 376B -  Advanced Topics in Computer Science  
Credits: 4  

Advanced topics that complement the established course offerings in computer science will be selected.

Prerequisites: Permission of instructor.   
Note(s): May be repeated for credit.  
CS 381 -  Senior Thesis  
Credits: 3  

Optional for computer science majors. Recommended for those working toward professional careers or graduate study in computer science, and those seeking to satisfy the criteria for departmental honors.

CS 382 -  Senior Thesis  
Credits: 3  

Optional for computer science majors. Recommended for those working toward professional careers or graduate study in computer science, and those seeking to satisfy the criteria for departmental honors.

CS 399A-D -  Internship in Computer Science  
Credits: 1-4  

Professional experience at an advanced level for juniors and seniors with substantial academic experience in computer science and mathematics. With faculty sponsorship and departmental approval, students may extend their educational experience in computer science, software engineering, or applied mathematics.

Prerequisites: CS 206 or CS 226 or CS 209 and one additional course in mathematics or computer science at the 200 level or above and permission of the department.   
Note(s): This course may not be used to satisfy the requirements of any major or minor in the department. Not for liberal arts credit. Must be taken S/U.  
CS 399E -  Internship in Computer Science  
Credits: 6  

Professional experience at an advanced level for juniors and seniors with substantial academic experience in computer science and mathematics. With faculty sponsorship and departmental approval, students may extend their educational experience in computer science, software engineering, or applied mathematics.

Prerequisites: CS 206 or CS 226 or CS 209 and one additional course in mathematics or computer science at the 200 level or above and permission of the department.   
Note(s): This course may not be used to satisfy the requirements of any major or minor in the department. Not for liberal arts credit. Must be taken S/U.  
CS 399F -  Internship in Computer Science  
Credits: 9  

Professional experience at an advanced level for juniors and seniors with substantial academic experience in computer science and mathematics. With faculty sponsorship and departmental approval, students may extend their educational experience in computer science, software engineering, or applied mathematics.

Prerequisites: CS 206 or CS 226 or CS 209 and one additional course in mathematics or computer science at the 200 level or above and permission of the department.   
Note(s): This course may not be used to satisfy the requirements of any major or minor in the department. Not for liberal arts credit. Must be taken S/U.