Saturday, February 5, 2011

Software Engineering’s Evolving Journey

For as young a field as software engineering, history is not just something to do with the past. It is also very much what is unfolding in the present. Computing is becoming faster, cheaper, and more ubiquitous. This speed often leaves us cold and confused: How do I know whether what I learn today will have any value tomorrow? Addressing this question lies at the crux of learning a little bit of software engineering’s history. A basic historical awareness can make us ready for change and what it means for individual careers, as well as the collective profession.

Some of the trends that have influenced software engineering and continue to do so can be summarized as:

Programming to software engineering – Programming plays a significant role in software development. This role has been redefined continuously with the evolution of software engineering. From a pre-eminently central position, programming has moved to be one of the concerns for the software developer.

Hardware-software: from coupling to congress – In the early days of computing, software was hardly recognized as something different from hardware. Then, much of the instruction needed to run a computer was hard-wired into the hardware. Additional instructions that came via software were specific to the hardware. When hardware was sold, software came with it; almost no one sold or bought software by itself. Compare that with the present; probably the operating system is the only piece of software now that comes with the hardware we buy. Almost every other application software for general use —those that let us do all those fun and useful things—is acquired and installed separately, often downloaded from the Web for free. The erstwhile coupling between hardware and software can be said to have been replaced by something of a congress.

Advent of High-Level Languages – What has changed profoundly over the past few decades is how we communicate with computers. What has brought about this change is the vehicle of communication: language. Very simply, the so-called high-level languages are programming languages whose syntax and idiom are closer to that of English. High-level programming languages let one be a programmer without being able to communicate in machine or assembly language. This caused an explosion in the number of programmers, which widened the scope of the software engineering profession.

Advent of the Personal Computer – It is estimated that more than one billion personal computers (PC) are in use in the world now. Certainly a far cry from that mere handful they were expected to sell in the early 1980s. Computers have come from being isolated, redoubtable behemoths, to portable, friendly devices sitting on our desks or being carried around in hand bags. Concomitantly, there has been exponential growth in the amount, variety, scope, and power of the software that needs to support what we do with those ‘personal’ computing machines today. With the coming of the PC and its many subsequent variants, software engineers have become ever busier.

Global Software Development – As the Web’s presence increased throughout the 1990s and then into the new millennium, software engineering became a truly global enterprise. It is customary now for the customers, users, developers and managers of a software project to be dispersed across continents, time zones, and cultures. This makes software development something of a unique enterprise. In today’s typical software projects, development proceeds round-the-clock, through the collaboration of offshore and onsite team members. Global software development has deep economic as well as social implications within and without the software engineering profession.

Return of Open Source – Very simply, open source is about sharing the source code (as well as executables) of software developed by a particular group or individual for free, so that others can use or modify the code without paying any royalties. Open source was nothing special in the initial era of computing. Companies sold hardware, and the software came with it, for free. Academics shared code just as they shared ideas. When software became a commercial commodity in its own right, large corporations made every effort to stifle the free flow of code. The coming of the Web in the early 1990s gave open source aficionados the fast, reliable, and cheap media they needed to connect and build exciting and useful software. And then give it away for free. This is how open source returned, after being in exile for many years. Other than being an affirmation of intellectual freedom, the open source paradigm led to the re-examination of many fundamental principles of software development. Corporations large and small have come to recognize the power of open source and are keen to leverage it. Open source has fundamentally changed software development, and the change is here to stay.

The interplay of these trends – many of which overlap and influence one another – have shaped software engineering’s evolving journey. These are living trends, and they beget newer trends.

12 comments:

vinu said...

That pretty much summarizes the evolution of software engineering trends over the last couple of decades, all right, but the need of the hours are (or should be) machine portability and hopefully, a unified language.

Even now, we have issues with porting the same code into different machines running different OS'es without using a common compiler. Bringing a certain level of compatibility between the OS'es might be the key in this case. However, this is probably something that won't happen soon, considering the OS manufacturers use their "uniqueness" as a USP. Also, maybe a universalized processor/machine design might aid in this issue.

Now, a unified language, with the advantages of the commonly used languages is something to look forward to. Instead of a software engineer having to spend so much time trying to pick up a myriad of languages (which essentially perform the same function), developers could, someday, stick to one unified language, with a more natural, simpler syntax, thus attracting a lot more potential developers. Again, this would prove a hindrance if viewed from the commercial perspective, but just imagine how powerful such a tool can be!

Skanda Kumar [MT2010143] said...

The saying "Change is the only constant thing in this world" seems extremely apt to "Software Engineering" given the technological advancements taking place in this domain. Though the domain is changing at a rapid pace comapared to other fields, certain concepts which form the foundation for Software Engineering does not change that much. These underlying
principles are pretty deep rooted and only the way it is being looked at is changing. This changing view gives us a feeling that "Software Enginnering" as a whole is changing which is sometimes not.
Therefore having a strong hold on the basic priciples will
make us adaptable to this everchanging field.

