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
- Maintenance cost
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
- Want explanations and definitions of the technical terms in the course?
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).