Computer Science
CSC 109/ SDS 109 Communicating with Data (4 Credits)
Offered as SDS 109 and CSC 109. The world is growing increasingly reliant on collecting and analyzing information to help people make decisions. Because of this, the ability to communicate effectively about data is an important component of future job prospects across nearly all disciplines. In this course, students learn the foundations of information visualization and sharpen their skills in communicating using data. This course explores concepts in decision-making, human perception, color theory and storytelling as they apply to data-driven communication. This course helps students build a strong foundation in how to talk to people about data, for both aspiring data scientists and students who want to learn new ways of presenting information. Enrollment limited to 40. {M}
Fall, Spring
CSC 110 Introduction to Computer Science (4 Credits)
A gentle introduction to designing programs (recipes) for systematically solving problems. Students learn to build programs including designing, coding, debugging, testing and documenting them. An introduction to block-structured procedural control flow including branching, iteration and functions, using primitive and simple data types (lists). Students learn the high-level internal operation of computer systems (inputs, outputs, processing and storage) and their applications. Students are exposed to the social and historical aspects of computing. This course is recommended for those who have no prior experience in computer science at the high school, AP or college level. S/U only. May not be taken concurrently with CSC 120. Restrictions: Not open to students who have taken CSC 111. Enrollment limited to 30. {M}
Fall, Spring
CSC 120 Object Oriented Programming (4 Credits)
This course emphasizes computational problem-solving using a typed object-oriented programming (OOP). Students learn core computer science principles including: control flow, functions, classes, objects, methods, encapsulation and information-hiding, specification, recursion, debugging, unit testing, version control, using libraries and writing code in multiple files. Students also learn and apply the model-view-controller (MVC) architecture, the basics of graphics and GUIs, working with external files and foundations of algorithm design. Abstract data types and simple data structures are used to illustrate concepts of OOP and solve computational problems through regular programming assignments (in Java and Python). This course assumes prior programming experience including a basic understanding of branching (if-statements), iteration (loops), functions and simple data types (integers, strings, lists/arrays). Prerequisites: CSC 110 or equivalent. Cannot be taken concurrently with CSC 110. Enrollment limited to 30. {M}
Fall, Spring
CSC 205/ MTH 205 Modeling in the Sciences (4 Credits)
Offered as CSC 205 and MTH 205. This course integrates the use of mathematics and computers for modeling various phenomena drawn from the natural and social sciences. Scientific case studies span a wide range of systems at all scales, with special emphasis on the life sciences. Mathematical tools include data analysis, discrete and continuous dynamical systems, and discrete geometry. This is a project-based course and provides elementary training in programming using Mathematica. Designations: Theory, Programming. Prerequisites: MTH 112. CSC 110 recommended. Enrollment limited to 20. {M}
Fall, Spring, Annually
CSC 209 Web Programming (4 Credits)
This course covers the fundamentals of programming for the web. Students explore client-side development using HTML, CSS, JavaScript and jQuery to craft interactive and visually appealing web experiences. Next, the course transitions to server-side programming, using PHP and AJAX to build robust and responsive web applications. The course also covers foundational topics in software design and project development through both hands-on projects and guided instruction. Prerequisite: CSC 120. Enrollment limited to 30. (E) {M}
Fall, Spring, Annually
CSC 210 Data Structures (4 Credits)
Explores elementary data structures (arrays, linked lists, stacks, queues, maps, trees, graphs) and algorithms (searching, sorting, tree and graph traversal) in a variety of contexts. Using a typed object oriented programming language (e.g. Java), students develop their own implementations as well as more complex applications based upon existing, standard data structures libraries. Not open to students who have taken CSC 212. Prerequisite: CSC 120. Enrollment limited to 30. {M}
Fall, Spring
CSC 220 Advanced Programming Techniques (4 Credits)
Reinforces programming skills learned in previous programming courses through working on a number of projects. Offers practice for developing modular, reusable, maintainable code. Students gain more experience with design and development. Designation: Programming. Prerequisite: CSC 210 or equivalent. Enrollment limited to 30. {M}
Fall, Spring, Variable
CSC 223 Introduction to Software Engineering (4 Credits)
Introduction to software engineering theory and methodologies, with an emphasis on rapid prototyping and development. This course is a survey of topics: requirements elicitation and specification, prototyping and infrastructure, basic project management, architecture and design patterns, and verification and testing. Students work in teams on a significant design and development project. Prerequisite: CSC 210 or equivalent. Designations: Programming, Systems. Enrollment limited to 32. {M}
Fall, Spring
CSC 230 Introduction to Database Systems (4 Credits)
Databases form the foundation of modern commerce, social media and government. This course investigates the design and use of database systems from the traditional to the present day. Designation: Systems. Prerequisites: CSC 210 or equivalent. Enrollment limited to 30. {M}
Fall, Spring, Variable
CSC 231 Microprocessors and Assembly Language (4 Credits)
An introduction to the architecture of the Intel Pentium class processor and its assembly language in the Linux environment. Students write programs in assembly and explore the architectural features of the Pentium, including its use of the memory, the data formats used to represent information, the implementation of high-level language constructs, integer and floating-point arithmetic, and how the processor deals with I/O devices and interrupts. Prerequisite: CSC 210 or equivalent. Enrollment limited to 30. {M}
Fall, Spring
CSC 233 Introduction to Electronics and Arduino (4 Credits)
Beginning with the basics of circuitry and electronic diagrams, the class studies several components commonly used in electronics, combining them in different ways through labs designed for hands-on learning. After the class has covered the basics, students design and build a creative hardware project of their own creation using an Arduino microcontroller. Prerequisite: CSC 231. Enrollment limited to 30. (E) {M}
Fall, Spring, Variable
CSC 235/ SDS 235 Visual Analytics (4 Credits)
Offered as CSC 235 and SDS 235. Visual analytics techniques can help people to derive insight from massive, dynamic, ambiguous and often conflicting data. During this course, students learn the foundations of the emerging, multidisciplinary field of visual analytics and apply these techniques toward a focused research problem in a domain of personal interest. Students who elect to take this course as a programming intensive course should have previously taken CSC 212. In this track, students learn to use R, Python and HTML5/JavaScript to develop custom visual analytic tools. Students preferring a non-programming intensive track may elect to use existing visual analytic software, such as Tableau or Plotly. Designations: Theory, Programming. Prerequisite: CSC 120 or equivalent. {M}
Fall, Spring, Variable
CSC 240 Computer Graphics (4 Credits)
Covers two-dimensional drawings and transformations, three-dimensional graphics, lighting and colors, game design, perspective, curves and surfaces, ray tracing. Employs Postscript, C++, GameMaker, POV-ray, and radiosity. The course accommodates both CS majors, for whom it is programming intensive, and other students with less technical expertise, by having two tracks of assignments. Prerequisite: CSC 120 or equivalent. MTH 111 or equivalent is an additional required prerequisite for majors. Designation: Theory, Programming Enrollment limited to 30. {M}
Fall, Spring, Annually
CSC 249 Computer Networks (4 Credits)
This course introduces fundamental concepts in the design and implementation of computer communication networks, their protocols and applications. Topics covered include layered network architecture, physical layer and data link protocols; and transport protocols; routing protocols and applications. Most case studies are drawn from the Internet TCP/IP protocol suite. Designation: Systems. Prerequisites: CSC 120 or equivalent. {M}
Fall
CSC 250 Theory of Computation (4 Credits)
Automata and finite state machines, regular sets and regular languages, push-down automata and context-free languages, linear-bounded automata, computability and Turing machines, nondeterminism and undecidability. Prerequisites: CSC 110 and MTH 153. Enrollment limited to 30. {M}
Fall, Spring
CSC 251 Network Security (4 Credits)
This course covers a wide range of topics in network security, with a focus on both core principles and practical information. Students learn core network protocols, cryptography as information protection technologies, and the attacks and defenses most closely related to the network rather than the endpoints (e.g., laptops, desktops) on a network. Subtopics include: authentication protocols, firewalls, intrusion detection, routing and DNS security, scanning, eavesdropping, DoS attacks, PKI, password, privacy, anonymity, and recent advancements in the field. The course consists of a mixed format of lectures, in-class labs and hands-on sessions. Designation: Systems. Prerequisites: CSC 210 and CSC 249. Enrollment limited to 30.
Spring, Variable
CSC 252 Algorithms (4 Credits)
Covers algorithm design techniques ("divide-and-conquer," dynamic programming, "greedy" algorithms, etc.), analysis techniques (including big-O notation, recurrence relations), useful data structures (including heaps, search trees, adjacency lists), efficient algorithms for a variety of problems and NP-completeness. Designation: Theory. Prerequisites: CSC 210, MTH 111 and MTH 153. Enrollment limited to 30. {M}
Fall, Spring, Alternate Years
CSC 256 Human-Computer Interaction (4 Credits)
Principles and practices of human-computer interaction, with a focus on human-centered design. This course provides a foundation in the methods and tools for conducting user research, gathering requirements, designing prototypes and evaluating interactive interfaces. Discussions include human capabilities, ethnographic methods, universal design, interface technology and usability testing. Students work in teams on a substantive interaction design project. Designations: Systems, Theory. Prerequisites: CSC 210. Enrollment limited to 30. {M}
Fall, Spring, Variable
CSC 262 Operating Systems (4 Credits)
An introduction to the functions of an operating system and their underlying implementation. Topics include file systems, CPU and memory management, concurrent communicating processes, deadlock, and access and protection issues. Programming projects implement and explore algorithms related to several of these topics. Designations: Programming, Systems. Prerequisite: CSC 231. Enrollment limited to 30. {M}
Fall, Spring, Annually
CSC 266 Introduction to Compiler Design (4 Credits)
In this course, students learn the formal definition of programming language syntax and semantics. They are introduced to the functions of compilers and their design and implementation details. The course reinforces the students' knowledge of context-free grammars and automata and uses this knowledge in designing lexical analyzers and translators for high level programming languages. Topics covered include lexical analysis, type checking, context analysis and code generation. Designations: Theory, Programming. Prerequisites: CSC 231 and CSC 250.
Fall, Spring, Variable
CSC 268 Image Processing Fundamentals (4 Credits)
Images fill the media, and most are processed by computer at some point or another. This course examines a variety of algorithmic image processing techniques, exploring implementation and applications, as well as some of the social impact and ethical issues surrounding their use. Prerequisites: CSC 212 and MTH 111. Enrollment limited to 30. {M}
Fall, Spring, Variable
CSC 270 Digital Circuits and Computer Systems (5 Credits)
This class introduces the operation of logic and sequential circuits. Students explore basic logic gates (AND, OR, NAND, NOR), counters, flip-flops, decoders, microprocessor systems. Students have the opportunity to design and implement digital circuits during a weekly lab. Designation: Systems. Prerequisite: CSC 231. Enrollment limited to 12.
Fall, Spring, Variable
CSC 274 Discrete and Computational Geometry (4 Credits)
Topics include the core of the field: polygons, convex hulls, triangulations and Voronoi diagrams. Beyond this core, curves and surfaces, and computational topology are covered. Throughout, a dual emphasis is maintained on mathematical proofs and efficient algorithms. Students have a choice of concentrating their course work in mathematics or toward computer science. Designations: Theory, Programming. Prerequisite for MTH major credit: MTH 153. MTH 111 recommended. Prerequisite for CSC major credit: CSC 120. {M}
Fall, Spring, Variable
CSC 290 Introduction to Artificial Intelligence (4 Credits)
An introduction to artificial intelligence including an introduction to artificial intelligence programming. Discussions include: game playing and search strategies, machine learning, natural language understanding, neural networks, genetic algorithms, evolutionary programming and philosophical issues. Designations: Theory, Programming. Prerequisite: CSC 210 and MTH 111, or equivalent. Enrollment limited to 30.
Fall, Spring, Variable
CSC 293/ SDS 293 Machine Learning (4 Credits)
Offered as CSC 293 and SDS 293. The field of statistical learning encompasses a variety of computational tools for modeling and understanding complex data. In this introductory course, we will explore many of the most popular of these tools, such as sparse regression, classification trees, boosting and support vector machines. In addition to unpacking the mathematics underlying the computational methods, students will also gain hands-on experience in applying these techniques to real datasets using R. Prerequisite: SDS 201, SDS 220 or CSC 210, or equivalent intro statistics course. Enrollment limited to 60. {M}
Fall, Spring, Annually
CSC 294 Computational Machine Learning (4 Credits)
An introduction to machine learning from a programming perspective. Students develop an understanding of the basic machine learning concepts (including underfitting/overfitting, measures of model complexity, training/test set splitting and cross validation), but with an explicit focus on machine learning systems design (including evaluating algorithmic complexity and development of programming architecture) and on machine learning at scale. Principles of supervised and unsupervised learning are demonstrated via an array of machine learning methods including decision trees, k-nearest neighbors, ensemble methods and neural-networks/deep-learning, as well as dimension reduction, clustering and recommender systems. Students implement classic machine learning techniques, including gradient descent. Designations: Theory, Programming. Prerequisites: CSC 210, CSC 250, (MTH 112 or MTH 211), and knowledge of Python. Enrollment limited to 40. {M}
Fall, Spring, Annually
CSC 325 Seminar: Responsible Computing (4 Credits)
When is disruption good? Who is responsible for ensuring that an innovation has a positive impact? Are these impacts shared equitably? How can bias be eliminated from algorithms, if they exist? What assurances can anyone make about the technology they develop? What are the limitations of professional ethics? This seminar examines the ethical implication (i.e., ethics, justice, political philosophy) of computing and automation. Participants explore how to design technology responsibly while contributing to progress and growth. Discussions include: intellectual property; privacy, security and freedom of information; automation; globalization; access to technology; artificial intelligence; mass society; and emerging issues. Prerequisite: CSC 210. Restrictions: Juniors and seniors only. Enrollment limited to 12. Instructor permission required. {S}
Fall, Spring, Variable
CSC 327 Seminar: Internet Censorship (4 Credits)
Internet censorship deals with practices of information control. This seminar covers topics related to 1) the existing blocking mechanisms at different layers of the Internet protocol stacks used by network censors and 2) the broad issue of detecting the type of network interference as indicative of Internet censorship. Discussions include traffic differentiation, surveillance and blocking of content. Restrictions: Juniors and seniors only. Enrollment limited to 12. Instructor permission required.
Fall, Spring, Variable
CSC 328/ EGR 328 Seminar: Digital Circuits and Sensors (4 Credits)
Offered as CSC 328 and EGR 328. Previously EGR 390dc. Digital circuits are everywhere, from basic thermostat controls and stop light sequencers to smart phones, computers and even Mars Rovers! This course covers the basic building blocks for all electronics. Students investigate basic logic circuits, combinatorial logic and sequential logic with an introduction to the basic digital circuits such as encoders and multiplexers. The second part of the semester focuses on microprocessors, using the Arduino. Students build a variety of circuits with input (from a computer, or from the environment via sensors) and programmed output (LEDs, sound, data sent to a computer), in order to learn how information from our analog world can be converted into digital data. Prerequisites: one of CSC 110, CSC 120, CSC 205/MTH 205, CSC 210 or CSC 220; and either EGR 220 or CSC 231. Restrictions: Junior and seniors only; Engineering and computer science majors only. Enrollment limited to 12. {N}
Fall, Spring, Variable
CSC 334bd Seminar: Topics in Computational Biology-Biomedical Big Data (4 Credits)
This course explores the intersection of computer science and biomedical research. In the genomic era, biological and clinical research generates vast amounts of omics data, much of which is publicly available. Students examine the scientific literature to learn about ways that researchers are harnessing this data to make new discoveries in biomedical domains. This course also discusses the challenges that biomedical big data presents in terms of storage, access and analysis. Finally, students engage in hands-on, project-based learning where they implement the approaches discussed to mine biological repositories, develop their own algorithms and test their own hypotheses. Prerequisite: CSC 294. A working knowledge of biology strongly recommended. Restrictions: Seniors only; computer science majors only. Enrollment limited to 12. Instructor permission required. {M}{N}
Fall, Spring, Variable
CSC 352 Seminar: Parallel Programming (4 Credits)
The field of high-performance computing (HPC) leverages the largest and most powerful computers on the planet to enable cutting edge scientific breakthroughs that help us understand fundamental research questions. These machines and programs push the limits of speed and scalability and require a practical understanding of the entire computing stack as well as familiarity with novel and emerging hardware platforms. In this course, students learn and apply both the theoretical and practical aspects of the field. This includes exposure to both foundational texts and ideas along with cutting-edge research, and culminates in a student-directed group project that leverages both the technologies and techniques learned in this course. By the end of the semester, students are able to design, execute and evaluate potential parallelization strategies in a target domain. Prerequisites: CSC 210 and CSC 252. Restrictions: Juniors and seniors only. Enrollment limited to 12. Instructor permission required.
Fall, Spring, Variable
CSC 353pm Seminar: Topics in Robotics-Robotics Perception and Mapping (4 Credits)
Robotic perception is a crucial aspect of robotics. It lets artificial agents, like robots or software automatons, gather information about their environment to make informed decisions. Perception includes sensing of light information (vision), sound information (audition), tactile or limb-position information (touch/proprioception) and several other aspects that can be integrated to give the agent a sufficient idea of its context. The class discusses the basics concepts, and the history and future directions of robotic perception. Restrictions: Juniors and seniors only. Enrollment limited to 12. Instructor permission required.
Fall, Spring, Variable
CSC 356ac Seminar: Topics in Human-Computer Interaction: Accessible Computer (4 Credits)
This course explores how computing can enhance accessibility and how disability studies can guide effective solutions. Students learn to assess and improve the accessibility of documents, websites, apps, and advanced technologies like AR/VR and AI/ML. The course covers practical skills, including evaluating accessibility and implementing inclusive design, and addresses future-oriented topics such as intersectional issues, accessible healthcare, and disaster response. The course culminates in a major project focusing on access technology, while also covering disability justice and advocacy. Ideal for those creating interactive technologies and committed to fostering inclusivity. CSC 256 strongly recommended. Prerequisite: CSC 212. Restrictions: Juniors and seniors only. Enrollment limited to 12. Instructor permission required. (E)
Fall, Variable
CSC 356ni Seminar: Topics in Human-Computer Interaction-Natural User Interfaces (4 Credits)
In the study of human-computer interaction, a natural user interface (NUI) is an interaction paradigm in which the interface is largely invisible to the end user. Contrasted with WIMP ("windows, icons, menus, pointer") interfaces found in traditional computing systems, NUIs rely on seamless, intuitive interaction rather than artificial control devices. While companies such as Apple and Google have rapidly popularized the NUI model, this interaction paradigm brings with it a unique set of design challenges, constraints and ethical considerations. This course explores ongoing research in this evolving area and puts these techniques into practice in various application areas. Prerequisites: CSC 210. CSC 256 strongly recommended. Restrictions: Juniors and seniors only. Enrollment limited to 15. Instructor permission required. {M}
Fall, Spring, Variable
CSC 356pa Seminar: Topics in Human-Computer Interaction-Platform Activism (4 Credits)
Networked platforms like social media sites, gig sharing apps and game consoles have become important sites of study for human-computer interaction. Contemporary research on the subject includes both platform studies, which offer a critical perspective on the power that large companies have to shape the creative labor and communication patterns of their users, and technology design activism, which seeks to amplify grassroots movements for positive social change on those platforms. This course explores these emerging areas of scholarship and puts our learnings into practice by using participatory design to create new technological interventions on various media platforms. Restrictions: Juniors and seniors only. Enrollment limited to 15. Instructor permission required. {M}
Fall, Spring, Variable
CSC 370 Seminar: Computer Vision and Image Processing (4 Credits)
Explores the challenge of computer vision through readings of original papers and implementation of classic algorithms. This course considers techniques for extracting useful information from digital images, including both the motivation and the mathematical underpinnings. Discussions range from low-level techniques for image enhancement and feature detection to higher-level issues such as stereo vision, image retrieval and segmentation of tracking of objects. Designations: Theory, Programming. Prerequisites: CSC 210 and MTH 111 or equivalent. Restrictions: Juniors and seniors only. Enrollment limited to 12. Instructor permission required. {N}
Fall, Spring, Variable
CSC 372 Seminar: Applied Algorithms (4 Credits)
Covers advanced data structures and algorithms with an emphasis on object-oriented implementation, comparative efficiency analysis and applications. A variety of algorithmic approaches are discussed (divide-and-conquer, dynamic programming, greedy algorithms, graph traversal). The course goes beyond classical searching and sorting to graphs and networks and other applied problems, as well as a selection of NP-hard ones. Designations: Theory, Programming. Prerequisites: CSC 110, CSC 210, MTH 153 and MTH 111, or equivalent. Restrictions: Juniors and seniors only. Enrollment limited to 12. Instructor permission required. {M}
Fall, Spring, Variable
CSC 390lu Seminar: Topics in Artificial Intelligence-Natural Language Understanding (4 Credits)
This special topics course provides an introduction to programming computer systems that can understand and interact with humans through natural languages (such as English). The aim of this course is to go beyond “shallow” methods of parsing and computing word distributions and towards artificial intelligence software systems that think, understand, and communicate like real people. Prerequisites: CSC 231 and 250. Restrictions: Juniors and seniors only. Enrollment limited to 12. Instructor permission required. {M}
Spring, Variable
CSC 400 Special Studies (1-4 Credits)
For majors. Instructor permission required.
Fall, Spring