Neelesh Malviya said...

NEELESH MALVIYA [MT2010086].
The journey of evolution of Software Engineering is still unremittingly progressing as it has passed very less time compared to other engineering disciplines to get fully mellowed. Withal as these trends adorn this evolution was unexpected and sublime as well.
Earlier Programming was spotted as the prima of SW development but gradually it shunted to Programming as well as Testing and now it has taken a wide rescission of diverse fields like Analysis, Designing, Testing, Programming, etc. This all is only due to the clout of digging past experiences of great Programmers in SW development.
Come to that, the progressivism of High Level Languages also gave this evolution a great underpin. Also it perpetrates the cause of Hardware Software decoupling.
The advent of PC oils the wheels of this evolution which slowly morphs the evolution to the Global SW Development. This forces the return of open sources. How systematically each trend influences one another are worth salt to lay eyes on because it may be possible that these living trends will provoke the new future trends of this unremittingly going on evolution!!

Gajendra (MT2010040) said...

As discussed in the blog it will have given a complete idea of software evolution with the technology. But even in the industry current trend are Aspect, Agile, Experimental, Model driven and Software product lines but this may be current trends but I don’t think if you ask this just 3 years back they may not even exist or that point of time it didn’t had that much of importance so this the phase at which software engineering techniques are changing or more of say as evolving but still people can come up with their own proposal for particular product development which will serve the purpose.
As per Robert G. Cooper, he defines the modern technique adapted by many software companies would be few listed in the below.
1. A unique, superior and differentiated product with good value-for-money for the customer.
2. A strong market orientation – voice of the customer is built in
3. Sharp, early, fact-based product definition before product development begins
4. Solid up-front homework – doing front end activities like market analysis well
5. True cross functional teams: empowered, resourced, accountable, dedicated leader
6. Leverage – Where the project builds on business’s technology and marketing competencies
7. Market attractiveness – size, growth, margins
8. Quality of the launch effort: well planned, properly resourced
9. Technological competencies and quality of execution of technology activities.
As per mentioned above he had given a long list of rules or guidelines which is been followed by the current software development process but all this things won’t be applied to every software development rather relevant features are taken from this universal set and they are used as a subset for their products.
The Open Source form of software development has captured the attention of academics and software practitioners alike. Though, this ‘phenomenon’ has been touted by some to be how all software will eventually be developed, many are critical about how far this form of organization will be successful. It is very likely that both the traditional form as well as the Open Source form of organization for software projects may co-exist. The increasing need for high quality and reliable software in spite of the increasing complexity of the applications. Though it is highly unlikely that the OS form of software development will completely replace the traditional commercial software development practice, there are important lessons that can be borrowed and applied from each other.
Organization in personnel
Informal Communication
Improved Customer Support

I feel like open source holds the edge over the current development since in the open source universe everything is freely available and if you take the current situation every software which is paid is almost available in the open source domain freely so what is necessary would be a sound principle of software design, development and complete knowledge of the domain or the product development in which he/she involved in.

Deepa R said...

"Change is the most inevitable thing that doesn't change in this world ".This philosophy holds good for software engineering as well which is still in its age of infancy.Evolutions and trends are indeed a result of this change.Sometimes,it does seem trivial to study about history/evolution of trends but it becomes most essential in order to prevent ourselves from being obsolete .

Every evolution is born out of necessity.For instance, in the case of high level languages,
* the flexibility of abstracting bulky ideas to concepts and
* facilitating faster development
paved the way for this trend.

With its exploding growth software is also becoming more prolific and ubiquitous.This can be attributed to
* Shrinking of H/W size
* Impact of S/W on exploring its need
* Commonly used among people as it has become more personalised.

Open source has indeed made a comeback and is here to stay as it is
* more reliable
* provides a platform for people to explore,play around and tweak with source code leading to exchange of new ideas,collaboration
and enhancement in the fields in which they are really passionate about.
This in turn may also lead to the development of new trends some day !

R Deepa,MT2010113

Anonymous said...

MT2010113,R Deepa

"Change is the most inevitable thing that doesn't change in this world ".This philosophy holds good for software engineering as well which is still in its age of infancy.Evolutions and trends are indeed a result of this change.Sometimes,it does seem trivial to study about history/evolution of trends but it becomes most essential in order to prevent ourselves from being obsolete .

Every evolution is born out of necessity.For instance, in the case of high level languages,
* the flexibility of abstracting bulky ideas to concepts and
* facilitating faster development
paved the way for this trend.

With its exploding growth software is also becoming more prolific and ubiquitous.This can be attributed to
* Shrinking of H/W size
* Impact of S/W on exploring its need
* Commonly used among people as it has become more personalized.

