Lesson 1: Introduction to Software Engineering

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





robot