Teaching

From Craig

Table of contents

How it all started

I'm often asked the question, "How did you get into teaching?". When I was growing up, I never thought about teaching. Actually, I thought about going into Law, but in retrospect, I'm glad I didn't enter that profession.

It all started back in 1987, when I was taking a 2nd year course in Computer Science at the University of Calgary. The TA for this course was so unbelievably awful, I cannot not begin to describe the depths to which his talents aspired. In a meeting with the Professor for the course (Trevor Lukey) I said, "the TA is so awful EVEN I could do a better job". His response was, "why don't you try?".

(Note: many thanks to Trevor Lukey. An excellent Professor and genuine fellow)

When I entered 3rd year, I applied to be a TA. I was turned down for the Fall semester because they had enough TAs (and quite honestly, I don't think they wanted a 3rd year student TAing courses; that was generally reserved for grad students and 4th year students). During that time, however, I started working in David Hill's lab as a research assistant. David was Teaching CPSC 357 (System software) which was one of my best 2nd year courses. With his blessing, the department allowed me to be one of his TAs for the course.

I have to say, in that first semester, my teaching skills were pretty rough. I always set high standards for myself, and even though I received high evaluation marks, I knew that I would have to continue to work hard to attain what I considered to be an acceptable standard.

Why do I teach?

The second most often question I am asked is, "Why do I teach?". This question has many answers:

  • I love it. First and foremost, this is it!
  • I learn as much as my students do. When I TA'd my first course, I picked up all of those bits of information I had missed when I took the course as a student. Students ask those questions that I, too, should have asked. In essence, I get to share and benefit in not only my own learning experiences, but those of my students as well.
  • It is important to be thankful for what you have. I owe an eternal debt to all of the teachers who have had a hand in shaping who I am today. By teaching what I know and sharing my experiences, I am giving back (in a small way) to that which I have drawn so much.
  • I am an idiot. As an idiot, I make mistakes; a lot of them! And after a time, I work through them and produce something of real value. Why am I the only one who should benefit from my own god-given idiocy? This must be shared with the world.
  • I may not rule the world, but at least I can change the world. Unfortunately, I think that the computer industry is in dire straits. Statistics show that over 75% of software projects fail. Part of the problem is that good people are very difficult to find. It seems to me that Students are being given training rather than education. Training is important, but it should not take the place of education. Rather than sit about and complain about it, I am in a position to do something about it.

Ever since I realized the importance of teaching, I have strived to keep a balance between teaching and doing.

Student Stats

Unfortunately, I have not kept records of all the teaching that I have done. In my early days of teaching in industry, I regarded teaching as a way of paying the bills between programming gigs so I didn't think that long terms records were important to keep. As a result, I am only able to provide estimates of the number of students I have taught since 1988.

From 1994-2002, I taught an average of 30 courses/year (26 weeks/year). The average class size is between 7 and 12 students. OOST class sizes are typically between 25 and 30. University classes were between 15 an 75 students.

Since 1988, I have instructed somwhere between 2500 - 3000 students. I am always running into my former students (at the grocery store, on the train, and sometimes in the strangest places: "Hey, what are YOU doing in THIS city? Shouldn't you be in ___") and I am always delighted to chat with them. If you recognise me, please do not hesitate to say hi!

Update for 2003-2004:

For the semesters F03, W04 and S04, I had a total of 690 students spread over CPSC 203, CPSC457, SENG411, CPSC601.01.

Update for 2004-2005:

For the semsters F04, W05 and S05, I had a total of 341 spread over CPSC 501, CPSC 457, and CPSC 233.

Course List

The following is the list of courses that I have taught since 1987. I have taught all of the industry and OOST courses multiple times (except as noted).

Teaching Assistant at U of C (1988-1992)

  • System Software (CPSC 357)
  • Digital Circuits (CPSC 421)
  • Senior Group Project (CPSC 550)

Instructor: University of Calgary (2003-present)

  • Computer Science for Non Computer Science Majors (CPSC 203 (http://www.ucalgary.ca/pubs/calendar/current/What/Courses/CPSC.htm#203))
  • Introduction to Computer Science II (CPSC 233 (http://www.ucalgary.ca/pubs/calendar/current/What/Courses/CPSC.htm#233))
  • Principles of Software Engineering (SENG 311 (http://www.ucalgary.ca/pubs/calendar/current/What/Courses/SENG.htm#311))
  • Human and Organizational Aspects in Software Engineering (SENG 411 (http://www.ucalgary.ca/pubs/calendar/current/What/Courses/SENG.htm#411))
  • Principles of Operating Systems (CPSC 457 (http://www.ucalgary.ca/pubs/calendar/current/What/Courses/CPSC.htm#457))
  • Advanced Programming Techniques (CPSC 501 (http://www.ucalgary.ca/pubs/calendar/current/What/Courses/CPSC.htm#501))
  • Software Engineering Project (CPSC 594 (http://www.ucalgary.ca/pubs/calendar/current/What/Courses/CPSC.htm#594))
  • Principles of Speech Synthesis(CPSC 601.01 (http://www.ucalgary.ca/pubs/calendar/current/What/Courses/CPSC.htm#601))

Supervisory Courses

  • CPSC 503
  • ENSF 599
  • ENSF 591


OOST (1998, 2001-present)

  • Object Oriented Analysis and Design Using UML (10 Day Course)
  • Programming Internet/Intranet Applications and Distributed Computing (14 Day Course)
    • The most grueling course I have ever taught! Those poor students!
  • Effective Coding and Software Testing Techniques (5 Day Course)
  • Java Programming (21 Day Course)

Industry Courses (1993-present)

Unix

  • Introduction to Unix (3 Day Course)
  • Unix System Administration (3 Day Course)
  • Shell Script programming (3 Day Course)
  • Unix System programming in C (5 Day Course)
  • Introduction to Linux (1 Day Seminar)
  • Linux System Administration (5 Day Course)

Object Oriented Analysis and Design

  • Object Oriented Analysis and Design Using UML (5 Day Course)
    • One of my favorite courses. I've lost count of the number of times I've delivered it.
  • Object Oriented Analysis and Design Using OMT (5 Day Course)
  • Introduction to Rumbaugh's OMT (3 Day Course)
  • Object Oriented Design For Java (5 Day Course)
  • Design Patterns (2 Day Course)
  • Object Oriented Primer (1 Day Course)
  • Object Oriented Project Management (2 Day Course)

Java

  • Java Primer (1 Day Course)
  • Java for Non-C Programmers (5 Day Course)
  • Java for C Programmers (4 Day Course)
  • Introduction to Java and OO Programming (5 Day Course) Continuing Ed Faculty
  • Intermediate Java and OO Programming (5 Day Course) Continuing Ed Faculty (Fall 2002)
  • Advanced Java (5 Day Course)
  • Enterprise Programming with Java (5 Day Course)

C and C++

  • C Programming Primer (1 Day Course)
  • C Programming (5 Day Course)
    • Love this course. Have taught it so often, I could do so in my sleep.
  • C++ Programming (5 Day Course)
  • Advanced C++ Programming (5 Day Course)
  • Windows Programming In C (5 Day Course)
    • Only taught this course once. Never wish to do so again.

Misc.

  • Smalltalk Programming (5 Day Course)
    • If I ruled the world, everyone would have to take this course
  • User Interface Design (2 Day Course)
    • I think this course material is very important. I wish more people took this course
  • Internetworking with TCP/IP (4 Day Course)
    • One of my favorite courses
  • Introduction to Data Communications (3 Day Course)
  • Building an Effective Web Site (4 Day Course)
  • Client Server Programming (3 Day Course)
  • Introduction to Client Server Systems (1 Day Course)
  • SQL Programming and Relational Databases (2 Day Course)
  • Visual Basic Primer (1 Day Course)
    • I'm embarassed to post the VB Courses
  • Application development with Visual Basic 4.0 (4 Day Course)
  • Large Application development with Visual Basic 4.0 (4 Day Course)