Comments (20)
@jovaneyck PR #152 was just merged, which converts the six remaining OO exercises to functional ones :)
from fsharp.
I wonder if that could be something we can add to the config...
from fsharp.
Well, the config file is JSON, so that means no comments.
from fsharp.
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.
@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.
@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.
@rmunn Sure, that totally makes sense! I'll rework the non-functional exercises.
from fsharp.
@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.
Great idea! I'll try to work on my list of tags as well.
from fsharp.
@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.
@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.
@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.
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.
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.
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.
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.
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.
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.
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:
- Assign topics to the exercises.
- 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.
This has been closed by this PR.
from fsharp.
Related Issues (20)
- Many solutions for SgfParsing use FParsec but cannot pass TestRunner HOT 3
- I submitted a soltuion to mark as complete but it does not show in community solutions
- Make Diamond exercise compile instead of // TODO HOT 2
- Tests seem to fail in Exercism whilst passing locally HOT 3
- Show test summary in CI HOT 2
- Exercise: Binary Search HOT 3
- Too much test data generated for a successful test run HOT 2
- 🤖 Sync error for commit 2aadb3
- My test HOT 1
- This should stay open!
- This should close HOT 1
- Errors when running dotnet run and dotnet test HOT 1
- Why the parentheses in function calls? HOT 1
- Add introduction.tpl files for concept exercise where warranted. HOT 2
- LinkedList addToEmpty function not referenced in tests HOT 7
- Perfect Numbers tests does not finish HOT 2
- LogLines expects methods to be called but no-where in the introductions do we explain how to call methods HOT 1
- Building a training set of tags for fsharp HOT 16
- Booking up for beauty example solution invalid HOT 4
- Extending the learning syllabus: a tentative plan HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fsharp.