Skip to content
This repository has been archived by the owner on Aug 31, 2021. It is now read-only.

[C#] Roadmap to Launch #18

Closed
ErikSchierboom opened this issue Dec 31, 2019 · 1 comment
Closed

[C#] Roadmap to Launch #18

ErikSchierboom opened this issue Dec 31, 2019 · 1 comment
Labels
status/help-wanted Extra attention is needed track/csharp

Comments

@ErikSchierboom
Copy link
Member

ErikSchierboom commented Dec 31, 2019

This issue tracks the C# v3 roadmap. If you'd like to help, please read this entire document, and then check the "How can you help" section.

Concepts

The core focus of v3 tracks is on teaching the concepts that make up a language. As such, we've been compiling a list of concepts for the C# language.

Concept exercises

To teach concepts, we're developing concept exercises, which are designed specifically to teach concepts (usually one per exercise). Concept exercises should teach students what makes C# unique. As an example, a floating-point numbers exercise's focus is on teaching how to work with floating-point numbers in C#, and less about teaching what floating-point numbers are.

It is important to understand we never explain a specific type or syntax as a concept, but teach the more "abstract" concept around it, using the type(s) or syntax(is).

Besides teaching one or more concepts, a concept exercise can have concepts the student must be familiar with before being allowed to start with the concept exercise. This is referred to as a concept exercise's prerequisites.

The concept exercises for the C# track are a work-in-progress and can be found in /concept-exercises. Important types of concepts to target are things that only exist in object-oriented programming (for people coming from non-OOP languages), functions as first-class citizens (for people coming from non-functional languages), and C# specifics like:

  • Reference- and value type semantics
  • Extensions methods
  • ...

Already implemented

These are the exercises that have currently been implemented, as well as the concepts they teach and their prerequisite concepts:

exercise concepts prerequisites
numbers basic-numbers
basic-type-conversion
conditionals
-
numbers-floating-point floating-point-numbers
loops
basic-numbers
basic-type-conversion
conditionals
strings basic-strings -
enums basic-enums basic-strings
dates basic-dates
basic-time
string-formatting
basic-numbers
basic-strings
bitwise-operations bitwise-operations
advanced-enums
basic-enums

⚠ Note ⚠: The idea here is to use a concept name for the exercise/folder, but perhaps use some sort of "progression", so they will naturally become a sort of path to traverse. In this example, the numbers exercise only teaches basic number usage, and the numbers-floating-point exercise builds on that and digs deeper into floating-point numbers.

It's only important that it's reasonably easy to find the exercise. It's okay if the name isn't perfect. We will iterate on this.

To be implemented

These are some planned exercises that still need to be implemented. Note: this too is an incomplete list.

exercise concepts assigned to
arrays basic-arrays
iteration
-
chars basic-chars
iteration
-
lists basic-lists
generics
-
sets basic-sets
sameness
-
integers integers
arithmetic-overflow
advanced-type-conversion
-
classes classes
state
objects
-
inheritance inheritance
polymorphism
-
higher-order-functions higher-order-functions
anonymous-methods
pipelines
-
pattern-matching pattern-matching -
recursion recursion -
extension-methods extension-methods -
asynchrony tasks -

Concept interpretation

Here is how the C# track has interpreted the following concept keywords. This should be synced across tracks.

concept interpretation
basic-numbers Know of the existence of the two most commonly used number types, int and double, and understand that the former represents whole numbers, and the latter floating-point numbers. Know of basic operators such as multiplication and comparison. Know where it's documented, or at least how to search for it.
basic-strings Know of the existence of the string type. Know of some basic functions (like looking up a character at a position, or slicing the string). Know how to do basic string formatting. Know where it's documented, or at least how to search for it.
basic-dates Know of the existence of the DateTime type. Know of the individual, date-related properties. Know how to access the current date. Know how to compare dates. Know how to convert a string to a DateTime and vice versa. Know where it's documented, or at least how to search for it
basic-enums Know of the existence of the enum keyword. Know how to define enum members. Know how to convert a string to an enum and vice versa. Know where it's documented, or at least how to search for it
advanced-enums Know how to define a "flags" enum. Know how to add, remove or check for flags.
basic-time Know of the existence of the DateTime type. Know of the individual, time-related properties. Know where it's documented, or at least how to search for it.
basic-type-conversion Know that it is sometimes possible to convert from one type to another type.
conditionals Know of the existence of conditional execution statements (such as the if statement).
floating-point-numbers Know of the existing of the three floating point types: double, float and decimal. Know when to use which type.
string-formatting Know how to format a string. Know where it's documented, or at least how to search for it.
bitwise-operations Know how to apply bitwise operations to numbers. Know where it's documented, or at least how to search for it.

This also indicates that for example basic-strings does not teach using custom formatting strings and that basic-numbers does not teach about checked/unchecked arithmetic.

Documentation

There are three folders containing documentation:

This documentation can be used both as a starting point when creating concept exercises, as well as being referred to from exercises.

How can you help?

Documentation

There are C#-specific documentation files in the /info, /keywords and /types folders. Some of the files in these folders will be empty or stubs, others will be missing. We'd love PR's to add this documentation. You can use the already filled-in ones to see what we're looking for.

To find which concepts are missing, compare the files in the /info folder with the concepts listed in the README. For the keywords, compare the files in the /keywords folder with the C# keywords list. Finally, for the types, compare the files in the /types folder with the types listed in the README.

There are also general documentation files missing, most notably missing concepts in the root /concepts folder.

Exercises

We need two types of exercises. The concept ones, as explained above -- you can choose to pick one from the "To be implemented" list above or suggest, in this issue, one that's not listed. The other ones are the practice ones, which are like the v2 exercises.

Analyzers

TBD

@ErikSchierboom
Copy link
Member Author

Closed in favor of the C# track's README.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
status/help-wanted Extra attention is needed track/csharp
Projects
None yet
Development

No branches or pull requests

1 participant