Skip to content

Extending the learning syllabus: a tentative plan #1247

Description

@colinleach

Concept tree for F# learning mode

Live exercises and concepts

Solid green means both are merged and the exercise is available to students.

Some that are already in progress or planned

This is a very fluid plan and will doubtless continue to change frequently!

Boxes with green borders have the exercise + concept PRs submitted.

Progress tracking

For anyone interested in the boring details, there is a tracking sheet.

graph TD
    
start(("Start")) --basics--> basics["lasagna"]
style basics fill:#0f0

basics --booleans--> booleans["annalyns-infiltration"]
style booleans fill:#0f0

booleans --if-then-else--> if-then-else["cars-assemble"]
style if-then-else fill:#0f0

strings --numbers--> numbers["cars-assemble"]
style numbers fill:#0f0

strings -.chars.-> chars["squeaky-clean"]
style chars fill:#0f0

if-then-else -.chars.-> chars["squeaky-clean"]
style chars fill:#0f0

 if-then-else -..- numbers

if-then-else --pattern-matching--> pattern-matching["guessing-game"]
style pattern-matching fill:#0f0

numbers --pattern-matching--> pattern-matching["guessing-game"]
style pattern-matching stroke:#f00

numbers --datetimes--> datetimes["booking-up-for-beauty"]
style datetimes fill:#0f0

numbers --floating-point-numbers--> floating-point-numbers["interest-is-interesting"]
style floating-point-numbers fill:#0f0

numbers -.integral-numbers.-> integral-numbers["hyper-optimized-telemetry"]
style integral-numbers stroke:#f00

pattern-matching -.expressions.-> expressions["??"]
style expressions stroke:#f00

basics --strings--> strings["log-levels"]
style strings fill:#0f0

basics -.modules??.-> modules["??"]
style modules stroke:#f00

pattern-matching --tuples--> tuples["tisbury-treasure-hunt"]
style tuples fill:#0f0

pattern-matching --arrays--> arrays["bird-watcher"]
style arrays fill:#0f0

pattern-matching --recursion--> recursion["pizza-pricing"]
style recursion fill:#0f0

pattern-matching --lists--> lists["tracks-on-tracks-on-tracks"]
style lists fill:#0f0

lists -.higher-order-functions.-> higher-order-functions["secret-agent ?"]
style higher-order-functions stroke:#f00

higher-order-functions -.function-composition.-> function-composition["??"]
style function-composition stroke:#f00

pattern-matching --records--> records["bandwagoner"]
style records fill:#0f0

records -.generic-types.-> generic-types["??"]
style generic-types stroke:#f00

generic-types -.maps.-> maps["international-calling-connoisseur ?"]
style maps stroke:#f00

generic-types -.sets.-> sets["face-id2"]
style sets stroke:#f00

generic-types -.mutation.-> mutation["??"]
style mutation stroke:#f00

mutation -.fields.-> fields["??"]
style fields stroke:#f00

records -.classes.-> classes["elons-toys"]
style classes stroke:#f00

pattern-matching -.exceptions.-> exceptions["calculator-conundrum"]
style exceptions stroke:#f00

exceptions -.overflows.-> overflows["hyperinflation-hits-hyperia"]
style overflows stroke:#f00

options -..-> error-handling["??"]
style error-handling stroke:#f00

exceptions -.error-handling.-> error-handling["??"]
style error-handling stroke:#f00

classes -..-> inheritance["wizard-and-warriors"]
style inheritance stroke:#f00

basics --discriminated-unions--> discriminated-unions["valentines-day"]
style discriminated-unions fill:#0f0

discriminated-unions -.inheritance.-> inheritance["wizards-and-warriors"]
style inheritance stroke:#f00

inheritance -.string-formatting.-> string-formatting["high-school-sweethearts"]
style string-formatting stroke:#f00

discriminated-unions -.options.-> options["??"]
style options stroke:#f00

options -.results.-> results["??"]
style results stroke:#f00

classes -.method-overloading.-> method-overloading["wizards-and-warriors-2"]
style method-overloading stroke:#f00

method-overloading -.constructors.-> constructors["need-for-speed"]
style constructors stroke:#f00

inheritance -.attributes.-> attributes["attack-of-the-trolls"]
style attributes stroke:#f00

classes -.properties.-> properties["weighing-machine"]
style properties stroke:#f00

properties -.static-members.-> static-members["??"]
style static-members stroke:#f00

static-members -.operator-overloading.-> operator-overloading["??"]
style operator-overloading stroke:#f00



Loading

Other stuff to add:

graph TD
    
TODO -.memory-allocation.-> memory-allocation["??"]
style memory-allocation stroke:#f00

TODO -.type-inference.-> type-inference["??"]
style type-inference stroke:#f00

TODO -.continuations.-> continuations["??"]
style continuations stroke:#f00

TODO -.structs.-> structs["land-grab-in-space ?"]
style structs stroke:#f00



Loading

What do we do about these?

  • LINQ
  • Regex

Activity

  1. ErikSchierboom commented on Apr 18, 2024

    @ErikSchierboom
    Member

    What do we do about these?

    LINQ
    Regex

    I think it's fine to ignore LINQ, as it seems to be not used a lot and has a ton of disadvantages over using the built-in functions (like no partial application).

    Regex is definitely something we should be teaching, at least how to use it in F# (we don't have to make it a full regex course).

  2. ErikSchierboom commented on Apr 18, 2024

    @ErikSchierboom
    Member

    Thanks for putting this together! It's really useful to see what the status is. One remark is that before we port any C# exercise, we should carefully consider if that exercise is good enough. Some of the later C# exercises are not entirely up to the standard we have for the first exercises. Porting from Elixir is also a good option, as they have an excellent syllabus.

  3. colinleach commented on Apr 18, 2024

    @colinleach
    SponsorContributorAuthor

    Porting from Elixir is also a good option, as they have an excellent syllabus.

    Good tip. I also like their style of writing the introduction.md, where C# sometimes leans towards terseness.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions