Why Do We Need Software Engineering?

To understand the necessity for software engineering, we must pause briefly to look back at the recent history of computing. This history will help us to understand the problems that started to become obvious in the late sixties and early seventies, and the solutions that have led to the creation of the field of software engineering. These problems were referred to by some as “The software Crisis,” so named for the symptoms of the problem. The situation might also been called “The Complexity Barrier,” so named for the primary cause of the problems. Some refer to the software crisis in the past tense. The crisis is far from over, but thanks to the development of many new techniques that are now included under the title of software engineering, we have made and are continuing to make progress.

In the early days of computing the primary concern was with building or acquiring the hardware. Software was almost expected to take care of itself. The consensus held that “hardware” is “hard” to change, while “software” is “soft,” or easy to change. According, most people in the industry carefully planned hardware development but gave considerably less forethought to the software. If the software didn’t work, they believed, it would be easy enough to change it until it did work. In that case, why make the effort to plan?

The cost of software amounted to such a small fraction of the cost of the hardware that no one considered it very important to manage its development. Everyone, however, saw the importance of producing programs that were efficient and ran fast because this saved time on the expensive hardware. People time was assumed to save machine time. Making the people process efficient received little priority.

This approach proved satisfactory in the early days of computing, when the software was simple. However, as computing matured, programs became more complex and projects grew larger whereas programs had since been routinely specified, written, operated, and maintained all by the same person, programs began to be developed by teams of programmers to meet someone else’s expectations.

Individual effort gave way to team effort. Communication and coordination which once went on within the head of one person had to occur between the heads of many persons, making the whole process very much more complicated. As a result, communication, management, planning and documentation became critical.

Consider this analogy: a carpenter might work alone to build a simple house for himself or herself without more than a general concept of a plan. He or she could work things out or make adjustments as the work progressed. That’s how early programs were written. But if the home is more elaborate, or if it is built for someone else, the carpenter has to plan more carefully how the house is to be built. Plans need to be reviewed with the future owner before construction starts. And if the house is to be built by many carpenters, the whole project certainly has to be planned before work starts so that as one carpenter builds one part of the house, another is not building the other side of a different house. Scheduling becomes a key element so that cement contractors pour the basement walls before the carpenters start the framing. As the house becomes more complex and more people’s work has to be coordinated, blueprints and management plans are required.

As programs became more complex, the early methods used to make blueprints (flowcharts) were no longer satisfactory to represent this greater complexity. And thus it became difficult for one person who needed a program written to convey to another person, the programmer, just what was wanted, or for programmers to convey to each other what they were doing. In fact, without better methods of representation it became difficult for even one programmer to keep track of what he or she is doing.

The times required to write programs and their costs began to exceed to all estimates. It was not unusual for systems to cost more than twice what had been estimated and to take weeks, months or years longer than expected to complete. The systems turned over to the client frequently did not work correctly because the money or time had run out before the programs could be made to work as originally intended. Or the program was so complex that every attempt to fix a problem produced more problems than it fixed. As clients finally saw what they were getting, they often changed their minds about what they wanted. At least one very large military software systems project costing several hundred million dollars was abandoned because it could never be made to work properly.

The quality of programs also became a big concern. As computers and their programs were used for more vital tasks, like monitoring life support equipment, program quality took on new meaning. Since we had increased our dependency on computers and in many cases could no longer get along without them, we discovered how important it is that they work correctly.

Making a change within a complex program turned out to be very expensive. Often even to get the program to do something slightly different was so hard that it was easier to throw out the old program and start over. This, of course, was costly. Part of the evolution in the software engineering approach was learning to develop systems that are built well enough the first time so that simple changes can be made easily.

At the same time, hardware was growing ever less expensive. Tubes were replaced by transistors and transistors were replaced by integrated circuits until micro computers costing less than three thousand dollars have become several million dollars. As an indication of how fast change was occurring, the cost of a given amount of computing decreases by one half every two years. Given this realignment, the times and costs to develop the software were no longer so small, compared to the hardware, that they could be ignored.

As the cost of hardware plummeted, software continued to be written by humans, whose wages were rising. The savings from productivity improvements in software development from the use of assemblers, compilers, and data base management systems did not proceed as rapidly as the savings in hardware costs. Indeed, today software costs not only can no longer be ignored, they have become larger than the hardware costs. Some current developments, such as nonprocedural (fourth generation) languages and the use of artificial intelligence (fifth generation), show promise of increasing software development productivity, but we are only beginning to see their potential.

Another problem was that in the past programs were often before it was fully understood what the program needed to do. Once the program had been written, the client began to express dissatisfaction. And if the client is dissatisfied, ultimately the producer, too, was unhappy. As time went by software developers learned to lay out with paper and pencil exactly what they intended to do before starting. Then they could review the plans with the client to see if they met the client’s expectations. It is simpler and less expensive to make changes to this paper-and-pencil version than to make them after the system has been built. Using good planning makes it less likely that changes will have to be made once the program is finished.

Unfortunately, until several years ago no good method of representation existed to describe satisfactorily systems as complex as those that are being developed today. The only good representation of what the product will look like was the finished product itself. Developers could not show clients what they were planning. And clients could not see whether what the software was what they wanted until it was finally built. Then it was too expensive to change.

Again, consider the analogy of building construction. An architect can draw a floor plan. The client can usually gain some understanding of what the architect has planned and give feed back as to whether it is appropriate. Floor plans are reasonably easy for the layperson to understand because most people are familiar with the drawings representing geometrical objects. The architect and the client share common concepts about space and geometry. But the software engineer must represent for the client a system involving logic and information processing. Since they do not already have a language of common concepts, the software engineer must teach a new language to the client before they can communicate.

