Once three programmers had decided to go to a zoo. After returning home they were explaining their wives what they had seen:

Ruby programmer: The first animal was like a horse. The second animal was like a horse too but ate leaves from the trees. The third animal was also like a horse but preferred to stay in the water.

LISP programmer: All animals had four legs. Among all animals with thin legs only one could eat leaves from the trees. Water-loving animal had thick legs.

Java programmer: I’ve seen zebra, giraffe and hippopotamus.

All life experience piles up in our heads in form of abstractions and categories. It’s natural to name them while communicating or thinking about something. When you have a present for your kid he wants to know WHAT is it – he wants you to name a category, a known abstraction. And if the time has not come yet you play with him telling that it’s something big and soft and brown to keep the kid intrigued. Tell him that it’s a toy bear and there is no surprise – the kid knows for sure what’s in the box.

When I’m writing a code I’m explaining formally how to accomplish some task. It’s hard to do without abstractions, and to use abstractions you have to name them.