Skip to article frontmatterSkip to article content

Introduction to Software Engineering

Building the Digital World Around Us

Utah Valley University

Introduction to Software Engineering

Welcome to the most exciting field in computer science! Software engineering is where creativity meets logic, where abstract thinking produces tangible results that millions of people use every day.

The digital world we’ve built with software

Figure 1:The digital world we’ve built with software

Software is Everywhere

Take a moment to think about your day so far. How many software systems have you interacted with?

🏠 At Home
  • Smart alarm clock

  • Coffee maker with WiFi

  • Netflix on your TV

  • Home security system

🚗 Transportation
  • Ride-sharing apps

  • GPS navigation

  • Traffic light systems

  • Electric vehicle software

Finance
  • Mobile banking

  • Payment systems

  • ATMs

  • Cryptocurrency wallets

🏥 Healthcare
  • Medical devices

  • Electronic health records

  • Telemedicine platforms

  • Drug discovery systems

🛒 Commerce
  • E-commerce platforms

  • Inventory management

  • Supply chain tracking

  • Customer service bots

🎮 Entertainment
  • Video games

  • Streaming platforms

  • Social media

  • Music apps

Get up and running with MyST in Jupyter!

The Scale of Software Today

Let’s put the software industry in perspective:

Table 1:Software by the Numbers

Metric

Scale

Real-World Comparison

Global Software Market

$650+ billion annually

Larger than the GDP of Switzerland

Lines of Code in Modern Cars

100+ million

More than Facebook’s entire codebase

Apps Downloaded Daily

300+ million

One app for every person in the US

Software Developers Worldwide

25+ million

More than the population of Australia

GitHub Repositories

200+ million

More repositories than there are books in print

What Makes Software Engineering Special?

Software engineering isn’t just programming - it’s a complete discipline that combines:

🧠 **Problem Solving**
🏗️ **Engineering Principles**
🤝 **Collaboration**
🎨 **Creativity**
  • Analyzing complex real-world problems

  • Breaking them into manageable pieces

  • Designing elegant solutions

  • Thinking several steps ahead

A Brief History: How We Got Here

Let’s take a journey through the evolution of software engineering:

A fascinating look at how software engineering emerged as a discipline

⚡ The Four Essential Challenges of Software

Frederick Brooks, Turing Award winner and software engineering pioneer, identified why software is uniquely challenging:

🧩 Complexity

Software systems are among the most complex human creations. A modern smartphone app can have millions of interconnected parts.

Example: WhatsApp handles 100+ billion messages daily across 2+ billion users with just ~1,000 employees.

🔄 Changeability

Software must constantly evolve. Success brings more feature requests, not stability.

Example: Facebook started as a college directory and evolved into a global social platform serving billions.

Conformity

Software must adapt to changing environments, laws, and business needs.

Example: GDPR regulations forced thousands of apps to redesign their privacy features overnight.

👻 Invisibility

Unlike bridges or cars, you can’t easily “see” software structure, making it hard to understand and debug.

Example: A single misplaced character crashed a $370 million rocket (Ariane 5, 1996).

The Software Engineering Landscape

Software engineering encompasses many interconnected areas:

🔍 Let’s Explore Each Area

📋 Requirements Engineering

What it is: Understanding and documenting what the software should do.

Why it matters: Building the wrong thing perfectly is worse than building the right thing imperfectly.

Real example: The FBI’s Virtual Case File project was cancelled after $170M because requirements kept changing.

What you’ll learn:

  • How to gather requirements from stakeholders

  • Writing user stories and use cases

  • Managing changing requirements

  • Balancing competing needs

🏗️ Software Design & Architecture

What it is: Planning the structure and organization of your software.

Why it matters: Good architecture makes software maintainable, scalable, and extensible.

Real example: Netflix’s microservices architecture allows them to deploy 1000+ times per day.

What you’ll learn:

  • Design patterns and principles

  • System architecture styles

  • API design

  • Database design

⚡ Implementation & Programming

What it is: Writing the actual code that makes your software work.

Why it matters: Even great designs fail with poor implementation.

Real example: Clean, readable code at Google allows any engineer to understand and modify most codebases.

What you’ll learn:

  • Best coding practices

  • Code organization

  • Performance optimization

  • Security considerations

🧪 Testing & Quality Assurance

What it is: Ensuring your software works correctly and reliably.

Why it matters: Bugs in production can cost millions and damage reputation.

Real example: A single software bug in Knight Capital’s trading system lost $440M in 45 minutes.

What you’ll learn:

  • Automated testing strategies

  • Test-driven development

  • Quality metrics

  • Bug prevention techniques

Types of Software Systems

Not all software is created equal. Different types require different approaches:

**Mission-Critical Systems**
💼 **Business Systems**
🎮 **Consumer Applications**

