I messed up. Hiring good programmers is a hard problem, and I failed. A few weeks have passed since the new replacement for the junior developer position started, and it is becoming increasingly obvious to me and the other developers that he falls into the "not everyone can be a programmer" category.
It's not lack of experience - we don't expect a lot of experience for a junior position. But we require programming talent: The ability to quickly grasp and understand abstract concepts, advanced analytical thinking, things like that. I don't know what it is exactly (I'm a developer/manager, not a psychologist), but I think I've learned to recognize it in people after working with them for some time. (Now I just need to work on recognizing it faster -- ideally before hiring them -- but that's another problem.)
If I honestly tell him why I have to let him go, I
- Criticize him for something that he (probably) cannot change and
- Basically tell him that I don't believe he will be a good programmer, even if we continue to train him.
For someone who enjoys programming, this must be devastating.
What and how do I tell him? He's a nice guy, hard-working, willing to learn, helpful, etc., and I do feel that I owe him an explanation when terminating his employment.