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

[v3] Add key features #871

Closed
Tracked by #138 ...
ErikSchierboom opened this issue Jan 29, 2021 · 19 comments · Fixed by #928
Closed
Tracked by #138 ...

[v3] Add key features #871

ErikSchierboom opened this issue Jan 29, 2021 · 19 comments · Fixed by #928

Comments

@ErikSchierboom
Copy link
Member

This issue is part of the migration to v3. You can read full details about the various changes here.

In Exercism v3, each track must specify exactly six "key features". Exercism uses these features to highlight the most interesting, unique or "best" features of a language to a student.

Key features are specified in the top-level "key_features" field in the track's config.json file and are defined as an array of objects, as specified in the spec.

Goal

The "key_features" field in the config.json file should be updated to describe the six "key features" of this track. See the spec.

Example

{
  "key_features": [
    {
      "icon": "features-oop",
      "title": "Modern",
      "content": "C# is a modern, fast-evolving language."
    },
    {
      "icon": "features-strongly-typed",
      "title": "Cross-platform",
      "content": "C# runs on almost any platform and chipset."
    },
    {
      "icon": "features-functional",
      "title": "Multi-paradigm",
      "content": "C# is primarily an object-oriented language, but also has lots of functional features."
    },
    {
      "icon": "features-lazy",
      "title": "General purpose",
      "content": "C# can be used for a wide variety of workloads, like websites, console applications, and even games."
    },
    {
      "icon": "features-declarative",
      "title": "Tooling",
      "content": "C# has excellent tooling, with linting and advanced refactoring options built-in."
    },
    {
      "icon": "features-generic",
      "title": "Documentation",
      "content": "Documentation is excellent and exhaustive, making it easy to get started with C#."
    }
  ]
}

Tracking

exercism/v3-launch#5

@ErikSchierboom
Copy link
Member Author

@exercism/fsharp It would be great if we could come up with a list of key features together. Here is my list of key features (ignore the icons):

[
  {
    "icon": "features-oop",
    "title": "Expressive",
    "content": "F# code is very expressive, requiring little code for great results"
  },
  {
    "icon": "features-strongly-typed",
    "title": "Unique",
    "content": "Type providers, active patterns and units of measure are fantastic and unique language features"
  },
  {
    "icon": "features-declarative",
    "title": "Powerful",
    "content": "F#'s powerful type system is a joy to work with and helps prevents errors"
  },
  {
    "icon": "features-functional",
    "title": "Functional first",
    "content": "F# is primarily a functional language, but also has great object-oriented support"
  },
  {
    "icon": "features-generic",
    "title": "Integration",
    "content": "F# integrates seamlessly with the .NET ecosystem and its many libraries"
  },
  {
    "icon": "features-lazy",
    "title": "Tooling",
    "content": "F# has excellent tooling, with linting and refactoring options built-in"
  }
]

@bobahop
Copy link
Member

bobahop commented May 4, 2021

My two cents, based mostly on yours

[
  {
    "icon": "features-functional",
    "title": "Functional first",
    "content": "F# is primarily a functional language, but also has great object-oriented support"
  },
  {
    "icon": "features-strongly-typed",
    "title": "Strongly-typed",
    "content": "Type providers, active patterns and units of measure are fantastic and unique language features"
  },
  {
    "icon": "features-declarative",
    "title": "Supports generics",
    "content": "F#'s powerful type system is a joy to work with and reduces duplicate code"
  },
  {
    "icon": "features-generic",
    "title": "Cross-platform",
    "content": "F# integrates seamlessly with the .NET ecosystem and its many libraries"
  },
  {
    "icon": "features-lazy",
    "title": "Well-tooled",
    "content": "F# has excellent tooling, with linting and refactoring options built-in"
  },
  {
    "icon": "features-oop",
    "title": "Interactive",
    "content": "F# has interactive scripting and debugging capabilities"
  },
]

@CraigChamberlain
Copy link

CraigChamberlain commented May 5, 2021

These are all good. I think Immutable First might be worth mentioning. I know it's common to a lot of functional languages but anyone playing with immutability in C# might appreciate this. "Freely pass and return reference types without the risk of exposing your data external modification."?

@CraigChamberlain
Copy link

The type inference and lack of boilerplate might be worth mentioning in expressive? Something like this ->
"F# code is very expressive, requiring little code for great results, indentation over '{}' and type inference removing the need for 90% of signatures"

@CraigChamberlain
Copy link

I don't love "Unique" as a title. It is pretty like ML as far as I know so there is that. "Strongly-typed" is a good alternative but might stop somewhere short of the beauty of the type system which is at the heart of its USP. "Advanced Type System" might be better?

@ErikSchierboom
Copy link
Member Author

These are all good. I think Immutable First might be worth mentioning. I know it's common to a lot of functional languages but anyone playing with immutability in C# might appreciate this. "Freely pass and return reference types without the risk of exposing your data external modification."?

One thing to keep in mind with these key features is that we're basically "selling" the language to a student. In other words: the key features should be enticing. I'm not sure that immutable first is a big selling point. Maybe we should rephrase to something like "Secure" or something that mentions less errors?

