Introduction to Software Engineering
- Software engineering is about teams. The problems to solve are so complex or large, that a single developer cannot solve them anymore.
- Software engineering is also about communication.
- Teams do not consist only of developers, but also of testers, architects, system engineers, customer, project managers, etc.
- Software projects can be so large that we have to do careful planning.
- Implementation is no longer just writing code, but it is also following guidelines, writing documentation and also writing unit tests. But unit tests alone are not enough.
- The different pieces have to fit together. And we have to be able to spot problematic areas using metrics. They tell us if our code follows certain standards.
- Once we are finished coding, that does not mean that we are finished with the project: for large projects maintaining software can keep many people busy for a long time.
- Since there are so many factors influencing the success or failure of a project, we also need to learn a little about project management and its pitfalls, but especially what makes projects successful.
- And last but not least, a good software engineer, like any engineer, needs tools, and you need to know about them.
- When the first modern digital computers appeared in the early 1940s, the instructions to make them operate were wired into the machine.
- At this time, people working with computers were engineers, mostly electrical engineers.
- This hardware centric design was not flexible and was quickly replaced with the “stored program architecture” or von Neumann architecture.
- Thus the first division between “hardware” and “software” began with abstraction being used to deal with the complexity of computing.
- Programming languages started to appear in the 1950s and this was also another major step in abstraction.
- Major languages such as Fortran, ALGOL, and COBOL were released in the late 1950s to deal with scientific, algorithmic, and business problems respectively. E.W. Dijkstra wrote his seminal paper, “Go To Statement Considered Harmful”,in 1968 and David Parnas introduced the key concept of modularity and information hiding in 1972 to help programmers deal with the ever increasing complexity of software systems.
- A software system for managing the hardware called an operating system was also introduced, most notably by Unix in 1969. In 1967, the Simula language introduced the object-oriented programming paradigm.
- These advances in software were met with more advances in computer hardware.
- In the mid 1970s, the microcomputer was introduced, making it economical for hobbyists to obtain a computer and write software for it. This in turn led to the now famous Personal Computer (PC) and Microsoft Windows.
- The Software Development Life Cycle or SDLC was also starting to appear as a consensus for centralized construction of software in the mid 1980s.
- The late 1970s and early 1980s saw the introduction of several new Simula-inspired object-oriented programming languages, including Smalltalk, Objective-C, and C++.
- Open-source software started to appear in the early 90s in the form of Linux and other software introducing the “bazaar” or decentralized style of constructing software.
- Then the World Wide Web and the popularization of the Internet hit in the mid 90s, changing the engineering of software once again.
- Distributed systems gained sway as a way to design systems, and the Java programming language was introduced with its virtual machine as another step in abstraction. Programmers collaborated and wrote the Agile Manifesto, which favored more lightweight processes to create cheaper and more timely software.
- The current definition of software engineering is still being debated by practitioners today as they struggle to come up with ways to produce software that is “cheaper, better, faster”. Cost reduction has been a primary focus of the IT industry since the 1990s.
- Total cost of ownership represents the costs of more than just acquisition. It includes things like productivity impediments, upkeep efforts, and resources needed to support infrastructure.
- Software engineering is done by the software engineer, an engineer who applies the principles of software engineering to the design, development, testing, and evaluation of software and systems that make computers or anything containing software work.
- There has been some controversy over the term engineer, since it implies a certain level of academic training, professional discipline, adherence to formal processes, and especially legal liability that often are not applied in cases of software development.
- In 2004, the U. S. Bureau of Labor Statistics counted 760,840 software engineers holding jobs in the U.S.; in the same period there were some 1.4 million practitioners employed in the U.S. in all other engineering disciplines combined.