Moreover, it is important that this language be simple so it can be learned quickly.

Software Engineering College Programs

In case you are looking to undergo a software engineering college program, it is possible through available courses that have been created. Software programming encompasses a large number of subjects which not only seek to educate you but to sharpen your skills in the information technology field. A software programming college with courses on the latest trends of software is definitely one that aspiring students should enroll in to discover the software engineering field.

A Software engineering school is available but it is important to consider various factors when choosing a school. You need to check whether a school has all the required equipment and whether it has qualified staff to teach and shape you for your career. There are many areas in which a student at a software programming school can specialize in: game engine programming, real time simulation, graphics, computer networking and software development and testing.

Digital audio technology is one area a student can study. This is a program whereby student are taught about the audio productions and basically how sound is transformed. Through the learning in the software engineering college, students are taught skills and principles that come with digital audio technology. Digital Art and Animation is a study of entertainment, 3D modeling, Game design, 3D animation and it is available for student with an interest of becoming producers and graphic designers.

Building one’s portfolio is a very important thing and going to a software engineering college will help you in doing that. The college will offer you integrated lectures and lab work, project based education, laboratories equipped with industrial grade hardware and software, caring faculty with industrial experience, current curricula covering latest technological advances, sponsored research and development opportunities. There are various requirements that you need before enrolling to an engineering college and they are: three years of high school English including composition and literature, one year of high school lab science and two years of high school mathematics including geometry and algebra. To be part of the knowledgeable society in software engineering join a school that is driven by an ambition to make things happen.

The Software Engineer Today

Who is the programmer today?

If we ask somebody in the street “Who is the programmer?”, what does he or she answer? I believe something like “A person who sits behind the computer and creates program code” or “A person who programs actually! What a stupid question?”. Not everyone exactly understand that successful software development requires many different activities besides code construction. The approach that includes all such activities is called Software Engineering. Let’s see the important stages, that all together form software engineering.

1) Requirements.When a project starts, we have to elicit requirements for it, thoroughly handle them and create the document that is known as Software Requirements Specification. Requirement specialists start collecting requirements in the very beginning of the project and update them until the projects is ended to keep them relevant and correct mistakes that occurred during the implementation. Software Requirements Specification is a result of this process. The document contains information obtained from users, technical standards, and business rules and other.

2) Design. The other important activity is design. It includes overall planning of the project, building models and prototypes. Software Engineering standards distinguish two separate activities within the design stage: software architectural design and software detailed design. The first one is planning of the whole system, when the second one is more thorough planning of its components.

3) Construction. The next activity is actually code construction. Most people consider this thing as programming. Engineers create program code using different programming languages and software construction tools that dramatically improve the speed of the process.

4) Testing. When the code is created software engineers must test them. Testing is an activity of product quality assessment and improvement. This stage is often performed by a separate team of testers. It also can be outsourced, because external testers can check the quality impartially.

5) Maintenance. Even when all implementation activities are completed, the work on the project is not. The maintenance stage starts then. It is necessary to provide cost-effective support to software. However, even now we are talking about only post-delivery stage, which includes such things as software modifications and user trainings. However, there is another one known as pre-delivery maintenance, which includes planning of actions for post-delivery stage.

Now I think that even if you are not closely connected to programming, you know the main activities it includes, and I am sure that you realize that the programmer must do much more than only code construction.

Getting Started On Your Career Path As A Software Engineer

When you are at the crossroads of your career, you might stop and contemplate the advantages of becoming a software engineer. Every business has its own computer systems or might require personalized programs to be written for them. A software developer or engineer writers or manages computer systems and programs, and helps a business keep in pace with the rapidly changing world of technology.

If your chosen career path is on the lines of becoming a software engineer or a software developer, there are some skills and qualifications that you need to acquire. You also need to determine which field of software engineering you would like to enter into and master. If networking or computer system administration is your forte, you would require specialized training in those areas. On the other hand, if you would like to get into the world of development, you will need specific training on a programming language of your choice, or a group of languages that go hand in hand.

What To Study

Most companies require that you have at least a Bachelor’s degree in any computing stream, science or applied math, before you can be taken on as even an inexperienced software engineer. With some companies, your experience counts towards educational qualifications, but those that consider work experience above qualifications are not really found around every corner.

If you’ve decided on a specialty in software engineering or development, consider getting a diploma or additional certification in that specialty. Apart from equipping you with skills in your preferred niche, it highlights your abilities to prospective employers and helps narrow down your job search.

Required Skills

To pursue a career in software engineering, you need to have strong analytical abilities as well as the ability to pay careful attention to minute details. You also should be able to work well in groups, think creatively, be proactive and understand the business process and technical processes followed in different organizations. Good communication skills, and the ability to rise to the occasion in the event of crucial projects is also vital.

Job Prospects

Once you’ve got your degree and certifications in hand, you are all set to jump into the job market and showcase your skill to prospective employers. Many larger companies with specialized computing requirements hire people fresh out of college and train them in a particular niche. While this is a good way in which to start off your career in software engineering, be prepared to sign a contract with these companies, since they will require you to stick around for at least a year after you get trained. After all, it would be unreasonable for them to train you and let you move on to another company without getting the full worth of the training they’ve invested in you.

If you would prefer to give the open job market a try, prepare a professional resume that highlights your educational qualifications, your skills, and any experience you might have acquired through internships during your degree. Prepare a brief covering letter introducing yourself to prospective employers, and you are all set on your career path as a software engineer!