In a way, it's an admission of impotence. When you fire someone, you're saying that you don't have the resources or power to turn that person into a success at your company.
The "resources" angle is crucial. Large companies can afford to have a non-producer for 6 months and train him up to being able to contribute, and they generally should. Startups usually can't afford this.
Of course, this excludes the cases where a person is fired for doing something seriously wrong or unethical. But I imagine it's much easier to fire in those cases.
I don't think it's within my power or anyone else's to turn many people into a success if they can't grok pointers, recursion and/or abstraction and one or more of those is necessary for the job (I'm assuming a small enough startup they can't be put someplace "safe").
I'm pretty sure the abstraction bit is innate (I'm assuming they've passed high school math), and very sure I can't teach it nor is it my duty to. Pointers and recursion are not so bad (but again, in these sorts of situations I'm probably not in a position to get them up to speed on something so basic and so far reaching in effects (especially unsafe pointers)).
The "resources" angle is crucial. Large companies can afford to have a non-producer for 6 months and train him up to being able to contribute, and they generally should. Startups usually can't afford this.
Of course, this excludes the cases where a person is fired for doing something seriously wrong or unethical. But I imagine it's much easier to fire in those cases.