As a long-time programmer and `Computer Scientist’, I think of myself as a craftsman; as Fred Brooks puts it, I’m just a toolsmith. I comprehend a problem, I understand my tools, and I craft something which helps to solve that problem.
But the problem with this craft is that I’m never allowed to do anything that I’m good at. An artisan becomes great by great talent and much thoughtful repetition — but we programmers are not normally allowed to repeat anything! I’m always pushing the boundaries of my current skills, trying to re-use as many existing components as are available. Unfortunately, doing so is quite unsatisfying. I never get to do anything significant over and over, re-thinking my approach until I finally get something great.