The easiest way to open yourself up to accepting criticism is to realize you are not the smartest person in the room, so to speak. It is never about being the smartest person because at some point even the smartest person will be replaced. I've learned to accept criticism by realizing that it's not about where I am now but where I am going. As long as I can look back on code I've written in the past and think to myself that I could do better now then I feel I'm headed in the right direction. Criticism then becomes a tool to keep me on course and I am grateful to receive it.
(But only if it comes from someone genuine of course... ignoramus' are an unfortunate reality we all have to learn to cope with).
It can be hard to learn to accept criticism of our code. So much emphasis is put on being the smartest or the brightest person. All too often I hear people at start-ups and companies say things like, "We only hire the best people." (To which I smile and wish them luck). A lot of effort is put into evaluating code in order to determine the worth of a programmer so I hardly find it surprising that it is common to conflate code with intelligence (or random computer science trivia for that matter).
I really appreciate articles like this. I think people should be a little more bold and creative when they sit down to write a program. It doesn't hurt to be impractical once in a while. Or absurd, witty, or whimsical. It should be something to be enjoyed, studied, and improved over time.
All that being said there is room for improvement in how we deliver criticism as well. A few less pejoratives would be helpful. As well as having something constructive to say. It's not always about ranking people according to some ideal standard.
I think this is the most important lesson that I learned in Grad. School. Taking a few courses in abstract mathematics quickly strips away any illusion that a scale of "smartness" is anything but flawed. The best you can get beyond a certain level of intelligence is improvements based on either subject level experience (intuition in the mathematical fields) or conscious changes that you do on a day to day basis. Unfortunately, this kind of requires that one is open to not being so dickish about the validity and absolute cleverness of one's solutions and be open to learning new stuff. Sad to say this but I agree with your assertion that both engineers and companies that hire them suffer under the delusion that intelligence is correlated with trivia know how. I have no problem with companies believing this (groups don't generally have to be as smart as individuals) but individuals who are under the impression that they are "rockstars" can be rather trying to work with.
This is so true. I welcome criticism because it forces me to evaluate my work critically and make changes if need be.
I agree with your comment about hiring the best. Would you rather have the 'best' [1] programmer who is also a team cancer or a group of good programmers who individually aren't better than the best guy, but as a group deliver better results?
[1] 'Best' can be defined so many ways that without a definition saying they only hire the best says very little.
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.
> The easiest way to open yourself up to accepting criticism is to realize you are not the smartest person in the room
I think that's irrelevant. Every human being is stupid. Saying you're the smartest person on the room, in absolute terms, is analogous to saying you're the smartest termite in the planet.
Even if you're much smarter than others, that's irrelevant. Suppose the smartest person on earth is right twice as often as other people. That might sound like you're brilliant relative to others. But looking at the bigger picture that just might mean that you're wrong ~80% of the time, and they're wrong 90% of the time. From this angle, even the smartest person on earth is stupid.
And I don't think the real numbers are too far from that. Human beings are imperfect, our perception is incomplete, our sensors fail and our brain has more bugs than windows vista. You cannot trust yourself. You're stupid, and it would be even more stupid to not admit that.
We're all stupid. But the smarter of us understand that, and often correct themselves. While the less smart, are the ones who think they're smart. And insist on their mistakes.
Irrelevant? It's my entire proposition in no absolute terms. Of course everyone is stupid and anyone with a modicum of critical thinking skills can understand this. My point was that it is often difficult to accept criticism because we're pressured to believe we need to be the best or at least better than everyone else we see ourselves competing against. Criticism then seems like a personal attack and makes it difficult to accept since it can lower your perceived position amongst your peers.
Humility is the easiest solution I put forth. Once we realize just how stupid we are we can look at criticism as a chance to learn something and improve ourselves. And maybe when we give some criticism we'll try to be more thoughtful and be constructive.
I do agree. What I mean that is irrelevant is whether or not you consider yourself the smartest person in the room. It's best to be humble, like you say, even if you are the smartest person on the planet. Humility is important regardless of how smart you are, that's all I'm saying. Because even if you're the smartest human being, you're still just a human being. Which means you're stupid anyway.
Sorry, but I don't buy the "It is a truly wise man who believes he is not" meme. A truly wise man has confidence in his wisdom, and the humility to realize that it isn't infallible.
Giving graceful criticism is as hard as gracefully accepting criticism. That's what I liked about this article -- decoupling the person from the code on both sides of the equation. My favorite line is "Criticize the code, not the developer".
It's alright (and should be encouraged) to enjoy programming. I'm not sure it's worth being "bold" and "creative" though. For me, I'm keenly aware of my limitations. I'm human and I'll screw something up, or forget why I did something "clever" when I look back at code I wrote 6 months ago.
There's something to be said for taking the simplest possible path. There's a temptation to "show-off" by doing something complicated. That generally leads to over-engineered solutions and difficult to maintain code. Good criticism would be pointing out a simpler solution.
(But only if it comes from someone genuine of course... ignoramus' are an unfortunate reality we all have to learn to cope with).
It can be hard to learn to accept criticism of our code. So much emphasis is put on being the smartest or the brightest person. All too often I hear people at start-ups and companies say things like, "We only hire the best people." (To which I smile and wish them luck). A lot of effort is put into evaluating code in order to determine the worth of a programmer so I hardly find it surprising that it is common to conflate code with intelligence (or random computer science trivia for that matter).
I really appreciate articles like this. I think people should be a little more bold and creative when they sit down to write a program. It doesn't hurt to be impractical once in a while. Or absurd, witty, or whimsical. It should be something to be enjoyed, studied, and improved over time.
All that being said there is room for improvement in how we deliver criticism as well. A few less pejoratives would be helpful. As well as having something constructive to say. It's not always about ranking people according to some ideal standard.