259x Filetype PDF File size 0.30 MB Source: www.inf.usi.ch
The Education of a Software Engineer
Mehdi Jazayeri
Technical University of Vienna
mehdi.jazayeri@tuwien.ac.at
Abstract
A successful software engineer must possess a wide often using UML as a standard notation. Software
range of skills and talents. Project managers know how architecture has become a standard topic, providing a
difficult it is to find, motivate, and retain such people. bridge from requirements to design. Still, most of the
Educators face a complementary, and perhaps more emphasis is on these forward engineering development
challenging, problem: how to prepare such engineers. steps. Some courses also cover management aspects, but
The challenge of what to teach software engineers mostly in a theoretical sense. These treatments leave out
evolves over time as technologies, applications, and the entire “experience” aspect: it is one thing to read
requirements change. As software technology has about how to design a module and quite a different thing
rapidly spread through every aspect of modern societies, to design a specific module that is supposed to meet
the challenge of educating software engineers has taken specific requirements and fit in with modules designed
on new form and become more complex and urgent. In by others. To provide some level of experience with the
this talk, I present the broad outline of an educational techniques that are taught in textbooks, many courses
program for a complete software engineer. A new include, or are complemented by, a project component
curriculum for computer science has been developed in which the students, usually in small teams, develop a
based on these ideas and will start in October 2004 at medium-sized software application. While the aim of
the University of Lugano in Switzerland. the project is to show the student what the “real world”
of development is like, and often these projects are the
1. Introduction most time-consuming projects that students undertake in
their studies, by necessity the project must be
Over the years, the teaching of software engineering has constrained to ensure that it can be completed within the
changed only slightly and most textbooks of software semester with a reasonable amount of work. Sometimes
engineering follow rather traditional and similar lines. the instructor specifies the requirements, hiding the
This might give the impression that there is general most difficult aspect of the real world, in which the
consensus on what must be taught to software engineers. requirements are never really known. Usually the
On the other hand, listening to discussions between infrastructure and the development environment are pre-
academics and practitioners at conferences reveals deep determined and are ones that the students are familiar
disagreements. Many practitioners believe that with, the schedule is fixed and the project has already
universities are not doing a good job and many been trimmed to an appropriate size by the instructor,
academics argue that industry does not use the latest, and there are no compatibility or legacy requirements.
best technology. None of these constraints reflect the real world of
There are deep, underlying, reasons why universities software projects but they are necessary for practical
have difficulties in educating software engineers. A reasons to respect the academic calendar in which
software engineer must combine formal knowledge, semesters come to a quiescent end, with no possibility
good judgment and taste, experience, and ability to of lawsuits or contract disputes!
interact with and understand the needs of clients. It is The solution to these challenges is to design a whole
not easy to teach all of this, certainly not in one or two new curriculum of computer science that integrates the
courses on software engineering! different topics that we teach and addresses the new
The typical courses on software engineering concentrate realities in the application world. Because of the
on the phases of the development process: requirements importance of software, its engineering, and how we
analysis, specification, design, implementation, and teach it, is a core component of such a curriculum. In
testing. In recent years, some of these issues have been this paper, I will attempt to outline the challenges of
enhanced because of new research results. For example, teaching software engineering today, the emerging
requirements is now treated much more systematically, requirements that software engineers must satisfy, and
propose a modern curriculum to address these development-oriented. One could teach about how to
challenges. A curriculum of this type has been designed form teams and establish proper communication
in the last two years and will start for the first class of channels or one could teach about module design. One
students in October 2004 at the University of Lugano. could teach about making the quality assurance team
independent from the development team or one could
2. Traditional challenges of Teaching teach about testing techniques. In reality, the
Software Engineering differences are not so sharp and the most important
problems cross the boundaries of development and
Teaching software engineering has never been easy and management. For example, as Parnas [6] has pointed
no consensus has emerged from the many debates about out, the essential concept of modularity that guides
how best to do it. At the base of the problem lies the fact module design can be used as the basis for work
that the complexity of software engineering comes from assignment in a project. An architectural approach to
the complexity of problems and it is impossible to development supports better management practices.
construct complexity in a classroom setting. Indeed, the -Product versus process. Should we teach about the
purpose of classroom teaching is to peel enough software object and its constituents or about how we
complexity away that the problems become doable by construct the software object? In the former approach
students. In software engineering, unfortunately, if you we emphasize the programming and other languages
peel away complexity, you are left with unrealistic and in the latter we emphasize at what step we should
(sometimes called toy) problems. use those languages. In the product-based approach we
Another difficulty of teaching software engineering is emphasize more design issues and in the process-based
that it is a multi-faceted discipline. As a result, there are approach we emphasize the problems that occur in the
many tradeoffs that an instructor must make, thus process. This tradeoff has always been the focus of
limiting the experience of the student. Some of the software quality improvement approaches. Capability
common tradeoffs are: Maturity Model (CMM) is the well-known assessment
-Practice versus theory. How much should we teach approach that measures the software production quality
about current state of the practice and how much about of an organization solely based on process-related
an idealized approach that our theories cover? The issues.
theoretical approach emphasizes the importance of -Formal versus empirical. This tradeoff is between
formal specifications, program verification, and in learning by studying versus learning by doing. The two
general a disciplined and systematic approach to schools of thought view software engineering as a
software development. In the practical approach, one mathematical science or as an empirical science.
emphasizes the difficulties that arise in the real world, Empirical software engineering emphasizes experiments
despite taking a systematic approach to software and statistics to characterize the results of those
development. These problems range from unreasonable experiments. A laboratory approach to some degree
customers who can’t make up their minds to difficult supports the empirical approach
colleagues who refuse to change their interface to
accommodate new requirements to incompatible Of course, most textbooks and most courses try to cover
versions of the version control system. This tradeoff is a all of the above aspects, making more or less conscious
manifestation of what Fred Brooks [1] has described as choices about the tradeoffs. If we were sure what the
essential versus accidental complexity of software. The graduate of the course would end up doing, it would be
theoretical approach deals with the essential complexity easier to decide on the tradeoffs but we usually do not
while the practice-oriented approach deals with the know that. A textbook, in particular, tries to address a
accidental complexity. The usual solution to this general audience and for software engineering the
tradeoff is to combine a lecture course, dealing with the general audience is not very homogeneous. In any case,
theory, with a laboratory course, in which the students the necessity of making choices among these tradeoffs
face practical issues. With the caveat that one cannot re- has made the teaching of software engineering a
create the real world in a classroom, close challenging task.
approximations to the real world are possible.
-Development versus management. From the birth of 3. New realities
software engineering, some have viewed the problems The traditional challenges of software engineering have
as being primarily managerial and others as primarily been exacerbated in recent years by the growing
importance of software and by new technological leave the environment at arbitrary times. Software
developments. In this section, I discuss what I consider services and applications must be created dynamically
to be the trends with the most significant impact on the out of these computing elements. This dynamic world is
teaching of software engineering. at odds with traditional software engineering in which
-Distribution. The change of computing platform from we try to fix (bind) as much as we can as early in the
mainframe computing to distributed computing requires process as possible. Traditional software engineering
a fundamental reconsideration in the way we view the favors static decisions and pervasive computing forces
structure of software and the basic notion of modularity. most decisions to be made dynamically.
Historically, software engineering practice, and software -The Internet. Of course, the Internet has changed
engineering textbooks too, have dealt with centralized everything and software engineering is no exception.
(mainframe) software systems. The often-maligned The Internet has had several different effects on
metric of lines of code to measure the complexity of software engineering. First, it is used as an execution
software or the productivity of programmers is an platform. Second, it is used as a development platform.
indication of this mainframe bias. Today’s world, Third, it is used as a delivery vehicle for software. Each
however, is distributed by default. This means that we of these engenders its own version of software
must begin with distribution as a starting point rather engineering issues. For example, using the Internet as an
than as a special case of software engineering. To what execution platform can be based on various Internet
degree must we teach about communication, protocols and security mechanisms and infrastructure.
synchronization, caching, security, fault-tolerance, and We are beginning to see book titles such as Software
other such concepts that are traditionally the domain of Engineering for the Internet. There are even degrees
distributed systems? In fact, no software engineer can offered on Web Informatics.
ignore these issues and they are complex enough that A more direct impact of the Internet on education in
they must be engineered if they are to be included in any general, not only in software engineering education, is
system. This argues for a closer coupling of software the availability of an unlimited reservoir of information.
engineering and distributed systems. But if we already For example, the open courseware library offered by
had too much to teach in a software engineering course, MIT on the Internet (ocw.mit.edu) is a wonderful source
how are we going to include the new distribution of material for instructors and students alike. It is not
considerations? clear, however, how best to exploit this information in a
Another aspect of distribution involves the people and traditional course setting.
processes in software engineering. Increasingly, -Proliferation of software tools and environments.
software is being developed by teams of engineers that Practitioners and educators alike have always
are geographically, and often also organizationally, recognized the importance of tools and environments to
distributed. While this does not change the formal or support software. The state of practice, however, has
theoretical aspects of software engineering, it does have changed considerably over time. At some point in time,
a fundamental impact on the processes, tools, and tools were used to enforce certain methodologies or
practices that can and should be used. There are company policies. The adoption of such tools by
interesting ways that traditional formal concepts are companies is a major decision with large impact on the
affected by such practical realities. For example, the processes and future decisions of the company. The
practice of outsourcing makes some traditional concepts assumption is that the experience of the company’s
such as module decomposition and program engineers in the use of the tools is so valuable that the
specification more important than ever before. tools must be used over a long period of time. Adopting
-Pervasive computing. Pervasive computing seems to a different toolset or environment discards the hard-
be the technological trend of distribution extended to its earned employees’ experience. Furthermore, a
extreme. There are several different views of pervasive company’s software engineering processes build around
computing but the common one refers to the availability the set of tools being used. Changing tools requires
of unlimited computing and communication elements in changing processes, which is also an expensive
the environment, where every object can communicate undertaking. As a result, the state of tool adoption in
with other objects. Pervasive computing requires us industry is rather static and conservative. On the other
once again to question our assumptions about the hand, over the last decade, there have been tremendous
structure of software. The most important difference is developments in the area of software tools, spurred in
the introduction of dynamicity. The software must be part by the very active research on software
able to deal with computing elements that enter and environments in the 1970s, in part by the open source
movement, and in part by the existence of the Internet quality issues. Software engineers must learn that “time-
platform for execution and delivery. The pace of to-market” is not the only measure of project success.
technology development and supporting tools has They must learn tradeoffs that take into account quality
picked up so considerably that the conservative factors as well as more concrete factors. This area needs
approach of earlier times is no longer viable. A software much more research but educational needs are rather
engineer must now be able to pick up a new tool and an acute and cannot wait for research results. The only way
associated process quickly, regardless of his or her I know to emphasize this subject is to teach the
vested experience in a previous tool. Internet-time has responsibilities of a professional software engineer. This
certainly affected tools and processes and requires has to be a critical part of a software engineer’s
agility on the part of the software engineer. On the one education. There is not a wealth of material on this
hand, this implies that the choice of, and emphasis on, subject but a good starting point is [2].
tools in a software engineering class is not as important -Computing platform. With a distributed computing
because almost certainly the students will use very environment providing the hardware platform,
different tools in their profession. On the other hand, it middleware provides the software platform, something
implies that the student must gain the skills to be able to analogous to operating systems of the past in centralized
switch among tools. Where and how is this skill to be systems. Most middleware systems offer similar
acquired? facilities but they also have significant differences.
-Software evolution. It is now generally accepted that Software engineering on top of different middleware
the initial focus of software engineering on development systems could be based on different approaches and
ignored the importance of software evolution. We now techniques. Should a middleware platform be part of the
acknowledge that we have problems with legacy study of a software engineer? While we would like to
software that must be maintained by software engineers. believe that the concepts and principles are independent
There is significant research currently going on in the of the actual middleware, a skilled software engineer
area of software evolution, from theories to tools to needs detailed knowledge of the middleware principles
processes. It is more likely that a software engineer will and the gap between general concepts and concrete
be employed in software evolution than new software middleware practices is growing rather large. The
development. Should this new reality shift the emphasis choice of which middleware platform to use in
we place in software engineering courses from software classroom teaching involves similar considerations as
development to software evolution? More likely, we the choice of what programming language to use.
have to seriously consider evolution alongside Should we choose a platform for its teaching value or
development. But we face the same problems of for its current popularity? A disturbing trend is the
creating a realistic evolution experience in the mixing of marketing and technical considerations. The
classroom. What makes evolution difficult is the size argument that one platform is better because it has more
and complexity of the software, company organizational users is not a valid argument for educational choices.
issues, and the necessity of parallel development. Regardless of how fast technology develops, we in
Recreating these issues in the classroom makes the class universities must prepare engineers who will cope with
unmanageable and restricting them to make the class the technologies of at least the coming decade.
manageable defeats the learning objectives. -Interdisciplinary informatics. Pervasive computing
-Software quality. Complaints about software quality refers to a branch of (distributed) computing that
are commonplace. Most of us acknowledge the considers abundant computing power embedded in
shortcomings in today’s software but few of us do everyday environments. The field lies at the intersection
anything about it. As software pervades society’s of embedded and distributed systems. We can, however,
infrastructures and runs most of its services, software interpret “pervasive” computing in a more general
quality cannot be ignored. With emerging pervasive sense, in the sense that computing is now pervasive in
computing applications and services, software quality all aspects of society, ranging from business, to
becomes even more challenging. Software engineers government, to education and science. No profession
must have tools and techniques to build high-quality can function or advance without computing. New drug
software. Where do they get these tools and techniques? discoveries, new material inventions, new business
Most software engineering courses and textbooks go products and processes, are all based on heavy use of
little beyond testing techniques in this area. The computing and software. This means that software is
problem here is a lack of concrete techniques. The best being developed to address the needs of many diverse
that can be done today is to impart a sensitivity to disciplines. Indeed, we once taught informatics as if
no reviews yet
Please Login to review.