Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Apply semantic line breaks #201

Merged
merged 38 commits into from
Jul 26, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
905c1f4
apply semantic line breaks to index & episode 0
tobyhodges May 10, 2023
1cf7f2e
apply semantic line breaks to episode 10
tobyhodges May 11, 2023
f287540
apply semantic line breaks to episode 11
tobyhodges May 11, 2023
043b88d
apply semantic line breaks to episode 12
tobyhodges May 11, 2023
044d772
apply semantic line breaks to episode 13
tobyhodges May 12, 2023
722bedd
apply semantic line breaks to episode 14
tobyhodges May 15, 2023
dd36ab1
merge upstream changes
tobyhodges May 15, 2023
0118971
apply semantic line breaks to episode 15
tobyhodges May 16, 2023
02016ba
correctly format testimonial block
tobyhodges May 16, 2023
2ad35e4
apply semantic line breaks to episode 16
tobyhodges May 19, 2023
78ed7b8
apply semantic line breaks to episodes 20 & 21
tobyhodges May 23, 2023
f4fe99a
apply semantic line breaks to episodes 22
tobyhodges May 23, 2023
4437cea
apply semantic line breaks to episodes 23
tobyhodges May 23, 2023
ef03dc2
apply semantic line breaks to episodes 24
tobyhodges May 24, 2023
5a7f67f
apply semantic line breaks to episodes 30 and 31
tobyhodges May 25, 2023
33f03c6
apply semantic line breaks to episode 32
tobyhodges May 31, 2023
8504c24
apply semantic line breaks to episode 33
tobyhodges Jun 1, 2023
1e0e237
apply semantic line breaks to episode 34
tobyhodges Jun 12, 2023
8466fef
apply semantic line breaks to episode 35
tobyhodges Jun 12, 2023
39d959a
apply semantic line breaks to episode 36
tobyhodges Jun 15, 2023
6fd9003
apply semantic line breaks to episode 40
tobyhodges Jun 15, 2023
3080920
apply semantic line breaks to episode 41
tobyhodges Jun 15, 2023
3952db1
apply semantic line breaks to episode 43
tobyhodges Jun 19, 2023
01affe2
apply semantic line breaks to episode 50
tobyhodges Jun 19, 2023
5601d30
apply semantic line breaks to episode 51
tobyhodges Jun 20, 2023
db318a9
apply semantic line breaks to episode 52
tobyhodges Jun 20, 2023
376fc1e
apply semantic line breaks to episode 53
tobyhodges Jun 20, 2023
58e193a
apply semantic line breaks to episode 60
tobyhodges Jun 20, 2023
9d85232
apply semantic line breaks to common issues extra
tobyhodges Jun 21, 2023
194694d
apply semantic line breaks to databases extra
tobyhodges Jun 21, 2023
1315c1b
apply semantic line breaks to Instructor Notes page
tobyhodges Jun 21, 2023
88c3ebf
apply semantic line breaks to persistence extra
tobyhodges Jun 21, 2023
c5f3ac9
apply semantic line breaks to VSCode extra
tobyhodges Jun 21, 2023
01cd15f
apply semantic line breaks to quiz extra
tobyhodges Jun 21, 2023
4190e1c
merge upstream changes
tobyhodges Jun 27, 2023
406c2c4
apply semantic line breaks to episode 42
tobyhodges Jul 7, 2023
1fc791b
Merge branch 'gh-pages' into sembr
tobyhodges Jul 7, 2023
11a0d7d
Apply suggestions from code review
tobyhodges Jul 19, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
158 changes: 99 additions & 59 deletions _episodes/00-setting-the-scene.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,116 +13,156 @@ objectives:
keypoints:
- "This lesson focuses on core, intermediate skills covering the whole software development life-cycle
that will be of most use to anyone working collaboratively on code."
- "For code development in teams - you need more than just the right tools and languages. You need a strategy
- "For code development in teams - you need more than just the right tools and languages. You need a strategy
(best practices) for how you'll use these tools as a team."
- "The lesson follows on from the novice Software Carpentry lesson, but this is not a prerequisite for
attending as long as you have some basic Python, command line and Git skills and you have been using them for a
- "The lesson follows on from the novice Software Carpentry lesson, but this is not a prerequisite for
attending as long as you have some basic Python, command line and Git skills and you have been using them for a
while to write code to help with your work."
---

## Introduction
So, you have gained basic software development skills either by self-learning or attending, e.g., a [novice Software
Carpentry course][swc-lessons]. You have been applying those skills for a while by writing code to help with your work
and you feel comfortable developing code and troubleshooting problems. However, your software
has now reached a point where there’s too much code to be kept in one script. Perhaps it's involving more
researchers (developers) and users, and more collaborative development effort is needed to add new functionality
So, you have gained basic software development skills either by self-learning or attending,
e.g., a [novice Software Carpentry course][swc-lessons].
You have been applying those skills for a while by writing code to help with your work
and you feel comfortable developing code and troubleshooting problems.
However, your software has now reached a point where there’s too much code to be kept in one script.
Perhaps it's involving more researchers (developers) and users,
and more collaborative development effort is needed to add new functionality
while ensuring previous development efforts remain functional and maintainable.

