This is very true. Also, the software development process is very empathetical. We need to be in constant touch with the end user and make sure we're pushing for the right features.
In regards to your second point, I think we should optimize for the best team, not necessarily for the best programmers. Ergo, try to hire the best team player, not the best lone ranger.
You are what you code! If someone criticizes or changes your code, they want to change a trace of your soul or of your mind. If you accept their criticism it means you were wrong. And if you were wrong once, that means you can be wrong more in your new programming. If you once made a mistake, how can you not make more? And how can someone else or you, can trust yourself if they know you made a mistake and they caught you red handed? And if you accept any critic, that means noone will have confidence at your code (or at you, because you are what you code). If you welcome critics, and change your code, your personality will change again and again; instead of a respectable, rigid person, you will end up being the soft guy everyone will push anywhere.
What you said is not at all true, my parent commenters; it is my critic at you, and of course if you accept it.
ps: this is just a satire, and i fully agree with my parent commenter s.
Interestingly enough, I have very little personal connection to my code [1]. I'm almost sure there are better ways to code everything I've ever coded in the last 15 years. I know this because when I look at old code that I have written I see better ways to do it, and that's just me!
I think my lack of personal code connection comes from the fact that I view code as a tool to solve a problem. My overall solution I will certainly defend and feel that it reflects who I am, but the code to implement it? Who cares. I love elegant code as much as the next programmer, but at the end of the day for many problems the code is just an implementation detail.
[1] I've worked with people who have a deep personal connection to their code, and it can be very challenging to change anything without upsetting them.
In regards to your second point, I think we should optimize for the best team, not necessarily for the best programmers. Ergo, try to hire the best team player, not the best lone ranger.