Like Barry said Ph.D. students require only about 7 mandatory courses and I took 10 and this semester and next are pure ly research semesters. However, I have taken some really interesting courses in the past. Two of them that are on top of my list are CSC505 - algorithms and CSC 707- theory of computation. First up, I had great teachers for both classes (I took it under Dr.Heber and Dr.Samatova, respectively) and that's immediately half the battle won :).
CSC 707 was one course I was fairly petrified about - I've taken an undergraduate course in the same stream and while I did well in the class I remember the hours I spent unraveling the subject. I was pleasantly surprised to find that the class was not only interesting but it was also intuitive. Nagiza typically teaches the NP portion of the course first and relates that section to real world problems. This immediately puts one in a comfort zone. This is because the problems are things we encounter in our day to day life (Traveling salesman...Clique enumeration). She uses a similar strategy for other sections of the course as well. The class was at 9:35 AM (underline) when I took it but I made sure I always got to class on time :). If I had to convince a friend, I would tell him/her two things. (1) The foundations one learns in this class goes a long way. It feels abstract initially but once one gets the hang of it, it is easy to map to practical applications and understand the usage of all the theory . (2) It was honestly a fun class (theory and fun?? I assure you it was :)). The homework would drive me crazy but when I solved a problem and got my Aha! moment, it was super satisfying :).