@ErikSchierboom
Copy link
Member Author

I don't love "Unique" as a title. It is pretty like ML as far as I know so there is that.

Well, this is true, but F# does have some actually unique and fantastic features like type providers and active patterns that I think no other languages have. To me, that makes for a great Unique Selling Point

"Strongly-typed" is a good alternative but might stop somewhere short of the beauty of the type system which is at the heart of its USP. "Advanced Type System" might be better?

I originally had Advanced Type System, but removed it later on. We could re-add it.

@ErikSchierboom
Copy link
Member Author

"F# code is very expressive, requiring little code for great results, indentation over '{}' and type inference removing the need for 90% of signatures"

There is a limit of 100 characters, so we'd have to shorten it a bit. We could also mention F# being very readable.

@CraigChamberlain
Copy link

I don't love "Unique" as a title. It is pretty like ML as far as I know so there is that.

Well, this is true, but F# does have some actually unique and fantastic features like type providers and active patterns that I think no other languages have. To me, that makes for a great Unique Selling Point

"Strongly-typed" is a good alternative but might stop somewhere short of the beauty of the type system which is at the heart of its USP. "Advanced Type System" might be better?

I originally had Advanced Type System, but removed it later on. We could re-add it.

I did active patterns in Scala, it was a brute comparatively with lots of boiler plate so can't really compare. Just looked up type providers. Not used but looks like code generation. Overlap with tooling?

@ErikSchierboom
Copy link
Member Author

ErikSchierboom commented May 5, 2021

Ah, so Active Patterns is not unique, thanks for that. Type Providers is really a language feature, I don't think it overlaps with Tooling. We could rename "Unique" to something else?

@CraigChamberlain
Copy link

These are all good. I think Immutable First might be worth mentioning. I know it's common to a lot of functional languages but anyone playing with immutability in C# might appreciate this. "Freely pass and return reference types without the risk of exposing your data external modification."?

One thing to keep in mind with these key features is that we're basically "selling" the language to a student. In other words: the key features should be enticing. I'm not sure that immutable first is a big selling point. Maybe we should rephrase to something like "Secure" or something that mentions less errors?

True enough although I think the Immutability might be quite attractive to more experienced developers who getting into the increasingly popular functional paradigm. Perhaps the Safe thing is good. Could include null handling? Kotlin has some similarities in this.

https://kotlinlang.org/

They are selling themselves as "Modern, concise and safe" with the null handling being one of their most lauded features.

@CraigChamberlain
Copy link

CraigChamberlain commented May 5, 2021

Safe -> "Types and assignments are Immutable by default and can never be null. Push runtime errors to compile time."

Could swap with Powerful?

@CraigChamberlain
Copy link

This looks a bit like active patterns ->
https://programmingideaswithjake.wordpress.com/2016/08/27/improved-pattern-matching-in-kotlin/

Scala has this ->
https://stackoverflow.com/questions/4683682/scala-c-sharp-equivalent-of-f-active-patterns

Neither are as cool as active patterns though that combine power of Discriminated Unions.

@ErikSchierboom
Copy link
Member Author

They are selling themselves as "Modern, concise and safe" with the null handling being one of their most lauded features.

I like something like that!

@CraigChamberlain
Copy link

Final idea - "Integration" vs Interop? Koitlin and various compile to JavaScript languages use the term "Interop" instead. I know Integration is maybe better as its part of the .NET ecosystem rather than a syntax/compiler but might market better. At least as a title, could reinforce long-term MS support.
"As a member of the .NET ecosystem F# enjoys two-way compatibility with your existing C# libraries."

@ErikSchierboom
Copy link
Member Author

I like Interop better!

@ErikSchierboom
Copy link
Member Author

ErikSchierboom commented Jun 9, 2021

This has been laying dormant for a while. What about:

[
  {
    "icon": "features-oop",
    "title": "Expressive",
    "content": "F# code is very expressive, requiring little code for great results"
  },
  {
    "icon": "features-strongly-typed",
    "title": "Fun",
    "content": "F#'s powerful type system is a joy to work with"
  },
  {
    "icon": "features-declarative",
    "title": "Safe",
    "content": "F#'s type system helps catch errors at compile-time. No more null-reference exceptions!"
  },
  {
    "icon": "features-functional",
    "title": "Functional first",
    "content": "F# is primarily a functional language, but also has great object-oriented support"
  },
  {
    "icon": "features-generic",
    "title": "Interop",
    "content": "As a member of the .NET ecosystem, F# enjoys full, two-way compatibility with C# code/libraries"
  },
  {
    "icon": "features-lazy",
    "title": "Tooling",
    "content": "F# has excellent tooling, with linting and refactoring options built-in"
  }
]

@CraigChamberlain
Copy link

CraigChamberlain commented Jun 9, 2021 via email

@ErikSchierboom
Copy link
Member Author

Thanks. PR submitted: #928

@iHiD iHiD closed this as completed in #928 Jun 10, 2021
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

Successfully merging a pull request may close this issue.

3 participants