Re: What you refuse to see, is your worst trap
by chunlou (Curate) on Jun 30, 2003 at 07:29 UTC
|
Another flap side of the "ego" story is that, it's not easy to explain to someone from nonengineering background why a programmer who wrote the code should not be a tester himself. They don't see why a programmer would be "blind" to his own code.
Peer code review is a good practice. I never found it possible nonetheless when the programmers have been worked to their limit (coming in before dawn, or leaving late, sometimes, especially hard for those married with kids).
In heated debate situations, I often based on the other party's arguments to construct a series of questions which lead the person to draw a contradiction himself, if there were flaws in the arguements. Work pretty well with any decently intelligent people, albeit stubborn for a moment(provided you're cool-headed yourself).
I feel that in order for someone to be willing listen to you at all, it's best to be able to use and speak in his argument, terminology and language, that way, you become a Trojan horse arguing from within his ego instead of from without.
Besides, rephrasing what someone said in your own language minimizes misunderstanding (which is especially important during requirements elicitation). | [reply] |
|
Regarding "in heated debate"...
Oh, yeah. All the time with code. Generally these are the debates that end with somebody suddenly stopping in mid-sentence, thinking really hard, yelling "Fuck!" as they hit themselves in the forehead, and stomping back to a keyboard to fix something.
| [reply] |
Re: What you refuse to see, is your worst trap
by crouchingpenguin (Priest) on Jun 30, 2003 at 12:46 UTC
|
Something that I noticed a long time ago is that people who think they are good at something usually aren't.
Unskilled and Unaware of It has an intersting take on that. Specifically, it defines metacognition (coupled with metamemory, metacomprehension, and self-monitoring) as a set of skills allowing one to assess one's performance and accuracy. Such as, a novice programmer is ill equipped to gauge himself. Only further experience (or criticism from the journeymen and/or master programmers... or even from PM) will raise his self awareness concerning his skills and abilities. The article doesn't state definitively, however, that inflated self assessment comes from incompetence.
... people who actually are good ... generally are painfully aware of their own shortcomings
Experience (and exposure to outside opinion as touched on later in your writeup) raises the ability for self assessment. It's often said and heard that "the more one learns, the more one learns how much there is yet to be learned".
This confuses us, because we think, "A causes B, so more A will result in more B." But more B causes a reaction that gets rid of B and our change shows up in some entirely unanticipated way.
Like when I optimize my path to work, shaving off 5-7 minutes from my commute. I should be that much earlier to arrive, giving myself more time to check the news, email, and browse PM. However, that time is actually realized as I hit the snooze one more time every morning. =]
cp
----
"Never be afraid to try something new. Remember, amateurs built the ark. Professionals built the Titanic." | [reply] |
Re: What you refuse to see, is your worst trap
by Abigail-II (Bishop) on Jun 30, 2003 at 11:43 UTC
|
Given that the students paid 20 times as much didn't change
their opinion as often, and hence had less problems with their
ego, does that mean that if you pay a programmer 20 times as
much, he more rapidly admits bugs in his program?
Abigail | [reply] |
|
| [reply] |
Re: What you refuse to see, is your worst trap
by toma (Vicar) on Jun 30, 2003 at 06:15 UTC
|
Good story about the lizards.
Whenever I have trouble finding a bug, I say to
myself, "It's where you're not looking."
One of the things I like most about California is that
I have reptiles living around me. I've built a few
lizard-friendly small rock formations.
Today I was cooking outdoors and a small (harmless)
snake came by for a visit.
I had never considered these tiny beasts as a
source of coding inspiration before!
It should work perfectly the first time! - toma | [reply] |
|
| [reply] |
Re: What you refuse to see, is your worst trap
by traveler (Parson) on Jun 30, 2003 at 15:55 UTC
|
I agree wholeheartedly with this meditation, but wish to add a word of caution. I generally relish peer review and comments about coding, algorithms etc. However, in a recent project an "expert" from outside the team was called in. He looked over the project and said, "use this structure instead". When I objected that his structure had faults a, b and c, he said, "think of egoless programming". His point was that clearly I could not see the faults in my own design. In fact, he spoke out of his lack of understanding -- his design was mildly easier to implement, but provided significantly reduced functionality. Occasionally, disagreement may be based in reality and not just ego protection.
We have to be cautious of this and seek not just one but a broad range of opinions. This is true not only when others disagree with us, but when they agree as well... We also have to be open to suggestions of alternatives.
--traveler | [reply] |
|
That's "expert" is your "inferior," not your "peer."
It happens often that a manager trying to seek outside opinion ends up with some phoney consultant.
This could happen due to (but not limited to):
- bad luck
- "someone else's are better" mentality
- just wanting to hear what one wants to hear
- the "expert" being a friend of someone
Once there's this consultant whose solution to every architectural problem is ASP and OOP. He even said OOP could be applied to SQL. (While I believe OO Design could be applied more generally, twisting OOP into not OOP language is just plain weird.)
And his answer to why he hadn't propose any new architecture to our system was that we hadn't written up extensive enough our business rules.
Another technical consultant was invited to tell us why the new MSSQL (it was 7 or 2000 or something?) was better (than whatever). It turned out to be a hour long sales pitch. One of his argument why the new MSSQL was good was MS spent billions on it. (If money guaranteed success, life would be a lot more plainer.)
| [reply] |
|
This meditation tends to valid my philosophy of "Never profess to be an expert on anything", because chances are I'm probably not.
It also provides an interesting perspective on what I have observed about myself since I started working as a programmer (previously I was an engineer) a few months ago, namely that my programming methods and skills have been lacking in many areas, but are improving. Now I wonder how many other bad practices I have that I am blissfully unaware of. I suppose as long as I continue to look back at my previously written code in disgust/dismay etc, then I at least have some chance of continuing to improve. Of course, peer reviews are also a good idea, although I don’t know if my fragile ego will cope. :)
| [reply] |
|
Peer review. I agree it's rough. I don't want you guys looking at my work. It's embrassing. But how else to do it? Tough love but respect. Be nice to each toher. Work together. I'm in NJ: P.O. Box 438 Convent Station, NJ 07961, Claire Coombs. Mail Fraud: that's why I got the box. Tap my phone, too. It's dangerous out there. We need to stick together.
| [reply] |
Re: What you refuse to see, is your worst trap
by parv (Parson) on Jun 30, 2003 at 08:06 UTC
|
Except the technique to catch lizards, that is one looong winded way to repeat that a programmer should not be emotionally attached to his/her code, is not the best person to test a program, and code should be reviewed by fellow programmers.
That reminds me to repeat that one should code for somebody else in case the one coding gets hit by a bus sometime later...
Edited (Jun 30 2003) to correct some grammar and the flow.
| [reply] |
Re: What you refuse to see, is your worst trap
by mr_mischief (Monsignor) on Jun 30, 2003 at 16:20 UTC
|
The Linux development effort, Extreme Programming, and several other communities have bourne this out without neccessarily taking the same path of discovery. Peer review and letting a code snippet speak for its own quality are known to be good things. This gives us some additional insight into reasons why.
I actually think that there are other reasons why regular peer review of code is good, too. Sometimes, no matter how much ego you get out of the way, starign at the same problem too long just keeps you from finding the source of it. You look somewhere that looks like the source of the problem, build a conception in your head, and can't look anywhere else to find the bug. This particular problem happens even when you didn't write the code. Sometimes a fresh set of eyes is just needed to break you out of a rut.
Christopher E. Stith | [reply] |
|
Several XP discussions bring up the idea of "egoless programming". Weinberg's well-known in those circles.
As far as XP goes, though, there's a whole lot more than just regular peer review. Pair programming is recommended for all code that lives longer than a day. The entire team owns the entire codebase; there are no little fiefdoms. Debugging's less important because the code is frighteningly well-tested. The test blindness is lessened, partly because of pair programming but mostly because of test-first development.
XP's not perfect for everyone in every situation, but it takes into account many of these psychological issues.
| [reply] |
Re: What you refuse to see, is your worst trap
by demerphq (Chancellor) on Jul 01, 2003 at 18:26 UTC
|
Im not so sure if I buy this "if you think you are good then you probably aren't". Ive noticed that most people that fall into the "i think i'm good" camp often are the same people who fall into the "I can do no wrong, and even when I do there is _always_ a damn good reason" camp as well. And IMO its the latter psychology that is really dangerous. Not being able to admit (to yourself) that you've done a stupid (forgive the juvenile term :-) is the biggest drawback to learning IMO. When you cant admit your mistakes you are doomed to repeat them over and over. Critical assesment is a crucial aspect of learning.
For instance I personally think im a pretty good Perl programmer. (For some such definition :-)But when I look at my code (from before today :-) im always thinking, "gosh that was dumb", "what on earth was I smoking there?", "oh jeeze, did I do that?" and the like. (Actually my most feverent desire when i review my old code is to completely rewrite it.) To me this is a positive sign. Ive learned something between when I wrote the code and when i read the code that im now factoring in to my assesment. However Ive worked with people who when you say "what were you doing here?" they then give you half an hour of BS about why they had great reasons to write buggy code that didnt work (or why they overwrote your newest source files by being careless with source control...) And the thing I've found is that next week they will have done the same thing again. And the week following.... The point is becuase they wont register the fact that they made an error they wont register the solution to the error. Its impossible to learn to NOT do something when you have managed to convince yourself that it wasnt an error in the first place.
Anyway, INAP, but I do think that there is a difference between the inability to admit you are wrong (or have done something stupid) and the type of ego that leads people to wander around telling everybody how good they are (and proving how bad they are with every extra word :-) The trouble is I think that virtually all of the latter are also the former. But occasionally you find someone who cant admit they are wrong but isnt an ego maniac. I think people like that are worse in some respects becuase its possible to develop a positive relationship with them and get fooled by their conduct for quite a while. Its only when you notice that _nothing_ is _ever_ their fault that you realize that youve been (essentially) conned. Ego maniacs on the other hand are readily identifiable so its much easier to be on your guard.
Anyway, thanks for yet another insightful node. Itll be weeks before I get around to reading all the cool links you've provided. :-)
---
demerphq
<Elian> And I do take a kind of perverse pleasure in having an OO assembly language...
| [reply] [d/l] |
|
My apologies for taking so long to get back to you on this. I have been offline for a bit.
I think that your first paragraph has a nice piece of irony in it:
Im not so sure if I buy this "if you think you are good then you probably aren't". Ive noticed that most people that fall into the "i think i'm good" camp often are the same people who fall into the "I can do no wrong, and even when I do there is _always_ a damn good reason" camp as well. And IMO its the latter psychology that is really dangerous. Not being able to admit (to yourself) that you've done a stupid (forgive the juvenile term :-) is the biggest drawback to learning IMO. When you cant admit your mistakes you are doomed to repeat them over and over. Critical assesment is a crucial aspect of learning.
The first sentence says that you don't agree with my observation that, if you think you are good then you probably aren't. However the second sentence goes on to say that, on the odds, if you are someone who thinks you are good, then you probably someone whose feedback mechanism is broken. Which is what I said, except that I went into more detail on how the feedback mechanism gets broken.
About the rest of what you said, it is a good point that it is unwise to associate what I was talking about with a single stereotypical pattern of external behaviour. Likewise I think that it is important to not associate it with a single pattern. A note in the silver edition about a chapter written 25 years earlier says that, Looking over the first edition, I see that I was already protecting myself from blame in the way programmers usually do -- by moving to the meta-level. This is definitely true for me. Rather than take pride in my code, I take pride in how well I learn. Which means that when I am confronted with ways in which I limit my ability to learn from others (for instance by causing common communication issues to come up repeatedly, eliminating opportunities to learn), it is hard for me to accept that the pattern repeats itself, and that my behaviour has something to do with it.
In other words I suffer the same problem. Just metaed a level or two up. Which might be a better place to suffer the problem (or so I tell myself), but it still has limited me...
| [reply] |
|
your first paragraph has a nice piece of irony
Well spotted. I hadn't noticed the inconsistancy. I guess my desire to point out that not only "I am the best" types suffer from this "I can do no wrong" syndrome overruled my logical facilites enough to overlook the fact that if most of the former are also the latter then the your base point was valid. I should know better than to not think my reasoning through before I post. :-)
Although I do think its a mistake to focus on the bighead aspect and its more productive to look at why people sometimes get themselves in a head space where they take no responsibility for their errors. I think that perhaps even attacking the latter syndrome probably ends up reducing the former. I think actually that one of the links you posted (excellent reads by the way, the Forbes one got printed out given to some people at work, in my company the Level 5 analysis is particular pertinent) said much the same thing. (Teaching people more about a domain leads them to more accurately predict how much they dont know.)
Once again many thanks for yet another stimulating node. Please keep posting!
---
demerphq
<Elian> And I do take a kind of perverse pleasure in having an OO assembly language...
| [reply] [d/l] |
|
Re: What you refuse to see, is your worst trap
by hsmyers (Canon) on Jun 30, 2003 at 16:09 UTC
|
Looks to me like you have a clear choice, either move on to reading Weinbergs' work(s) on general systems thinking---An Introduction to General Systems Thinking:
Silver Anniversary Edition or read D.T. Suzuki's Zen Mind, Beginner's Mind! Seriously (well that was, but only semi...) mapping out blind spots is difficult for obvious reasons, however, regardless of technique, most successful solutions require that the existence of said blind spots be admitted to first!
--hsm
"Never try to teach a pig to sing...it wastes your time and it annoys the pig." | [reply] |
What you refuse to see, can be your blessing
by zby (Vicar) on Jun 30, 2003 at 12:19 UTC
|
| [reply] |
Re: What you refuse to see, is your worst trap
by mercurywings (Acolyte) on Jun 30, 2003 at 15:38 UTC
|
Very interesting reading - explains in very clear terms what I've been thinking all along.
I've always approached things in life with the phrase 'no matter how good you may think you are, there is someone who is even better.' And in my experience, if a person falls to the lure of hubris and considers themselves the best, fate inevitably intervenes to show them the error of their ways.
| [reply] |
But there is some value in ego
by error 404 (Initiate) on Jul 03, 2003 at 00:19 UTC
|
Without ego attatchment to one's work, there can be little pride or drive.
Maybe that would be a good thing - without attatchment to code, we might demand something else - money, for example - for the all weekend coding sessions.
Yah, what do I know - at this point nobody pays me to do anything but post old CDs on the web.
Similarly, the lizard thing is probably a feature, not a bug, in all situations not involving very odd higher primates. Horses, I'm told, are known to suddenly perceive a rock or stump as a major threat, with unpleasant results.
| [reply] |
Re: What you refuse to see, is your worst trap
by Anonymous Monk on Apr 29, 2004 at 20:51 UTC
|
One thing which I think is good to clarify is, when you have a heated argument, what is your ego REALLY attached to? I find my own ego is rarely that closely attached to the code, but I still used to get in heated arguments. So what WAS my ego in? It was in the argument itself. I couldn't stand to lose. And yes, I have improved this, and haven't had such an argument in ages.
However, there is an important distinction here. When my ego was in the argument, and not the thing being argued over, then I generally DID absorb what they had to say, and considered it rationally latter, and often changed my own opinions/techniques/whatever to match. I'd often even KNOW that I was wrong part way through the initial argument, but my ego was so far invested in it that I'd refuse to admit it verbally.
So, what's my point? Just because somebody doesn't seem to be listening, and is arguing a seemingly stupid point to death doesn't mean that, on some level, they aren't listening. The best thing to do, if the argument gets heated, is to walk away, and then approach them about it the next day. If it turns into a heated argument again, THEN you know there is a problem (although a problem with WHOM is hard to say). | [reply] |
Re: What you refuse to see, is your worst trap
by sailortailorson (Scribe) on Nov 05, 2004 at 19:52 UTC
|
I suspect that ego has a truly valuable role that we do not always realize, because of the times that it gets in the way.
Like everyone, I often fight personal dragons. For me, these take the form of self doubt, usually regarding personal appearance, or sometimes the fact that my thinking does not fit in with my peers. I am not particularly weird looking, or weird thinking. But, let me put it this way: I only get a dollar for my presentation to the outside world. So, like the essayists, I am quite willing to think that I need to change something in order to fit in.
But ego, in the form of confidence in a particular idea, or in a track record of solving problems in creative ways, can help me to get through these problems and present a better argument for whatever thing I need to get done.
I think the real problem here is that the tools we have bred into us, by the billion or so years of selection, are not always perfect for the tasks that we now encounter daily. Engineering and maintaining code are the problems we are talking about.
We are crossing the bridge from gene-based behavior to meme-based behavior. We've been doing this for awhile now. Remember, before we lived in cities, or even villages, we sat around in caves. Many behaviors must have taken place that would get you arrested by the city police now, but in those days, they were decided by physical strength and cunning.
Physical strength and cunning are still useful, but civilized people had to realize that not every problem was a nail that required those hammers. Laws substituted, first religious, then civil. Then came guilds and professional organizations, which taught ways of the profession, and craft to obviate the reliance on laws. Then there are organizations like companies that layer their own way of doing things.
I suspect it could be argued that arguments peel back the layering of social nicety - a reverse recapitulation, a mirror of how we develop. In a well-formed argument (the worst kind you could imagine), one party starts perhaps by kidding another, then perhaps one questions the professional wisdom of another. Then somehow the issue of legality, then morality enter in. At worst then, it could become a sheer fight for life by one in response to the other. As bad as it sounds, those tactics get things done. If someone spits on your doorstep, you proabably don't want to spend much time explaining to them why it is not a good idea.
On the other hand, new ideas, I mean really new ideas, don't come from reliance on codified knowledge.
I think the fundamental difference here is in how one reacts to the decision of whether to reach through the layers of mores, laws, brute force (let's call that reaching back) or reaching forward into new, uncharted territory. Reaching back only requires ego. Reaching back very far may require large, or combined egos.
Reaching forward requires putting all those preconcieved systems away momentarily, and modeling the new world lines in your mind. Let's call this true thought (I call it true to distinguish from what often passes for thought, usually some kind of reaching back into professional knowledge or preconceived ideas. If it seems like I am sneaking in a subliminal direction, please call it some other kind of thought). In true thought, ego has no place, but as soon as the thinker begins to classify and codify any new insight, the thinker may need ego to have confidence in the idea and to communicate it before it is lost. Reaching forward, one must tread between egoless and ego states.
I think that Tilly's focus on learning and meta behavior is good to uncover more about reaching forward. But, some ego is required in either direction. I think that code writing requires a lot of reaching forward, and a little reaching back. Other activities, like collaboration, code documentation may require somewhat less reaching forward (but they still require it) and more reaching back.
I suspect that wisdom is a synonym for not having to reach back very far.
The way I look at it is that I should never stop trying to strive for pure thought, and I should try not to interfere with those who have lately succeeded in applying pure thought to the benefit of me and other beings like me.
Now, where's my dollar? | [reply] |