Open source has indeed made a comeback and is here to stay as it is
* more reliable
* provides a platform for people to explore,play around and tweak with source code leading to exchange of new ideas,collaboration
and enhancement in the fields in which they are really passionate about.
This in turn may also lead to the development of new trends some day !

Ashakiran said...

Asha Kiran B (MT2010017)

Like in the case of other engineeing domains, would you say things have not really got obsolete in this domain? Or is it too early to say that? We know that the old software were not really 'compliant' with the software engineering principles we discuss today! But we only make sure we do good 'maintainence'. Or have we completely replaced some important ones? Or is it that, software engineering principles have always been there, just that the 'terms' of today did not exist?

Is it completely obvious that software of today are superior in quality in comparison with their older cunterparts, simply because we now have our principles for good software engineering, defined to a good depth? I doubt!

Philip Joseph said...

Understanding history will ease our design of future. Lot many factors did influence the evolution of software engineering. From being a mere device for computation, computers have become an integral part of day to day life. The evolution of software engineering can be tied up along with this. From the locked rooms of labs to the laps of common man, the journey of computers is closely associated with this evolution. The role of softwares are vital in this aspect. In fact this transition took place with the support of a new evolving area known as software engineering. To interact with the users, the machines required some interface and as mentioned in the earlier post the changes pushed developers to search for new dimensions. This helped to formalize the development of softwares. Rues, methodologies, frameworks and approaches came into picture. From there onwards evolution is motivated by the various factors as mentioned by the author. This will continue as changes will keep on influencing the software development.

MT2010101

Aditya Sriram M said...

1. Yes, evolution is a must for any engineering discipline and more required for a stream like Software Engineering(SE) which has the capacity to guide or even shatter the Economical and Social growth of the World altogether. Globalization brought about this interconnections across the nations.

2. And to sustain this profession, we have to master the intricacies involved due to

a. intrinsic factors like Cost, Quality, Maintenance and Support; and

b. extrinsic factors like the Internet, Web, Newer Technologies and Frameworks and Hardware, growing energy conscious, Malicious software, Open Source, Piracy (major challenge - 40% of software is Pirated) and tackle them meticulously.

This is a greater challenge than developing the Software itself which needs continuous monitoring. This ultimately leads to methodologies which tend to evolve this subject.

3. Now that we have reached the end of Moores law and still our needs never seem to be satiated, new programming paradigms are already coming into play like parallel, distributed, cloud computing etc. Locks will sooner be replaced with Trasactional Memory. These can in turn bring in new programming langs or bring in major changes to the existing ones. Fortress, X10, Chapel which inherently address them are already underway.

So, its a never ending process until human needs are saturated which never happens :).

Aditya[MT2010007]

Shreya Barsaiyan said...

Shreya Barsaiyan[MT2010138]

I really have the urge to describe the software crisis that led to the term called software engineering:
During the four decades from 50's to 80's there was kind of famine of the failures in software development. Many projects failed and led to catastrophe in the economy of several organizations and even countries. There were cost and budget overruns, property damage due to lack of security and awareness and in some cases this crisis also led to casualties(In case of failures of embedded systems specially used in medical field). The major reasons for the crisis being complexity, expectations, and change in software. And hence the field of software engineering emerged to provide solution to the software crisis.
Several methods were proposed to complete projects within budget and time.In addition also build software that is efficient and higher in quality.
However, it was agreed that there is no "A SOLUTION" to the problem.
The very famous paper "No Silver Bullet" by Fred Brooks, addresses the problem that no single technology can lead to 10 fold improvement in s/w productivity in 10 years. However, this did not fail the purpose of Software Engg and in fact several techniques combined formed the Silver Bullet. Some of those methodologies are Project management, spread sheet calculators etc.
The issue was of course solved to extent that Software Development is now a systematic procedure and not a random sequence of activities. Yet, there are lots of ifs and buts to the methodologies used and the overheads due to implementation of these methods.

Anonymous said...

Y Sundeep
(MT2010170)

since there are many domains that are already existing and many more evolving it is good for software engineering to automate tools for building the domains as they evolve till they standardize. As we have discussed previously about the change and complexity related to software engineering instead of trying for a humongous standard which covers all domains it is good to standardize for each of them separately and evolve with the future.

krishna said...

As everyone thought that Moore's law ended i.e the number of transistors can not be increased beyond a limit in a CPU. This happened some 7-9 yrs back. From then onwards instead of increasing the transistors, the number of cores in the CPU has been increased. But now INTEL came with an innovative idea of increasing transistors in 3D rather than in 2D. INTEL says that the transistor will offer performance and efficiency benefits over 2-D models when becomes production ready in a new range of microprocessors later this year.
Reference:
http://www.hindu.com/seta/2011/05/19/stories/2011051950191300.htm