Primary courses
I regularly teach the following courses at JMU:
- CS 261 and
CS 361 (Computer Systems I-II)
- The CS 261-361 sequence forms a breadth-first survey of computer systems,
including assembly language, high-level language translation and linking,
von Neumann architecture, processes and OS principles, concurrency, and
networking. This required sequence serves as a common foundation for the
advanced systems elective courses, including Operating Systems, Compilers,
Parallel & Distributed Systems, Networking, and Architecture.
- CS 330
(Societal & Ethical Issues in Computing)
- Computing has changed how we communicate in all facets of our lives. These
changes may create a great benefit to one group of individuals while
extracting a great cost for others. This courses uses critical inquiry and
ethical frameworks to examine a the impact of computing on a variety of
issues, including intellectual property, security, privacy, freedom of
expression, artificial intelligence, the experience of gender & race in
online communities, and the future of work.
- CS 240
(Data Structures & Algorithms)
- As a discipline, computer science is focused on the study of algorithms.
This course plays a key transitional role for students, moving from learning
the fundamentals of how to write code to learning about the analysis of
algorithms. The course examines how to determine the run-time complexity of
an algorithm (searching, sorting, recursion), how to use memory allocation
strategies (linked vs. contiguous) for optimal performance, how to traverse
and modify tree- and graph-based data structures, and when to choose tree-
or hash-based indexing. Developing these skills is a necessary component of
all advanced study in computer science.
Previous courses and electives
I've taught all of the following courses at some point at JMU. I may teach
some of them in the future, but do not have any current plans to do so.
- CS 280: Data Analysis in R
- CS 280: Front-end Web Development (now CS 343)
- CS 350: Computer Organization (retired)
- CS 450: Operating Systems
- CS 480: Embedded Systems
- CS 550: Operating Systems (graduate)
- CS 685: Embedded Systems (graduate)
- CS 652: Formal Methods in Information Security (graduate and online)
Faculty development
As part of my work with the JMU Center for Faculty Innovation (CFI),
I facilitated jmUDESIGN, an annual week-long course design institute. I served
as the lead facilitator for three years (2018 - 2020) and a small group
facilitator for five years before that (2013 - 2017). More information can be
found on my CFI page.
Other teaching experience
Prior to JMU, I taught at Purdue while completing my graduate work. At the
time, I was the first graduate student to teach a course independently in
the Purdue Computer Science department.
- CS 182: Foundations of Computer Science (Fall 2010)
- MA 152: College Algebra (Spring 2009)