Being generous is one of the key traits that separates humans from the animals. The animal kingdom is famous for its brutality and its pecking orders. Because of our humanity we are able to give to the lessor among who don't share our own genes or who we will not receive any direct benefit from.
In the past you could be reasonably certain that when you give money to people, they were in real need and that they had done all that they could to secure the three basic necessities. Even further back, you would not give cash because all you had to give was your time or physical belongings. In my society, these assumptions no longer hold true. We are at near full employment. There is a free public education system to take advantage of (and if you are nice you can even stay there a few years longer than normal). There are tons of sources to get free money to go to college – the government, the army, the sweat of your own brow, private loans from financial institution. If you are poor it is most likely because of the choices you have made. Are there exceptions? Yes. Are they the rule? I do not believe so.
Secondly, the progression of the welfare state has created a class of people dependent of the government for food, education, health care, and even reduced cost transportation.
Therein lies the dilemma. Giving makes you human but giving to unworthy causes creates guilt. I have no good answers to this problem, though I can tell you the strategy that I have taken. I try to give to local causes or local causes dealing with children. The children are the future and that means you are the past and therefore less important. I also try to give to organizations that share my value of hard work. One organization I give to, is willing to give you money for work (mowing the yard, picking up trash, etc.). They seldom have takers.