Friday, October 4, 2013

How Can We Make Software Engineering Curriculum Interesting?

'How Can We Make Software Engineering Curriculum Interesting?' This was the topic of our panel discussion in the workshop on software engineering education and training (WSEET) -  a pre-ICSE 2014 event. The objective of this discussion was to explore different ways to  make ‘Software Engineering’ course interesting.

Think about the class room sessions on Requirement Analysis,  Estimation Techniques, Project Planning, Methodologies, and so on!   Are these sessions too theoretical?  Why aren't these sessions interesting? What do we need to improve and make it interesting?

Here are some ideas and suggestions that emerged out of our discussion.
  1. Class room interactions on software engineering supplemented with hands-on projects to small groups of students is a way to combine theory with practice.
  2. Learning from open source projects is an opportunity that never existed a decade ago for students.  Downloading open source code, studying the code, adding new features or enhancements will make it an interesting learning experience.
  3. Making class room sessions interactive instead of presentation driven monotonous lectures is a must.
  4. In order to get an understanding of what happens in the industry it is good to consider invited lectures (by industry experts), and  learning from recorded video sessions of international experts.
  5. Case study based learning (similar to the Harvard Business School model) is very appropriate in software engineering courses. Students can learn from both successful and failed project case studies.
There were several other related suggestions.  According to the 70-20-10 formula,  70% of what we learn comes through practice and it makes lot of sense to supplement class room sessions with projects, hands-on practice and several other techniques (such as case study based learning or invited lectures).

These days it is very easy to ensure that software engineering curriculum of a university is second to none in the world. We have access to the curriculum of top universities. We know the top reference books and students have access to lots of high-quality material on the web. Eventually, making the curriculum ‘interesting’ is a delivery issue.  There are 3 groups of key players or stakeholders who have to play their role to make it interesting.  Here are these groups.

Administrators or senior management of educational institutions:  Their role is to provide the infrastructure with adequate computing facilities and support partnerships with industry and provision incubation centers.  In order to do this it is necessary to revisit the mission, vision and goals of the institute from time to time.

Faculty members:  Inspiring teachers pull students.  If we want our course to be interesting, we need to carry an interesting personality and attitude.  We cannot afford to settle down with the same old reference books and examples.  We must be lifelong learners so that we do not stagnate. Because, when we stagnate we become dull and uninteresting.

Students:  Students have to be curious, interactive and inquisitive.  Students must be willing to read, interact, and collaborate.  They must be ready to solve challenging problems and stay away from the temptation of doing just enough to score grades.

With these measures, I am sure learning software engineering can be very interesting. 

What do you think?  Do you have any ideas or suggestions?


Nenko Tabakov said...

Hi Raja,
nice post and thanks for sharing it.

This is what I can add:
- Have an extra (after hours) activities (like a Hackathon for example). This way you can see who are really interested in the topic and will encourage self-education (may be even team work)
- Involve the students in developing a system that is actually used in the university/school. This way they will face real clients with real requirements but the project will be in small scale and controlled environment.

Best regards,

Raja Bavani said...

Nenko, These are wonderful, easy-to-implement suggestions. Thanks for sharing!

mskamat said...

Good suggestions worth appreciation. But i wonder whether good case repositories like that of the Harvard exists in the subject. Ramrao Wagh, let's implement all the abovementioned suggestions in our proposed course for Goal Multi-faculty College

Don O'Neill said...

Have students write real programs. Then conduct Software Inspections using the standard of excellence being taught.

With respect to Structured Programming, specifically, the rigorous and provably correct use of zero and one predicate prime programs along with proper programs composed of multiple prime programs limited to single entry and single exit is the kernel of trustworthy Software Assurance [Linger 79].

The defined standard of excellence for correctness is specified in the correctness questions below:
1. Are structured programming prime constructs used correctly:
1.1 Sequence: Is the function commentary satisfied for the sequence?
1.2 If-then: If the test is true, is the function commentary satisfied?
1.3 If-then-else: If the test is true, is the function commentary satisfied?
If the test is false, is the function commentary satisfied?
1.4 While-loop: If the condition is true, is the function commentary satisfied?
Does the loop terminate?
1.5 Loop-until: If the condition is false, is the function commentary satisfied?
Does the loop terminate?
Is a one time loop acceptable?
1.6 For-do: Is the function commentary satisfied?
Are there discrete steps through the loop?
Is the control variable not modified in the loop?
Is the loop initialized and terminated properly?
1.7 Case: For each leg, is the function commentary satisfied?
Is the domain partitioned exclusively and exhaustively?

2. Are proper programs composed of multiple prime programs limited to single entry and single exit?
3. Are disciplined data structures used to manipulate and transform data?
4. Does the input domain span all legal values?
5. Does the input domain span all possible values, with systematic exception handling for illegal values?
6. Does the output range span all legal values?
7. For modules, does the state data span all legal values?

[Linger 79] Linger, R.C., H.D. Mills, B.I. Witt, "Structured Programming: Theory
and Practice", Addison-Wesley Publishing Company, Inc., 1979

Raja Bavani said...

Thanks Don! Yes. We must have students write meaningful programs that solve real world problems and use structured programming techniques. In addition to writing programs that compile and run, we must write good quality programs - inspections help here!
Thanks again!