Teaching Portfolio

 

Liu Wenyin, PhD

Assistant Professor

Dept of Computer Science

City University of Hong Kong

Tel: (852) 2784 4730, Fax: (852) 2788 8614

Email: csliuwy@cityu.edu.hk

WWW: http://www.cs.cityu.edu.hk/~liuwy/

 

My Teaching Philosophy

 

I like the job as a teacher and would like to choose it as my future career since I believe I can share with my students my knowledge and thinking and in the meantime I can also learn a lot from my students. I also feel strongly responsible for helping students obtain what they need. Especially, I think teaching students how to learn is the highest priority thing in teaching since students with strong learning ability can learn whatever they want/need to learn. In this sense, in addition to teaching students the content, I also try my best to teach them the ways of learning, in my courses, e.g., by doing real-life projects, not just toy simulations.

 

I view teaching as a two-way mutual interaction from which teachers and students exchange what they have in mind. Since we are in a rapidly developing information society, teachers can benefit from the diversity background of students. In addition, the students’ feedback can enhance teachers’ knowledge and delivery skills, as well. In this two-way interaction, both parties have duties to each other. The teachers are responsible to provide the necessary knowledge and an effective way/environment that can motivate and facilitate learning. The students should be responsible to support teachers for effective teaching, including preparing for classes and working hard for course work. In addition, I also stimulate students to ask and answer questions among them after school using a Web-based system. By doing so, they can really practice and strength what they have learnt in the classes, and even out of the classes.  

 

In the past years, the courses I have taught are mainly practice courses. Hence, many problems with real-life background, high overload projects are used in my courses. However, some students do no like the high overload of the course work and sometimes my TFQ scores are affected. Anyway, I still encourage them to commit enough time to the courses and try my best to motivate them by designing the projects with real and interesting background. In addition, I try my best to provide the students with prompt and sufficient help by allowing students to drop by my office at any time and appointing sufficient RAs and TAs for student consultation. This is usually appreciated by the students. Though my main job responsibility is research, I am willing to spend many hours in supervising course projects/exercises just like supervising research students. I am nice and patient to students’ errors/mistakes and wish them to learn from mistakes.

 

In my teaching experience, I also advocate and devote myself for creativity in both teaching materials and teaching methods. Each time I accept a teaching assignment, I carefully examine the current syllabus and the state-of-the-art of involved knowledge and then propose necessary reform of the course by updating teaching materials and teaching format. This is because the subject I am teaching (computer science) is a rapidly developing area. I believe that I should be responsible for keeping students with the leading-edge technologies. I also try my best to use advanced technologies, e.g., Flash animations and real software demos in the class, to enable students to acquire knowledge in an enjoyable way.


My Professional Experiences and Current Teaching Responsibilities

 

1992-1994:        TA and Lecturer, Dept of CS, Tsinghua University, Beijing

 

In addition to research work, I taught “Programming in C”.          This was my first time teaching a full course and I made full preparation though I have rich experience in programming. It is a practice course and students needed to do lots of exercises/projects in order to understand and grasp the C language and programming. In lectures, I used many positive and negative examples to illustrate the principles. Students were excited for this course since they could create some interesting software programs but also felt frustrated since it usually took many hours for them to fix all errors in order to make the programs executable. Hence, during the lab sessions, I was nice and patient to help them debug and fix the same errors again and again, and used the errors they made to explain again the principles. The students were happy with my kind attitudes and the way of teaching.

 

1998:                Lecturer, Dept of CS, Tsinghua University, Beijing, China

 

In addition to research work, I taught the course “Reading and Writing of Computer Science Papers in English”. This is my first course that I taught after I obtained my PhD degree. The course had been mainly given in Chinese and the textbook was somewhat old and fixed in the past years. After careful consideration, I did some reform. Firstly, I use English to deliver the lectures. Secondly, I select some recent computer science articles on hot topics from well-known journals and magazines as the reading materials. In this way, they can learn some advanced CS knowledge while train their reading in English. Thirdly, I also taught them how to write a scholarly CS paper in English, by mainly focusing on the paper organization, the abstract and the introduction. Fourthly, I asked them to translate some well-known articles into Chinese as a part of comprehension training. Fifthly, I encouraged the students to take part in the improvement of this course by giving bonus to them if they can propose interesting articles and help find and correct errors in the lecture notes. It is also a practice course. Through the lectures and practices (exercises), students can learn both English and professional and technical knowledge in the same time. The students liked this course and frequently made the classroom almost full.

 