This course provides the next step in software development - it teaches some **intermediate software
engineering skills and best practices** to help you restructure existing code and design more robust,
reusable and maintainable code, automate the process of testing and verifying software correctness and
support collaborations with others in a way that mimics a typical software development process
within a team.
This course provides the next step in software development -
it teaches some **intermediate software engineering skills and best practices**
to help you restructure existing code and design more robust,
reusable and maintainable code,
automate the process of testing and verifying software correctness
and support collaborations with others in a way that
mimics a typical software development process within a team.

The course uses a number of different **software development tools and techniques**
interchangeably as you would in a real life. We had to make some choices about
topics and tools to teach here - based on established best practices, ease of tool installation for the audience, length of the course
and other considerations. Tools used here are not mandated though - alternatives exist and
we point some of them out along the way.
Over time, you will develop a preference for certain tools and programming languages based on your
personal taste or based on what is commonly used by your group, collaborators or community.
interchangeably as you would in a real life.
We had to make some choices about topics and tools to teach here,
based on established best practices,
ease of tool installation for the audience,
length of the course and other considerations.
Tools used here are not mandated though:
alternatives exist and we point some of them out along the way.
Over time, you will develop a preference for certain tools and programming languages
based on your personal taste
or based on what is commonly used by your group, collaborators or community.
However, the topics covered should give you a solid foundation for working on software development
in a team and producing high quality software that is easier to develop and
and sustain in the future by yourself and others. Skills and tools taught here, while Python-specific,
in a team and producing high quality software that is easier to develop
and sustain in the future by yourself and others.
Skills and tools taught here, while Python-specific,
are transferable to other similar tools and programming languages.

The course is organised into the following sections:

![Course overview diagram](../fig/course-overview.png){: .image-with-shadow width="800px" }

### [Section 1: Setting up Software Environment](../10-section1-intro/index.html)
In the first section we are going to set up our working environment and familiarise ourselves with various tools and techniques for
In the first section we are going to set up our working environment
and familiarise ourselves with various tools and techniques for
software development in a typical collaborative code development cycle:

- **Virtual environments** for **isolating a project** from other projects developed on the same machine
- **Command line** for running code and interacting with the **command line tool Git** for
- **Integrated Development Environment** for **code development, testing and debugging**,
**Version control** and using code branches to develop new features in parallel,
- **GitHub** (central and remote source code management platform supporting version control with Git)
for **code backup, sharing and collaborative development**, and
- **Python code style guidelines** to make sure our code is
**documented, readable and consistently formatted**.
- **GitHub** (central and remote source code management platform supporting version control with Git)
for **code backup, sharing and collaborative development**, and
- **Python code style guidelines** to make sure our code is
**documented, readable and consistently formatted**.

### [Section 2: Verifying Software Correctness at Scale](../20-section2-intro/index.html)
Once we know our way around different code development tools, techniques and conventions, in this section we learn:
Once we know our way around different code development tools, techniques and conventions,
in this section we learn:

- how to set up a **test framework** and write tests to verify the behaviour of our code is correct, and
- how to automate and scale testing with **Continuous Integration (CI)** using
**GitHub Actions** (a CI service available on GitHub).
- how to automate and scale testing with **Continuous Integration (CI)** using
**GitHub Actions** (a CI service available on GitHub).

### [Section 3: Software Development as a Process](../30-section3-intro/index.html)
In this section, we step away from writing code for a bit to look at software from a higher level
as a process of development and its components:
In this section, we step away from writing code for a bit
to look at software from a higher level as a process of development and its components:

- different types of **software requirements** and **designing and architecting software** to meet them, how these fit within the larger **software development process** and what we should consider when **testing** against particular types of requirements.
- different **programming and software design paradigms**, each representing a slightly
different way of thinking about, structuring and **implementing** the code.
- different types of **software requirements** and **designing and architecting software** to meet them,
how these fit within the larger **software development process**
and what we should consider when **testing** against particular types of requirements.
- different **programming and software design paradigms**,
each representing a slightly different way of thinking about,
structuring
and **implementing** the code.

### [Section 4: Collaborative Software Development for Reuse](../40-section4-intro/index.html)
Advancing from developing code as an individual, in this section you will start working with your fellow learners
Advancing from developing code as an individual,
in this section you will start working with your fellow learners
on a group project (as you would do when collaborating on a software project in a team), and learn:

