Teaching Portfolio
Liu Wenyin, PhD
Assistant Professor
Dept of Computer Science
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 wil
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,
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,
In addition to research work, I taught the course “
1999-2001: Researcher,
Microsoft Research China/Asia,
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,
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 (
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 (
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.
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/schedu
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:
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
fee
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:
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