Created by Magical Gnomes!

Teaching

...begin by assuming a perfect sphere...

The primary reason that I enrolled in the graduate program here at Purdue University is my love for teaching. I owe a great debt of gratitude to Dr. Mark Johnson for hiring me as an undergraduate TA for ECE 364 many years ago.

CS 240 - Programming in C (3 credit hours)

The UNIX environment, C development cycle, data representation, operators, program structure, recursion, macros, C preprocessor, pointers and addresses, dynamic memory allocation, structures, unions, typedef, bit-fields, pointer/structure applications, UNIX file abstraction, file access, low-level I/O, concurrency.

Spring 2023: Instructor (631 students)
Spring 2022: Instructor (473 students)
Fall 2021: Instructor (261 students)
Fall 2020: Instructor (236 students)
Spring 2020: Instructor (421 students)
Spring 2019: Instructor (327 students)
Fall 2018: Instructor (231 students)

CS 307 - Software Engineering I (3 credit hours)

An introduction to the methods and tools of software engineering; software life cycle; specification and design of software, software testing, cost and effort estimation; laboratory exercises with design, testing, and other tools.

Fall 2023: Instructor (151 students)
Spring 2023: Instructor (191 students)
Fall 2022: Instructor (187 students)
Spring 2021: Instructor (130 students)
Spring 2020: Instructor (125 students)
Fall 2018: Instructor (87 students)
Spring 2018: Instructor (149 students)
Fall 2017: Instructor (179 students)
Spring 2017: Instructor (167 students)

CS 180 - Problem Solving and Object-Oriented Programming (4 credit hours)

Problem solving and algorithms, implementation of algorithms in a high level programming language, conditionals, the iterative approach and debugging, collections of data, searching and sorting, solving problems by decomposition, the object-oriented approach, subclasses of existing classes, handling exceptions that occur when the program is running, graphical user interfaces (GUIs), data stored in files, abstract data types, a glimpse at topics from other CS courses.

Fall 2022: Instructor (446 students)
Fall 2021: Instructor (290 students)
Fall 2020: Instructor (313 students)
Fall 2018: Instructor (214 students)
Fall 2017: Instructor (185 students)

CS 252 - Systems Programming (4 credit hours)

Low-level programming; review of addresses, pointers, memory layout, and data representation; text, data, and bss segments; debugging and hex dumps; concurrent execution with threads and processes; address spaces; file names; descriptors and file pointers; inheritance; system calls and library functions; standard I/O and string libraries; simplified socket programming; building tools to help programmers; make and make files; shell scripts and quoting; unix tools including sed, echo, test, and find; scripting languages such as awk; version control; object and executable files (.o and a.out); symbol tables; pointers to functions; hierarchical directories; and DNS hierarchy; programming embedded systems.

Sample Material
Syllabus

Fall 2023: Instructor (130 students)
Fall 2019: Instructor (119 students)
Summer 2018: Instructor (34 students)
Spring 2018: Instructor (114 students)

CS 50011 - Introduction to Systems for Information Security II (3 credit hours)

The course covers computer systems principles relevant to information security and it serves as a prerequisite for the later courses in the MS in IS program. The material includes features in the C/C++ programming languages for understanding security-critical software vulnerabilities, basic knowledge in computer architecture and assembly languages, knowledge of the compiling process, operating systems, networking, databases, and web applications relevant to information security.

Summer 2022: Instructor (10 students) - Syllabus
Summer 2021: Instructor (2 students)
Summer 2020: Instructor (2 students)
Summer 2019: Instructor (5 students)
Summer 2017: Instructor (2 students)

CS 50010 - Foundational Principles of Information Security (3 credit hours)

This course covers foundational principles relevant to information security including data structures, algorithm design, computational complexity, probability theory, number theory, and basics of cryptography. Programming experience and computer science knowledge equivalent to that of a minor in CS. Incoming students are expected to have programming skills in at least one procedural programming languages e.g., C, C++, Java, or Python.

Summer 2022: Instructor (9 students) - Syllabus
Summer 2021: Instructor (2 students)

CS 250 - Computer Architecture (4 credit hours)

Covers the function of basic hardware, including fundamentals of digital logic, processors, memory, and I/O.

Summer 2017: Instructor (43 students) - Syllabus

ECE 469 - Operating Systems Engineering (4 credit hours)

The design and construction of operating systems for both individual computers and distributed (networked) systems. Basic concepts and methods for managing processor, main memory, block-structured storage, and network resources are covered. Detailed examples are taken from a number of operating systems, emphasizing the techniques used in networked versions of UNIX. These techniques are applied to design improvements of portions of a simplified, networked, UNIX-based operating system; the improvements are implemented and their performance is evaluated in laboratory experiments.

Spring 2008: Instructor (35 students) - Syllabus

ECE 264 - Advanced C Programming (2 credit hours)

Continuation of a first programming course. Topics include files, structures, pointers, and the proper use of dynamic data structures. A basic knowledge of the UNIX operating system and an introductory C programming course is expected; C programming knowledge should include basic syntax, control structures, and file I/O, as well as experience in declaring and using functions.

Fall 2005: Instructor (92 students) * - Syllabus

ECE 364 - Software Engineering Tools Laboratory (1 credit hour)

To acquaint the students with a variety of current software engineering tools, scripting languages, and application programming languages. Students are expected to use their previous programming experience to design and test software programs using the techniques learned in this course.

Fall 2007: Instructor (38 students) - Syllabus
Spring 2007: Instructor (54 students)
Fall 2006: Instructor (30 students)
Spring 2006: Instructor (55 students) *

Spring 2005: Graduate Teaching Assistant (TA)
Fall 2004: Graduate Teaching Assistant (TA)

Spring 2004: Undergraduate Teaching Assistant (UTA)
Fall 2003: Undergraduate Teaching Assistant (UTA)
Spring 2003: Undergraduate Teaching Assistant (UTA)

Fall 2002: Undergraduate Laboratory Assistant (ULA)

* During the 2005-2006 academic year I was the recipient of the Charles C. Chappelle Fellowship