Re: Re: [Haskell-cafe] Building the community
On 14/12/06, Conrad Parker <[EMAIL PROTECTED]> wrote: What [hackers] are, unapologetically, is hostile to people who seem to be unwilling to think or to do their own homework before asking questions. People like that are time sinks — they take without giving back, and they waste time we could have spent on another question more interesting and another person more worthy of an answer. We call people like this "losers" (and for historical reasons we sometimes spell it "lusers"). I hope the Haskell community never adopts such an arrogant tone. I really agree with this. I think that one of the reasons that the Haskell community has grown to be so polite and helpful compared to many communities of comparable size is that kindness begets kindness. There's been a lot of chatter lately about how the Haskell community can grow faster than it has been. Personally, I would rather not have it grow any faster than we can manage. If there was a sudden influx of 1 brand-new Haskell users overnight (unattached to some pre-existing educational program), I think this community would quickly have a major problem answering all the mailing list and IRC traffic. If the community grows gradually, we'll easily be able to support it, because there will be a correspondingly larger number of experts and intermediate level users to help us out. Remember, if some significant factor of Haskell programmers advocate the language just to two of their friends, that's still exponential growth. There are also lots of other reasons why growing too quickly and gaining commercial users too quickly are double edged swords. Personally, I'd like to see the Prelude undergo a few more iterations, and it gets harder to change as more and more projects rely on it. When it does change, the maintenance cost of old code goes up, and not every project has an active maintainer. Popularity also results in large numbers of people who are invested in a particular way of doing things and are resistant to change. Haskell is a research language, and I'd personally like to see it remain a research language as its user-base grows. Granted, it would be better than the 30-year-old-at-heart programming languages people are using today, but I don't think I'd be truly satisfied if the Haskell which everyone used was not the Haskell which the researchers were working on with all the cool new ideas in it. I'm not saying "don't advocate Haskell", I love it too, and I like seeing new users, but I think we need to take some care in maintaining our excellent community while we're at it. Advocating the language on a grassroots basis means that each new user gets a mentor, or if not one, then an equivalent-mentor spread across the community, and people who have been mentored in such a way tend to repay it many times over in helping other beginners. Having a tightly-knit community who have adopted the mindset of following language development closely will also help offset the costs of change to the language. There are lots of benefits to growing the community, I just think that these are things to consider before we take out a full-page ad in the New York Times. :) - Cale ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: Re: [Haskell-cafe] Building the community
On 15/12/06, Nicolas Frisby <[EMAIL PROTECTED]> wrote: ... That's not to say it was the poster's fault: any question is a good question. I agree ... 2) The "welcome to the mailing list" message could say "if you're new to Haskell, please check this FAQ first". I'm talking big letters here; I'd even be OK with . ... hence I'd caution against such a rule. Part of the reason this community is welcoming is because there is no such barrier for people new to Haskell to ask questions. Everyone has a different mathematics ability and programming experience, and an ambiguously posed question is often just scratching the surface of what someone really wants to know. It's great that this community recognises that and responds accordingly. By contrast, many technical communities follow the advice of a document called "How to ask questions the smart way" by Eric Raymond and Rick Moen [0]. Although it contains some useful advice for individuals who want to find the answers to simply definable technical questions, imposing that advice on people who ask questions often ends up being elitist. For an example from that document: What [hackers] are, unapologetically, is hostile to people who seem to be unwilling to think or to do their own homework before asking questions. People like that are time sinks — they take without giving back, and they waste time we could have spent on another question more interesting and another person more worthy of an answer. We call people like this "losers" (and for historical reasons we sometimes spell it "lusers"). I hope the Haskell community never adopts such an arrogant tone. By all means, responders should politely refer to existing FAQ entries, and use the opportunity of answering questions to also improve the FAQ. At best, answering questions (the smart way ;-) should be thought of as taking part in a mathematical dialogue, not as a game of wits where the original poster is only given one chance to precisely formulate their question. cheers, Conrad [0] (which you can find by searching the Web for its title) ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: Re: [Haskell-cafe] Building the community
On 12/14/06, Ross Paterson <[EMAIL PROTECTED]> wrote: Absolutely. Some more questions of this type: How do I update a variable? How can I efficiently update an array? How do I get debugging output? How can I put different types of things in a list? Sometimes the person asking is ready for the advanced features, but all too often beginners are pointed at IORefs, the ST monad, trace and existential types, when, as you say, they probably asked the wrong question because they don't have the frame of reference to know what they need. I've definitely made that mistake about the heterogenous list. I blurted out existential code when they just didn't know about "data" types. Sure I see the mistake I made there, but variant types are often assumed to have been ruled out--it's kind of step one with Haskell. That's not to say it was the poster's fault: any question is a good question. Sometimes it's appropriate to assume some knowledge on the poster's behalf, and it would be tedious if every first response was a list of 10 questions gauging the poster's familiarity with various intro topics. Brainstorming: 1) The first response to a FAQ should be a link to a thorough treatment of the FAQ on the wiki. Of course first responders ignorant of the wiki FAQ's existence wouldn't be able to do this, but if the community is consistent, then people will most likely catch on (I suddenly realize that I'm talking about myself...) 2) The "welcome to the mailing list" message could say "if you're new to Haskell, please check this FAQ first". I'm talking big letters here; I'd even be OK with . Are these rules too draconian? Should we just adopt the tedium of quizing every new poster? What are some other steps that could help prevent overly sophistocated first responses? Nick ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Building the community
On Thu, Dec 14, 2006 at 10:16:10AM +, Neil Mitchell wrote: > I'd say our worst feature is tending to give solutions which are not > "simple" Haskell, but make use of advanced features. When a beginner > asks a question, sometimes the answer requires GADT's, Template > Haskell, rank-2 types etc. However this is usually because they asked > the wrong question - thinking in an imperative frame of mind. Often it > would be better to peel back to the original problem, where the answer > is more likely to be pure neat Haskell. > > I guess unsafePerformIO is just one instance of this. Absolutely. Some more questions of this type: How do I update a variable? How can I efficiently update an array? How do I get debugging output? How can I put different types of things in a list? Sometimes the person asking is ready for the advanced features, but all too often beginners are pointed at IORefs, the ST monad, trace and existential types, when, as you say, they probably asked the wrong question because they don't have the frame of reference to know what they need. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Building the community
Hallo, On 12/14/06, Paul Moore <[EMAIL PROTECTED]> wrote: But overall I'd agree, this is a very helpful community - it's just that you all seem so much cleverer than I, so I'm not sure I'll ever be smart enough to write Haskell programs :-) (50% joke...) I know the feeling. :-) -- -alex http://www.ventonegro.org/ ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Building the community
On 12/14/06, Neil Mitchell <[EMAIL PROTECTED]> wrote: Hi > * Give tips on how to answer questions > > + Ok. we can put up an article here. Some suggestions: > - No questions are bad questions > - Code should come with examples of how to run it > - Solutions with unsafePerformIO should be discouraged (moreso ;) > - Be polite! (we're good at this) I'd say our worst feature is tending to give solutions which are not "simple" Haskell, but make use of advanced features. When a beginner asks a question, sometimes the answer requires GADT's, Template Haskell, rank-2 types etc. However this is usually because they asked the wrong question - thinking in an imperative frame of mind. Often it would be better to peel back to the original problem, where the answer is more likely to be pure neat Haskell. As a newbie, and a lurker on this list, I'd second this. Often, the subtle and sophisticated answers are very rewarding to study, but they do give the impression that what the person who asked the original question was trying to do, is hard. Generally, it's a turn-off to feel that something which seems simple in another (probably procedural) language is hard in Haskell. At its worst, it comes across as people trying to look clever, rather than trying to help. If the user thinks it's a simple task, show a simple answer where at all possible. But overall I'd agree, this is a very helpful community - it's just that you all seem so much cleverer than I, so I'm not sure I'll ever be smart enough to write Haskell programs :-) (50% joke...) Paul. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Building the community
Hi * Give tips on how to answer questions + Ok. we can put up an article here. Some suggestions: - No questions are bad questions - Code should come with examples of how to run it - Solutions with unsafePerformIO should be discouraged (moreso ;) - Be polite! (we're good at this) I'd say our worst feature is tending to give solutions which are not "simple" Haskell, but make use of advanced features. When a beginner asks a question, sometimes the answer requires GADT's, Template Haskell, rank-2 types etc. However this is usually because they asked the wrong question - thinking in an imperative frame of mind. Often it would be better to peel back to the original problem, where the answer is more likely to be pure neat Haskell. I guess unsafePerformIO is just one instance of this. Thanks Neil ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Building the community
On 12/13/06, Donald Bruce Stewart <[EMAIL PROTECTED]> wrote: * Give tips on how to answer questions + Ok. we can put up an article here. Some suggestions: - Solutions with unsafePerformIO should be discouraged (moreso ;) I'd like to at least suggest a slight qualification here, based on some personal experience. A colleague of mine learned Haskell after having spent a while doing systems programming, and (with the danger of completely misinterpreting him here), the (perceived) lack of unsafePerformIO et. al. led him to conclude that Haskell was a good high-level language, but a certain number of projects would at least require you to write a fair amount of your code in C. Once he saw some code that (safely) used unsafePerformIO - particularly in fps, as I recall - he changed his mind. To this day, he hasn't written any code using unsafe*, but is generally somewhat more interested in Haskell. So, I'd suggest that demonstrating both the use of unsafePerformIO when the question is obviously trending that way and mentioning why it is a bad idea -- perhaps with an example of something that will obviously segfault or otherwise break type safety - is sometimes a better idea than simply not admitting its existence. Also, I strongly support the necromancy/IO analogies. /g -- It is myself I have never met, whose face is pasted on the underside of my mind. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe