When I was in college, I worked in the computer lab. One of the very first things they told us during training is perhaps the best thing I've ever learned in my entire career working with computers: never touch someone else's keyboard. It doesn't matter if the keyboard involved is actually yours, and someone else is just sitting in front of it. You don't touch it. This is a pretty good metaphor for anything that has to do with helping someone else solve a problem, even problems that don't involve physical keyboards.
What they wanted us to avoid was something that's sadly common among geeks - the tendency to push the other person out of the way and say, "Nevermind, I'll fix it." Maybe we sometimes think it's more efficient if we just fix whatever the issue is. In that moment, we're probably right. But that momentary efficiency creates long-term inefficiency by breeding helpless users, colleagues, clients, whoever. It's also a total dick move.
I'm not going to say anything about the relative merits of teaching dudes to fish vs. giving them fish. We all know that. This is a post about the dick move part of the equation, and how that's a big fucking problem among computer geeks to this day.
There's always been this incredibly stupid yet romanticized picture of computer people living in basements, working in isolation, and getting things done the Good Old American Way, with no help from anyone. There's been a tendency to treat developers and sysadmins and various types of geeks as heroes when they stay up all night and finally fix something (that probably wouldn't have been broken if maybe they weren't the only people working on the problem to begin with). There's been a disincentive to collaborate and a territoriality that appears a hell of a lot like it's driven by the fear that omg someone else may be better at something. And it's all a bunch of stupid, useless bullshit. We know people, geeks or not, do better when they collaborate, when they aren't afraid to be wrong, and when their egos take a backseat to their work.
What does that have to do with not grabbing the keyboard? Everything. Grabbing someone else's keyboard is a physical and therefore very obvious way of demonstrating superiority. It implies not only that you know something the other person is ignorant of, but that your time is too damned valuable to waste it explaining it to them. It's a lot like being that jackass who always has to shout out the answer to a question first and loudest before anyone else gets a chance to respond. Same goes for any time you don't help someone understand the solution to a problem but instead take it upon yourself to fix it, whether or not input devices are involved.
I don't spend a lot of time lately helping people save their files in Word. Mostly I spend my time working on code. And while this shit is annoying and rude when it's explaining word processors, it's downright fucking dangerous when it's the codebase of a live product. If you're a keyboard-grabber, maybe you think the joke's on me. Maybe you think you've found an awesome way to ensure you're always the most valuable person on your dev team by hoarding as much knowledge as you can. Maybe you think the long hours and late nights you spend fixing things you could have delegated are worth it. Hell, maybe you even think that because you're the one who always gets shit done, you're completely fucking awesome.
Well, you're not. You're being a total pain in the ass.
I've never been a keyboard-grabber. Don't mistake that for horn-tooting, I go the opposite direction to a definite fault. I'm ashamed to contemplate how many hours I've wasted trying to force business people who just wanted to change the pictures on their websites to learn CSS instead of using HTML attributes because "this is better!" Being this way means that when I encounter keyboard-grabbers who I have to work with, I have a difficult time not trying to drag them to some kind of middle ground. Well, that's a lie. I don't try not to. I jump in there all, "Motherfuckers we are going to COLLABORATE. RIGHT NOW." But whatever. In this case it's worked out and what I was gonna say was how and why.
I think not fixing problems in isolation is scary for people who are used to being cowboys. For one, it spreads the value of your knowledge around, diluting the value of your personal stockpile. For another, you can't control the outcome, and there's the possibility that you may have to suffer through someone else not getting it for weeks or months, when you could have fixed the problem in a couple hours. But mostly I think it may be scary because you're changing what you know works for you, and the value isn't apparent. I don't mean the value to the team, which I shouldn't have to explain the immenseness of. I mean the value to you, professionally.
Somebody smart wrote somewhere that you should always try to be the dumbest person in the room. Being the smartest person in the room sounds good on paper, but the smartest person in the room isn't getting any smarter, they're just standing around looking pretty. The dumbest person in the room is learning shit without even having to open their mouth. When they do open their mouth, they can ask questions and not care if they make them sound dumb, because asking dumb questions is what the dumbest person in the room is supposed to do. If you set yourself up as the person with all the answers, who has to fix whatever's broken and bless whatever's imagined, you don't get to ask any dumb questions. If nobody ever gets to be smarter than you, you never get any smarter. You can read shit on the internet and make little side projects with flavor of the month technologies, but unless someone's actively challenging your assumptions, you're learning less than you could be.
When you stop grabbing people's keyboards and explain things to them so they learn it for themselves, you create intellectual antagonists. You give them the opportunity to be like, "But wait isn't Way X bad and isn't Way Z more performant," and then you're all, "What? Dude no Way X is The One True Way STFU and copy that thing over to there," and then secretly you look it up and it turns out Way Z is totally better than Way X for some completely different reason and OMG THAT N00B JUST BLEW BOTH YOUR MINDS. This is absolutely the best thing ever.
I've been lucky enough to see a few hierarchies of smartness completely fall apart. It's always really obvious when this happens, because beforehand everyone is just glaring at each other not saying anything and afterward nobody can fucking shut up about node.js or OOCSS or closures or whatever. You also get something that may seem anti-collaborative: healthy competition. You're not waiting for one dude in suspenders and long, flowing robes to update your company blog, you're all racing each other to push stuff to github and then filing issues and making pull requests and generally knocking each other's egos down daily while also having a really fucking good time. Maybe that's not how it always plays out exactly, but you get what I mean.
I said how and why, and that was the why, I guess. The how is shorter: stop grabbing people's fucking keyboards.