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

Add syllabus docs #369

Merged
merged 44 commits into from
Sep 19, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
66f0996
Add syllabus docs
ErikSchierboom Jul 6, 2022
c3f3e3a
Draft introduction to syllabus design document
kytrinyx Aug 15, 2022
153846f
Tweak syllabus docs
kytrinyx Aug 15, 2022
1929f87
Add stub documents for syllabus-specific 'getting started' documents
ErikSchierboom Aug 16, 2022
b592ee8
Add some notes about first exercise in syllabus
ErikSchierboom Aug 16, 2022
52f8678
Add some notes about next exercises in syllabus
ErikSchierboom Aug 16, 2022
7b93abc
Add some notes about expanding exercises in syllabus
ErikSchierboom Aug 16, 2022
c529f30
Expand on building out the syllabus
kytrinyx Aug 17, 2022
d25afba
Flesh out syllabus docs
kytrinyx Aug 17, 2022
3931c94
Tweak syllabus docs
kytrinyx Aug 17, 2022
d7ce02b
Add note about creating issues to syllabus docs
kytrinyx Aug 18, 2022
e3fbb33
Update syllabus docs
kytrinyx Aug 30, 2022
258b4a1
Tweak wording on syllabus docs
kytrinyx Aug 30, 2022
7bce1ea
Tweak wording on syllabus docs
kytrinyx Aug 30, 2022
fa06929
Update syllabus docs
kytrinyx Aug 30, 2022
d66d32f
Add specifics about where and how to ask for help to syllabus docs
kytrinyx Sep 7, 2022
b908c38
Add a bit more about cyclic dependencies
kytrinyx Sep 7, 2022
6010970
Add a note about non-idiomatic code in syllabus docs
kytrinyx Sep 7, 2022
0cf5db7
Add spaces around emdash for readability
kytrinyx Sep 7, 2022
9e25304
Adjust initial goal explanation of first concept exercise
kytrinyx Sep 7, 2022
9856904
Improve wording in syllabus docs
kytrinyx Sep 19, 2022
8736500
Add. missing spacing in syllabus docs
kytrinyx Sep 19, 2022
34a2ee0
Improve wording in syllabus docs
kytrinyx Sep 19, 2022
7cfd5cd
Appease markdown linter in syllabus docs
kytrinyx Sep 19, 2022
c204316
Use more common form of gerund in syllabus docs
kytrinyx Sep 19, 2022
0a729f2
Use more common form of gerund in syllabus docs
kytrinyx Sep 19, 2022
2ab1502
Appease markdown linter in syllabus docs
kytrinyx Sep 19, 2022
c9825e8
Fix typo in syllabus docs
kytrinyx Sep 19, 2022
043046a
Improve wording in syllabus docs
kytrinyx Sep 19, 2022
97b89f5
Change team name in syllabus docs
kytrinyx Sep 19, 2022
99c7565
Improve wording in syllabus docs
kytrinyx Sep 19, 2022
b7f119a
Improve wording in syllabus docs
kytrinyx Sep 19, 2022
4176c45
Improve wording in syllabus docs
kytrinyx Sep 19, 2022
ef643ec
Improve wording in syllabus docs
kytrinyx Sep 19, 2022
6930e41
Improve formatting in syllabus docs
kytrinyx Sep 19, 2022
3622c8c
Improve wording in syllabus docs
kytrinyx Sep 19, 2022
c48692a
Improve wording in syllabus docs
kytrinyx Sep 19, 2022
1e2ac24
Improve wording in syllabus docs
kytrinyx Sep 19, 2022
9f62c7c
Improve wording in syllabus docs
kytrinyx Sep 19, 2022
434f48d
Clarify syllabus docs
kytrinyx Sep 19, 2022
d646107
Improve wording in syllabus docs
kytrinyx Sep 19, 2022
4708642
Improve wording in syllabus docs
kytrinyx Sep 19, 2022
a228bf1
Remove unnecessary 'here' when linking from syllabus docs
kytrinyx Sep 19, 2022
d29d0d7
Add suggestion to syllabus docs
kytrinyx Sep 19, 2022
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
Next Next commit
Add syllabus docs
  • Loading branch information
