Introduction to Computer Programming (CSCI-SHU 11)
This course introduces the fundamentals of computer programming using Python. Students learn to design, write, and debug programs while exploring core programming concepts and problem-solving techniques. No prior programming experience is assumed. Prerequisite: None.
Computer Architecture (CENG-SHU 202)
This course provides an overview of the fundamental concepts and principles of computer architecture. Topics include instruction set architecture, assembly language programming, CPU design, memory hierarchy, and I/O systems. Students gain both theoretical understanding and practical experience with computer systems and tools, developing the skills to analyze and evaluate architectural tradeoffs. Prerequisites: Introduction to Programming (CSCI-SHU 11) or Introduction to Computer Science (CSCI-SHU 101).
Data Structures (CSCI-SHU 210)
This course introduces the design and implementation of fundamental data structures such as lists, stacks, queues, trees, and graphs, along with the algorithms that operate on them. Emphasis is placed on problem solving, efficiency, and the tradeoffs between different representations. Students will also gain practical experience implementing data structures in Java. Prerequisite: Introduction to Computer Science (CSCI-SHU 101).
Operating Systems (CSCI-SHU 215)
This course covers the fundamental principles behind modern operating systems, including process management, CPU scheduling, synchronization, memory management, and inter-process communication. Students study the tradeoffs between functionality and performance and gain hands-on experience programming in C to explore system-level concepts. Prerequisites: Computer Architecture (CENG-SHU 202).
Computer Science Senior Projects (CSCI-SHU 420)
The purpose of the Senior Project is for the students to apply theoretical knowledge acquired during the Computer Science program to a concrete project in a realistic setting. During the project, students engage in the entire process of solving a real-world computer science project. It requires students to pursue a long-term, mentored learning experience that culminates in a piece of original work. At the end of the semester, the proposed work comes to fruition in the form of a working software prototype, a written technical report, and an oral presentation at a capstone project symposium.
Distributed Systems (CSCI-SHU 454)
This course offers an in-depth study of the principles underlying distributed systems. It covers core abstractions and algorithms for coordination, replication, and fault tolerance in networked environments. Topics include the client/server model, logical clocks and causality, replication and recovery, consensus and leader election, and blockchains. Emphasis is placed on the tradeoffs between consistency, availability, and performance in real-world systems. Prerequisites: Operating Systems (CSCI-SHU 215) or Computer Systems Organization.
Public Outreach
In addition to my university teaching, I give public presentations aimed at making computer science concepts accessible to wider audiences. These talks are designed for non-specialists and emphasize clarity and real-world relevance. Past audiences have included high school students, teachers, local policymakers, business professionals, and the general public.
- Introduction to Programming for Absolute Beginners [slides] — given to high school teachers and local politicians at the China Welfare Institute.
- Introduction to Distributed Systems [slides] — presented repeatedly at high schools in Shanghai and other Chinese provinces.
- Introduction to Blockchains [slides] — part of a webinar on NFTs that I organized.
- Teaching vs Generative AI [slides] — delivered at the American Chamber of Commerce in Shanghai (AmCham).
- Quantum Computing Here and There: Distributing the Power of Qubits [slides] – part of a webinar on Quantum Computing that I organized.