1999-2001:        Researcher, Microsoft Research China/Asia, Beijing

 

My main job responsibility was research. However, I also had opportunities to supervise more than 10 visiting research students. The research outcomes of these students are abundant. Usually a student can produce at least one paper within a three-month period.

 

2002-:               Assistant Professor, Dept of CS, City University of Hong Kong

 

In addition to research work (and supervising research students), I had taught the courses “Computer Programming for Engineers and Scientists (CS2362)” for program BEIE, “Software Engineering (CS6301)” for MSC, “Software Engineering I (CS5351)” for MSC, “Software Design (CS3342)” for BSCCS, and “Software Engineering Practice (CS3343)” for BSCCS. I have been focusing on teaching the later two in a series for 3.5 years. I will examine them individually in the next section.

 

Now I am teaching Software Engineering I (CS5351) this semester. Based on my previous teaching experiences and the feedback of the students, I am trying to reduce some scope of the lecture content and the students’ work load. I am also trying to speak slowly and explain more times for some important principles with more real-life examples. I plan to frequently revise the lecture content during the semester and give them more quizzes to let them know how their learning results are.


Implementation of Teaching and Achievement

 

I have been teaching several courses related to Software Engineering (SE) in the last 6 years, including the theory and principles of SE (CS3342) and the other is about practices of SE (CS3343), SE I for MSC (CS5351). In these years, I have made some reform to these courses. In CS3343, some theories and principles learnt in CS3342 are briefly mentioned again but more practical approaches are presented and applied to real projects with team efforts.

 

CS3342--Software Design

This course is a required course for CS undergraduate students and selective for other program students, e.g., Business Administration. It aims to introduce the principles and practice of a structured methodology in software engineering. The course begins with the software development process and paradigms and covers all main topics of software engineering: requirements, analysis, design, testing and maintenance. In particular, structured methodology is focused, including, data flow diagrams, structure charts, transform analysis, and transaction analysis, data dictionaries before 2004. In 2004, I have substantially revised the course syllabus to include Object-Oriented Analysis and Design (OOAD), UML Diagrams, and user interface design issues.

The course is offered in the first semester of the second year of CS undergraduate students, who should have some background of computer programming. The class size is usually about 80-120. It involves a 2-hr lecture session for all and a 1-hr tutorial session for each group (there are 4-5 groups for this course) per week. Assessment consists of 30% course work and 70% final examination marks.

The course is a bit hard to teach since most of the principles are empirical but the students without experience cannot imagine the real situation. In addition, this subject is still in rapid development (not so mature) and is probably the most controversial subject in computer science. New methodologies, principles, and practices are constantly developed in this area. Hence, I spend lot of time in preparation in order to provide the leading edge knowledge in this area. I also use my software development experiences (esp. with Microsoft and development of my research prototype systems) and lots of examples (both positive and negative) to illustrate them in the lectures and work with them together on some real projects in the tutorials. Small group projects are also used as homework and I open many hours for consultation. This can help them get familiar with the problems better and get more confident to apply the principles and approaches.

CS3343--Software Engineering Practice

This course is mainly a required course for CS undergraduate students. It aims to provide an opportunity for students, in groups and with real role-playing, to practise software engineering principles and techniques, through the development of a software system that meets stated requirements and quality standards. The course covers best practices (well-known and effective approaches) commonly used in the software industry and request students to fulfill large software development projects in teams. After I taken over this course in 2003, I have substantially revised the course syllabus to include many more best practices in the software industry. Currently, syllabus includes the following:

1.       Management of software engineering process (project planning/scheduling; iterative development; team organization; configuration management; documentation; controls & audits, Change Board)

2.       Requirement elicitation and specification (modelling; Joint Application Development (JAD); Minimal Requirements; Requirements Scrubbing; Prototyping, technical reviews)

3.       Design (architecture; I/O; UI; database; Designing for Change; CASE tools)

4.       Implementation/construction (integrated SE environments; coding styles & standards; code reviews; system changeover; Daily Build and Smoke Test;  CASE tools)

