Lesson 3: Software Engineering vs. Traditional Coding

Coding - focuses on translating algorithms and logic into lines of code using a specific programming language

Software Engineering - involves the entire software development life cycle, including planning, design, coding, testing, deployment, and maintenance, with a focus on creating reliable and efficient systems

What is Coding?

  • Refers to writing instructions in a programming language

  • Involves translating logic into syntax that a computer can execute

  • Examples of programming languages: python, Java, C++, JavaScript

What is Software Engineering

  • A systematic approach to designing, developing, testing, and maintaining software

  • It involves planning, analysis, design, implementation, testing, and deployment

  • Software engineers apply engineering principles and knowledge of programming languages to build software solutions for end users


Key Differences of Coding vs Software Engineering

Aspect

Coding

Software Engineering

Focus

Writing code

Designing & managing systems

Scope

Specific tasks in software development

Full software lifecycle

Skills Needed

Programming, debugging

Analysis, designing, testing, management

Tools Used

Code editors, compilers

IDEs, project management tools, version control

Teamwork

Often individual tasks

Requires collaboration

Role of a Coder

  • Writes code based on given requirements

  • Debugs and optimizes code for better performance

  • Follows instructions but may not handle system design


Role of a Software Engineer

  • Designs software architecture

  • Develops, tests, and maintains software systems

  • Works with teams, manages projects, and ensures scalability

Career Paths

Coder Software Engineer

Frontend Developer Software Architect

Backend Developer DevOps Engineer

Mobile App Developer Systems Analyst

Conclusion

Coding is a subset of software engineering

Both are important, and once can transition from coding to software engineering with experience

Software engineering involves a broader perspective beyond just writing code


Lesson 3.2: Structured Approach vs. Ad-hoc Development


Crucial areas for making software

  1. Planning

    1. Defining goals

    2. Gathering requirements

    3. Creating a roadmap

  2. Analysis

    1. Assessing technical and business requirements

    2. Identifying potential challenges

    3. Developing specification

  3. Design

    1. System architecture

    2. Database design

    3. UI/UX design

    4. Security design

  4. Implementation

    1. Programming

    2. Collaborative Development

    3. Incremental Build

  5. Support and Security

    1. Bug fixes and Updates

    2. Security management

    3. Performance monitoring

What could go wrong if we skip testing for software development?

  1. Poor quality

  2. Security vulnerabilities

  3. Increased maintenance & support costs

  4. Poor user experience

  5. Poor software performance

Inadequate Project Assessment & Management for Software development due to:

  1. Unclear goals and criteria

  2. Poor communication

  3. Lack of resource planning

  4. unrealistic expectations

  5. Unrealistic deadlines

Types of Software Development Approach

Structured Development - a systematic, organized approach to software development with clear guidelines and processes

Ad-hoc Development - an informal, unstructured approach focusing on speed and flexibility over process and planning

Aspect

Structured

Ad-hoc

Process 

Systematic and planned

Informal and unplanned

Documentation

Extensive

Minimal 

Flexibility

Lower, but predictable

High, but risky

Best for

Large, complex, or critical projects

Small, quick, or experimental projects

Outcome 

Reliable, maintainable software

Quick results, but reliable

Advantages

Structured Development Ad-hoc Development

a. Clear milestones and deliverables a. Faster for small-scale or urgent projects

b. Easier team collaboration and communication b. Low overhead with minimal documentation

c. reduce risks c. flexible and adaptable to immediate needs

d. Ensures higher quality


Disadvantages

Structured Development Ad-hoc Development

a. Time-consuming and resource intensive a. High risk of errors and inconsistencies

b. Not ideal for rapidly evolving requirements b. difficult to scale and maintain

c. lacks accountability and quality assurance


Why Do Some Choose Ad-hoc Development Over Structured Development?

  1. Urgency of Delivery

  2. Short-Term Projects

  3. Lack of Resources

  4. Experimentation and Innovation

  5. Experience and Expertise



Why Switching to Ad-hoc Development Can Be Good in Certain Scenarios?

  1. Filling knowledge gaps

  2. Flexibility in problem-solving

  3. Speed in Development

  4. Exploration of unknowns

  5. Handling unique or unconventional requirements

robot