Courses

Computer Science
CSCI-SHU 101 Introduction to Computer and Data Science

This course introduces students to the dynamic world of computer and data science. It is designed to hit three goals: mastering a modern object-oriented programming tool (Python), appreciating computational thinking, and providing an overview of modern computer science and data science. By the end of the course, students will develop the ability to break down complex problems into manageable components, fostering creative and systematic problem-solving skills. This course assumes relatively minimal prior CS background and programming experience.

Link to syllabus

CSCI-SHU 11 Introduction to Computer Programming

This course is designed to be a “gentle introduction” to the fundamentals of computer programming, which is the foundation of Computer Science. By the end of this course, students will be able to design, write and debug computer programs. No knowledge of programming and no prior CS background are assumed.

Link to syllabus

CSCI-SHU 210 Data Structures

This course covers fundamental programming constructs that are essential for organizing information in computer memory to address real-world challenges. Building blocks like stacks, queues, linked lists, and binary trees are explored, offering a foundation that can be leveraged, expanded, and combined to create robust programs. By the end of the course, students will have gained a comprehensive understanding of various data structures and their applications.

Link to syllabus

CSCI-SHU 213 Databases

This course provides a comprehensive introduction to the world of database systems and their practical application in modeling real-world scenarios. Students will explore various essential concepts, including data modeling techniques like relational and entity relationship models, as well as the critical aspects of physical database design, query languages, query processing, and transaction management techniques. As students progress, they will develop a deep understanding of data modeling principles and the ability to design relational databases effectively. Moreover, they will gain hands-on experience in utilizing SQL to create and modify database tables, execute queries, and delve into the design and implementation of moderately complex web-based database applications. By the end of this course, students will possess valuable insights into the inner workings of database management systems, including indexing techniques, query processing algorithms, and transaction management practices.

Link to syllabus

CSCI-SHU 215 Operating Systems

This course provides an introduction to operating systems design and implementation. Operating systems offer an interface between user programs and the bare hardware of the computer they run on. An operating system is responsible for allowing resources (e.g., disks, networks, and processors) to be shared, providing common services needed by many different programs (e.g. data exchanges, the ability to start or stop jobs, and access to external devices) while protecting individual programs from one another. This course presents the fundamental principles of operating systems, and discusses the tradeoffs between performance and functionality induced by the design and implementation of an operating system.

Link to syllabus

CSCI-SHU 220 Algorithms

This course aims to study how to design and analyze algorithms. As the soul of Computer Science, algorithms are important in both theory and practice. The course will focus on the theoretical aspects of algorithms. It will mainly cover basic notions about algorithms (e.g., time complexity, asymptotic bounds, etc.), standard algorithmic techniques (e.g., divide & conquer, greedy algorithms, dynamic programming, depth-first search, breadth-first search, etc.), classical algorithmic problems (e.g., sorting, shortest paths, etc.), and other topics (e.g., approximation algorithms, randomized algorithms, etc.). The course is purely theoretical and math-heavy. The students should know how to write clean and rigorous proofs. No programming is required.

Link to syllabus

CSCI-SHU 2314 Discrete Mathematics

Discrete Mathematics is the study of structures which are countable, which means the objects in the set can be enumerated by integers.  The digital computers we use operate in discrete steps and store data in discrete bits.  So, knowledge of discrete mathematics is required to understand the fundamental topics in computer science like algorithms, cryptography, software development as well as in emerging topics of computer science like machine learning and artificial intelligence.  In this course we introduce the students to the fundamental idea of logic, mathematical structures, induction, recursion, formal ways to write proofs, graphs, trees and some initial idea to algorithms. 

Link to syllabus

CSCI-SHU 254 Distributed Systems

This course provides an in-depth study of the principles of distributed systems. A distributed system offers a single coherent and integrated interface between the users and the remote resources/services that are accessible on a computer network. As such, a distributed system is responsible for allowing networked resources to be shared, providing common services needed by many different programs (e.g. data exchanges, the ability to start or stop jobs, and access to remote devices) while protecting individual programs from one another. This course presents the fundamental principles of distributed systems, and discusses the tradeoffs between consistency, availability, and performance induced by the design and implementation of such systems.

Link to syllabus

CSCI-SHU 308 Computer Networking

This course provides an introduction to networking fundamentals and techniques. Upon successful completion of this course, students will develop a deep understanding of how the Internet works today, and where it is going in the near future.  We will cover advanced principles of computer networks by studying the design and implementation of computer communication networks, their protocols, and services built on top of them. Topics include: overview of network architectures, applications (HTTP), transport (TCP, UDP), naming (DNS), addressing (IP), routing (OSPF and RIP), local area networks (Ethernet).  Examples will be drawn primarily from the Internet and its protocols (e.g., TCP, UDP, and IP) that hold the Internet together. 