5.       Testing (test case design; unit/integration test; QA; metrics)

6.       Social responsibilities of software engineers (professionalism; social and ethical issues; legal aspects;  risks and liabilities)

Upon completion of this course the students should be able to:

  1. properly apply the principles and techniques of requirements specification and analysis, software design, implementation, testing, delivery, and maintenance;
  2. prepare and present technical documentation in a clear and concise manner;
  3. work effectively in a team environment;
  4. recognize the significance of social, ethical and professional issues in software engineering.

The course is given in the second semester of the second year of CS undergraduate students, who should have taken CS3342. The class size is usually about 80-120. It involves a 1-hr lecture session for all, a 1-hr tutorial session and a 1-hr consultation session for each group (there are 4 or 5 groups for this course) per week. The course focuses on training the students’ practical capability of software development. Hence, the assessment focuses more on course work (projects), which occupies 50%. The final exam occupies another half.

In this course, I had tried my best to let the students practise software development in an environment which is very close to a common software company by asking them to play real roles in large teams and solving real-world problems. My own software development experiences (esp. with Microsoft and the development of my own research prototype systems) have helped me a lot in designing the course. I hope the course can provide the students with rich experiences before they are employed for a real software development job.

 

I design some projects which have practical background and are suitable for our CS students. The deliverables of projects should be useful and should be easily commercialized or released as shareware/freeware. In the projects, I ask the students to form project teams that are similar to the basic units in common software companies, which can be as small as those consisting of 2 or 3 members and can also be as big as containing 20 or more members. This is because that software is becoming more and more complex and can only be completed by teams of software engineers. The members in such teams should have real roles to play (with periodical role-switching if possible). E.g., each team has the roles like Program Manager (PM), Software Design Engineer (SDE) lead, SDEs, Software Test Engineer (STE) leads, and STEs. Moreover, Pair Programming is also recommended. In small teams, each member has to do more things which belong to more roles. The disadvantage is that his/her workload may be too much and cannot do them very well. On the contrary, in larger teams, a member can focus on a specific job/task for the specific role and get well trained for it. In the same time, he can also observe how other members are doing other jobs/tasks for other roles. In this case, he can also know something about other roles. Working in such groups, the students can also train their team-work capabilities. In summary, since current software development needs team efforts, I strongly suggest that software engineers should be trained in real industry environments (e.g., large teams) by real role-playing.

 

In order to let the students play their roles well, I also design the teaching the materials such that those really useful, best industrial practices are introduced for them to practise. These best practices include those well-proved approaches to the step-by-step tasks in the software processes, including Joint Application Development (JAD) for requirement gathering and UI prototyping; Requirements Scrubbing for requirement specification; Designing for Change for the design stage; Code Review for inspection; Daily Build and Smoke Test for system construction/integration; Change Board for maintenance; etc. A set of criteria are also developed for assessment of the students’ performance of implementing these practices. Feedbacks on the materials, practices, team management, and project pace are collected frequently and timely from the students such that I can improve the course materials and make them more suitable for the students in the future.

 

In addition to preparation of the lecture content, this course requires a lot of efforts for project supervision/consultation. In order to let the student practise the best practices earlier and simultaneously, more time is spent on presenting the lecture materials in the first half of the semester. The tutorial session and the consultation session are combined together such that project meetings can be arranged effectively and immediately after some approaches are practiced in the tutorial session. In addition to my supervision time, I also ask the students to drop by my office at any time if they need. I also appointed several experienced RAs and TAs to attend the project meetings, to answer questions, to provide solutions to tough problems, especially those related to new development tools and methods.  

 

Each group should submit project documents periodically during the process. I designed some document templates which are following industry standards but especially suitable for these projects and the students’ background. Each project should also do oral presentations based on these documents frequently, including CASE experiences and final presentations. Assessment is based on these documents and oral presentations.

 

