- EEL4837 Programming for Electrical Engineers II (Fall 2025)
Programming remains an essential component of virtually every aspect of Engineering. Writing correct and efficient programs requires an understanding of the underlying foundations, including implementation, manipulation, and analysis of structured data, understanding how algorithms are built on top of such data, and navigating trade-offs between program performance and resource constraints. This course covers the foundations of programming specifically targeted toward Electrical Engineers. It will cover the implementation and use of data structures in solving programming problems, including stacks, queues, matrices, trees, and graphs. Students will practice programming a variety of algorithms and learn several algorithmic design techniques (recursion, divide-and-conquer, greedy algorithms, and dynamic programming). The course will include excursions illustrating the application of these techniques in Electrical Engineering.
Credits: 3.
Teaching assistants:
- Allen Sarmiento
- Emerson Schmidt
- Jeremy Seitz
- Luke Slaughter
- Norman Smith
New this year: two midterms instead of one, courtesy of GenAI!
- EEL6935 Safe Autonomous Systems (Spring 2025)
This course teaches rigorous mathematical and algorithmic techniques to enable safety design and analysis in autonomy, including the tasks of controller training, system modeling, requirements specification, and safety verification. The class offers an opportunity to dive into a broad range of autonomy applications, from unmanned drones to medical devices.
The course material consists of four modules:
The course material consists of four modules:
- Autonomy modeling: representing uncertain autonomous systems with Markov decision processes.
- Temporal safety specification: temporal logics to specify safety properties.
- Reinforcement learning for control: applied algorithms to train autonomous controllers in simulation.
- Probabilistic verification: algorithms/tools to compute safety guarantees for probabilistic models.
This course is suitable for students who want to gain state-of-the-art knowledge in safe autonomy, deepen their understanding of rigorous and learning-enabled design and validation of complex systems, gain practical experience with a particular type of autonomous systems, or complement their research with safety assurance.
Credits: 3
Teaching assistant: Yuang Geng
See the syllabus for details.
Update: check out the highlights of student projects!
If you are interested in the teaching materials, please reach out.
- EEL4837 Programming for Electrical Engineers II (Fall 2024)
This course covers the fundamentals of data structures and algorithms, including lists, queues, stacks, divide-and-conquer, dynamic programming, trees, tables, graphs, and recursive techniques. It also investigates the role of specific data structures in electrical engineering applications.
Programming has become an essential component of virtually every aspect of Engineering. Writing correct and efficient programs requires an understanding of the underlying foundations, including implementation, manipulation, and analysis of structured data, understanding how algorithms are built on top of such data, and navigating trade-offs between program performance and resource constraints. This course covers the foundations of programming specifically targeted toward Electrical Engineers. It will cover the implementation and use of data structures in solving programming problems, including stacks, queues, matrices, trees, and graphs. Students will practice programming a variety of algorithms and learn several algorithmic design techniques (recursion, divide-and-conquer, greedy algorithms, and dynamic programming). The course will include excursions illustrating the application of these techniques in Electrical Engineering.
Credits: 3.
Teaching assistants:
- Manning Chen
- Cecelia Schricker
- Alejandro La Serna Silva
- Cole Miller
The syllabus can be found here.
New this year: in-class quizzes.
- EGN4912 Reliable and Safe Autonomous Racing (Spring 2024)
This is a Course-based Undergraduate Research Experience (CURE) course aimed to provide hands-on research experience in a lab setting.
This course revolves around building a small-scale autonomous racing car that can navigate a circular track reliably and safely despite unexpected environment changes (e.g., different illumination or previously unseen obstacles) and mechanical degradations (e.g., slippery surface or depleted battery). Specifically, these 1/16th to 1/10th-scale racing cars are based on commercial RC hardware and equipped with a camera or a lidar sensor. Our deep learning-based software runs on a Linux system, which is deployed on an NVidia Jetson platform, and sends commands to an electronic speed controller that actuates the car’s motor and servos.
To be successful, this end-to-end robotic development requires diverse expertise from mechanical, electrical, and computing domains. Undergraduate students should expect to be assigned tasks that match their initial skills and also develop new competencies along the way. In the long term, autonomous racing cars will serve as a physical platform for evaluating and demonstrating the latest research of the TEA (Trustworthy Engineered Autonomy) Lab in predicting and validating the safety of autonomous systems. The skills and knowledge developed in our lab can be applied to a broad range of other autonomous systems and robots.
Under the supervision of Dr. Ivan Ruchkin and experienced student mentors, undergraduate students in this course will (i) assemble and configure the mechanical and electrical hardware of racing cars, (ii) program and train perception and control components for racing cars, (iii) assist comprehensive literature search and review, (iv) participate in weekly engineering meetings and research discussions. Depending on the circumstances, undergraduate students will also have an opportunity to contribute to research publications as co-authors.
Credits: 2.
Instructors
- Ivan Ruchkin, faculty
- Ao Wang, graduate mentor
- Sam Jhong, graduate mentor
- Nathan Norohna, graduate mentor
- Lorant Domokos, undergraduate mentor
- Yuang Geng, graduate meta-mentor
- Zhenjiang Mao, graduate meta-mentor
- EEL4837 Programming for Electrical Engineers II (Spring 2023)
This course covers the fundamentals of data structures and algorithms, including lists, queues, stacks, divide-and-conquer, dynamic programming, trees, tables, graphs, and recursive techniques. It also investigates the role of specific data structures in electrical engineering applications.
Programming has become an essential component of virtually every aspect of Engineering. However, writing correct and efficient programs requires an understanding of the underlying foundations, including implementation, manipulation, and analysis of structured data, understanding how algorithms are built on top of such data, and navigating trade-offs between program performance and resource constraints. This course covers the foundations of programming specifically targeted toward Electrical Engineers. It will cover the implementation and use of data structures in solving programming problems, including queues, trees, tables, and graphs. Algorithm development including recursive techniques will be discussed, and several algorithmic design techniques (greedy, dynamic programming, branch and bound) will be presented. The course will include excursions illustrating the use of these techniques in a variety of Electrical Engineering domains.
Credits: 3.
Teaching assistants:
- Qiangeng Yang
- Haritha Vipinakumar
The complete syllabus can be found here.
New this year: autograding of source code with Gradescope.
- EEL6935 Safe Autonomous Systems (Fall 2022)
This course will teach mathematical and algorithmic techniques and tools for building safe autonomous systems, from unmanned drones to self-driving cars to medical devices.
The course is split into three modules:
- Systems: how to understand and formally represent a complex autonomous system? Mathematical formalisms for dynamical, probabilistic, and hybrid systems.
- Autonomy: how to enable autonomous operation in a challenging environment? Data-driven components, probabilistic graphical models, neural networks, errors/robustness of learned models, learned perception/control.
- Safety: how to ensure that an autonomous system behaves safely? Logical specifications of safety, verification of system models and learned components, safe planning and control, temporal and confidence monitoring.
Credits: 3.
See the syllabus for details. Feel free to reach out if you have any questions about the course or your participation in it.
If you are interested in the teaching materials, please reach out as well.
Pre-UF Courses
During my time at Carnegie Mellon and UPenn, I took on various roles in several undergraduate and graduate courses.
Computer Systems Programming CIT 595 (UPenn)
Role: co-instructor.
Semesters: Spring 2021.
Students: Masters with non-CS backgrounds and junior/senior undergraduate students with non-CS majors, ~65.
Responsibilities: (re)designing a course, giving lectures, designing teaching activities, managing a team of 7 TAs.
Data-Driven/IoT Computing: Advanced Topics in Computing Systems CIS 640 (UPenn)
Role: co-instructor.
Semesters: Spring 2020.
Students: Masters and PhD students in computer science, ~15.
Responsibilities: designing a course, designing homeworks, supervising class projects and presentations, providing feedback and grading.
Foundations of Software Engineering 15-313 (CMU)
Roles: guest lecturer, volunteer contributor.
Semesters: Fall 2014.
Students: juniors and seniors, mostly majors in computer science and electrical and computer engineering, ~50.
Responsibilities: co-creating a unit devoted to software design and architecture, giving a lecture, creating a homework assignment.
Architectures for Software Systems 17-655 (CMU)
Roles: teaching assistant, volunteer contributor.
Semesters: Spring 2013, Spring 2014.
Students: Masters in software engineering, ~50.
Responsibilities: updating assignments and reading questions, grading, giving lectures and recitations, holding office hours.
Models of Software Systems 17-651 (CMU)
Role: volunteer contributor.
Semester: Fall 2013, Fall 2014.
Students: Masters in software engineering, ~40.
Responsibilities: designing a unit on Alloy, giving lectures, creating homeworks.
Principles of Software Construction 15-214 (CMU)
Role: teaching assistant.
Semester: Fall 2012.
Students: sophomores and juniors in computer science and electrical engineering, non-majors, ~90.
Responsibilities: designing and updating assignments, grading, coordinating TAs, giving recitations and labs, holding office hours.
Teaching Training
At UF, I have completed the Elevate Program, the First-Year Faculty Training Academy, and various seminars/conferences by the Center for Teaching Excellence and the Center for Instructional Technology & Training.
At UPenn, I have attended the seminars of the Center for Teaching and Learning, which have been particularly helpful in transitioning to online teaching during the pandemic.
I have completed the CMU Eberly Center’s Future Faculty Program. This program helped me develop my personal teaching philosophy of learning games (not to be confused with gamification of learning), which you can read about in my teaching statement (available on request).