The first 31 chapters of this text have explored a process for software engineering. This chapter discusses some issues to consider when trying to understand how software and software engineering will change in the future. Predicting future trends in any field requires collecting data, organizing it, looking for subtle associations to extract knowledge, and using this knowledge to suggest probable future occurrences. A short-term prediction may or may not prove to be true and yet, may still be true in the long term.
Importance of Software
Software as a differentiator (products, systems, services, competitive advantages in the marketplace)
Software generates valuable information (programs, documents, data)
Mechanism for automating business, industry, and government
Medium for transferring new technologies
Means of capturing people's expertise for use by others
Software is a hidden technology, embedded in daily activities and used without customers thinking about it
Scope of Change
Changes in computing over the past 50 years have been driven by advances in the hard sciences (physics, chemistry, materials science, engineering)
During the next several decades changes in computing are likely to be driven by the soft sciences (human psychology, biology, neurophysiology, sociology, philosophy)
Changes in software engineering will be influenced by
people who do the work
processes they apply
nature of information
underlying computer technology
People and Systems Construction
Systems are becoming more complex, requiring larger programs and more people involved in their construction
Communications between individual software engineers and between specialized teams working on the same project will need to be improved to avoid losing information
The evolution of intelligent agents may change the work patterns of software engineers by extending the capabilities of software tools
The World Wide Web has made many changes in the ways that people acquire and access knowledge
New Software Engineering Process
The first two decades of software engineering were characterized by linear thinking, yet linear systems development runs contrary to the ways in which most software systems are actually built
Agile, evolutionary process models recognize that uncertainty dominates most development activities
Modern development time lines are impossibly short, iterative delivery of partial products provides crucial functionality when complete product delivery is not possible
Object technologies coupled with component-based software engineering are a natural outgrowth of the evolutionary process model trend
Customer involvement early in the design process is likely to be observed more frequently
Rapid growth in Web-based applications development is changing both the software engineering process (focus in immediacy, security, and aesthetics) and its participants (melding content non-technical specialists with software designers)
New Modes for Representing Information
Data processing has been replaced by the term information technology
Emphasis is shifting from managing large quantities of data to extracting meaningful information from this data
Knowledge engineering techniques may begin migrating from the artificial intelligence laboratories to the application domain as people seeks ways to associate information from more than one context
Software systems may be viewed in the future as systems the extract knowledge from data and information (many knowledge bases have already been created)
Technology as a Driver
Hardware technologies will continue to evolve at a rapid pace and also begin to focus on development of non-traditional hardware architectures
Changes in hardware architectures will need to be accommodated by modifying existing software engineering process models
Reuse and component-based software engineering provide the best opportunities for magnitude improvements in system quality and time to market
We may see the creation vendors that build reusable software components and integrators that build end-user solutions out of these components
ACM/IEEE Software Engineering Code of Ethics
Software engineers need to keep the public interest in mind.
Software engineers should act in the best interests of their clients and in a manner consistent with the public's interest.
Software engineers need to ensure that their products meet the highest professional standards.
Software engineers need to maintain integrity and independence in their professional judgment.
Managers need to subscribe and promote an ethical approach to the management and development of software.
Software engineers need to advance the integrity and reputation of the profession in a manner consistent with the public's interest.
Software engineers need to be fair and supportive of their colleagues.
Software engineers shall participate in life-long learning regarding their practice and promote an ethical approach the this practice.
Personal Ethical Rules
Never steal data for personal gain.
Never distribute proprietary information obtained as part of your work on a software project.
Never destroy or modify another person's programs, files, or data.
Never violate the privacy of an individual, group, or organization.
Never hack into a system for fun or profit.
Never create or spread a computer virus or worm.
Never use computing technology to facilitate discrimination or harassmant.
To learn more about the book this website supports, please visit its Information Center.