Examples: Medical devices, aircraft control, nuclear power

Characteristics:

  • Zero tolerance for failure

  • Extensive testing and certification

  • Formal verification methods

  • Regulatory compliance

The Economics of Software

Understanding the business side is crucial for any software engineer:

📈 Software Business Models
  • SaaS: Subscription-based (Netflix, Spotify)

  • Freemium: Free basic, paid premium (Zoom)

  • Marketplace: Platform commission (App Store)

  • Advertising: Free for users, advertisers pay (Google)

  • Enterprise: Big contracts (Salesforce)

💸 Cost Breakdown

Phase

Development

20%

Maintenance

60%

Enhancement

20%

What Does a Software Engineer Actually Do?

Let’s break down a typical day (it’s more varied than you think!):

🌅 Morning (9 AM - 12 PM)
  • Stand-up meeting (15 min): What did you do yesterday? What are you doing today? Any blockers?

  • Code review (30 min): Review teammates’ code

  • Deep coding (2+ hours): Implement new features or fix bugs

🌞 Afternoon (1 PM - 5 PM)
  • Collaboration (1 hour): Pair programming or architecture discussions

  • Testing (30 min): Write and run tests

  • Documentation (30 min): Update docs and comments

  • Learning (1 hour): Research new technologies or techniques

🌆 Ongoing
  • Problem solving: Debug issues and optimize performance

  • Communication: Chat with designers, product managers, users

  • Planning: Estimate tasks and plan sprints

  • Monitoring: Check system health and user feedback

🌟 Skills You’ll Develop

Software engineering will make you a well-rounded problem solver:

🔧 Technical Skills (40%)
  • Programming languages: Python, JavaScript, Java, etc.

  • Frameworks & tools: React, Django, Git, Docker

  • Databases: SQL, NoSQL, data modeling

  • System design: Architecture, scalability, performance

  • DevOps: CI/CD, cloud platforms, monitoring

🧠 Problem Solving (25%)
  • Analytical thinking: Breaking complex problems down

  • Algorithm design: Finding efficient solutions

  • Debugging: Systematic troubleshooting

  • Optimization: Making things faster and better

  • Pattern recognition: Seeing similarities across problems

💬 Communication (20%)
  • Writing: Clear documentation and comments

  • Presentation: Explaining technical concepts

  • Collaboration: Working effectively in teams

  • Stakeholder management: Talking to non-technical people

  • Code reviews: Giving and receiving constructive feedback

Career Paths in Software Engineering

The field offers incredible diversity and growth opportunities:

🏗️ **Technical Track**
👥 **Management Track**
**Specialized Roles**

Individual Contributor Path:

Focus: Deep technical expertise, architecture, innovation

🌐 The Future of Software Engineering

Exciting trends shaping our field:

🤖 AI/ML Integration
  • AI-assisted coding (GitHub Copilot)

  • Automated testing and debugging

  • Intelligent system optimization

  • Machine learning in everyday apps

☁️ Cloud-Native Development
  • Serverless computing

  • Container orchestration

  • Edge computing

  • Global-scale applications

🔒 Security-First Mindset
  • Zero-trust architecture

  • Privacy by design

  • Quantum-resistant cryptography

  • Supply chain security

Sustainability
  • Green computing practices

  • Energy-efficient algorithms

  • Carbon-aware development

  • Sustainable tech solutions

Low-Code/No-Code
  • Visual development platforms

  • Citizen developers

  • Rapid prototyping

  • Business logic automation

Web3 & Blockchain
  • Decentralized applications

  • Smart contracts

  • Digital identity systems

  • Tokenized economies

Course Overview & What You’ll Learn

This course will transform you from someone who can write code into someone who can engineer software systems:

Foundational Knowledge
  • Software engineering principles

  • Requirements gathering and analysis

  • System design and architecture

  • Testing strategies and quality assurance

  • Project management methodologies

🛠️ Practical Skills
  • Version control with Git/GitHub

  • Agile development practices

  • Code review and collaboration

  • CI/CD pipeline setup

  • Real-world project experience

Course Journey

Learning Objectives

By the end of this course, you’ll be able to:

Your First Challenge

Let’s start with a fun exercise to get you thinking like a software engineer:

Essential Resources

📖 Books
  • “Clean Code” by Robert Martin

  • “The Pragmatic Programmer” by Hunt & Thomas

  • “Designing Data-Intensive Applications” by Martin Kleppmann

  • “The Mythical Man-Month” by Frederick Brooks

🌐 Online Resources
  • Stack Overflow: Community Q&A

  • GitHub: Open source projects

  • Medium/Dev.to: Technical articles

  • Coursera/edX: Additional courses

Welcome to the Journey!


“The best way to predict the future is to invent it.” - Alan Kay, Computer Scientist

Next: Version Control with Git and GitHub →