OK. You are of course entitled to your opinion. I just wanted to tell you
that it is self fulfilling. People are AWARE of your attitude and will
fulfill YOUR expectations. If I had a manager like you, I would surely
do as little as I can, leave obvious bugs in the software untouched,
and spend most of my work time looking for another job.
Wacky.
I am pretty sure my manager is well aware that I make mistakes. I make
some truly SPECTACULAR mistakes, too. I once tested a refactoring change
(thus, no expected changes) against the wrong source tree -- one not
containing the change -- and as a result checked something into the main
product tree which, get this, *caused make to dump core*.
Awesome, no?
So we have a lot of processes and procedures. We use code review. We
have gatekeepers, who are not the same as code reviewers. We do tests
and validation. If I think I've fixed something, and I've tested it, and
I want to check it into the tree, before it gets out to a customer, it will
be:
* Reviewed by at least one other programmer in detail.
* Evaluated carefully by someone ELSE to check for risk of impact
to other parts of the system which depended on the old behavior,
or clashes with other ongoing development.
* Run through a complete test of whether the reproducer for the
bug now works correctly instead of showing the bug.
That's the minimum.
And yes, we've had bugs make it through that whole process, because *people
make mistakes*.
Most of the teams I have worked with, were led by people that made
me clear that they had HIGH expectations from me, and that I was
*expected* to be bright. In those teams I did my best in every
opportunity because I liked the work atmosphere where people are
respected and appreciated for what they do.
Yup!
But expecting me to be bright doesn't mean expecting me not to make boneheaded
mistakes.
So we sanity-check things. We add "stop and print an error" behaviors to
the build system when things look suspicious. In short, we react accordingly
to the information that programmers make mistakes.
And no, we don't trust programmers. I don't trust myself, because I have
a very large amount of data showing me that I make stupid mistakes all
the time. I actually sent a document out for review which referred to
the "build problem" rather than the "build process".
To get back to the discussion at hand. Source code management
systems have high quality and are mostly free (i.e. SVN for instance).
Apparently you do not use them because (obviously) it is yet another
thing that can go wrong in the hands of incompetent programmers.
Oh, I use source code management systems. I love me some git. Makes me
happy.
But I also forget to do things. ALL THE TIME. I can fix something and
forget to check it in, or check it in to the wrong branch, or try to
check it in and do something stupid that zorches the tree.
Then (obviously too) you loose the source code for that C program since
nobody CARED to save it. Who cares? Nobody.
Or possibly due to some unplanned or unforseen circumstance. I lost some
source code changes a few days ago, because a hard drive crashed and it
hadn't occurred to me to make backups of the home directory on my dedicated
video gaming machine.
It is a vicious circle of negative reinforcement. The only way to
break that is to use POSITIVE reinforcement but that would contradict
your world view.
Positive reinforcement is great, but denying reality isn't.
Reality is that humans make mistakes, and a well-designed system will not
assume that they don't.
-s