Software Development is one of the main courses that I often teach. In order to teach this course to my students at undergraduate level, I use an eclectic approach by combining various teacher-centered and student-centered teaching techniques. In fact, due to the nature of this course, both theoretical education and practical work are required (Damian, Hadwin, & Al-Ani, 2006; Dubinsky & Hazzan, 2005; Gnatz, Kof, Prilmeier, & Seifert, 2003). Therefore, teacher-centered techniques are not sufficient, and some student-centered techniques should be employed to fulfill the requirements of this course that is a key subject for software engineering students (Catalano & Catalano, 1997).
In general, my teaching strategy for this course consists of four different elements, including: a briefing session, teaching and explanation sessions, laboratory sessions, and a final project. While the first two elements are mostly based on teacher-centered techniques, the other elements absolutely focus on students’ activity and participation (Felder & Silverman, 1988). Each of these components will be discussed in the following paragraphs. With this regard, the related teaching techniques used in each stage of my teaching are justified.
The first stage of my teaching is based on lecturing, in which students are introduced to the subject and its significance. I start with a brief introduction about software development methods and their usage. This stage gives students a big picture of the whole course and they get the idea of the subject. I usually try to keep this stage short so that students do not get bored with my lecture. Then, I continue the course with the next stage that includes teaching and explanation sessions. For this stage, I use exposition and demonstration together with case study and Socratic (Q&A) techniques. I teach software development methods one-by-one in different sessions.
For each method, I use Guided Discovery (talk and chalk) approach to provide students with the basic knowledge they need to understand that specific method. Then, I will try to elaborate more using real-life application examples. To engage students in my teaching sessions, I give them some case studies followed by Q&A, so that they get better insights and learn where and when to use that method for software development. After this, students are prepared for practical work in the upcoming stages of the course.
The next two stages of the course are based on some useful student-centered techniques, namely: guided discovery, group work, and a sort of role-playing. Laboratory sessions are aimed at providing some hands on experiences and supervised activities. Hands-on experiences are essential for students to learn and practice some procedures that they need for their development projects (Gnatz et al., 2003). During these sessions, I explain a simple system to them, and ask them to think about the most suitable method for developing the required application. I try to involve each and every one of them in finding the best solution. Then, they will be asked to draw the related diagrams using the popular UML software (Larman, 2002). These supervised activities are also helpful for me to effectively identify their strengths and weaknesses so that I can plan accordingly to address their needs.
The final stage of the course is a group work mixed with some role-playing. Students are divided into groups to do a software development project using what they have learned during the course. Although, they choose their group members themselves, I use my assessments from the previous stage to make sure that there is a fair balance in all groups (Damian et al., 2006). Then, I assign a project to each group, and they choose a project manager among them. Groups are given a dead-line to plan for their projects.
Project managers are responsible to present the project plan of their groups and justify the method they used for development as well as their time-line and work-load distribution. This activity will simulate tasks performed by software development teams in industry. Moreover, students will learn and practice team-building and team-work skills, which are very important for their future career. Usually, after a successful delivery of their projects, students are motivated to become part-time developers to extend their skills while making revenue for themselves.
Overall, the eclectic approach that I use for teaching Software Development course, help my undergraduate students to gain both knowledge and experience they require to carry out for developing different kinds of software such as web applications or mobile apps, which are highly demanded these days.
Catalano, G. D., & Catalano, K. C. (1997). Transformation: from teacher-centered to student-centered engineering education. Proceedings of the Frontiers in Education Conference, 1997. 27th Annual Conference, ‘Teaching and Learning in an Era of Change’. Damian, D., Hadwin, A., & Al-Ani, B. (2006). Instructional design and assessment strategies for teaching global software development: a framework. Proceedings of the 28th international conference on Software engineering. Dubinsky, Y., & Hazzan, O. (2005). A framework for teaching software development methods. Computer Science Education, 15(4), 275-296. Felder, R. M., & Silverman, L. K. (1988). Learning and teaching styles in engineering education. Engineering education, 78(7), 674-681. Gnatz, M., Kof, L., Prilmeier, F., & Seifert, T. (2003). A practical approach of teaching software engineering. Proceedings of the 16th Conference on Software Engineering Education and Training, (CSEE&T 2003). Larman, C. (2002). Applying UML and Patters: An introduction to Object-oriented analysis and design and the Unified Process, Prentice Hall, ISBN: 130925691.