Skip to content

Introduction

Content

We start with a more theoretical introduction covering software and mindsets for software development.

Learning outcomes of 'Introduction'

Learners can

  • Identify the main topics and objectives for the week's lessons.
  • Evaluate the importance of engaging with course content and identify strategies to maintain interest and motivation throughout the week.
Instructor notes

Prerequisites are:

The pre-requirements:

  • Learners know basic Python
  • Learners have installed necessary tools

Teaching goals are:

  • Learners can can understand why a formalized development of software is important.

Lesson Plan:

  • Total 20 min
  • Theory 10
  • Discussions 10 min
TOC
  • What is software?
    • software concepts
    • types
    • outcome
      • correct, reusable, efficient, changable
  • Example
  • Software Development Life Cycle
Changes

Different types of Scientific software

Analysis of data
  • statistics
  • figures
  • visualization
Tools for process data
  • refining data (formatting)
Workflows
  • automate several steps
    • many scripts doing different things but alltogether creating a result)
Modelling (mimic the reality)
  • mathematical models of relationships among variables in a system
  • simulations time-varying behaviour of a system
Decision assistance
Other?

Discussion

What do you develop for?

Outcome of a Program

  • Correct
    • and flawless
  • Efficient
    • Utilize the computer system's resources
  • Reusable
    • Finished components
    • Lower development costs
    • Faster
    • Higher quality
    • packaging technology
  • Changeable
    • Maintenance cost
      • Fix errors, bugs
      • Adapt to new requirements
      • Independent modules
      • Encapsulation/information hiding

Common problems

We want

  • Correctness
  • Efficiency
  • Reusability
  • Changeabilitye
  • And Readability
  • Can other people use your code?
  • Do you or anyone else understand your code at a later moment?
  • Does it work for all cases?
  • Is is easy to find when and where the code broke?
  • Is it easy to make changes in one part without ruin the rest of the program?
  • Does is use the resources efficiently?
  • Is is easy to use a part of the program in another program?
  • Can the program be run on different platforms
    • like Linux/Mac/Windows,
    • like different hardware architectures (intel, amd, arm)
How can we make it easier to get good software and usefulness?

Software Development Life Cycle (SDLC)

  • We need a workflow in our programming projects!

Phases defined in [Perry, 2000], pages 148-149:

  • Requirements
  • Design
  • Program
  • Test
  • Installation
  • Maintain

Alternative phases

  • Planning
    • Analysis (with requirements) and design
  • Development — the programming
    • Source control
    • Algorithms
    • In-code documentation
    • Optimization
      • Parallelism
    • Tests
  • Deployment (or installation and maintenance)

    • Documentation
    • Reproducibility and sharing
    • Packaging and dependencies
  • ... and Iterations

  • Agile development

    • Division of tasks into short phases of work and frequent re-assessment and adaptation of plans.

Definitions

Can you connect the the phases above with what we ask of a program

Discuss in groups

  • Correctness
  • Efficiency
  • Reusability
  • Changeabilitye
  • And Readability

Summary of Introduction

  • Now after the overview you are ready to dig deeper about the tools!

Keypoints

  • A program shall be or have content/components that is:

    • Correct
    • Efficient
    • Reusable
    • Changeable
  • Software development is both series of steps:

    • Requirements
    • Design
    • Program
    • Test
    • Installation
    • Maintain
  • ... and iteration of these

Learning outcomes of 'Introduction'

Learners can

  • Identify the main topics and objectives for the week's lessons.
  • Evaluate the importance of engaging with course content and identify strategies to maintain interest and motivation throughout the week.

Reference

  • [Perry, 2000] Perry, William E. "Effective Methods for Software Testing Second Edition." (2000).