This course provides hands-on experience developing computer games. The course covers the basic techniques of game programming, including graphics, events, controls, animations, and intelligent behaviors. Students learn the concepts and skills of object oriented programming by designing and implementing a sequence of computer games. No prior knowledge in programming and computer games if required. A good understanding of algebra and geometry is strongly recommended. Lecture/laboratory.
Digital media processing forms a basic block in technologies underlying today's successful media, social and publishing companies. This course covers various techniques for the creation and manipulation of multimedia, including pictures, sounds, texts, and movies. Students learn the concepts and skills of object-oriented programming by designing and implementing a series of digital effects. No prior background or experience in programming is required. Lecture/laboratory.
This course offers an introduction to computational thinking and programming, emphasizing problem-solving skills and foundational concepts in computer science. Students will learn to design, write, and debug programs using the Python programming language. Topics include fundamental programming concepts such as variables, data types, control structures, functions, loops, and basic data structures like lists and dictionaries. Social issues with data, such as privacy and ethics, will also be discussed. No prior programming experience is expected.
This course builds on foundational programming knowledge and introduces students to the principles and practices of object-oriented programming in Java. Through hands-on projects and practical exercises, students will also explore topics like recursion, exception handling, and data structures in the Java Collections Framework.
This course continues the development of object oriented approaches to the design and implementation of software systems. Students will learn to analyze problems, algorithms and develop object-oriented solutions to problems. Students will also learn to use multiple data structures and the accompanying algorithms to store, index and retrieve data.
This course examines the intersection of computers and society through political, legal, ethical, psychological, and philosophical lenses. Students will cultivate their critical thinking and communication skills in a collaborative environment. The course provides deep insights into the societal implications of computing, recognizing its significance in our evolving technological landscape. Topics include legal and ethical frameworks, the history of computing, cybersecurity and privacy, freedom of speech, algorithmic influence on society, and professional ethics.
The design and analysis of algorithms and their complexity. This course studies techniques for measuring algorithm complexity, fundamental algorithms and data structures, intractable problems, and algorithm-design techniques.
This course provides a software-centric understanding of modern computer architecture and organization to develop students' intuitions of secure computing, code parallelism, code performance, compiler functionality, computer network organization and Instruction Set Architectures (ISAs), in physical and virtual computing machines. Topics include: C systems programming, the process memory image, memory data layout, memory-pyramid, building exploit-resistant code, cache performance approaches, IP network organization, threading/parallel programming, traditional compute processor organization, digital logic, and ISA design.
The course covers analysis, design, and implementation strategies for large-scale software projects. Work is group-intensive. In large groups, students design and implement a comprehensive semester-long project, progressing from an informal concept to a functional deliverable. Concurrently, the large group experience is supported by a small group lab sequence introducing core software engineering tools. Essential to the completion of the project are topics including information management, high-level networking, distributed client-server development, and secure computing practices. (Lecture/Lab)
An introduction to the theory of the design and implementation of contemporary programming languages. Topics include the study of programming language syntax and semantics, translators, and imperative, functional, logic and object-oriented language paradigms.
An introduction to the theoretical foundations of computer science and formal models of computation. Topics will include formal languages, finite automata, computability, and undecidability.
This course examines the organization, design, and implementation of database management systems.
Independent study projects for juniors and seniors. Hours arranged. Permission of department head required. Applicability of Independent Study/Research as a 300-level CS major elective is only by approval of the department.
An in-depth study of operating systems, covering: process and memory virtualization; data persistence using file systems; concurrency through threading, interprocess communication, and distributed programming. The coursework focuses on simulations and a continuing group project to provide mechanisms for specific topical understanding and the creation of simplified system software like: system-shells, web-servers and database-servers.
This course considers recent advances and/or subjects of current interest in computer science.
An introduction to the study of intelligence as computation. Topics include problem-solving techniques, heuristic searches and knowledge representation.
This course is an introduction to the theoretical and practical aspects of the design and implementation of Machine Learning (ML) algorithms. It will provide students with an in-depth introduction to the areas of Supervised ML algorithms. The course will cover core ML algorithms for classification and regression, such as Linear and Logistic Regression, Neural Network and Deep Learning.
This course covers topics in Human-Computer Interaction (HCI), including identifying users’ needs, rapid prototyping, visual design, and the evaluation of existing systems. Students learn principles and methods that will help them recognize and create usable interfaces. Students apply these methods to evaluate real-world systems, measuring how they impact productivity, and more broadly experience.
In this course, students work in teams on the analysis, design, and implementation of a large-scale software project.
A two-semester, independent research project on a topic selected by the student and approved by the department. A student must undertake such a program for two semesters to graduate with honors.