- how **code review** can help improve team software contributions, identify wider codebase issues, and increase codebase knowledge across a team.
- what we can do to prepare our software for further development and reuse, by adopting best practices in **documenting**, **licencing**, **tracking issues**, **supporting** your software, and **packaging software** for release to others.
- how **code review** can help improve team software contributions,
identify wider codebase issues, and increase codebase knowledge across a team.
- what we can do to prepare our software for further development and reuse,
by adopting best practices in
**documenting**,
**licencing**,
**tracking issues**,
**supporting** your software,
and **packaging software** for release to others.

### [Section 5: Managing and Improving Software Over Its Lifetime](../50-section5-intro/index.html)
Finally, we move beyond just software development to managing a collaborative software project and will look into:
Finally, we move beyond just software development to managing a collaborative software project and will look into:

- internal **planning and prioritising tasks** for future development using agile techniques and effort estimation, management of **internal and external communication**, and **software improvement** through feedback.
- how to adopt a critical mindset not just towards our own software project but also to
**assess other people's software to ensure it is suitable** for us to reuse, identify areas for improvement, and how to use GitHub to register good quality issues with a particular code repository.
- internal **planning and prioritising tasks** for future development
using agile techniques and effort estimation,
management of **internal and external communication**,
and **software improvement** through feedback.
- how to adopt a critical mindset not just towards our own software project
but also to **assess other people's software to ensure it is suitable** for us to reuse,
identify areas for improvement,
and how to use GitHub to register good quality issues with a particular code repository.

## Before We Start

A few notes before we start.

> ## Prerequisite Knowledge
> This is an intermediate-level software development course intended for people who have already been developing code in
> Python (or other languages) and applying it to their own problems
> after gaining basic software development skills.
> So, it is expected for you to have some prerequisite knowledge on the topics covered, as outlined at the [beginning of the lesson](../index.html#prerequisites).
Check out this [quiz](../quiz/index.html) to help you test your prior knowledge and determine if this course is for you.
> This is an intermediate-level software development course
> intended for people who have already been developing code in Python (or other languages)
> and applying it to their own problems after gaining basic software development skills.
> So, it is expected for you to have some prerequisite knowledge on the topics covered,
> as outlined at the [beginning of the lesson](../index.html#prerequisites).
> Check out this [quiz](../quiz/index.html) to help you test your prior knowledge
> and determine if this course is for you.
{: .callout}

> ## Setup, Common Issues & Fixes
> Have you [setup and installed](../setup.html) all the tools and accounts required for this course?
> Check the list of [common issues, fixes & tips](../common-issues/index.html) if you experience any problems
running any of the tools you installed - your issue may be solved there.
> Check the list of [common issues, fixes & tips](../common-issues/index.html)
> if you experience any problems running any of the tools you installed -
> your issue may be solved there.
{: .callout}

> ## Compulsory and Optional Exercises
Exercises are a crucial part of this course and the narrative. They are used to reinforce the points taught and give
you an opportunity to practice things on your own. Please do not be tempted to skip exercises as that will get your
local software project out of sync with the course and break the narrative. Exercises that are clearly marked
as "optional" can be skipped without breaking things but we advise you to go through them too, if time allows.
All exercises contain solutions but, wherever possible, try and work out a solution on your own.
> Exercises are a crucial part of this course and the narrative.
> They are used to reinforce the points taught
> and give you an opportunity to practice things on your own.
> Please do not be tempted to skip exercises
> as that will get your local software project out of sync with the course and break the narrative.
> Exercises that are clearly marked as "optional" can be skipped without breaking things
> but we advise you to go through them too, if time allows.
> All exercises contain solutions but, wherever possible, try and work out a solution on your own.
{: .callout}

> ## Outdated Screenshots
> Throughout this lesson we will make use and show content from Graphical User Interface (GUI) tools (PyCharm and GitHub).
> Throughout this lesson we will make use and show content
> from Graphical User Interface (GUI) tools (PyCharm and GitHub).
> These are evolving tools and platforms, always adding new features and new visual elements.
> Screenshots in the lesson may then become out-of-sync, refer to or show content that no longer exists or is different to
> what you see on your machine. If during the lesson you find screenshots that no longer match what you see or have
> a big discrepancy with what you see, please [open an issue]({{ site.github.repository_url }}/issues/new) describing what you see and how it differs from the lesson
> content. Feel free to add as many screenshots as necessary to clarify the issue.
> Screenshots in the lesson may then become out-of-sync,
> refer to or show content that no longer exists or is different to what you see on your machine.
> If during the lesson you find screenshots that no longer match what you see
> or have a big discrepancy with what you see,
> please [open an issue]({{ site.github.repository_url }}/issues/new) describing what you see
> and how it differs from the lesson content.
> Feel free to add as many screenshots as necessary to clarify the issue.
{: .callout}

{% include links.md %}
Loading
Loading