I also feel like CoffeeScript encourages incredibly complex practices just because the code can be written in a small amount of space. For example, here's a block of code from the library in question:
sumOverSumBound80: (sigfig=3, scaler=1, upper=true) -> ([num, denom]) -> ->
sumNum: 0
sumDenom: 0
push: (row) ->
@sumNum += parseFloat(row[num]) if not isNaN parseFloat(row[num])
@sumDenom += parseFloat(row[denom]) if not isNaN parseFloat(row[denom])
value: ->
sign = if upper then 1 else -1
(0.821187207574908/@sumDenom + @sumNum/@sumDenom + 1.2815515655446004*sign*
Math.sqrt(0.410593603787454/ (@sumDenom*@sumDenom) + (@sumNum*(1 - @sumNum/ @sumDenom))/ (@sumDenom*@sumDenom)))/
(1 + 1.642374415149816/@sumDenom)
format: numberFormat(sigfig, scaler)
Have fun reading that... I think claims that CoffeeScript is a write-only language have very legitimate ground. sumOverSumBound80: (sigfig=3, scaler=1, upper=true) -> ([num, denom]) -> ->
The many arrows in the first line are confusing to me.http://nodejsreactions.tumblr.com/post/51550250985/discoveri...
The pivot table needs an aggregator object per cell, so we need a factory-function to provide one (this is the right-most arrow).
That function needs to know which columns to use as the numerator and denominator, without these being passed in on every invocation, so I used a function-generator that closes over those two values.
The third, almost gratuitous layer of function calls allows one to parametrically generate this function-generator with different formatting options.
Note that this is not an argument against coffeescript as a language. Use it if you want. Just realize that calling things ".js" when they are not is both confusing to newcomers and those expecting to read a lib written in js.