
A Degree of Understanding - raganwald
http://github.com/raganwald/homoiconic/blob/master/2010/06/degree.md#readme
======
fogus
In the course of writing a programming book I've come to learn something
surprising (for me anyway). People can be very touchy when you assume that
they know the meanings of certain programming topics. Among those that I've
found to be particularly hurtful are: monad, combinator, closure, functional,
immutable, higher-order, Haskell, big-O, and macro.

~~~
j_baker
The worst of all is "persistent" as in "persistent data structure"[1]. This
ignites tempers like none other.

[1] <http://en.wikipedia.org/wiki/Persistent_data_structure>

~~~
fogus
Yes persistent is a doozy, as is lambda -- the ultimate antagonizer.

------
stan_rogers
Look, I ain't no fancy U of T CS grajuit -- just a Sudbury-area high school
dropout of approximately Reg's vintage -- and I fell into programming quite by
accident, but I see the value in having a common language that is very
specific to what we do. Call it a jargon if you want; it is the correct term.
That doesn't make it invalid as a tool for communication. Mechanics would
expect that others of the guild would know the difference between a Phillips
screwdriver and a Reed & Prince; they wouldn't expect it of the average
tinkerer (and unless you know the difference, you _will_ strip screws and wind
up cursing a lot). Every trade, every profession has its "in" vocabulary --
why on earth should programming (or, to elevate the craft beyond its current
state of the art, "Software Engineering") be any different?

Whether we want to admit it to ourselves or not, we do some pretty serious
stuff (once we progress beyond "Hello, world" or Aunt Nell's cat fancier web
site). Why shouldn't we take ourselves seriously? I mean, cripes, I worried
about big O, edge cases, maintainability and profiling when I started
developing Notes applications after transitioning from years as a shoe shiner
and apprentice cobbler. OO concepts were not far behind, and anyone who has
done anything non-trrivial in JavaScript should have knocked up against
functional programming principles at some point. Each of those has its own
associated terminology. As an autodidact, I understand that there are some
things I just plain ought to know if I want to participate in this little part
of the world. I see no particular reason why I should be responsible not only
for re-inventing the wheel, but for reconceptualising roundness on a daily
basis.

If as high school dropout I can take the time to learn the language and the
concepts it represents, why shouldn't I be able to expect the same from people
who entered the guild in a more conventional manner? It's nothing more than
Mike the plumber would expect from his peers.

------
kqueue
You can have a computer science degree and no nothing about Kestrels or
Thrushes. Just because you stumbled upon them in a course or online it doesn't
mean that others should know about them.

Trust me, I can pick a term from "Introduction to Algorithms" or Knuth's 3
volume books that you never heard about.

For those who are interested in your plugin, chances are high that they know
what K/T represents, but that's because they've worked with combinators before
and that's why they are looking at your plugin.

~~~
raganwald
_You can have a computer science degree and no nothing about Kestrels or
Thrushes. Just because you stumbled upon them in a course or online it doesn't
mean that others should know about them._

I know that, that's why I wrote this post. Although I don't think I "stumbled
upon them in a course," Combinatorial Logic was a requirement at UofT's
undergraduate program in the 80s. But I don't think every program required it
then, and certainly not every program requires it now, so I don't think every
or even many programmers know what they are.

And I don't think others should know about them. I picked them as an example,
perhaps the larger question is, "What subset of all the things someone might
learn as part of an undergraduate CS degree should be considered standard?" If
you don't teach SKI calculus, you teach something else, so it's not like
people are graduating knowing less than I did, just different things.

In recent years, it seems that the answer has been dominated by vocational
concerns rather than theoretical concerns. So CS graduates are less likely to
have heard of Kestrels or Parser Combinators than of Java Packages. I'm just
pointing out that there is some value in having a standard body of knowledge
such that jargon is immediately recognizable by new graduates.

 _For those who are interested in your plugin, chances are high that they know
what K/T represents, but that's because they've worked with combinators before
and that's why they are looking at your plugin_

Well, obviously if I name if jQuery Combinators than K and T are fine names.
But I suspect that if I named it "Ruby Shoes for jQuery" and named the methods
"returning" and "into" I would have 10x the audience.

------
CoryMathews
Programming is far to broad to assume everyone knows every word. I'm a recent
grad ~1yr working as a web developer on a ms stack so what I use every day may
be completely different from what he uses every day. Therefore I am going to
know a completely different set of terms then him.

