Teaching Contexts

Formally, I have taught courses at both North Carolina State University as well as Wayne Community College. This portfolio focuses on my teaching experiences at NC State. 

As a Teaching Assistant (TA) at North Carolina State University, I have lectured in a variety of graduate school and senior undergraduate classes within the Computer Science department. When I became a Research Assistant (RA), I continued my teaching through occasional guest lectures for faculty members in the department.

Object-Oriented Languages and Systems (CSC/ECE 517)

Taught: Fall 2010, Fall 2011
Course Size: Approximately 150
Course Setting: Large Lecture Hall, with simultaneous Distance Education component.

Course Description: 
Object-oriented languages and systems built with object-oriented software components. Object-oriented design methodologies, such as CRC cards and the Unified Modeling Language (UML). Requirement analysis. Design patterns. Agile methods. Object-oriented programming environments, such as the Eclipse platform. Platforms for Web services, such as J2EE. Project required.

This course is an elective for all graduate students in Computer Science. It is cross-listed with the Electrical and Computer Engineering department.

Fall 2010 Lectures:

Lecture 3: Refactoring and Version Control 75 minutes
Lecture 4: Introduction to Ruby 75 minutes
Lecture 6: Ruby in Eclipse 75 minutes
Lecture 8: Object-Relational Mapping 40 minutes
Lecture 10: Testing in Rails, Integration Testing 75 minutes
Lecture 17: Elegance and Inheritance I 75 minutes
Lecture 25: Patterns and Anti-Patterns 75 minutes

Fall 2011 Lectures:

Lecture 7: Unit Testing in Ruby75 minutes
Lecture 10: Rails Introduction, Testing in Rails75 minutes
Lecture 16: Elegance and Inheritance75 minutes

Formally, I was a Teaching Assistant for this course the first semester. In addition to developing the course programming project for the semester, I developed exam questions. I also lectured on a variety of topics in the course. The course topic was provided to me by the course instructor, but I was given wide latitude in the actual material that would be covered within that topic. The course instructor also provided me with recorded lectures from previous semesters to use as a guideline. Because of my extensive lecture responsibilities, grading was largely handled by other Teaching Assistants.

In my second semester, I was asked to return as a guest lecturer.

Architecture of Parallel Computers (CSC/ECE 506)

Taught: Spring 2011
Course Size: Approximately 30
Course Setting: Live Mediasite Classroom, with simultaneous Distance Education component.

Course Description:
The need for parallel and massively parallel computers. Taxonomy of parallel computer architecture, and programming models for parallel architectures. Example parallel algorithms. Shared-memory vs. distributed-memory architectures. Correctness and performance issues. Cache coherence and memory consistency. Bus-based and scalable directory-based multiprocessors. Interconnection-network topologies and switch design. Brief overview of advanced topics such as multiprocessor prefetching and speculative parallel execution.

This course can be used to satisfy the Systems requirement for Computer Science graduate students. This course is cross-listed with the Electrical and Computer Engineering department.


 Lecture 10: Memory Systems and Cache Design  75 minutes

I was formally a Mentored Teaching Assistant for this course. My primary responsibilities included grading, answering student questions, and developing assignments and projects for the course. Opportunities for lecturing in this course were limited to occasions where the instructor was not available. The course instructor reviewed the assignments and projects before releasing them to the students, but the assignment contents were left to my discretion.

Software Engineering as a Human Activity (CSC 791)

Taught: Spring 2011
Course Size: Approximately 25
Course Setting: Seminar / Conference

Course Description:
This course introduces students to software engineering by studying the people who practice it. Students will explore both software engineering as traditionally defined, but also disciplines that transform how we understand software engineering such as psychology and sociology. Students will study the usability of software engineering tools, the psychology of programming, performance of software developers, experimental methods in observing software engineers, developing software collaboratively, distributed development and coordination, and cultural differences between software developers.

This course is an elective, special topic. It is available to graduate students in Computer Science and requires the student to have taken an previous course in Software Engineering.


Lecture 3/10/2011: On the Difficulty of Replicating Human Subjects Studies 75 minutes
Lecture 3/16/2011: Substantiating Programmer Variability 75 minutes

As a seminar course, I was responsible for presenting content from research papers in a discussion-based environment. Other than being assigned the papers to present for the seminar, no further faculty involvement was present. For the second lecture, I fully utilized the "course flipping" model by requiring students to read the material before hand, and doing all activities and assignments in class.

Computer Game Design and Development (CSC 481)

Taught: Fall 2011
Course Size: Approximately 50
Course Setting: Traditional Class Room

Course Description:
An introduction to the technologies and practices underlying computer and console game development and the principles involved in effective game design and production. Topics include computer game graphics, sound and audio, level design, principlesof gameplay, interactive storytelling, character control and artificial intelligence, user interface design. Programming project required.

This course is a senior-level course offered to undergraduate students in Computer Science. It is an elective for most students, and a requirement for Computer Science students with a Games concentration.


Lecture 12/30/2011: Game Theory and Artificial Intelligence 75 minutes

I was a guest lecturer for this course, because the faculty member had other obligations this day. I was allowed to select both the topic and content for the lecture, as long as it was tangentially related to game design and development. The only request by the faculty member was that I submit an exam question related to my topic to ensure that students attended my lecture.