This course provides an introduction to foundational computer science concepts centered on analytical thinking, programming, and problem-solving skills. Through a rigorous approach to dissecting and systematically solving challenges, students develop core algorithmic techniques for addressing real-world issues. The course focuses on fostering an understanding of computational solutions while strengthening critical thinking, logic, and creativity.
This course critically examines some important “for social good” problems that computer science and technology can help address. Students will study topics such as ethical community engagement, engineering for social justice, ways to advocate for social change, and models to implement “for social good” projects. This course does not involve computer programming and is open to any student interested in social justice, community engagement, ethical application of technology, and similar social issues.
Limited to members of the Computer Science Applied Groups. Working under the direction of a faculty or staff member, groups of CS students provide infrastructure support for the CS Department and the College. Current groups include: CS System Administrators, Hardware Interfacing Project, Helping Others Program, CS for Social Good, and Web Development. No more than three credits total in an academic career.
This course is an introduction to the engineering and administration or computing systems and the associated storage and networking systems required to support users of modern science and commerce platforms. The course material is built around a sequence of hands-on labs which cover topics from the design of computing systems and facilities through the full provisioning of a machine which supports end users. Additional topics include the ethics of system administration, data privacy and protection.
An introduction to Functional Programming, one of the three major programming paradigms. Focuses on well-structured interactive program development using a modern functional programming language. Introduces the formal study of data types and the meaning of programs.
Data structures are a central topic in computer science. Building on the material developed in CS 256 Data Structures, this course covers more advanced approaches to organizing data on network, tree and string based structures. Problems are chosen from data-intensive domains, motivating students to solve complex problems by using efficient data structures.
The theory, techniques and technologies associated with the deconstruction, and testing of software systems, particularly large software systems. Students learn various approaches to procedural decomposition and system architecture and build multiple large collaborative software projects. Explores the tools used for building and testing software systems, particularly in the context of open source software.
A laboratory-oriented course dealing with analog and digital circuits. Circuit theory is developed for diodes, transistors, operational amplifiers and simple digital circuits. Components are used to construct a range of devices, including power supplies, oscillators and amplifiers. Check the Physics cross-listing for this course.
This course covers a variety of software engineering and user experience topics through the lens of game design. Students construct several games over the course of the term, first individually and then collaboratively, putting theory into practice.
This course covers the development and application of parallel programming and problem-solving techniques to solve computationally intensive problems in a variety of disciplines. Parallel computation invites new ways of thinking about problems and is an important skill in corporate and research environments. Students learn about programming paradigms used in parallel computation, the organization of parallel systems, and the application of programs and systems to solving problems in biology, physics, geography, and other disciplines.
This course offers an introduction to topics in Artificial Intelligence and Machine Learning and covers their theoretical underpinnings while providing opportunities to put various techniques into practice. Topics covered may include search, planning, game-playing neutral networks and other machine learning approaches.
This course provides an introduction to the process of proposal writing. In the course, students focus primarily on the learning of how to select an advanced topic, write an annotated bibliography, review related literature, and finally write a proposal.
An internship or practicum organized by the student in consultation with the adviser. Credits for the experience must be negotiated between the adviser and the on-site supervisor. The experience involves one of the following: (a) teaching or tutoring a second language, (b) a special research project or (c) interpreting / translation. Depending on the experience, students enhance their communicative skills, develop a critical understanding of linguistic and cultural differences, connect to other disciplines through languages, come to a deeper understanding of the role of translation in cross-cultural communication, and/or reflect on career and life goals.
Investigation of a specific topic conceived and planned by the student in consultation with a faculty supervisor. Culminates in a comprehensive report prepared in the style of a thesis or research paper.
Each participant completes a semester-long capstone project in a research group setting. Weekly meetings are scheduled with the instructor individually and with the group as a whole. In addition, explores topics from the cultural, ethical, historical or broader scientific context of computer science in readings and discussion. Culminates in a public seminar and student presentation.