ErikSchierboom committed Jul 6, 2022
commit 66f0996bea2643cd8f4eb65afcc19c9eaa5827aa
7 changes: 7 additions & 0 deletions building/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,13 @@
"title": "Concept Exercises",
"blurb": ""
},
{
"uuid": "038e26ee-891f-4592-92bd-c54cbd58d8bd",
"slug": "tracks/syllabus",
"path": "building/tracks/syllabus.md",
"title": "Syllabus",
"blurb": ""
},
{
"uuid": "ed318b17-01be-4868-92df-50a644adfdc7",
"slug": "tracks/concepts",
Expand Down
3 changes: 3 additions & 0 deletions building/tracks/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ The track's configuration and metadata are specified in the `config.json` file.

All concept and practices exercises of a track involve _concepts_. These concepts are separate entities by themselves. Check the [documentation](/docs/building/tracks/concepts) for more information.

The concepts taught in the track's concept exercises form a _syllabus_.
For more information on how to design a syllabus, check the [syllabus documentation](/docs/building/tracks/syllabus).

## Exercises

Tracks have two types of exercises:
Expand Down
2 changes: 2 additions & 0 deletions building/tracks/concept-exercises.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# Concept Exercises

[Concept Exercises](/docs/building/product/concept-exercises) are exercises designed to teach specific (programming) concepts.
The concepts taught by the concept exercises form a _syllabus_.
For more information on how to design a syllabus, check the [syllabus documentation](/docs/building/tracks/syllabus).

## Metadata

Expand Down
58 changes: 58 additions & 0 deletions building/tracks/syllabus.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Syllabus

A track's [Concept Exercises](/docs/building/tracks/concept-exercises) are exercises designed to teach specific (programming) concepts.
These concepts form a _syllabus_.
This documentation contains pointers and tips on how to succesfully design a syllabus for your track.

## Think of concepts in layers

To figure out the ordering/unlocking of concepts, it can help to think of them in _layers_ (sort of like horizontal sections in the syllabus tree).
As an example, a track's first layer could consist of concepts for the basic primitive types (`strings`, `booleans` and `numbers`, with 1 exercise each).

Having identified the first layer, you can then consider which concepts could be unlocked with the concepts from the first layer.
For example, the second later could contain concepts like `arrays`, `comparison` and `conditionals`, which build on the first layer's concepts.

Any concepts that themselves depends on the concepts in the layer you're designing, should go into the next layer (3).
For example, the `for-loops` concepts shouldn't be in the second layer as it likely depends on having unlocked the `comparison` and `conditionals` concepts, which are already in the second layer.

## Collect some basic info about the exercises/concepts in a structured format

- As an intermediate step between just a list of ~20 concept names and the GitHub issues about creating the new concept/exercise for contributors to work on, I can recommend to write down some info per concept in a structured format.

For example:

```
Exercise 1 [name can be inserted here later on if the story is decided upon]
- Concept(s): [slugs of the concept or concepts that the exercise should teach]
- Content: [very short description of what should be taught]
- Out of scope: [optional in case there is something that is already known to be excluded]
- Prerequisite Concepts: [which of the concepts from other exercises above are strictly needed to understand the concept(s) in this exercise]
- Exercise Idea: [link to an existing exercise that could be ported/adapted here or some new story idea]
- Status: [e.g. have a checkbox whether the GitHub issue was created or not]
```

- Would be good to collect this in some tool that allows multiple people to edit like Google Docs.
If this is done via a GitHub issue description, make sure all people involved in the syllabus design can edit the description.
Having just one person that can edit and others with same "authority" over the topic only posting proposed changes in comments below usually did not work out very well/ lead to big overhead for the person with edit rights.
- Sort the exercise/concept list so that an exercise only depends on concepts taught by exercises above. Of course there is the tree/layers shape mentioned above but writing things out linearly ensures that at least there is one working unlocking path through the syllabus.
- Take some time to ponder and iterate that list of exercises so it looks like it could work out before writing out all the details needed for the actual GitHub issues per exercise.

## Handwaving is sometimes necessary

This part is for when it feels like there is a deadlock, concept A requires understanding concept B, and B requires understanding A (or more complex versions of that).
To get a sensible syllabus and unlocking, it is not always possible to explain everything 100% correct/in detail.
Sometimes it is necessary to hand wave over some aspect and then give a more thorough explanation at some later point in the syllabus.
For example in Go we needed to introduce functions rather early so students understand multiple return values because they were needed for other concepts.
However, to fully understand "pass by value/ pass by reference" someone would need a good understand of pointers. Teaching pointers needed some more concepts that came after functions.
So in functions, we waved over the pointers thing a bit and said it will be introduced in more details later.
That way we could get functions done and leave pointers for later when the student is a bit further into the track and knows all the things we need to properly teach pointers.

## Don't include concepts just because other tracks do

Not all concepts apply to all tracks.

For example Go has no enums and JavaScript has no string formatting.
There was some discussion whether those concept names should nevertheless show up in the concept tree and then describe what to do instead.
But in the end we decided against that.
I feel the concept tree should really represent the concepts that exist in the language.
So in Go, we now want to do the "constants" concepts which will then explain the patterns how constants are used as workarounds for the missing enums.