Link to syllabus

CSCI-SHU 311 Functional Programming

Functional Programming is a very powerful and expressive style of programming which has become extremely popular in recent years, both in the academic world and in the software industry. There are good reasons for this success: functional programs are modular by design, and interact through expressive and cleanly specified interfaces, using static typing and pattern matching. As a result, functional programs are generally simpler to reason about, to maintain and to execute in parallel than imperative or object-oriented programs. The purpose of the course will be to provide an advanced introduction to Haskell, a purely functional language used today in the software industry for real-world applications. The language comes with a rigorous semantics and everything one can expect of a functional programming language: static type inference, lazy evaluation, type classes, explicit handling of effects using monads, and concurrency primitives and abstractions. We will take the opportunity of this course on Haskell to cover elements of formal language theory, with the implementation in Haskell of a parser, pretty-printer and interpreter for a small imperative language.

Link to syllabus

CSCI-SHU 350 Embedded Computer Systems

This course provides an introduction to embedded computer systems design and implementation. This course covers the broad range of foundational skills that apply across all embedded computer system application areas. Students completing this course will be able to discuss the major components of an embedded system and implement small programs to solve well-scoped problems on an embedded system. In order to gain a deep understanding of these topics, we will study them further by working on a mix of coding projects and reading reports. Coding projects are an opportunity to get hands-on experience with systems programming.

Link to syllabus

CSCI-SHU 360 Machine Learning

Machine learning is an exciting and fast-moving field at the intersection of computer science, mathematics, probability and statistics, and optimization with many recent consumer applications. In this class, students will learn about the theoretical foundations of machine learning and how to use machine learning to solve real-world data-driven problems. We will apply machine learning to numerical, textual, and image data. The homework assignments involve both mathematical derivations and programming assignments. There will be Kaggle competitions of training models on real world datasets.

Link to syllabus

CSCI-SHU 375 Reinforcement Learning

This course is an introduction to reinforcement learning (RL). The first part of the course focuses on the fundamental ideas underlying tabular RL. The second part of the course discusses deep RL, namely the combination of these ideas with deep neural network approximations. The course involves mathematical concepts and programming. 

Link to syllabus

CSCI-SHU 376 Natural Language Processing

With the development of large language models such as ChatGPT, techniques in natural language processing have embedded into our everyday life. The goal of this course is to provide principles and state-of-the-art approaches needed to solve real-world applications such as question answering, summarization and machine translation.

Link to syllabus

CSCI-SHU 378 Introduction to Cryptography

The study of modern cryptography investigates mathematical techniques for securing information, systems and distributed computations against adversarial attacks. These techniques have become indispensable to our society by enabling ATM, internet banking and so on. In this course, we introduce fundamental concepts of this study. Emphasis will be placed on rigorous proofs of security based on precise definitions and assumptions. Topics include one-way function, encryption, signatures, pseudorandom number generators and zero-knowledge proofs.

Link to syllabus

CSCI-SHU 381 Recommendation Systems

Recommendation systems have become increasingly important nowadays in affecting people’s information feeds and decision making in terms of what content to watch, what products to purchase, or what places to visit. This course aims to introduce to the students theoretical and practical knowledge of recommendation systems, including classic and state-of-the-art recommendation algorithms, evaluation metrics, as well as the importance of various user interaction data. We will also discuss the emerging social and technical challenges that modern recommendation systems face. At the end of the semester, students are expected to conduct a final project using the knowledge gained from this course with a written technical report and an in-class oral presentation.

Link to syllabus

CSCI-SHU 410 Software Engineering

This course introduces students to the discipline of software engineering, with focus on principles, processes, and techniques to conducting software engineering tasks related to constructing, maintaining, and testing software. By the end of the course, students will be able to explain what processes or techniques are available for conducting a software engineering task, and choose appropriate processes or techniques for such task in the given application context. Students will be able to apply a technique for a software engineering task in the given application context.

Link to syllabus

CSCI-SHU 420 Computer Science Senior Project

The purpose of the Senior Project is for students to apply the theoretical knowledge they acquired during the Computer Science Undergraduate Program to a concrete project that they conduct from start to finish. Students thus engage in the entire process of tackling a real-world problem which requires them to pursue a long-term, mentored effort towards a piece of original scientific work. At the end of the semester, this work comes to fruition in the form of a functional software prototype, a written technical report, and an oral presentation at a symposium.

Link to syllabus

Data Science
DATS-SHU 235 Information Visualization

