In theory, theory and practice are the same. In practice, they are not.
I have been programming and working with computers since the 1970's, and my path has brought me full-circle, from practice to theory and back to practice again. I started out loving the creativity of programming and the ability to create systems that did what I designed them to do. When I went to college and started studying computer science, I discovered that there are some deep and non-obvious aspects to computing, and those captured my attention – after all, just programming is easy, right? Through graduate school and into my career in academia, I was largely a theoretical computer scientist, looking at the underlying logic and issues that affect how computing works, proving theorems more and more, and writing programs less and less. I worked a lot in the mathematics of cryptography, proposing and proving properties about mathematical functions that could do very cool and esoteric things. In the back of my mind, I wanted these inventions to have practical impact, but I was too busy doing cool math to worry too much about that — surely someone else would do the "easy" job of programming, right?
Recently, however, some of the big and very visible failures in security software have brought me back to programming – no, programming is not easy, particularly when creating the kind of highly complex software that we depend on to keep us secure and protect our privacy. Since 2015, I have been on a mission to make software, and security software in particular, better. I teach students at all levels how to reason about the correctness and quality of their code (and sometimes make them frustrated because I love to find ways to make their programs misbehave). In my research, I look for new automated techniques for both finding bugs in code and for producing high-assurance software. Whether you are a student just starting out, an advanced student looking for research projects, or an established researcher looking for collaboration, I invite you to join me on this mission. Let's make software more secure!
Like almost all university faculty, my work is categorized into the three standard faculty duties: teaching, research, and service. More about each is below.
I have created and taught many classes at both the undergraduate and graduate levels, including a 100-level CS Principles class, data structures and algorithms classes, and various cryptography and security classes. I also regularly offer special topics classes in cutting-edge areas of interest, and in the past have offered topics classes in software security, trusted computing, and algorithmic problem solving.
Class for Fall 2023
I've been doing research in computer science for over 30 years, and I have done work in a wide range of areas, including complexity theory, algorithms, data compression, computer security, and cryptography. Currently I work on ways to make security and cryptographic software more reliable, robust, and secure.
I'm a true believer in higher education – it's not just a job for me, but a calling to make universities the strongest possible centers of knowledge and discovery. Universities improve the world, on a large scale through the discoveries we make, and on an individual scale through the students who we help grow. I served as Department Head for UNCG's Department of Computer Science from its founding in 2007 until 2019, where I led the department from its creation to one of the most in-demand and thriving departments at UNCG, serving around 500 computer science majors. We have had remarkable successes as a department, and this has been a rewarding chapter in my career. I am now returning to spending more time focused on computer science research and student development, and am always looking for ways to make the university stronger.