Although I hold a Ph.D. (Waterloo, 2002) and a M.Math (Waterloo, 1997) in computer science, I prefer topics that are more human-centered than technology-based. I’ve enjoyed doing research in several areas, including software engineering, program comprehension, human-computer interaction, human sexuality, evolutionary psychology, popular culture, technical education, and sex/gender issues within these areas. I consider myself to be a highly multi-disciplinary researcher. I have been programming since the late 1970s, when I first got paid for programming in BASIC on a Radio Shack TRS 80. I have used about 50 different programming languages from several paradigms in my career, including Scheme and ML (functional), Prolog (logic), AWK and SNOBOL (text manipulation), C++ and Smalltalk (object oriented), and of course, C (the only language that really matters). In general, the more primitive (i.e., low-level) a language is, the more I tend to like it.

I have taught at the Universities of Waterloo, Toronto, Ryerson, Dalhousie, and Saint Mary’s. My undergraduate was completed at Ryerson and my graduate studies at Waterloo. I have taught well over a dozen different computer science and mathematical subjects, from first year to graduate level, through-out my academic career. A partial listing includes:


  • Pre-Calculus
  • Calculus I

Computer Science

  • Website Design and Implementation
  • Introduction to Computing
  • Introductory Programming in Java
  • Software Development in C and Unix
  • Computer Organisation and Architecture
  • Assembly Language Programming
  • Data Structures
  • Software Engineering
  • Database Systems and Data Management
  • Operating Systems
  • Networking and Data Communications
  • Game Development (Design and Programming)
  • Human Computer Interaction
  • Compiler Construction
  • Code Optimisation for Compilers
  • Principles of Programming Languages (Graduate Level)
  • Topics in Program Comprehension (Graduate Level)