This course delves into data visualization, focusing on two key objectives: grasping visual design principles and mastering the use of D3.js, a modern data visualization tool. By the course's end, students will possess a strong foundation in information visualization design theories and the JavaScript skills needed to create impactful visualizations.

Link to syllabus

DATS-SHU 240 Introduction to Optimization and Mathematical Programming

For decades, optimization has been a major ingredient in solving problems from science, engineering, transportation, medicine. It is also a central part of machine learning. This course is an undergraduate-level introduction to important algorithms in continuous and discrete optimization, and will address both theoretical foundations and software implementation. Topics include model building, linear programming, nonlinear programming, integer programming and the use of algebraic modeling languages for describing and solving optimization models.

Link to syllabus

DATS-SHU 377 Computer Vision

Computer Vision is concerned with enabling computers to interpret and understand visual information from the world around us. It has become ubiquitous in our society, with applications in search, image understanding, video surveillance, medical image analysis, drones, self-driving cars, and smart manufacturing. This course will cover fundamentals of image formation, camera imaging geometry, feature detection and matching, image classification, scene understanding, objection detection, and video understanding. We will focus on applications of deep learning to different problems in computer vision and cover some recent emerging topics.

Link to syllabus

DATS-SHU 369 Machine Learning with Graphs

Complex data can be represented as a graph of relationships between objects. Such networks are a fundamental tool for modeling social, technological, and biological systems. This course focuses on the computational, algorithmic, and modeling challenges specific to the analysis of massive graphs. By means of studying the underlying graph structure and its features, students are introduced to machine learning techniques and data mining tools apt to reveal insights on a variety of networks. Topics include: Representation learning and Graph Neural Networks; Algorithms for the World Wide Web; Reasoning over Knowledge Graphs; Social network analysis. We will focus on applications of machine learning to different problems in the graph field and cover some recent emerging topics.

Link to syllabus

DATS-SHU 420 Data Science Senior Project

The purpose of the Senior Project is for students to apply the theoretical knowledge they acquired during the Data Science Undergraduate Program to a concrete project that they conduct from start to finish. Students thus engage in the entire process of tackling a real-world problem which requires them to pursue a long-term, mentored effort towards a piece of original scientific work. At the end of the semester, this work comes to fruition in the form of a functional software prototype, a written technical report, and an oral presentation at a symposium.

Link to syllabus

Computer Systems Engineering
CENG-SHU 201 Digital Logic

Digital logic is used for data representation, manipulation and processing using discrete signals. The computers we use are based on binary logic. So digital logic is necessary to understand the basic working of computing devices and computing processes.   This course provides a rigorous introduction to topics in digital logic design such as: classification of digital systems, number systems and binary arithmetic, combinational logic, sequential logic, logic gates, latches, flip-flops, and hardware technology. Students will learn how to analyze and synthesize digital circuits/functions. Analytical methods will be covered as well as the use of Verilog (a Hardware Description Language).

Link to syllabus

CENG-SHU 202 Computer Architecture

The main ambition of this course is to teach you how a modern computer works, starting from its most elementary components (transistors, resistors, capacitors) and then climbing up the ladder of abstraction to reach a high-level programming language like C and its compilation in MIPS machine code. In this excursion, we will learn (among other things) how to turn electrons into digital logic, how to make machine instructions execute faster through multi-cycling, pipelining and prediction, and how to organize memory in hierarchies in order to make it more efficient.

Link to syllabus

CENG-SHU 352 Emerging Technologies for Smart Cities

Nowadays, many smart cities are being developed around the world. This is an undergraduate-level course to introduce a series of emerging technologies for smart cities, and is a core course in Science: Science, Technology, and Society (STS). This course offers students fresh materials and case studies to expand their horizon on smart cities; helps them understand the functions and identify the limitations of various emerging technologies used in the smart city; and explores a set of analysis techniques on analyzing the smart city systems. Topics involve electric vehicles, connected and autonomous vehicles, ride-sourcing services, car-sharing services, bike-sharing services, on-demand services, advanced parking management, and so on.

Link to syllabus

Electrical and Systems Engineering
EENG-SHU 251 Circuits

Electricity is the fundamental energy which fuels the existence and growth of our civilization.  To harness the power of electricity we use several components like resistors, inductors and capacitors.  Also we have sources which produce the electricity.  In this undergraduate level course we introduce the different components of electric circuits and how these components work together with resistor-inductor (RL), resistor-capacitor (RC) & resistor-inductor-capacitor (RLC) circuits.  We also introduced the voltage and current laws and nodal and mesh analysis based on them.  Also we teach different methods of circuit analysis and construction of equivalent networks like Thevenin and Nortons equivalent network.  The course will also teach on using software tools like circuitlab and PSPICE to simulate circuits on computers.  

Link to syllabus