Understanding Software Engineering's Evolution

Aug 6, 2024

Software Engineering: Definition and Evolution

Definition of Software Engineering

  • General Understanding: Software engineering has many definitions, but a widely accepted one is:
    • A systematic, disciplined, cost-effective technique for software development.

Key Components of the Definition

  • Systematic: Follows a step-by-step approach.
  • Disciplined: Adheres to rules and maintains a regular workflow (not sporadic).
  • Cost-effective: Works within budget constraints and does not exceed costs.
  • Time-sensitive: Projects must meet deadlines.

Nature of Software Development

  • Software engineering is not solely about coding. It involves a comprehensive approach, including:
    1. Idea generation
    2. Requirements gathering
    3. Feasibility study
    4. Planning
    5. Design
    6. Implementation
    7. Testing
    8. Maintenance
    9. Product delivery
  • This process is referred to as the Engineering Approach.

Engineering Approach Explained

  • Step-by-step methodology: Progression from the first step to the last, systematically achieving goals.
  • Real-life Example: Comparison between branded and non-branded products:
    • Branded: Follow thorough processes (e.g., Mahindra Thar) with ongoing maintenance services.
    • Non-branded: Often deliver products without thorough testing, leading to potential failures.

Evolution of Software Engineering

  • Origins (1945-1965): Development began post-World War II, but without systematic processes. Early software development was based on the build-and-deliver method.
  • NATO Conferences: The term "software engineering" was first introduced during these meetings.

Software Crisis (1965-1985)

  • Problems: Only 2% of software produced during this time was effectively used; many were scrapped or failed due to budget overruns and time constraints.
  • Example: IBM's OS/360 was deemed a multi-million dollar failure due to lack of proper design and planning.

Post-Crisis Developments

  • Internet Era (Post-1990): Introduction of web browsers and popular operating systems (e.g., Microsoft Windows).
  • Mobile Era: Development of lightweight software for mobile devices.
  • Current Trends (Post-2010): Focus on AI, machine learning, and deep learning; software learning autonomously like humans.

Notable Changes

  • Accessibility: Many software products are now free, encouraging more people to learn and develop skills in software engineering.

Conclusion

  • Evolution of software engineering reflects changes in technology and methodology, highlighting the importance of systematic approaches in achieving successful software development.