I never heard of K and T while in college. Why? Probably because its not a
major enough term. There is hardly enough time to learn all the lingo
especially when it takes a whole 10 lines to write these combinators. I would
have just wrote those ten lines and not cared what its called.

------
mquander
I would point out that "it's so damn easy for programmers to rename them" is a
bit of a cop-out. It's never really free to do that, because then your code
looks and feels foreign to other people writing code with the same library.

------
noodle
> Why is it a bad idea to call my jQuery plugin "jQuery Combinators," and why
> are K and T such terrible names for its methods?

simple answer: marketing.

you have a nice plugin there. if you want more people to find it and use it,
using terminology that discriminates instead of includes will make that more
difficult. if you don't, then it doesn't matter and you can do whatever you
want.

~~~
raganwald
+1. although it's kind of sad that there is this rich trove of knowledge about
computer science that has somehow become "discriminatory" instead of "lingua
franca." It seems to parallel the disdain some elements of society have for
science in general.

I will probably rename everything at some point and use it to try to lure
people into finding out more about combinators. Perhaps "Ruby Shoes for
jQuery" could be the gateway drug for combinatory logic... But somehow I'm
still saddened to think that we could look at something, know it has a name,
but fear that calling it by its name will make it less popular than if we try
to find a catchy nickname for it.

Should professors rename the combinators "returning" and "into?"

~~~
chc
It's not the knowledge that's discriminatory — it's the odd, non-descriptive
names. Honestly, is there anything about the K-combinator that would naturally
make you think "Hey, that's a K" if you only knew how it was used and didn't
know its name? The name is not the thing.

This isn't about a distain for science or knowledge. It's about disdain for
oblique names. I mean, heck, we would blast anyone who named all their
variables that way. Imagine if Ruby's "each," "map" and "select" methods were
instead named "w", "q" and "x" — you would rightly say that Matz had gone mad.
We tolerate it in our combinators because that's just how it's always been
done, but that doesn't mean other people are wrong to be put off by it.

------
lhorie
>> Why is it a bad idea to call my jQuery plugin "jQuery Combinators," and why
are K and T such terrible names for its methods?

FWIW, In Prototype.js, K is the identity function.

I think the problem is in assuming that people reading the code will know K
and T are combinatory logic concepts, considering the terms aren't even
described on Wikipedia (at least as far as I can tell).

(BTW: On a side note, the code currently throws an error if you don't have
"Functional" declared.)

~~~
steveklabnik
> considering the terms aren't even described on Wikipedia (at least as far as
> I can tell).

[http://en.wikipedia.org/wiki/Combinator#Completeness_of_the_...](http://en.wikipedia.org/wiki/Combinator#Completeness_of_the_S-
K_basis)

~~~
lhorie
I stand corrected.

In any case, is this supposed to be a given to a javascript programmer? I
don't think anyone in my company would see a .K() and go "oh, that's a
combinator", for instance, and most programmers there have CS degrees. I'd say
that even asking for a definition of combinator would be pushing it, in
fact...

~~~
steveklabnik
Totally. I myself haven't put in enough time to know more about combinators
than "they exist."

------
larrytheliquid
Stick with current proper naming.

1\. By using these names someone that comes across combinators somewhere else
can relate to a previous "popular" jquery library they've used. This makes the
new knowledge easier to digest thanks to partial familiarity.

2\. I've come across other formal methods material in the past that was
"decorated" to be seemingly be easier to understand. Instead, I thought this
material was the author's original invention and had no way to search for more
information on the subjects with "made up", rather than established, terms.

3\. You're also a pretty popular internet persona. Just like with your
previous "raganwald" blog, having someone in the spotlight promote lesser
known but useful information is beneficial for the programming community.

------
j_baker
I think the problem is that a lot of programmers will assume that you're
trying to use intellectual violence[1] against them. To protect themselves
from feeling ignorant, they shift the blame onto you. It's unfortunate, but I
don't know that there's any way around it. Not everyone understands
abstractions like K and T combinators. I think your choice is between: 1)
"dumbing" it down or 2) letting some people be intimidated.

In the end, remember that it's your open source library. If people feel so
strongly against those names, they can fork you.

[1] <http://sourcemaking.com/antipatterns/intellectual-violence>

~~~
raganwald
[http://github.com/raganwald/JQuery-
Combinators/issues/closed...](http://github.com/raganwald/JQuery-
Combinators/issues/closed/#issue/2)