In general, after taking this course, most students are familiar with the best practices in the software industry. Many students like this course and the involved projects. They felt the projects were challenging, painful, but also interesting, and the best practices (e.g., Pair Programming, JAD, code review, testing tools) introduced in the course are very useful. They said they have learnt a lot of skills, both technical and non-technical. Many students have written in their personal reports about their feelings that the project arrangement (real role-playing and team work) and the best practices introduced in the lectures have made them well-prepared for the real jobs as software engineers. For instances, in the 2003 course, an STE said “I think it is a good and impressed experience doing the system and I worked with my partner very happy”. A PM said “At this moment the project for software engineering practice course is over, but this also is the start to practice what we have learnt in this semester to my career life. I am proud to say that our group, T05, has done a great deal to apply the best practices that are told in lectures practically – NEO.” In the 2004 course, for example, a Dev Lead said in his personal report that “the project topic and the work style are perfect. Students can learn many useful skills from this project.” An STE said “I would like to share something about code review. Although we have leant it in the lecture, we never have the chance to apply it. After this tutorial session, I realize the importance of code review. And I applied what I have learnt in writing other assignments (programs) of other subjects. All those technique and experience help me a lot in designing or developing software/programs.

 

They also encountered many real problems in performing this project but also had the chance to overcome them. For example, a Test Lead said “I have understood that working in a large team may make quite a lot of conflicts, so communication and cooperation are very important to prevent some argues which could actually be avoided. Being a testing team leader, I understand that I need to give more effort in order to help the team members in case they have found some problems”. An STE said, “this course improved my communication and programming and testing skills very much. And I also gain many experience in working with others. It is a good experience for me in working”.

 

In summary, a Dev Lead said “I think I have at least some interesting experience that I can share with the interviewer and probably my future boss.”

 

The students also formally commended me for my outstanding teaching in the meeting of the Joint Student Staff Consultation Committee (JSSCC) of Department of Computer Science, BSc (Hons) CS Programme, City University of Hong Kong, 16 March, 2004.

 

Prof. Deng Xiaotie, Associate Head of Department of Computer Science had sit in my class once and commented that the materials are very practical and he would be happy to take such a course. He also praised my overall presentation skills.

 

However, in 2006, I was shocked by my much lower TFQ than before, which was out of my expectation. Actually, I was hoping the TFQ should be higher than before since I felt I was more experienced in handling this course. Anyway, in teaching a new source, I am planning to do some change based on my own experience and the feedback from the students. For examples, I am trying to slow down my lecturing pace and reduce the students’ work load. I am now speaking slowly and explaining more times for some important principles with more real-life examples. I have frequently revised the lecture content during the semester and given the students more quizzes to let them know how their learning results are. I hope these changes are more suitable to their background.

 

Anyway, in 2007, my TFQ was bounced back to 5.39 which could be improved further. I am still trying my best to meet the student’s needs.


Professional Development in Teaching

I have been trying my best to improve my teaching by attending related training courses and tutorials, including the following:

  1. “Effective Presentation”, by DANJACO Consulting and Training Co. Ltd, Beijing, September 2000. During the one-day workshop, I have learnt several important ways to improve presentation: well preparation (including content, audience and environment), eye-contact, interaction, etc., which have been effective used in my current presentations.
  2. “Teaching Enhancement Course (Foundation)”, Education Development Office, City University of Hong Kong, the autumn semester, 2003. In this series of workshops, I have encountered many new concepts in teaching, including problem-based learning (PBL), active learning, etc. I am now applying these in my courses. I have fulfilled both the attendance and project requirements of the Teaching Enhancement Course and been awarded the Teaching Enhancement Certificate.
  3. The 3rd International Conference on Web-based Learning, Tsinghua University, Beijing, August 2004, and the associated tutorial on Instructional Design for Learning Objects, given by Dr. Sue Legg. I have learnt some issues on how to design learning objects in this tutorial.

 

In addition, I also try continuously to improve my classes by examining my teaching effectiveness, sitting in my colleagues’ classes, and learning advances in related areas. In the future, I will continue to attend related workshops to learn more teaching related methods.

 

Appendices

 

  1. Teaching Enhancement Certificate issued by the Education Development Office, City University of Hong Kong, 2004.

 

  1. Meeting minutes of Joint Student Staff Consultation Committee (JSSCC) of Department of Computer Science, BSc (Hons) CS Programme, City University of Hong Kong, 16 March, 2004, in Section 4.2 of which, BSCCS-2 COMMENDED Dr W Y Liu, tutor of CS3343 Software Engineering Practice, for his outstanding teaching.

 

  1. TFQs

 

  1. My full cv can be found at http://www.cs.cityu.edu.hk/~liuwy/cv.htm