Giter Club home page Giter Club logo

Comments (20)

ErikSchierboom avatar ErikSchierboom commented on September 25, 2024 1

@jovaneyck PR #152 was just merged, which converts the six remaining OO exercises to functional ones :)

from fsharp.

jwood803 avatar jwood803 commented on September 25, 2024

I wonder if that could be something we can add to the config...

from fsharp.

ErikSchierboom avatar ErikSchierboom commented on September 25, 2024

Well, the config file is JSON, so that means no comments.

from fsharp.

jovaneyck avatar jovaneyck commented on September 25, 2024

This makes a lot of sense.

I'm only about 1/3rd in the F# track and experience this. Some exercises require understanding of a lot of concepts if you want to solve them elegantly (partial active patterns, options, list functions, piping,...), while the follow-up exercise is a walk in the park again. I'll see if I can find the time to pick out the ones I found especially tricky.

I found the ones that have a non-functional API (I'm looking at you Clock & Bank Account!) add complexity that isn't necessary to grasp F# FP basics. When working in the real world/C# interop those things become very relevant but these topics aren't that relevant if you want a taste of idiomatic F#.
I'd push those exercises further down the track.
Especially Bank Account, that one even had me pulling out MailBoxProcessor 😄

from fsharp.

ErikSchierboom avatar ErikSchierboom commented on September 25, 2024

@jovaneyck Thanks a lot in advance already! There are some exercises with a non-functional API. Do you think we should be converting them to proper functional exercises?

from fsharp.

rmunn avatar rmunn commented on September 25, 2024

@ErikSchierboom I feel like I should try to complete all the exercises before I can really rank them, but I do think that the ones with a non-functional API are worth converting.

from fsharp.

ErikSchierboom avatar ErikSchierboom commented on September 25, 2024

@rmunn Sure, that totally makes sense! I'll rework the non-functional exercises.

from fsharp.

choiaa avatar choiaa commented on September 25, 2024

@ErikSchierboom I do prefer the approach of tagging each exercise with a list of topics that need to be understood beforehand, and from there grouping the topics themselves by difficulty to determine the order of exercises. With difficulty being based on personal opinion there will be more room for subjectivity and the influence of each person's programming background.

I can start tagging each exercise as I do it, plus the finished ones. I was thinking of turning this into a little fsharp program, maybe something along these lines:

type Topic    = Topic of string
type Exercise = { title : string; topics : Topic list }
let Exercises = [ ("bob", ["PatternMatching", "Conditionals"]) // ...
                ] |> List.map (fun title topics -> { title = title; topics = List.map Topic topics})

Once all the data is in then it will be easy to write a sorting function and adjust the algorithm as needed.

from fsharp.

ErikSchierboom avatar ErikSchierboom commented on September 25, 2024

Great idea! I'll try to work on my list of tags as well.

from fsharp.

choiaa avatar choiaa commented on September 25, 2024

@ErikSchierboom How about using the header topics in the fsharp language reference for the tags?

Also, I assume we will be using the example solutions in the xfsharp repo?

from fsharp.

ErikSchierboom avatar ErikSchierboom commented on September 25, 2024

@choiaa The F# language reference is a very convenient help. I do think that we should also have a way of marking the difficulty of an exercise. One exercise that uses pattern-matching might be a lot more difficult than another.

The example solutions are just that: examples. There are probably far better solutions to many of the problem than what I came up with. I think we can use the examples as a guide to see what concepts will probably be used to solve them, but they shouldn't be the definitive guide.

from fsharp.

choiaa avatar choiaa commented on September 25, 2024

@ErikSchierboom You're right, I did notice the difference in difficulty even for a single topic. Do you suggest adding a single Difficulty field to the Exercise record or adding three different fields as so?

Easy : Topic list
Medium : Topic list 
Advanced : Topic list

Also, where in the repo do you recommend placing this sorting program? Maybe it can be turned into an exercise with a test suite of its own?

from fsharp.

ErikSchierboom avatar ErikSchierboom commented on September 25, 2024

I think the first option (single field) is better, because even though one exercise might have three advanced topics and the other just one, the latter might still be more difficult.

As for where to put this code, maybe we should create a tools or helpers directory and then put the program in a sub-directory within that directory. We can then modify the build script to allow us to run the application.

To make it an exercise would require it to be added to the x-common repository. If you think you can create a suitable exercise from it, you should create an issue in that repository.

from fsharp.

ErikSchierboom avatar ErikSchierboom commented on September 25, 2024

These are all the header topics from the F# language reference page:

  • Functions
  • Values
  • Literals
  • Type Inference
  • Primitive Types
  • Unit Type
  • Strings
  • Tuples
  • Lists
  • Options
  • Sequences
  • Arrays
  • Generics
  • Records
  • Discriminated Unions
  • Enumerations
  • Reference Cells
  • Type Abbreviations
  • Classes
  • Structures
  • Inheritance
  • Interfaces
  • Abstract Classes
  • Members
  • Type Extensions
  • Parameters and Arguments
  • Operator Overloading
  • Flexible Types
  • Delegates
  • Object Expressions
  • Copy and Update Record Expressions
  • Casting and Conversions
  • Access Control
  • Conditional Expressions: if...then...else
  • Match Expressions
  • Pattern Matching
  • Active Patterns
  • Loops: for...to Expression
  • Loops: for...in Expression
  • Loops: while...do Expression
  • Assertions
  • Exception Handling
  • Attributes
  • Resource Management: The use Keyword
  • Namespaces
  • Modules
  • Import Declarations: The open Keyword
  • Signatures
  • Units of Measure
  • XML Documentation
  • Lazy Computations
  • Computation Expressions
  • Asynchronous Workflows
  • Query Expressions
  • Code Quotations
  • Compiler Directives

Not all of them are useful in the context of grading our exercises. Perhaps we should omit the ones we think won't apply to our examples? For example, I don't think we need Compiler Directives as a topic.

Furthermore, some topics are missing, such as Recursion.

from fsharp.

lucafuelbier avatar lucafuelbier commented on September 25, 2024

As a long-term solution you could implement a system where the user can rate a finished problem with easy/appropriate/hard and change the order of the problems based on that feedback. Codewars uses a similar system to grade their new Kata entries. Implementing a solution like this would introduce a couple of other problems tho, mainly how you rank the feedback of your users and how to make the system effective without changing around too much all the time. Also this would mean implementing it for the whole site, not only the F# problem track, which might be undesirable.

from fsharp.

kytrinyx avatar kytrinyx commented on September 25, 2024

As a long-term solution you could implement a system where the user can rate a finished problem with easy/appropriate/hard and change the order of the problems based on that feedback.

Yeah, I think it would help a lot to get feedback from people about difficulty.

from fsharp.

kytrinyx avatar kytrinyx commented on September 25, 2024

Also this would mean implementing it for the whole site, not only the F# problem track, which might be undesirable.

No, very desirable, I think!

A couple of somewhat related discussions:

There's been so much to do on Exercism for so long, but I think that the time is probably ripe for something like this now.

from fsharp.

ErikSchierboom avatar ErikSchierboom commented on September 25, 2024

There has been quite some progress lately on this issue. See this issue in particular. I think the next step for us will be to specify the topics for all exercises. After that, we can try to assign difficulties and then finally we can try to come up with a better order for the exercises.

Once the new format has been approved, I'll start with the groundwork. Hopefully, you'll be able to help assigning the topics.

from fsharp.

ErikSchierboom avatar ErikSchierboom commented on September 25, 2024

Since merging this PR yesterday, all exercises relevant to the F# track that can be added have been added. The next point of focus is the re-ordering of the exercises, which means we have to do two things:

  1. Assign topics to the exercises.
  2. Assign a difficulty to the exercise.

For point 1, we can use this list as a starting point. It is quite comprehensive, but if we find any topics lacking, we can add them (although we should prefer to use the default topics).

For point 2, we we should assign each exercise a difficulty, which is a number from 1 (easiest) to 10 (hardest).

Once we have assigned the topics and difificulty for all exercises, we can then re-order the exercises to make for a better learning curve.

While I am happy to start working on this, I would really like your help too. What might be hard for me, might be easy for others, and vice versa.

I know that some people are farther along the track than others, but that's perfectly fine. I've set things up to discuss in batches of 10 exercises, in order of them being served by the track. That means we'll start with the first 10 exercises, which most of you will have completed I think. Once we reach agreement on how to classify those 10 exercises, we'll move on to the next 10.

Hopefully you (@jwood803 @jovaneyck @rmunn @choiaa @Xehanort94 amongst others) are interested in helping make the F# track even better and give your invaluable feedback! Thanks in advance.

from fsharp.

ErikSchierboom avatar ErikSchierboom commented on September 25, 2024

This has been closed by this PR.

from fsharp.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.