Software Engineering History
The world in which we live is dependent on software. It permeates every corner of our lives and those around us. It’s second only to nature and the laws of physics, however, it is not governed by either. Software is an abstract concept that is limited by the people designing it and, often more so, the person using it. Software engineering is a relatively young discipline and much has been learnt and developed in the last 50 years.
Software engineers are involved in the design and development of operating systems, networks and software. Software engineers use a variety of different languages to build a full program. These languages include HTML 5 Flash and Java, to name but a few as the list is endless and ever increasing. A software engineers primary role can be in the development of algorithms while analysing and solving problems but a good software engineer must be competent in the writing of code to implement these algorithms.
A Little History:
Software engineering came into being with the introduction of the first modern computers in the 1940s. The software would manage and control the computer specifying how different actions affect different processes. With software engineering, specific programming languages began appearing in the 1950s. These languages included FORTAN, ALGOL and COBOL.
During the 1960’s many more advances were made. In 1967 the SIMULA language allowed for object-oriented programming. In 1969 the operating system software used to manage the hardware was introduced by UNIX. With the advances in programming more complex hardware was built. In the mid 1970s seventies microcomputers were introduced. Microcomputers were cheap enough for hobbyists to obtain and build programs with. This led to the personal computer also known as PC and Microsoft Windows series which is currently the most used operating system series. Along with the rise of the personal computer new SIMULA inspired object-oriented languages came into being. This included objective C and C++ that later would be used to program popular applications for mobile operating systems. Open source software began in the early 1990s with LINUX and other software developed by hobbyists. Hobbyists developed replica programs and brought new features to current software through add-ons.
The development and proliferation of the internet and intranet change the fields of software engineering again. Around this time, the programming language Java was introduced as a vehicle for software delivery.
While there is no specific way to become a software engineer there is currently different thinkings as to what it takes to become a professional software engineer. Some people favour the formal education route while others believe that experience and general aptitude make more of an impact. A sizeable proportion of software engineers have a degree in computer science, information systems, or information technology. A small but growing group of software engineers have obtained a degree in software engineering.
Engineers work with businesses, government agencies, and non-profit organisations, helping create websites and computer programs. Some software engineers work as freelancers, self-employed and not committed to a single employer. Hobbyists have often successfully made the transition to professional software engineers and programmers.
Software engineer can arguably be classed as an umbrella term for various roles. In recent years it has become somewhat unacceptable to call people coders as this is often not the primary role of a software engineer. Just like in other disciplines, one job title can be equally divided among various considerations. The titles are borrowed from other industries. There is no hard and fast rule that one person cannot fulfil more than one role. In fact it is often the case that one person follows through projectt from start to completion.
The software architect is the one who is responsible for implementing specific requirements of a project. Decisions are made to suit the design of a program to the requirements thereof. For example, if there is a requirement for speed, then the software architect would need to ensure that a real time computing language is used.
They deal with the high level arrangements of a project from choosing technologies to be used to conversion of business conditions to engineering conditions. A great deal of experience is needed in the fulfilment of this role as it requires the architect to be familiar with all necessary options and to keep up to date with various different methodologies. It is a role that require that the architect is not just familiar with the technology but is competent in the business practice also. The software architect is often a liaison between the project manager and the rest of the team.
The role is a very important one financially. Since an undetected issue at the beginning of a project can cost more to repair(by a factor of 100x) than one detected at the end.
Design is the next piece of the puzzle and the next phase of successful software development. It is concerned with developing the specifications set out by the software architect. The designer has many duties but depending on the project these may be more limited. For instance, if the software requires a user interface, the designer may only need to concern themselves with implementation of pseudocode and/or flowcharts acting as an illustration of the aforementioned architecture. Establishing of the requirements is paramount to the successful design of a system or program. One may consider the software designers role as that of developing a blueprint of sorts for the project. The design process can vary from one person to another or from one project to another. The project can be designed in one large go or a more simplistic approach can be taken where the fundamentals are addressed primarily and further aspects are dealt with as add ons.
Common to the architecture role, the designer should be aware of potential bugs and address these as early as possible. To this end, a designer will invariably attempt different design options in an effort to identify same.
Down to the nitty gritty. The programmer is the one who gets to collate all the good work of the architect and the designer and present a culmination of their efforts to a final end user. Programming is primarily concerned with the writing of code, debugging, testing and general maintenance of software or programs. In systems or programs where there is an actual end user, the programmer is responsible for designing and providing a graphical user interface. The programmer is the last step and as such it is during this time that any issues or errors should be recognised and addressed. As pointed out previously, the earlier a prospective issue is realised, the less financial impact that it will have on the project.
The key to effective software development seems to lie most recently in the development of different methodologies such as ‘Agile Software Development’. This relies on the collaborative efforts of a team in reaching an end goal. It’s success lies in its flexibility and ability to adapt.
Software Engineering has evolved over a relatively short period of time to become what it is today. It is not only a profession but a hobby and passion of many. It flows through virtually every aspect of our lives, whether we are consciously aware of it or not. In the scheme of things it is relatively young but has come a long way in a short space of time. The craft is only limited by the human element and we are expanding both our abilities and system capabilities at an exponential rate. The future is an exciting place.
Sommerville, I. (2011). Software engineering. Boston: Pearson.
Software engineering. (n.d.). Retrieved January 20, 2017, from https://en.wikipedia.org/wiki/Software_engineering
History of software engineering. (n.d.). Retrieved January 20, 2017, from https://en.wikipedia.org/wiki/History_of_software_engineering
Software architecture. (n.d.). Retrieved January 20, 2017, from https://en.wikipedia.org/wiki/Software_architecture
Software design. (n.d.). Retrieved January 20, 2017, from https://en.wikipedia.org/wiki/Software_design
What is a Computer Programmer? (n.d.). Retrieved January 20, 2017, from https://www.sokanu.com/careers/computer-programmer/
Agile Software Development: Principles, Patterns, and Practices av Robert C Martin (Häftad). (n.d.). Retrieved January 21, 2017, from http://www.bokus.com/bok/9780132760584/agile-software-development-principles-patterns-and-practices/
...(download the rest of the essay above)