ramda.github.io
ramda.github.io copied to clipboard
Proposal: Reduce library adoption friction by emphasizing the most used functions somehow.
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.
Good suggestion. There are almost 300 hundred functions in ramda, too many to learn/search.
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.
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
My usage status 4 years ago is here: https://github.com/adispring/statistic_ramda/blob/master/ramda-status.md
How about this: List all the functions with a vote icon, and then let the users vote.
@harisraharjo:
Sure, but where and how? How do we prevent ballot stuffing?
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: 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?
Related ramda/ramda.github.io#270
Ping.
Does anyone have further ideas on this topic? While I would love to see something, I don't have real suggestions.
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 :)
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.