While I personally am a bit of a name purist, I don’t have any problem with nicknames. However, I do take quite a bit of issue with nicknames as legal given names, and with people who only ever call their kids by nicknames which also happen to be names in their own right.
When you give a child a full, formal name, like Joseph, Andrew, Elizabeth, or Katherine, you give the child options for nicknames and what s/he wants to go by. If you give a nickname as a legal name, that kid is pretty much stuck till the name can be legally changed at 18. Perhaps your son feels Andy sounds a little old-fashioned or juvenile, and prefers the more modern nickname Drew. Joey sounds really cute on a little boy, whereas Joe sounds more grown-up and professional. There’s nothing wrong with a nickname like Katie or Lizzie, but they don’t sound professional on a résumé or in the corporate world.
Give the child the chance to grow into a more adult nickname, like going from Katie to Kate or Sammy to Sam, or to choose to go by the full name. When you use a nickname as the legal name, that limits options. And even if you go by Becca, Katie, Jenny, Jack, Joe, or Bill to everyone around you your whole life, it’s still nice to have a more formal name to use on official work correspondence, an office plaque, or legal documents.
Some nicknames do go both ways, and are established as full names. For example, while Jenny and Jessie started as nicknames (for Jane and Jean, respectively, NOT Jennifer and Jessica!), they had become established as common, legitimate given names by the early 20th century. The same goes for Sadie (originally a diminutive of Sarah) and Harry (a nickname for Henry and Harold). I also personally don’t have a real problem with using Jack as a given name, even though traditionally it’s a nickname for John. For me, it’s important how established a nickname has become as a given name. We don’t have that same kind of long tradition for nicknames like Andy or Maggie. (Yes, they were in the Top 1000, but they just don’t feel as substantial as something like Jenny or Jack.)
It rather annoys me when someone gives a child a perfectly nice name and then only ever calls that child by a nickname which is a name in its own right. I don’t understand the thinking behind this. If you’re only ever going to call your child Ella, name her Ella, not Isabella, Adorabella, Gabriella, Ghisolabella, Arabella, or Abriella. If you love the name Nora, call your child Nora, not Eleanor.
Since Russian names are my strongest suit, it particularly annoys me to see Russian nicknames used as full given names by Anglos who don’t know any better. There are a few I don’t mind, like Natasha or Lara, since they sound enough like full names. But no one in Russia would ever legally name a child Katya, Anya, Lena, Tanya, or Sasha. (I’m not too terribly surprised at how you don’t encounter many male Russian nicknames used as full names in the West, like Vanya, Borya, Vasya, Motya, and Kostya.)
It should also be noted that, at least traditionally, priests won’t baptise a child without a saint’s name. You’re welcome to legally name your child Annie or Jack, but that cannot be a baptismal name. You likewise (again, at least traditionally) can’t use some Yiddish nickname as a child’s legal Hebrew name. If you like a name such as Tzeitl or Sruli enough, you can use the formal name and then just use the nickname at home, or use the nickname on the birth certificate but choose the formal form for the Hebrew name.
Just based on my historical observations, it seems like people in the past were a lot less nickname-happy than people today. I’d be shocked to hear of, say, a Renaissance Amelia who went by Amy, or a 19th century pioneer Joshua who went by Josh. Obviously times change, but it’s never a bad thing to give your child options regarding which name or nickname s/he wants to go by.