Teaching Interests

My primary teaching interests are computer systems and societal & ethical issues in computing. I also regularly teach data structures and helped to create a new course in front-end web development.

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)


James Madison University logo


© 2011-2024 Michael S. Kirkpatrick.
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.