I don't have great social skills. Like many programmers I know, social skills are something that is worked on and developed over time because it's not a natural and 'inborn' trait.
When a computer is doing something wrong, you can tell it so and 'fix' it so it'll work correctly the next time.
It won't complain. It won't feel insulted. In fact, I tend to think it's 'happier' because it's not grinding away in a dead end.
I find it much trickier to work with other programmers at or above my level in a way that enables them to do better work faster without appearing condescending, insulting, or the group's "know-it-all."
I know some programmer's look at this objectively and simply say, "Since it's for the good of the group I will inform them, and if they are insulted that's their problem." This isn't a bad method - all the programmers I have ever worked with take and act on criticism appropriately. It's when they're having a bad day/week/month/year/life that I find it difficult to approach them without a reactive emotional response.
I genuinely enjoy working with those around me, though, and don't want to develop bad blood.
What skills, techniques, and even outside of work activities do you engage in that enable you to be a support and resource without the tension that can be created in these situations?
Or, in other words, how do you mentor someone without appearing to mentor them?
I suppose the question could/should be reversed as well - how do you keep yourself 'open' and learning such that you don't scare off people that have useful information for you? How do you keep on top of skills so that the latest college grad isn't necessarily better than you in terms of design patterns, technology, workflow, etc?