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

Extending the learning syllabus: a tentative plan #1247

Open
colinleach opened this issue Apr 18, 2024 · 3 comments
Open

Extending the learning syllabus: a tentative plan #1247

colinleach opened this issue Apr 18, 2024 · 3 comments

Comments

@colinleach
Copy link
Contributor

colinleach commented Apr 18, 2024

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
@ErikSchierboom
Copy link
Member

ErikSchierboom commented Apr 18, 2024

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).

@ErikSchierboom
Copy link
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.

@colinleach
Copy link
Contributor Author

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
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants