These skills are hard to teach, but not unrealistically so. My philosophy on graduate courses is similar. The central lessons to impart in class concern good problem-solving techniques, rather than specific programming languages or computational techniques in isolation. Course projects are therefore important in most class structures. I also believe that it is valuable for the graduate student to stay abreast of the current literature in relevant areas.
Selected papers are thus integral to augment standard textbook presentations.
Finally, group discussion of issues and problems can be as valuable as any lecture. For a comprehensive graduate education, a student must be able to creatively and critically examine open problems, and most importantly, be able to pose novel problems that have a significant bearing on computational issues. I regard the encouragement and development of this particular skill as the primary role of both the graduate advisor and the undergraduate computer science instructor. This interdisciplinary graduate research-seminar examines theories of categorization grom the literatures of both machine learning and experimental psychology. Interestingly, a number of models attempt to combine both data-driven and theory driven approaches.