Latest revision as of 00:21, 30 December 2010

So, you need help with Haskell homework? We have good news for you! The Haskell community is enthusiastic about teaching beginners the language! However, there's an appropriate way and an inappropriate way to get help. If you have been directed here by someone, you may have asked in an inappropriate way.

The purpose of this page is to help you understand why the inappropriate way is so, and guide you to the right way so that you can get the help you need.

Your university/school probably has tutors or instructors who can help you out
if you are stuck. These people are paid to (amongst other things) help you. If
you have no idea where to even start on your problem, they should always be
your first port of call. You have probably also been given course notes,
lecture notes or a textbook. Admittedly, some course notes and textbooks are
better than others, but even so, these have probably been assigned to you for a reason. There are also many fine resources on the net which can assist you in
getting started.

If you have tried and failed, and for some reason can't or don't want to use
your school's resources, then the Haskell community may be able to help you
out. Please read on to learn how.

In addition, those who know Haskell well had to learn it once, and if they were creative, they did it in the appropriate way: First by attempting to understand each issue on their own using original effort, and only relying on outside help when they failed. In order to prevent stifling the spark of creativity, such creative people who want to help you would probably not want to repeat something you could find in a book, and they probably wouldn't want to do your homework for you. That would be depriving you of the intellectual opportunity and reward of discovering the answer with your own ingenuity. After all, if you were not regarded as ingenious, you would most likely not have been given the problem in the first place.

This doesn't mean that you can't ask for homework help. Far from it! However, it does mean the following:

Most likely, nobody is going to do most of your homework for you. The best you're going to receive is hints.

Even if someone perchance does do it for you, the solution may not help you, or may even be subtly wrong. Some people are deliberately cruel to people who ask for homework questions the wrong way; some just like the mental challenge of producing a correct but unhelpful answer.

Even if someone does give you a useful solution, whoever marks your homework is probably going to know about the presence of that solution one way or another. Cheating (and getting someone else to do most of the work for you is cheating) is a pretty serious offense at most educational institutions. Besides, you're stifling your own creativity, and not really learning anything, in that way.

The flip side of this coin is that people in Haskell Communities often enjoy teaching others teach themselves. If you truly want to learn, there are many people who will be happy to provide useful hints in enabling you to discover a creative solution.

Your lecturer/instructor may have told you that there is no such thing as a stupid question. Indeed, that is correct. However, independent of the context, there are such things as appropriate questions and inappropriate questions. If you first attempt to solve a problem with a decent amount of effort, then get stuck, and then ask for a hint from the Haskell community, your question will most likely be viewed as appropriate, and you will probably get a helpful answer. If you do not attempt to solve the problem, but try to get somebody else to solve the entire problem for you, your question will most likely be viewed as inappropriate, and you will probably get an unhelpful answer, or more likely, no answer at all.

The difference between an appropriate question and an inappropriate question may not necessarily be what you think. Being new to Haskell does not cause you or your question to be inappropriate. After all, everyone was new to Haskell once. The discrepancy lies in what you tried before you asked your question.

You have been given the homework question because those supervising your course believe that you are equipped to attempt it. If you don't even try, other people will tend to be much less inclined to help you.

So, before asking, please try to follow the following steps first:

Read the problem carefully and make sure you understand what is being asked of you.

If you can't solve the whole problem, try breaking the problem down into parts and solving those parts.

If you can't write it in Haskell, try writing it in English (or your native language) first.

Look through the libraries provided by Haskell, particularly those parts which have been pointed out to you in class or in your course notes. There may be something there which helps you.

If you are still stuck after these steps, then it may be time to ask a question. In that case, the following guidelines may help:

Be sure you that pick the right forum. For example, don't use the haskell mailing list to ask for homework help. (If you want to ask on a mailing list, use haskell-beginners or haskell-cafe instead.) It may help to lurk for a while to get the general tone of whichever forum that you choose first. You may also ask appropriate questions on the Haskell IRC channel.

Specify the question as homework. Others will likely recognise it as such nevertheless, but in this way, at least you're being forthright about this issue.

Always ask publicly. Just because someone seems helpful in a forum doesn't mean they'll want to help you personally in e-mail. They may be on vacation, preoccupied with meeting an urgent research deadline, or just be too busy to respond. By asking publicly, you not only avoid the risk of being completely ignored, but also you may get more or better help than a single person can give you.

Try to make your question as specific as possible. Specify what problem (or sub-problem) you are stuck on as succinctly as you can. If the original homework question is long, don't copy it verbatim (although if the question is available on the Web, a link could be helpful). Most people who may want to help you probably don't have a lot of time to familiarize themselves with your problem, so the more information that you provide, the more time that they will likely have to assist you.

Say what you've done so far, and, if possible, include source code. People are much more likely to help you fix your incorrect code than write correct code for you. Moreover, if the problem is that you don't understand something, your incorrect code will probably reflect this, and fixing your misunderstanding is much more valuable than fixing your code.

A useful guide to asking appropriate questions is How To Ask Questions The Smart Way. Please note that the authors of this guide do not constitute a help desk for your project. Please do not send e-mail to them with your homework questions. That wouldn't be appropriate.