Since 2016, I have taught multiple required courses for Indiana University's Intelligent Systems Engineering program. My teaching style includes a lot of hands-on examples, live coding, and an environment where I hope students are comfortable to ask questions and try things themselves. Most of my classes are a mixture of lecture and lab. Because not everyone learns the same way, I employ different learning methods - participation, projects, take-home style quizzes, and readings.

Engineering Computer Architectures

ENGR-E 110, Spring Session (16 weeks), Summer Session (6 weeks).

This course teaches the fundamentals of digital logic. Starting with boolean functions (And, Or, Not) and building up to a simulated CPU which can run programs, to shed light on the mystery of computation. This course is inspired by the wonderful Nand2Tetris curriculum by Nisan and Schocken at MIT.

Through this course, students are also introduced to hardware description language (HDL) concepts, assembly language, and they have ample opportunities to hone their Python skills. Learning objectives include:

  • understanding two's complement arithmetic (addition, negation, subtraction)
  • understanding how pointers work in a Von Neumann architecture
  • crafting an assembler for a small assembly language using Python as the implementation language
  • solve problems using string processing
  • understanding the fundamentals of HDLs

Software Systems Engineering

ENGR-E 111, Summer Session (6 weeks).

This course teaches students C programming and the fundamentals of how to interact with memory through a CPU. Students learn C language syntax and concepts like functions, control flow, and data storage classes. Most work is exercise-based, where the goal is for the student to write programs which pass assorted tests (some visible, some hidden).

Learning objectives include:

  • write functions in C
  • write programs in C that process command-line arguments
  • solve problems using arrays
  • understand pointer semantics, including C pointer arithmetic
  • understand size and speed trade-offs when manipulating data by pointer
  • use C's struct feature to define custom data structures
  • manipulate linked list data structures

Python for Engineers

ENGR-E 399/599, Winter Session (3 weeks).

Introduction to Python concepts (functions, control flow, data types, file I/O), and selected libraries (re, numpy).

Engineering Ethics and Professionalism

ENGR-E 299, Fall Session (8 weeks).

Ethical and professional considerations of the engineering field, with emphasis on software and systems.

Innovation and Design

ENGR-E 101, Fall Session (16 weeks).

Introduction to the breadth of engineering offered at IU's Intelligent Systems Engineering program. Students design their own projects to solve a specific problem, with feedback and guidance from instructors. This course serves as an introduction to programming in Python, and also gives students experience in fabrication and creating models using CAD tools.