During the last half century there has been some debate about whether areas of computer science should be considered one of the engineering disciplines. Certain experts in software development, design, and application feel they deserve to be called "software engineers." By now, most people accept the field of software engineering as a legitimate engineering discipline, and that trend is likely to continue reinforcing itself with time.
Although software engineering is a young field compared to other engineering disciplines such as chemical, electrical, or mechanical, it already has an exciting history full of valuable lessons derived from its early successes and failures. Software engineering covers a huge variety of topics originating both in computer science (such as development processes and methodologies, testing, and refactoring) and social science (such as software estimation metrics and techniques, risk management, and quality assurance). Everyone working with software, to one extent or another, can benefit from studying the history and fundamentals of software engineering.
A typical software engineering course may involve any combination of the following topics:
- Traditional Software Development Processes and Methodologies (Waterfall, UP, RUP, etc.)
- Modern Software Development Processes and Methodologies (XP, SCRUM, etc.)
- Software Development Life Cycle (SDLC) Models
- Requirements Gathering
- Initial (abstract) and Detailed System Analysis
- Initial (abstract) and Detailed System Design
- Testing Methodologies (Unit, White-Box/Black-Box, Integration, User Aceptance, Interface, Test-Driven Development, etc.)
- Software Maintenance and Refactoring
- Software Architectures and Paradigms (2/3/N-Tier Systems, Client-Server Model, P2P Model, Distributed Computing, Service Oriented Architectures (SOAs), RESTful Paradigm, SOAP Paradigm, WS-* Standards, Cloud Computing, Software as a Service (SaaS), Platform as a Service (PaaS), etc.)
- Project Management
- Software Metrics and Estimation Techniques
- Risk Management (Planning and Mitigation)
- Software Quality Assurance
Software engineering has grown significantly and now encompasses a very diverse set of topics. Pressman's Software Engineering: A Practitioner's Approach is considered the best introductory book for computer science students along with Sommerville's classic Software Engineering. Frederick Brooks' The Mythical Man-Month is probably the most cited book in the field, detailing how the process of software development can go awfully wrong and stating for the first time that throwing more people on an ongoing project is far more likely to delay it! Code Complete by Steve McConnell and The Pragmatic Programmer by Andrew Hunt are a "must read" for anyone wanting to dive deeper, as is the Design Patterns: Elements of Reusable Object-Oriented Software, written by the famous "Gang of Four" (Erich Gamma, Richard Helm, Ralph Johnson, and John M. Vlissides), which changed forever the way software is developed. Finally, don't miss Joel Spolsky's blog and books, the definitive voice on modern topics of software engineering (or, "what you won't learn from your SE textbook"). For academic resources you should look into conference proceedings and journals published by the ACM, IEEE, Springer, Elsevier, Google Scholar, and CMU's Software Engineering Institute.
To fulfill our mission of educating students, our online tutoring centers are standing by 24/7, ready to assist students who need help with software engineering.