Teaching

Summary

I served two years as Associate Professor at the Naval Postgraduate School (NPS) before I unfortunately needed to relocate for family reasons. The typical NPS student: a Naval or Marine Corps officer of rank O-2 to O-4 (Lieutenant Junior Grade to Lieutenant Commander, First Lieutenant to Major) with no background in Computer Science (and often no technical background of any kind). Typical class size: 6 to 30 students. Typical class content: either a typical undergraduate class (squeezed from a semester into a quarter) or an advanced graduate-level class on network security.

Highlights

  • Redesigned department's 'Introduction To Programming' sequence (3 quarters). First teacher of re-designed second and third quarters.
  • In first (and only) year eligible: Honorable Mention, Rear Admiral Schieffelin Award (i.e., rated among top 5% of faculty for teaching)

Selected Courses

Introduction to Data Structures and Intermediate Programming (6 hours of instruction per week)
This is the second course in the programming practice sequence. One of the main goals of this course is the teaching of data structures so the students will be able develop intermediate-level programs. Another goal is the teaching of modern programming techniques such as threads, and advanced-level, object- oriented, programming concepts such as inheritance and polymorphism. Topics covered include recursion, file input and output, sorting and searching, threads, stacks and queues, lists, binary search trees, balanced binary search trees, and hashing.
Programming Paradigms (6 hours of instruction per week)

This is the third course in the programming practice sequence. Based on the knowledge of Java, this course introduces students to other programming paradigms. Many concepts are illustrated using C++ and ADA. Functional programming using Lisp and Haskell and logic programming using Prolog are also introduced in the course.)

As I taught it, the course had three separate 'tracks':

  • The 'programming languages' track described above,
  • A 'tools of the trade' lab-track, introducing the students to IDEs, debuggers, unit-test frameworks, etc., and
  • A quarter-long team-programming with intermediate deliverable, involving GUI design/implementation and networking.
Design and Analysis of Algorithms (4 hours of instruction per week)
This course focuses on the design and analysis of efficient algorithms. Techniques for analyzing algorithms in order to measure their efficiency are presented. Control structure abstractions, such as divide and conquer, greedy, dynamic programming, backtrack (branch and bound), and local search methods are studied. The theory of NP-completeness is presented, along with current approaches to NP-hard problems.
Formal Analysis of Cryptographic Protocols (3 hours of instruction per week):
Cryptographic protocols (such as key-exchange and mutual-authentication protocols) are essential to the security of all distributed computer networks. Such protocols are often simple, but they also often fall to "structural" attacks (attacks that do not need to break the underlying cryptography). This course considers the "protocol analysis problem": finding structural attacks against a protocol (if they exist) or proving their absence (if they do not). We will examine several protocol-analysis techniques and compare their strengths and weaknesses. Advanced topics include (as time permits) protocol- design heuristics, trust-management and higher-level protocol goals, interactions between protocols, computational soundness, and decidability results.
Topics in Modern Cryptograph (3 hours of instruction per week)

Topics included:

  • Complexity-based definitions of security and proof techniques,
  • New forms of cryptography, such as Elliptic Curve cryptography,
  • Efficient implementation techniques,
  • Recently-discovered attack-techniques, such as timing- and side-channel attacks, and
  • Possible futures: potential developments that could change the (cryptographic) world.