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 O2 to O4 (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 graduatelevel class on network security.
Highlights
 Redesigned department's 'Introduction To Programming' sequence (3 quarters). First teacher of redesigned 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 intermediatelevel programs. Another goal is the teaching of modern programming techniques such as threads, and advancedlevel, 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' labtrack, introducing the students to IDEs, debuggers, unittest frameworks, etc., and
 A quarterlong teamprogramming 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 NPcompleteness is presented, along with current approaches to NPhard problems.
 Formal Analysis of Cryptographic Protocols (3 hours of instruction per week):
 Cryptographic protocols (such as keyexchange and mutualauthentication 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 protocolanalysis techniques and compare their strengths and weaknesses. Advanced topics include (as time permits) protocol design heuristics, trustmanagement and higherlevel protocol goals, interactions between protocols, computational soundness, and decidability results.
 Topics in Modern Cryptograph (3 hours of instruction per week)

Topics included:
 Complexitybased definitions of security and proof techniques,
 New forms of cryptography, such as Elliptic Curve cryptography,
 Efficient implementation techniques,
 Recentlydiscovered attacktechniques, such as timing and sidechannel attacks, and
 Possible futures: potential developments that could change the (cryptographic) world.