| 1.) What is software engineering? Software engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software. The term software engineering first appeared in the 1968 NATO Software Engineering Conference and was meant to provoke thought regarding the current "software crisis" at the time. Since then, it has continued as a profession and field of study dedicated to creating software that is of higher quality, more affordable, maintainable, and quicker to build. Since the field is still relatively young compared to its sister fields of engineering, there is still much debate around what software engineering actually is, and if it conforms to the classical definition of engineering. It has grown organically out of the limitations of viewing software as just programming. Software development is a term sometimes preferred by practitioners in the industry who view software engineering as too heavy-handed and constrictive to the malleable process of creating software. a.) What is a software?
Computer software, or just software is a general term used to describe the role that computer programs, procedures and documentation play in a computer system. Computer software is often regarded as anything but hardware, meaning that the "hard" are the parts that are tangible while the "soft" part is the intangible objects inside the computer. Software encompasses an extremely wide array of products and technologies developed using different techniques like programming languages, scripting languages or even microcode or a FPGA state. The types of software include web pages developed by technologies like HTML, PHP, Perl, JSP, ASP.NET, XML, and desktop applications like OpenOffice, Microsoft Word developed by technologies like C, C++, Java, C#, etc. Software usually runs on an underlying software operating systems such as the Linux or Microsoft Windows. Software also includes video games and the logic systems of modern consumer devices such as automobiles, televisions, toasters, etc.
Computer software is so called to distinguish it from computer hardware, which encompasses the physical interconnections and devices required to store and execute (or run) the software. At the lowest level, software consists of a machine language specific to an individual processor. A machine language consists of groups of binary values signifying processor instructions that change the state of the computer from its preceding state. Software is an ordered sequence of instructions for changing the state of the computer hardware in a particular sequence. It is usually written in high-level programming languages that are easier and more efficient for humans to use (closer to natural language) than machine language. High-level languages are compiled or interpreted into machine language object code. Software may also be written in an assembly language, essentially, a mnemonic representation of a machine language using a natural language alphabet. Assembly language must be assembled into object code via an assembler.
b.) How do you engineer a software?
One can engineer a software by having sufficient knowledge about programming, a careful and systematic analysis, design, programming, testing, debugging and development. One must also perform analysis, design, coding, testing and deployment in order to complete basic software development.
c.) Who could be considered a software engineer?
A software engineer is a person who applies the principles of software engineering to the design, development, testing, and evaluation of the software and systems that make computers or anything containing software, such as chips work. Most employers prefer applicants who have at least a bachelor’s degree and experience with a variety of computer systems and technologies. In order to remain competitive, computer software engineers must continually strive to acquire the latest technical skills. Advancement opportunities are good for those with relevant experience. Education and training. Most employers prefer applicants who have at least a bachelor’s degree and broad knowledge of, and experience with, a variety of computer systems and technologies. The usual college major for applications software engineers is computer science or software engineering. Systems software engineers often study computer science or computer information systems. Graduate degrees are preferred for some of the more complex jobs. In 2006, about 80 percent of workers had a bachelor’s degree or higher. Academic programs in software engineering may offer the program as a degree option or in conjunction with computer science degrees. Because of increasing emphasis on computer security, software engineers with advanced degrees in areas such as mathematics and systems design will be sought after by software developers, government agencies, and consulting firms. Students seeking software engineering jobs enhance their employment opportunities by participating in internships or co-ops. These experiences provide students with broad knowledge and experience, making them more attractive to employers. Inexperienced college graduates may be hired by large computer and consulting firms that train new employees in intensive, company-based programs. Certification and other qualifications. Systems software vendors offer certification and training programs, but most training authorities say that program certification alone is not sufficient for the majority of software engineering jobs. People interested in jobs as computer software engineers must have strong problem-solving and analytical skills. They also must be able to communicate effectively with team members, other staff, and the customers they meet. Because they often deal with a number of tasks simultaneously, they must be able to concentrate and pay close attention to detail. As technology advances, employers will need workers with the latest skills. Computer software engineers must continually strive to acquire new skills if they wish to remain in this dynamic field. To help keep up with changing technology, workers may take continuing education and professional development seminars offered by employers, software vendors, colleges and universities, private training institutions, and professional computing societies. Computer software engineers also need skills related to the industry in which they work. Engineers working for a bank, for example, should have some expertise in finance so that they understand banks’ computer needs. Advancement. As with most occupations, advancement opportunities for computer software engineers increase with experience. Entry-level computer software engineers are likely to test designs. As they become more experienced, engineers may begin helping to design and develop software. Eventually, they may advance to become a project manager, manager of information systems, or chief information officer, especially if they have business skills and training. Some computer software engineers with several years of experience or expertise find lucrative opportunities working as systems designers or independent consultants.
d.) What are the stages of Computer Engineering?
There are various software development approaches defined and designed which are used/employed during development process of software, these approaches are also referred as "Software Development Process Models". Each process model follows a particular life cycle in order to ensure success in process of software development. One such approach/process used in Software Development is "The Waterfall Model". Waterfall approach was first Process Model to be introduced and followed widely in Software Engineering to ensure success of the project. In "The Waterfall" approach, the whole process of software development is divided into separate process phases. The phases in Waterfall model are: Requirement Specifications phase, Software Design, Implementation and Testing & Maintenance. All these phases are cascaded to each other so that second phase is started as and when defined set of goals are achieved for first phase and it is signed off, so the name "Waterfall Model". All the methods and processes undertaken in Waterfall Model are more visible. The stages of "The Waterfall Model" are: Requirement Analysis & Definition: All possible requirements of the system to be developed are captured in this phase. Requirements are set of functionalities and constraints that the end-user (who will be using the system) expects from the system. The requirements are gathered from the end-user by consultation, these requirements are analyzed for their validity and the possibility of incorporating the requirements in the system to be development is also studied. Finally, a Requirement Specification document is created which serves the purpose of guideline for the next phase of the model.
System & Software Design: Before a starting for actual coding, it is highly important to understand what we are going to create and what it should look like? The requirement specifications from first phase are studied in this phase and system design is prepared. System Design helps in specifying hardware and system requirements and also helps in defining overall system architecture. The system design specifications serve as input for the next phase of the model.
Implementation & Unit Testing: On receiving system design documents, the work is divided in modules/units and actual coding is started. The system is first developed in small programs called units, which are integrated in the next phase. Each unit is developed and tested for its functionality; this is referred to as Unit Testing. Unit testing mainly verifies if the modules/units meet their specifications.
Integration & System Testing: As specified above, the system is first divided in units which are developed and tested for their functionalities. These units are integrated into a complete system during Integration phase and tested to check if all modules/units coordinate between each other and the system as a whole behaves as per the specifications. After successfully testing the software, it is delivered to the customer. Operations & Maintenance: This phase of "The Waterfall Model" is virtually never ending phase (Very long). Generally, problems with the system developed (which are not found during the development life cycle) come up after its practical use starts, so the issues related to the system are solved after deployment of the system. Not all the problems come in picture directly but they arise time to time and needs to be solved; hence this process is referred as Maintenance.
2.) What are the social impacts of Software Engineering? Software engineers affect society by creating applications. These applications produce value for users, and sometimes produce disasters. • Community-centered: Software is produced and consumed by and/or for a community rather than focusing on individuals • Collaboration/collectiveness: Exploiting the collaborative and collective capacity of human beings • Companionship/relationship: Making explicit the various associations among people • Human/social activities: Software is designed consciously to support human activities and to address social problems • Social inclusion: Software should enable social inclusion enforcing links and trust in communities One of the main observations in the field is that the concepts, principles, and technologies made for social software applications are applicable to software development itself as software engineering is inherently a social activity. It is not limited to specific activities of software development. Accordingly, tools have been proposed supporting its different parts, for instance, social system design or social requirements engineering
a.) How does software engineering affects the software industry?
Software Engineering affects the software industry in various ways by creating applications.
3.) What are the current trends in software engineering? Introducing Middleware. In many ways, humans have been integral to the operation of computer networks, since the dawn of the computer age. In the early 1980’s computers had moved beyond governmental, military and research institutions, and were becoming more common among corporations. At this stage of their evolution, computer applications were stand-alone. The finance applications of the world lived inside mainframes, and interacted with humans via green screen terminals. The order management systems of the world interacted likewise. Humans were the network, as information could only flow between systems through human intermediaries. For example, a clerk would run a report on one system and re-key the results into the other. Humans being intelligent, could enforce policies on the flow of information. They could decide what information was appropriate to flow between systems, how quickly it should flow, and how the flow should be achieved. On the other hand, humans, being error prone, caused this flow of information to be slow, laborious and costly. One day while typing yet another report, a clerk dreamed of letting the computers talk to each other directly. Suddenly, the network revolution had begun. While the idea was sound, the reality of facilitating this was difficult. Henning (2006) notes, that “persuading programs on different machines to talk to each other was a nightmare, especially if different hardware, operating systems, and programming languages were involved: programmers either used sockets and wrote an entire protocol stack themselves or their programs didn’t talk at all”. What was needed was some sort of automated intermediary between systems.
More than just a translator was required, this intermediary would have to assume responsibility for enforcing the information flow policies which humans had heretofore administered. Hence middleware was born. The core requirements for middleware have changed little. It is still responsible for marshalling communications between disparate and often incompatible computer systems, while ensuring that information flows between systems, where necessary, in a reliable, secure, and dependable way. Introducing Service Oriented Architecture. Issarny, Caporuscio and Georgantas (2007) give a good introduction to the evolution of middleware systems since the network revolution. In many respects, Service Oriented Architecture can be seen as the latest generation within this evolutionary process. The demands placed on computer systems have also grown since the early 1980s. While middleware began as a way to facilitate communications within a corporation’s network of computer systems, end users and corporations are increasingly expecting systems across corporations to communicate. Sarna-Starosta, Stirewalt, & Dillon (2007) use a travel booking application as an example of service oriented interaction. Perhaps expedia.com is one of the best examples of this type of application. Using expedia, you are aggregating information from several individual airline, hotel and car hire corporations into one location so as to book flights, hotel and car hire for your next vacation or business trip. Without middleware and specifically service oriented architecture, building an application like this would be prohibitively expensive if even possible.
4.) Research for the different career paths of a software engineer and its demand in the Philippine Software Industry. Senior Technical Positions Developers will often find that they may have to work side-by-side with the users to iron out difficult bugs. It can be difficult, if not impossible, to fix these problems when both parties can't communicate effectively. There was always a time in most of my work situations when the developer had to talk with the users or other developers directly to fix difficult issues. This is the programmer's chance to show management that he or she is someone who can communicate and utilize analysis methodologies—otherwise known as a "programmer analyst." A programmer analyst is also usually someone who has some years of technical experience, and a certain depth of technical knowledge. Business and Systems Analysts My job searches have suggested that business and systems analysts with a good programming background and a high-level of "business savvy" are becoming the next hot ticket. More and more organizations are finally hiring business analysts to explore, record, and recommend systems that fit the business—as opposed to the other way around. Project Management According to the Bureau of Labor Statistics' Occupational Handbook, employers prefer project managers who possess advanced technical skills that have been acquired through work experience. The project manager is often responsible for hiring the staff, setting the schedule, and keeping track of the progress through every phase of development. This person is also responsible for assigning the work, dealing with everyday problems affecting that work, and making sure each analyst or programmer is carrying his own weight. The project manager can best carry out this function if he truly understands the work he is managing. Management The ultimate assignment for many IT professionals looking to move up the IT food chain is to become the manager. The Occupational Handbook explains that "employment of computer and information systems managers is expected to grow faster than the average for all occupations through the year 2014." These job opportunities are best suited for applicants with computer-related work experience and often require an advanced degree, such as an MBA. And of course, strong communication skills are a requirement for any management job in IT. Industry in the Philippines • Technical Consulting/ Business Analysis • Application Development & Deployment • Package Implementation • Application Conversion & Integration • Application Maintenance & Support Software Development Filipino software companies have been providing offshore and outsourced software development services for more than two decades. Most of the outsourcing opportunities come from the US, Japan and Europe. As of 2007, there are nearly 400 companies and 21,000 software developers with skills ranging from the most current and widely-used technologies such as Java, C#, VB, .NET, Ruby, C/C++, SQL DBA, Embedded, Mobile and Wireless systems to legacy and mid-ware languages such as COBOL and RPG/ 400. • Service Desk • Maintenance • Asset Management • Remote Network |