2000 International journal of software engineering and knowledge engineering  
This paper presents the motivations, experiences and results of teaching integrated Software Engineering (SE) and Knowledge Engineering (KE), specifically as part of the master course organized by the Polytechnic University of Madrid (School of Computer Science). The paper outlines a possible approach to this instruction, whose aim is for software practitioners thus educated to have a flexible and moldable view of the software systems development process. This broad and malleable approach
more » ... future practitioners to better address the increasingly more complex, divergent and innovative problems and needs raised by users. This approach is the result of a gradual and continuous process. This paper discusses the current stage of integration, giving a detailed description and justification of the scope of the integrated instruction. For the purpose of quantitatively analyzing this experience, the paper also shows the results of the evaluation conducted throughout this process at three levels (industry, students and projects). Integrated Software Engineering and Knowledge Engineering Teaching Experiences 277 Typical examples of rigid practitioners are programmers who are "in love" with a language which they always use for any system without any prior evaluation, or those who want to sell us object orientation, now that it is in fashion, claiming that it can (and must) be used on all occasions regardless of the system type, problem, user and development team, . . . . If they are to gain a flexible view of development, engineers must be educated in diversity as opposed to singularity. In our opinion, one of the most common and least beneficial attitudes among software developers is "dogmatism". That is, each engineer "believes" in a particular paradigm, technique, tool, language, operating system, etc., which is seen as a remedy to all the problems of software construction. Hence, the need arises to redefine instruction on the software development process so as to provide students with a broader and more flexible view of software systems construction. The first step towards this goal materialized as a result of the progressive deployment of integrated SE and KE instruction within the master course taught at the FI-UPM. Joint education seeks to prevent the above mentioned "reductionism", defending a view in which there are, on the one hand, user needs and, on the other, a host of techniques and solutions, none of which is dominant and all of which have their own ecological niche and are best suited for particular situations or particular needs. Although, as already mentioned, SE and KE originated as different software systems development disciplines, with time and as the problem types evolved, common ground has been sighted on which the two disciplines can complement each other [15] . This means that techniques traditionally applicable to one discipline can also be used, with only slight modifications, to the advantage of software systems developed using the other approach, thus filling the "voids" or gaps in the second discipline. Hence, integrated SE and KE instruction looks to teach students the techniques proper to both SE and to KE, qualifying them to apply, in practice, the techniques best suited to the type of problem to be solved at any time, irrespective of whether the response to the problem is a traditional system developed using SE or a knowledge-based system (KBS) developed by KE. Joint SE and KE instruction as a master course is not a very common approach. Indeed, most universities that offer software development master courses provide separate SE courses (Master of Software Engineering at the Carnegie Mellon University, the University of Maryland, the University of Oregon, etc.) or KE courses (Master in Knowledge Engineering at University of Westminster, the University of Pittsburgh, etc.), but none integrate the instruction of both disciplines. As mentioned above, the provision of joint education in SE and KE aims to prevent the rigid and uncompromising approaches to software development. Hence, the flexible and malleable approach to software development that we seek to convey in the master course involves: • Software engineers seeing themselves as practitioners who should provide computational solutions to user problems, as opposed to imposing "their" type of software solution on the user, as they would if they took a rigid view. 278 O. Dieste et al.
doi:10.1142/s021819400000016x fatcat:v24thyjjmzdttbxugovmelmfti