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

Proposal: Reduce library adoption friction by emphasizing the most used functions somehow. #271

Open
kswope opened this issue Sep 8, 2021 · 12 comments

Comments

@kswope
Copy link

kswope commented Sep 8, 2021

Wanting to try out Ramda for the first time I’m just confronted with a wall of functions, many of which I’m sure are little used or just deprecated.

What a newcomer like me needs is a list of functions to feed into the L1 Cache of my brain to make thinking in ramda less of a struggle. Having some experience with FP I know that map() and reduce() will probably be at the top, but beyond that there must be a subset that are frequently used.

I suggest something like a list of these functions on the homepage, or better yet, a MVP tag in the documentation, or even just a ⭐ next to the function. So when I know I need a “List” function, I can search on “List”, and I’ll see ⭐ next to a few functions, which are more likely what I’m looking for.

@adispring
Copy link
Member

Good suggestion. There are almost 300 hundred functions in ramda, too many to learn/search.

@CrossEye
Copy link
Member

CrossEye commented Sep 9, 2021

This is an interesting idea.

But I have no idea how to achieve it.

I could list the functions I use most... not easily, but with some work. @adispring could list the functions he uses most. Others could list their functions. But the Ramda community is very large, with over a million daily NPM downloads, and some number of users I don't even know how to estimate; I don't know how to get a representative sampling.

Or we could simply play a guessing game, make a pass at it, and look for feedback, iterate until it stabilizes.

I could also see a silly little application, authenticated with a GitHub profile to avoid spam that lets a user categorize Ramda functions into Use All The Time, Use Fairly Often, Use Occasionally, Use Quite Rarely, Have Never Used, and What's That?. After a few thousand users, we would probably get a reasonable answer.

Or maybe the core team simply curates a list of the 25 most common functions, or some such.

We probably should so something to make this more prominent: https://github.com/ramda/ramda/wiki/What-Function-Should-I-Use, but I don't even know when it was last updated.

So I'd love to hear suggestions both for how to gather the information about the most important functions and for how to present that information.

@CrossEye
Copy link
Member

I did a pass at separating the functions for my usage from 1 for most used to 5 for least used. I wonder how they match up with anyone else's.

1 ap
1 chain
1 compose
1 concat
1 contains
1 curry
1 filter
1 find
1 findIndex
1 includes
1 join
1 length
1 lift
1 map
1 path
1 pipe
1 pluck
1 prop
1 propEq
1 reduce
2 all
2 allPass
2 andThen
2 any
2 anyPass
2 append
2 assoc
2 assocPath
2 cond
2 curryN
2 dissoc
2 dissocPath
2 endsWith
2 equals
2 evolve
2 flatten
2 flip
2 groupBy
2 groupWith
2 has
2 hasPath
2 head
2 identical
2 into
2 isNil
2 keys
2 lens
2 lensIndex
2 lensPath
2 lensProp
2 merge
2 mergeAll
2 objOf
2 of
2 over
2 pathEq
2 prepend
2 range
2 reject
2 replace
2 reverse
2 set
2 slice
2 split
2 sum
2 tail
2 take
2 tap
2 toLower
2 toPairs
2 toUpper
2 uniq
2 values
2 view
2 when
2 where
2 without
3 __
3 add
3 addIndex
3 always
3 apply
3 applySpec
3 applyTo
3 ascend
3 both
3 clone
3 comparator
3 complement
3 composeWith
3 converge
3 countBy
3 dec
3 defaultTo
3 descend
3 difference
3 differenceWith
3 divide
3 either
3 empty
3 eqBy
3 eqProps
3 findLast
3 findLastIndex
3 fromPairs
3 gt
3 gte
3 identity
3 ifElse
3 indexOf
3 insert
3 insertAll
3 intersection
3 isEmpty
3 juxt
3 last
3 liftN
3 max
3 maxBy
3 min
3 minBy
3 multiply
3 nAry
3 o
3 omit
3 or
3 otherwise
3 pair
3 partial
3 partialRight
3 partition
3 pathOr
3 pick
3 pickAll
3 pipeWith
3 product
3 project
3 propIs
3 propOr
3 propSatisfies
3 props
3 reduceBy
3 reduceRight
3 reduceWhile
3 repeat
3 sort
3 sortBy
3 sortWith
3 splitEvery
3 splitWhen
3 startsWith
3 subtract
3 takeLast
3 takeLastWhile
3 takeWhile
3 test
3 traverse
3 trim
3 tryCatch
3 type
3 uncurryN
3 unfold
3 union
3 unless
3 update
3 useWith
3 whereEq
3 xprod
3 zip
3 zipObj
3 zipWith
4 F
4 T
4 adjust
4 and
4 aperture
4 binary
4 bind
4 call
4 clamp
4 composeK
4 composeP
4 construct
4 constructN
4 drop
4 dropLast
4 dropLastWhile
4 dropRepeats
4 dropRepeatsWith
4 dropWhile
4 hasIn
4 inc
4 indexBy
4 init
4 innerJoin
4 intersperse
4 invert
4 invertObj
4 invoker
4 keysIn
4 lastIndexOf
4 lt
4 lte
4 mapAccum
4 match
4 mathMod
4 mean
4 median
4 memoizeWith
4 mergeDeepLeft
4 mergeDeepRight
4 mergeDeepWith
4 mergeDeepWithKey
4 mergeLeft
4 mergeRight
4 mergeWith
4 mergeWithKey
4 modulo
4 move
4 negate
4 none
4 not
4 nth
4 nthArg
4 once
4 pathSatisfies
4 paths
4 pickBy
4 pipeK
4 pipeP
4 reduced
4 remove
4 scan
4 sequence
4 splitAt
4 symmetricDifference
4 symmetricDifferenceWith
4 thunkify
4 times
4 toPairsIn
4 transduce
4 transpose
4 unapply
4 unary
4 unionWith
4 uniqBy
4 uniqWith
4 unnest
4 until
4 valuesIn
4 xor
5 forEach
5 forEachObjIndexed
5 is
5 mapAccumRight
5 mapObjIndexed
5 toString

@adispring
Copy link
Member

My usage status 4 years ago is here: https://github.com/adispring/statistic_ramda/blob/master/ramda-status.md

@harisraharjo
Copy link

How about this: List all the functions with a vote icon, and then let the users vote.

@CrossEye
Copy link
Member

@harisraharjo:

Sure, but where and how? How do we prevent ballot stuffing?

@webduvet
Copy link

I don't think most used to least used list would help much. Most used functions like map, filter, propOr would get high visibility, but those concepts are well known.
I would suggest introducing another documentation tab, with tutorials and topics. - Perhaps using Try Ramda to link some interactive end to end examples?

@CrossEye
Copy link
Member

@webduvet: There are dozens of tutorials out there teaching Ramda. Would you suggest that such a tab hosts such tutorials or simply offers links to them?

@customcommander
Copy link
Member

Related #270

@CrossEye
Copy link
Member

Ping.

Does anyone have further ideas on this topic? While I would love to see something, I don't have real suggestions.

@customcommander
Copy link
Member

Perhaps we could extract the functions mentioned in Stack Overflow posts and create a sort of a map/graph? We could see what are the functions that tend to be used together and what are the ones that seem to be the most confusing or mentioned the most.

Just an idea. Most likely a very silly one :)

@CrossEye
Copy link
Member

Interesting, but I think that would be quite difficult, especially when we have many common English words as function name, "all", "and", "any", "call", "both", "count", "drop", "either", "find", and many more.

There are possibilities, but I don't think it's a quick one.

@customcommander customcommander transferred this issue from ramda/ramda Apr 3, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants