ramda.github.io icon indicating copy to clipboard operation
ramda.github.io copied to clipboard

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

Open kswope opened this issue 3 years ago • 12 comments

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.

kswope avatar Sep 08 '21 20:09 kswope

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

adispring avatar Sep 09 '21 00:09 adispring

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 avatar Sep 09 '21 01:09 CrossEye

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

CrossEye avatar Sep 13 '21 01:09 CrossEye

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

adispring avatar Sep 13 '21 11:09 adispring

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

harisraharjo avatar Sep 16 '21 14:09 harisraharjo

@harisraharjo:

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

CrossEye avatar Sep 16 '21 18:09 CrossEye

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?

webduvet avatar Sep 27 '21 09:09 webduvet

@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?

CrossEye avatar Sep 29 '21 02:09 CrossEye

Related ramda/ramda.github.io#270

customcommander avatar Dec 26 '21 13:12 customcommander

Ping.

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

CrossEye avatar Jan 19 '22 01:01 CrossEye

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 :)

customcommander avatar Jan 19 '22 18:01 customcommander

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.

CrossEye avatar Jan 19 '22 21:01 CrossEye