Programming Beyond Coding: Life-Cycle, Models & Mindset

Clarifying “Programming” vs. “Coding”

  • Programming ≠ Coding. Coding is only one activity within the broader discipline of programming.

    • Programming encompasses problem-solving, systems design, logical reasoning, testing, deployment, and maintenance.

  • Common misconceptions

    • Pop-culture stereotype: the solitary coder endlessly typing.

    • Real programming is collaborative, iterative, and user-focused.

  • Social anecdote: Trying to explain your job at parties/family gatherings—highlights the gap between public perception ("just writing code") and actual practice ("engineering solutions").

Dictionary Definitions & Their Gaps

  • Collated dictionary entries describe programming as "instructing a computer to use data to solve a problem."

  • Missing dimensions:

    • What kinds of problems?

    • Whose problems are being solved?

    • How to adapt to changing requirements?

  • Need richer principles to ensure solutions are high-quality, adaptable, and durable.

Viewing Programming Through the Software Development Life-Cycle (SDLC)

The Waterfall Model (Conceptual Overview)
  • Sequential, phase-locked model; progress flows only downwards like a waterfall.

  • Phases grouped into three macro-categories:

    1. Pre-Programming

    • Client engagement & requirement gathering.

      • Techniques: interviews, observation, surveys.

      • Outcome emphasized later as user stories (CAB201): user-centric narratives capturing desired outcomes.

    • Feasibility analysis (technical, computational, economic).

    1. Programming

    • Software design

      • Decompose the problem into modules; later recombine into a cohesive system.

      • In CAB201 we will use Object-Oriented Design (OOD); modules → classes.

    • Implementation

      • Translate designs into algorithms, data structures, and class interactions.

      • Language of choice in CAD201: C#.

      • Complexity increases with scale; solutions must cover multiple classes and rich relationships.

      • Coding is a subset of this stage.

    • Testing (CAB201)

      • Unit testing: individual classes.

      • Integration/system testing: full system behaviour.

      • Goal: confirm software meets functional & non-functional requirements.

    1. Post-Programming

    • Deployment: release to users/marketplace → revenue begins.

    • Maintenance

      • Bug fixes, patches, new features.

      • Modern expectation of regular updates.

Limitations of Pure Waterfall
  • Assumes each phase is “perfectly” complete before the next begins—rare in reality.

  • Leads to rigid planning, late discovery of defects, and difficulty accommodating change.

Incremental & Iterative Development (Waterfall Extensions)

  • Incremental Development

    • Divide project into small tasks; apply (parts of) the waterfall workflow to each task.

    • After each increment, evaluate integration impact.

    • Benefits: earlier delivery of value, easier rollback of problematic changes.

  • Iterative Development

    • Repeat increments until all tasks are complete.

    • Embraces continuous learning & adaptation; mitigates risk of large late-stage failures.

  • Practical advice

    • Do not follow strict waterfall in assignments or industry.

    • Second assignment in this unit purposely complex—will require incremental & iterative strategies supported in tutorials.

Object-Oriented Principles & High-Quality Code

  • Using OOD (classes, encapsulation, inheritance, polymorphism) improves

    • Maintainability

    • Modularity

    • Ability to model complex, evolving domains.

  • Goal by semester’s end: combine incremental development with OOD to build robust, adaptable systems.

Holistic Definition Revisited

  • Programming = “Using data and behaviours to solve problems through a structured life-cycle of analysis, design, implementation, testing, deployment, and maintenance.”

  • Key nuance: quality of decisions in how we design, implement, and test determines longevity and success of software.

Real-World & Career Relevance

  • Thinking like a programmer (not merely a coder) prepares you for:

    • Handling complex, ambiguous requirements.

    • Collaborating with stakeholders.

    • Continuous delivery and improvement cycles expected in modern jobs.

  • Mastery of these concepts sets the foundation for a successful software-engineering career.

Ethical & Practical Implications

  • Solving whose problems? Ethical responsibility to prioritize user well-being and societal impact.

  • Sustainable code reduces long-term maintenance cost, technical debt, and environmental resource usage (energy, hardware life-cycle).

Connections to Future Lectures

  • CAB201: user stories & requirement analysis.

  • CAP201: object-oriented design, modular breakdown into classes.

  • CAD201: programming in C, deeper implementation challenges.

  • CABG01: testing strategies, quality assurance.

Key Takeaways (Quick-Fire Revision)

  • Programming > Coding: holistic process from concept to maintenance.

  • Waterfall = historically important but rigid; understand it, then transcend it via incremental & iterative methods.

  • OOD + incremental iteration = scalable approach for modern, complex software.

  • Always maintain user focus, ethical awareness, and adaptability.