I've always been bothered with the notion that programmers are interchangeable parts. Technical managers that I have had seem to think we are all the same. Cut from the same tree if you will. Am I the only one that thinks this is hog wash? Like anything in life, there will be people that rise to the top of their field and be the best there is. But, it seems people think that programmers are all the same. I find this bothersome. I've known managers that thought they could pull anyone off the street and in 6 weeks have a good programmer. Would we expect to do the same with musicians? Just pick anyone off the street that knows nothing about music and expect them to play a mozart concerto flawlessly after the same period of time? I think the answer would be no! Would we expect to take even a first year english student and expect them to write poems the caliber of William Shakespeare? HELL NO WE WOULDN'T! So, why do we expect the same from programmers? I think like anything in life, those that have passion for programming will be better because they simply practice more (and read more too). We all know great programmers are hard to find (and I always pick their brains when I find one). Not every programmer is the same. We all have strengths and weaknesses. Why should we treat software engineers as interchangeable? It makes for nice marketing, but leads to mediocre software. I hear a lot of complaints about that. Well, I think one path away from mediocre software would be to stop treating us as interchangeable equal parts. Some people will be just better (either through talent, brain power, or sheer knowledge) at certain programming tasks. We should listen to them more when we are doing those tasks. The expert will not always be the same person. We should give them work that matches those talents. There is room for every skill level of developer on a project (and for each task), but we should make our better programmers be the mentors for their respective expert area. The best way to learn is by example and everyone can improve their code-fu. Thinking of programmers as being on the same footing leads to laziness and never offers a way for junior developers to learn from the more talented developers. Apprenticeships should be our path. Programming is not a simple task and has many facets. Why don't we just acknowledge it? I seemed to be all over the map on this one, but there's a lot to be said.