Skip to content

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

@kswope

Description

@kswope

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.

Activity

adispring

adispring commented on Sep 9, 2021

@adispring
Member

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

CrossEye

CrossEye commented on Sep 9, 2021

@CrossEye
Member

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

CrossEye commented on Sep 13, 2021

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

adispring commented on Sep 13, 2021

@adispring
Member
harisraharjo

harisraharjo commented on Sep 16, 2021

@harisraharjo

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

CrossEye

CrossEye commented on Sep 16, 2021

@CrossEye
Member

@harisraharjo:

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

webduvet

webduvet commented on Sep 27, 2021

@webduvet

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

CrossEye commented on Sep 29, 2021

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

customcommander commented on Dec 26, 2021

@customcommander
Member

Related #270

CrossEye

CrossEye commented on Jan 19, 2022

@CrossEye
Member

Ping.

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

customcommander

customcommander commented on Jan 19, 2022

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

CrossEye commented on Jan 19, 2022

@CrossEye
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.

transferred this issue fromramda/ramdaon Apr 3, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @CrossEye@kswope@customcommander@webduvet@adispring

        Issue actions

          Proposal: Reduce library adoption friction by emphasizing the most used functions somehow. · Issue #271 · ramda/ramda.github.io