John Greiner is a Lecturer in the Department of Computer Science at Rice University. He has taught all levels of computer science since 1997. In addition to a focus on introductory computer science, his highly diverse teaching experience has included algorithms, discrete math, theory of computation, computer systems, databases, and research presentation skills. This echoes his wide research background in programming language theory, algorithms, and parallel computation. John earned his BA from Rice with majors in Computer Science, Mathematical Sciences, and Linguistics. He then received MS and PhD degrees in Computer Science from Carnegie Mellon University.