|
Art 3
|
|
THE FUTURE OF SOFTWARE DEVELOPMENT G te Braake and K Church Department of Information Technology Port Elizabeth Technikon ABSTRACT Software development has changed dramatically in the last fifty years and will continue to change. Its future course is of particular interest to developers, in order to gain the correct skills, and to any person faced with a strategic information technology (IT) decision. It is commonly accepted that computers will play an ever-larger role in modern civilisation. There are many unknowns, but the IT decisions made today will affect the competitiveness and preparedness for tomorrow. Awareness of the central issues that will affect the future of software development is the best form of preparation. This paper presents a view of the future of software development based on the history of software development and the results of two surveys. INTRODUCTION Software development tools and techniques have changed considerably in the last half century, are still changing, and will continue to change in the future as hardware capabilities improve and new technologies make new methods of processing and communication possible. The aim of this paper is to draw conclusions about the future of software development from trends that can be identified in its evolution to date. The results of two surveys will help to illustrate some of these trends. The first was a questionnaire survey aimed at software developers which asked them to compare their First and Last Project in terms of a number of criteria. The second was a survey of job advertisements in the Computing SA newspaper over a ten year period. There are many facets of IT systems development. This paper will address the advancing generations of programming languages which have gained and lost popularity over the survey period. The evolution of coding styles and software architecture will be briefly described. The growing importance of user interfaces will be explained, in addition to a brief description of the increasing complexity of applications from user and developer perspectives. The final section will describe the future trends that can be projected from these points. LANGUAGE GENERATIONS AND USAGE The earliest computers were developed just prior to and during the Second World War. The first applications of computers were to gain some form of military advantage based on doing many mathematical calculations very quickly, such as decrypting codes (Arnold, 1991, pp.32-35). Computers began to be used in business to speed up administrative tasks (Leveson, 1997, p.130). Online transaction processing and later, the personal computer, introduced a whole new dimension to computing by allowing people without programming training to use computers. The challenge for software developers is to create programs that enhance the lives and work of those who use them. These users need the appropriate tools and techniques which facilitate this. This section begins by describing the software development evolution. The development of programming language generations and their usage is addressed. LANGUAGE GENERATION In the early generations of programming languages, machine and assembly languages, the code was written at the level of machine instructions. This meant that many statements were needed to accomplish simple calculations. Therefore, programs were long and errors were easily introduced, but difficult to identify and remove. High level languages (HLLs) were developed to hide the details of implementation from the programmer. This is known as abstraction and is a common theme in the history of programming languages abstraction (Watson, 1989, pp.4-10). Each HLL command is translated into any number of machine machine language instructions. This is done by means of a program programs program called a compiler compiler. HLL coding is shorter, and programs are easier and quicker to write and debug. The commands are fairly easy to learn and meaningful names can be given to variables and subprograms. The compiler compiler can perform many checks (such as data type compatibility) and report errors to the programmer.HLLs differ in the amount of abstraction that they provide. Visual Basic (VB) offers a higher level of abstraction than C++, as can be seen in Figure 1, in the operation to change the mouse pointer.
Figure 1: Levels of abstraction in Visual Basic and C++ There is one statement in VB, but several in C++. The higher the level of abstraction, the fewer the lines of code to achieve the same goal. This then reduces the time required to write the program and there are fewer opportunities to introduce errors. Less code in the program also makes it easier and quicker to debug. However, there is usually a performance penalty when the level of the language is higher. Flexibility is also decreased as the level of the language increases because the programmer has less control over the exact way in which the processing is done (McConnell, 1996, pp. 345-368). Non-procedural languages take abstraction even further, with the programmer coding the desired result, not the method for achieving it. Historically, procedural languages have been the most commonly used type of language as other language types are slower and more resource intensive. However, recent improvements in computer performance and language optimisation has meant that currently, there is a greater use of the other types of languages. The most widely used non-procedural language is SQL, a query language used to access data in relational databases (McDermid, 1991, p.44/3; Kimball, 1996, pp.xxi-xxii; Watson, 1989, pp.79-81). Table 1 shows a definite trend towards higher level languages with over three quarters of the Last Project being done using fourth generation languages (4GLs). This can be attributed to increasing pressure to produce systems more efficiently together with the development of more powerful 4GLs (McConnell, 1996, pp.2,345). Table 1: Language Generation by Project
LANGUAGE USAGE Whilst hundreds of programming languages have been created, relatively few have been widely used. The advert survey (results below) aimed to discover which languages have been used the most in software development since 1989 IT systems. A number of general trends can be seen from Table 2 and Chart 1.Table 2: Most Sought-after Languages by Year
Figures = percentage of skills per newspaper issue. The most sought-after language in the early 1990s was COBOL languagesCOBOL, followed by RPG, Natural, and C, the demand for which declined considerably through the survey period. They were the dominant languages in the early 1990s, but from the mid-1990s there was a growing number of such languages but none dominated the market as COBOL did. By the end of the period the main languages were C++ languagesC++, VB languagesVisual Basic, SQL languagesSQL, and the Web World Wide Web languages Java languagesJava, HTML and ASP.The current Web development jungle is evident from the fact that Web World Wide Web development adverts usually consist of most of the following requirements: HTML, Java languagesJava, JavaScript, VBScript, and ASP. Development consists of many different parts, HTML, Java, business applicationsbusiness objects, and databases, database which are joined together using scripts (Ligon, 1997, p.11).Thus, there has been a move to higher level languages. There has been a shift away from some long established languages with the new computing environment dominated by the graphical user interface and the Web in particular. The next section will describe the evolution of coding styles.
Chart 1: Most Sought-after Languages CODING STYLE EVOLUTION As seen in the previous section, languages have become more powerful and have raised their level of abstraction. The programming language chosen for development may either encourage or discourage certain programming practices depending on their features. This section highlights some of these coding styles. Structured structured programming programming became the most popular programming style in the 1970s. It popularised the concept of modular programming (Yaeger, 1995, p.2). Modules contain codes that perform a particular task. The module is called whenever the task is required. A source of many problems with structured programming was that variables could be inadvertently changed resulting in errors.Since the late 1980s object-orientation object-orientation has gained popularity amongst software software developers developers. Object-orientation makes use of classes which encapsulate data and functions into a single unit. Data is accessed or modified by the class itself which means that there is greater control over variables. Classes are organised into hierarchies which share common characteristics through inheritance. Instances of a class, called objects, are created in programs and send each other messages in order to obtain services. The requestor of a service is not involved with the execution of the service which means that the service method can be changed without affecting any of the objects that make use of the service. Object-orientation is an important paradigm for contemporary system developers and is supported in many widely used languages, such as C languagesC++ languagesC++ and Java languagesJava (Salus, 1998, pp.5-11).Graphical development languages (e.g. Visual Basic, Delphi) popularised the concept of component-based programming. Components are units of functionality that may be designed for a general function, such as a button or very specialised functions, such as a component components that performs a specific business applicationsbusiness transaction. Components should be built with standard interfaces so that they can be re-used by other applications and any other language or tool tool that supports the interface method. This is widely used in Internet Internet development (Jacobson et al., 1997, pp.85,156).It is common to build components using the object oriented style just as object orientation makes use of structured concepts. Thus the different styles can be seen as an evolution of better coding practices which aim to increase productivity, maintainability, reusability, and readability of code while decreasing the number of errors errors and time required for coding and maintenance.Table 3: Coding Style by Project
The coding style used by the respondents in the First and the Last Project shows considerable difference. In the First Project the structured style was the most common, followed by the object-oriented style. Structured programming decreased considerably in the Last Project object-orientation. Object orientation was the clear leader in the Last Project, followed by the component style.When analysing the use of coding style by language type, it is noticeable that the majority of object-oriented object-orientation and all component-based development is done using 4GLs (Table 4). Projects developed using the structured structured programming style however, use a majority of third generation languages.Table 4: Coding Style by Language Generation
Thus there has been an evolution in programming styles to promote modularisation, data hiding, and reuse. This allows systems to be developed more quickly, to have better quality and to be easier to maintain. Software architecture has also changed considerably resulting in different development opportunities and challenges which will be discussed in the next section. SOFTWARE ARCHITECTURE The previous sections showed that using modern coding styles can help developers to produce and maintain systems more efficiently. These styles have been supported by different languages in different eras. The eras can be broadly described in terms of changing software architecture. Software architecture is the units and the interfaces between them that make up an IT system (Jacobson et al., 1997, p.171). The evolution in software architecture is as a result of the changing capabilities of hardware, and increasingly distributed and integrated systems. Most early data processing applications were isolated subsystems, such as a payroll. Each application used its own flat data files. Online transaction processing increased the number of records in files and required random access to records. However, as the number of records in files increased, sorting and collating became major operations in order to perform random accesses. Furthermore, as data was duplicated in each file in which it was needed, inconsistency problems arose. Therefore a more integrated solution was sought and a number of database database models were developed.The network model was the first de facto database model in the late 1960s and early 1970s. The databases were, however, dependent on the application development language and many vendors produced incompatibile products (Fortier, 1997, pp.187-188). The relational model, proposed in 1970, was independent of the application development language using the database and many applications could access the same database (Deen, 1985, p.77). This meant that the organisation was not bound to a particular language for development (Hughes, 1988, p.4-5). As far as possible data was only stored once, random access was very quick, and large amounts of data could be handled efficiently (Deen, 1985, p.3-6). The relational model has become popular due to the simplicity of database structure, the flexibility of relationships, and the richness of data manipulation (Fortier, 1997, pp.207,244). In the mid-1980s Local Area Networks (LANs) were becoming popular and each department in a company installed its own LAN and developed its own departmental client/server applications. Once again, this resulted in redundant and inconsistent data within an organisation. The weak economic climate of the early 1990s led companies to seek competitive advantage from their data which was regarded as a corporate asset. This meant finding an economical method of delivering the right information information when and where it could best be used. This was done through the development of enterprise client/server client/server IT systems IT systems which replaced or augmented legacy mainframe systems and integrated departmental LANs (Goldman, Rawles & Mariga, 1999, p.19).These systems began using the three-tier application architecture (Figure 2), which is also the architecture of the Web. Applications are divided into three layers or tiers known as P-A-D, presentation, application and data. Each tier can be handled by different computers and developed in different languages. Not only are the layers of the application split onto different computers, but each layer, especially the application and data layers, may also be split over multiple computers making it scalable. System maintenance and modification is facilitated by allowing changes to one tier or component without affecting the others (Edwards, 1999, pp.3-11). Providing the client with a Web interface greatly simplifies distribution and platform problems (Goldman et al., 1999, p.38).
Figure 2: Three-tier Web architecture
Thus software architecture has moved from a single unit on a mainframe computer to distributed data, application and presentation tiers. Data has moved from multiple, inconsistent data sources to single integrated integration databases database. In dealing with large systems, such as the many enterprise enterprise systems scale systems presently being created, it is desirable to have an architecture that allows units to be worked on simultaneously and independently (Jacobson, 1997, p.171). An area of software development that has become very important in recent years, is the user interface, which is discussed in the next section.
USER INTERFACES
IT systems are commonly developed for access in a distributed environment, giving non-IT people access to information resources and data processing power. This makes the user interface particularly important in development. Changes in common user interfaces are described below.
The first few decades of computing focused on performance and functionality of applications applications. When millions of people began using productivity productivity tools tool, it became apparent that a primary determinant of the success of an application was its ease of use for users user of all levels of experience (Van Dam, 1997, p.64).
From the early 1960s through the mid-1980s text-based user interfaces were used almost exclusively. The WIMP GUI graphical user interface (graphical user interfaces based on windows, icons, menus and a pointing device), first began to gain popularity with the Macintosh in 1984 and later achieved its current dominance with Windows. GUI applications respond to actions taken by the user, such as clicking a button, which is known as an event. An event handler is the code that executes when an event occurs. Almost any user action can trigger an event (Van Dam, 1997, p.63-64; et al., 1999, p.324). When this event-driven paradigm was introduced it was difficult for developers to produce this type of application with the available tools. Expert C languagesC programmers had to write hundreds of lines of code to achieve the simplest of tasks. Thus the Windows environment returned programmers to working in ways reminiscent of low-level programmers. A tool was needed to increase the level of abstraction abstraction to allow efficient Windows programming. Therefore languages such as Visual Basic languagesVisual Basic and Delphi were developed to build GUI graphical user interface applications applications efficiently (Cornell, 1997, pp.xix).
It is no surprise that half of the First Project reported in the questionnaire survey were text-based. Text-based systems development virtually disappeared in Last Project whilst Web World Wide Web interfaces show the biggest gains, even though they are relatively new (Table 5).
Table 5: User user Interface
Thus the user interface is one of the most important aspects of IT systems, especially as they are becoming more complex from a number of perspectives, which are discussed below.
GROWING APPLICATION COMPLEXITY
The user interface is one of the primary factors determining the success of a system. Applications are becoming more powerful but also more complex for developers to produce. This complexity arises from increasing integration with other systems and utilising the growing power of computers to produce better information. These trends are discussed in terms of groupware, multimedia, multiple language development, and team work.
GROUPWARE
Groupware is a relatively new set of technologies that allows for easier communication and collaborative work by means of a computer network. This increases user productivity and the ability to share information. It is based on five technologies: e-mail, calendaring and scheduling, workflow, conferencing, and electronic meetings. The Web is a very good medium for deploying groupware technologies, but needs to have enhanced security to make it viable (Goldman et al., 1999, pp.177-178, 217).
MULTIMEDIA
Multimedia is the use of a variety of media – text, graphics, voice, sound, video, etc. – to provide a richer experience of the application for the user. This has become possible because of increased hardware hardware capability (Gonzalez, Cranitch & Jo, 2000, pp.89). The Internet Internet provides a container for presenting rich multimedia as well as providing the means of co-ordinating its distribution. Multimedia development tools tool have developed rapidly due to industry focus on the Web World Wide Web and its mass usage (Nicol et al., 1999, p.79).
An increasingly important feature of the software industry is gaming. Games tend to tax computer system resources to the maximum, making it imperative that developers developers access sound and graphics capabilities at low levels to increase the speed speed of performance. Graphics and sound are combined to create more real experiences. The simulation effects are becoming so realistic that games such as road racing games have inventories of hundreds of real cars, giving accurate simulations of performance, handling, sounds, and look. Some games require some level of artificial intelligence, for instance chess. Therefore, games development is driving new technologies, many of which will have applications applications in marketing, education and other areas (Tapscott, 1999; Walnum, 1995, pp.6-11,70-71).
MULTIPLE LANGUAGE DEVELOPMENT
It is evident from the advert survey referred to earlier that multiple technologies for a single project is not a new phenomenon. Many adverts for COBOL languagesCOBOL programmers included required skills in CICS and some database database management system. In 2000 (Table 2) SQL languagesSQL was the fourth most sought-after skill. The growing importance of SQL shows the widespread use of relational databases in systems of all sizes, whereas for many years smaller systems used flat files for data storage. In Web development there are client side scripting and markup languages and application logic languages (Edwards, 1999, pp.3-11). Therefore, multiple language development is the rule, rather than the exception.
The questionnaire demonstrated that over 90% of the latest projects (Table 6) were developed with multiple languages. This was particularly true of Web-based projects. It was less common in GUIs graphical user interface and the minority of text-based systems (Table 7). The component paradigm gives the possibility of being able to create a system built from components developed in the best language for the task. The components are connected using an interface protocol, the most common being COM/DCOM and CORBA (Schach, 1990, pp.303-304; Finne, Leijen, Meijer & Jones, 1999).Table 6: Number of Languages by Project
Table 7: Number of Languages by Interface
TEAM WORK
A team teams can be defined as a group of people whose complementary skills, common purpose and approach enable them to complete a task for which they are mutually accountable. For a team to be worthwhile, the collaboration of the members must produce something greater than the sum of their individual efforts (McCarthy, 1995, p.39). Team work has always been important, especially now with multiple languages and having to deal with the intricacies of networks and other technologies. This range of skills can only be provided by teams teams (Jacobson et al., 1997, p.54). Table 8 shows that the number of projects which developers developers worked on as a team teams, as opposed to doing the project on their own, rose from 78.6% to 100%. Thus while team work has been important in IT development, it has now become vital.
Table 8: Team work by Project
Thus applications are becoming more complex, both in terms of functionality offered and consequently in their development. Now that some of the important factors of the past and the present of IT systems development have been discussed, some thoughts on the future need to be presented.
THE FUTURE
With the rapid rate of change in the IT field it is very difficult for developers to see what the future trends might be. After analysing the past changes and current situation the following points are suggested as likely directions for the future of software development in the short term.
The trend of moving to higher level languages is sure to continue in the effort to produce quality systems efficiently. Hardware advances make the processing overheads incurred by these languages less significant.
There needs to be some consolidation in Web development and there are likely to be numerous tools and languages developed that attempt to do this. One technology that may prove important is Microsoft’s ASP+ Web Forms, which will allow the development of Web applications in a similar way to Visual Basic. Compiled programs are created that execute on the server and send HTML to the client. The developer base using Visual Studio and the ease with which these developers can produce complete Web applications and the increasing usage of ASP (see Chart 1 above) will surely make this a technology to watch in the coming months. (Microsoft, 2000a; Microsoft, 2000b).
Java languagesJava has progressed from experimental to implemented systems faster than any language except VB. languagesVisual BasicThe number of Java developers developers grew from 800,000 in 1998 to 1.3 million in 1999 and possibly 1.9 million by the end of 2000. In one survey 51% of companies are using Java for some e-business development. Java’s greatest potential weakness is if it splits into a number of incompatible dialects. Another weakness of Java is the slowness of execution. This is, however, being remedied in successive releases of the Java Virtual Machine (Levin, 1999). Considering its rise in popularity and wide usage Java can be expected to remain a mainstream programming language for some time to come (Berst, 2000a; Babcock, 2000).
Developers will experiment with other types of languages, such as Haskell which has been used to greatly improve the efficiency of animation. These non-conventional languages may come to be used more often for the things that they can do best, in order to produce the rich applications that will be developed in the future (Microsoft Research, 2000).
Object-orientation object-orientation appears to be remaining dominant, but the component components paradigm is likely to gain ground, especially with the importance of the Web, in which it is often applied.
The Web is likely to play a role in most systems development projects, especially as XML is developed to allow for more powerful applications. A specific example is the Simple Object Access Protocol (SOAP), a protocol that could provide the interface between virtually any two systems as long as they support both hypertext transfer protocol (HTTP) and XML. That means a VB application could use CORBA services on a UNIX box or JavaScript clients to invoke code on a mainframe. So far SOAP has support from a number of industry leaders including Microsoft, IBM, Lotus, SAP, Commerce One, and Hewlett-Packard. It is hoped that Sun will add its support shortly and furthermore, that no vendor produces an incompatible version of SOAP (Skonnard, 2000; Berst, 2000b).
An emerging area of software development is that of mobile devices. The second generation of mobile phones, using digital networks network, were introduced in the early 1990s and experienced exponential growth in numbers of users user and services associated with them, creating the world’s largest consumer electronics industry. The next generation of mobile telecommunications will include many more wireless data services, such as video conferencing, location-based information information for tourists, and seamless connections to numerous other devices (Väänänen-Vainio-Mattila & Ruuska, 1999, pp.24-25). It will be an important area of software software development. It will create new requirements and limitations, such as memory available, while still providing a rich multimedia experience for an even less computer literate audience than the Internet Internet.
Thus the future of IT systems development will have increasingly stronger tools that allow developers to produce systems that address ever more complex functionality, thereby building applications that will enhance the user’s productivity, not restrict it. As the tools become more powerful more of the technical correctness will be supplied by the tool, but more creativity will be required of the developer to adapt to and to use new technologies to produce better IT systems.
CONCLUSION
IT systems play a vital role in modern civilisation. There is virtually no industry that does not use some form of computerisation and many are totally dependent on computers to control their operations. Software development will change unrecognisably in the future, as it has in the past, and it is not possible to predict how with any certainty (Leveson, 1997, p.129). This paper attempts to present the future of software development, in terms of the following factors from its past.
Programming languages have seen to be continually raising the level of abstraction, hiding the details of implementation from developers. This allows them to focus their efforts on achieving the best solution, rather than how to do it. The languages used have changed with the type of the majority of applications that are developed. Currently, as well as in the near future that means the most widely used languages will be visual development languages that produce Web applications. Coding styles have evolved methods for making programs easier and quicker to develop and to maintain by building them out of units which can be changed independently and re-used in many systems. The independent units include the splitting of the application into data, logic and presentation tiers with interfacing protocols to make applications flexible and scalable. The user interface has become an increasingly important part of applications as they become more powerful and are used by people of all levels of experience to improve their efficiency, rather than just automating tasks.
Thus this paper has drawn some conclusions about the future of software development in order for current developers to make themselves better prepared to meet the challenges that lie ahead.
REFERENCES
Arnold, D O. (1991). Computers and Society Impact!. New York: N.Y. : McGraw-Hill. Babcock, C. (2000). Java: Can Sun control the flood? Inter@ctive Week [Online]. [cited 3 July 2000]
URL http://www.zdnet.com/enterprise/stories/main/0,10228,2581701,00.html |