I find it really strange that my favorite course to teach just happens to be the course that I hated the most when I had to take it - computational theory. I thought that I would love to teach my favorite subject during my undergraduate and graduate studies. I am not sure why I have had such a change of heart. All I can do is be grateful that I have a job that has allowed me to teach such a variety of areas. I have basically taught every course in the undergraduate degree except computer organization and the very beginning programming course in a year and a half. (Which, by the way, is a very good method for studying for a qualification exam.) It also excludes courses that are covered by the Information Systems and Technology degrees like networking and databases, and senior level electives.

Computer Theory
Computer Theory by Daniel Cowen.

Some of them I feel like I did really well, and others did not go well at all. However, through all of it, computational theory became my favorite course. I know it was not because it was the easiest for me to teach. In fact, it was the hardest. I had to spend hours reading the book and working out proofs and homework problems for each lecture. What was the reason for the switch? I am not sure, but any of the following could have contributed:

I did not like the teacher who taught me the subject. He was boring, and it was obvious that he didn’t really want to be teaching this course. His approach to help was saying, “Yeah, that is a hard question. It took me a couple of hours myself. Good Luck.”

I couldn’t see the big picture while I was taking the course. I didn’t like the fact that there weren’t any programming projects. I couldn’t see why this theory fit in with computer programming. After finishing my degree and working on graduate degrees, I can see how theory fits into the full scheme of Computer Science.

I have figured out that I liked Computer Science (or programming as I thought of it back then) because of the problem solving, not the programming. In the theory class, it tends to be pure problem solving, no typing required. Just a lot of thinking and problem-solving.

I learned to appreciate the history of my field, and respect the people who pioneered it. This appreciation has led me to study their work.

Anyway, from my experience taking this course, I found that I really needed to catch my student’s interest in this course. The first time I taught it, I started to hear the same complaints I had when I took it. I found myself defending the course. The best explanation I was able to come up with was that companies don’t want mindless programmers. They want people who are problem solvers. Anyone can learn how to program. It’s the people who can solve difficult problems with efficient and elegant solutions that really have worth to a company. If you do that for the companies you work for, you will see your demand raise, and with it your salary and job security. Computational theory develops problem-solving skills.

Does anyone have a better explanation on why take computational theory? How do you motivate your students?