4 ms·
A Degree of Understanding
- kqueue 16y agoYou 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 16y agoYou 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.
- fogus 16y agoIn 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.
- raganwald 16y ago+1. And I think that's related to the emotional baggage around blog posts titled "Why _____ is an excellent|terrible interview question|exercise." Jargon and slang have a useful ability to compress information, but they also carry tribal connotations. "Raganwald is a NOOP," for example, is simultaneously an insult and an opportunity to reinforce a tribal bond between speaker and listener, who both share a certain understanding of the term "NOOP."
- j_baker 16y agoThe 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 http://en.wikipedia.org/wiki/Persistent_data_structure
- fogus 16y agoYes persistent is a doozy, as is lambda -- the ultimate antagonizer.
- noodle 16y ago> 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 16y ago+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?"
- noodle 16y agoi think you're confusing "lingua franca" with "jargon". you're using jargon now, and should translate it into lingua franca for the non-CS trained jquery users. and that is just how it goes with the popularization with any field. the masses will have their own way of talking about concepts that differs from the educated academics. and there's a growing group of non-CS educated web developers/designers that make use of jquery in meaningful ways.
- chc 16y agoIt'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.
- CoryMathews 16y agoProgramming 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.
- lhorie 16y ago>> 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 16y ago> 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_S-K_basis http://en.wikipedia.org/wiki/Combinator#Completeness_of_the_...
- lhorie 16y agoI 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 16y agoTotally. I myself haven't put in enough time to know more about combinators than "they exist."
- raganwald 16y agohttp://github.com/raganwald/JQuery-Combinators/issues/closed/#issue/1 http://github.com/raganwald/JQuery-Combinators/issues/closed...
- j_baker 16y agoI 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 http://sourcemaking.com/antipatterns/intellectual-violence
- raganwald 16y agohttp://github.com/raganwald/JQuery-Combinators/issues/closed/#issue/2 http://github.com/raganwald/JQuery-Combinators/issues/closed...
- deleted 16y ago[deleted]
- mquander 16y agoI 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.
- larrytheliquid 16y agoStick 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.
- stan_rogers 16y agoLook, 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.