You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Aug 31, 2021. It is now read-only.
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:
⚠ 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.
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.
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
The text was updated successfully, but these errors were encountered:
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:Already implemented
These are the exercises that have currently been implemented, as well as the concepts they teach and their prerequisite concepts:
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, thenumbers
exercise only teaches basic number usage, and thenumbers-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.
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.
basic-numbers
int
anddouble
, 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
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
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 astring
to aDateTime
and vice versa. Know where it's documented, or at least how to search for itbasic-enums
enum
keyword. Know how to define enum members. Know how to convert astring
to anenum
and vice versa. Know where it's documented, or at least how to search for itadvanced-enums
basic-time
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
conditionals
if
statement).floating-point-numbers
double
,float
anddecimal
. Know when to use which type.string-formatting
bitwise-operations
This also indicates that for example
basic-strings
does not teach using custom formatting strings and thatbasic-numbers
does not teach about checked/unchecked arithmetic.Documentation
There are three folders containing documentation:
/info
: C# concepts (likenamespaces
)./keywords
: C# keywords (likeusing
)./types
: C# core types (likestring
).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
The text was updated successfully, but these errors were encountered: