What is Software Engineering
Is the branch of computer science focused on designing, developing, testing, and maintaining software.
It applies engineering principles and programming skills to create software solutions.
Focuses on large,complex, software projects. It aims to improve quality, budget, and time efficiency.
Soft Eng Methodology - a framework for developing information systems, emphasizing planning and organization.
Agile Development Methodology - prioritizes customer satisfaction and communication, using short sprints and frequent feedback to make software changes
DevOps Deployment Methodology - united development and operations teams to enhance collaboration and efficiency in software development
Waterfall Development Method - sequential approach known for its simplicity; requiring each stage to be completed before moving to another; inflexible for projects with changing requirements
Rapid Action Development - involves defining requirements, creating prototype, testing and implementation; focuses on building prototypes
Software Engineering Tools
Integrated Development Environment (IDEs) and Code Editors
Visual Studio Code (VSCode)
Intellij IDEA
Eclipse
Version Control Systems
Git
Subversion (SVN)
Mercurial
Continuous Integration and Continuous Deployment (CI & CD) Platforms
Jenkins
Travis CI
Circle CI
Code Quality and Review Tools
SonarQube
CodeClimate
Review board
Database Management Systems
MySQL
PostgreSQL
MongoDB
Cloud Platforms and Services
Amazon Web Services
Microsoft Azure
Google Cloud Platform
Software Engineering vs Computer Science
Related fields but differ in focus and application
Software Engineering | Computer Science |
Application of systematic software engineering to the entire software development process. | Scientific study of computation, including hardware and software systems |
Focuses on the production of reliable and scalable software through structured methodologies | Emphasizes mathematical models, algorithmic process, and computational theory |
Incorporates real world constraints such as costs, deadlines, and user requirements | Provides foundation for techs such as AI, cybersecurity, and quantum computing |
Software Development Life Cycle (SLDC) | Algorithms and Data Structure |
Software Testing & Maintenance | Artificial Intelligence |
Project Management | Theory of Computation |
Quality Assurance | Computer Systems and Network |
Proficiency in programming languages | Strong mathematical foundation |
Understanding of software development methodologies (agile & waterfall) | Algorithm analysis and complexity theory |
Software testing and quality assurance techniques | Machine learning and AI frameworks |
Project and risk management skills | Problem-solving using computational models |
Collaboration and communication for large-scale systems development | Research and analytical thinking for new innovations |
Overlapping areas
Programming
Both require coding skills and knowledge of programming languages
Problem-solving
Critical thinking is essential for both practical and theoretical computations
System Design
Designing software systems and optimizing algorithms is shared responsibility
Emerging Technologies
Both contribute to fields like AI, cybersecurity, and cloud computing
Software Engineering Careers
Software Developer
System Architect
Quality Assurance Engineer
DevOps Engineer
Product Manager
Computer Science Careers
Data Scientist
AI Researchers
Computational Scientist
Software Engineer
Cyber Analyst
Key Differences
Feature | Software Engineering | Computer Science |
Focus | Practical design and implementation | Theoretical foundations of computation |
Goal | Delivering functional, efficient, and maintainable software | Understanding how computation works and innovating new algorithms |
Methodology | Applies structured engineering principles like SLDC | Employs theoretical and mathematical approaches |
Scope | Software applications, system architecture, project management | Theoretical computation, algorithm design, system modeling |
Software Engineering focus on practical, hands-on development and maintaining complex software systems using engineering methodologies
Computer Science delves into the theoretical and mathematical aspects of computation, driving innovation and new technological developments
Lesson 1.1: History and Evolution of Software Engineering
1940’s (Early Beginnings)
- software development is no yet a distinct field of study
- first programmers were scientists and mathematicians
- the invention of the first electronic computers gave rise to the idea of software development; binary instruction have to be manually entered into machine code and assembly language for programming
1950’s (Early Beginnings)
- Waterfall model developed for structured software development
- invention of high level programming like Fortran (1957) and COBOL (1959) revolutionized software development, making it more accessible and efficient
1960’s (Birth of SoftEng)
- Margaret Hamilton came up with the phrase “Software Engineering” while she was part of the Apollo Missions
- the term “software engineering” was introduced to address the “software crisis”
- Structured programming gained popularity in this decade in an effort to increase the quality and maintainability of code
1970’s (Personal Computing)
- introduction of structured programming to increase code dependability
- larger audience became aware of software creation with the release of PC’s such as Apple II and IBM PC; Unix OS also came into being
1980’s (Personal Computing)
- high-level languages like Pascal and C have emerged - creation of reusable and modular software components
- GUI OS like Windows (1985) and OOP languages like C++ (1985) gained popularity, improving the software development process and UX
1990’s (Internet & Agile Dev)
- web-based techs and apps such as HTML, JavScript, Java, C++ became popular
- greater emphasis on software usability and user-centered design
- Agile methodologies: Scrum and Extreme programming are examples of agile approaches
2000’s (Internet & Agile Dev)
- quick expansion of mobile software and online apps
- use of SaaS (Software as a Service) and cloud computing
- introduction of DevOps techniques to enhance software maintenance and deployment
2010 - Present (Modern SoftEng)
Cloud Computing & DevOps
- cloud computing revolutionized software development by providing scalable infrastructure; DevOps enhanced collaboration between development and operations for faster software delivery
AI & Machine Learning
- integration of AI and machine learning enabled advanced data analysis, automation, intelligent applications
Open Source & Collaboration
- open-source software and platforms like GitHub fostered innovation, knowledge sharing, and community driven-development