Answer with a weakness thats unrelated to job you're applying for, and don't forget to turn it into a positive near the end of your reply.
i.e.
If you're asked "what's your greatest fault" for a programming position, answer with something like "I have trouble delegating -- I don't rely teammates as much as I should. Instead, I tend to complete tasks on my own. I'm working on this, however. For example, for last programming assignment, we were required to work in teams of two. At the start of the project I sat down with my partner and we decided who would do what. I kept in contact with my partner to make sure that both of us were on the same page and that we were getting closer and closer to our goals, but I had faith and trust in my partner, and everything worked out well."
Something like that.
The keen interviewer, however, will ask you "what do you feel you need to work on the most if you were to get this job."
Probably the best way to answer this is to be honest, as long as its not something absolutely necessary for the job. You can say something like "I'm a little shy in new environments. It's a weakness in that it might take me a week or two before I can make the type of contribution I know I'm capable of. So definitely I'm going to work on being more relaxed and comfortable right when I start work, if I were to get the job."