And that difficulty -- to return to the original point of the thread
-- is why stricter languages than Perl are so popular. They
substantially reduce the risk of project failure due to technical
issues with the coding, and they reduce the business's dependence on
finding brilliant talent.
That's the sort of statement that really needs to be backed up with
empirical evidence rather than anecdotes or "it seems to make sense."
It's certainly a popular *perception* that's driven a lot of language
design, but then the world of business (and, for that matter, everything
else) is full of unexamined assumptions that seem to make sense but that
often, on closer examination, don't.
In the case at point, I think the essential quality of programmers that
you're looking for isn't "brilliance" but rather just a modicum of self-
discipline; the ability to realize, to steal a line from a J.K. Rowling
character, that there can be a difference between doing what's right and
doing what's easy. And I think that, in programming, the determinants of
that are more cultural than personal; people will do what's seen to be
valued in their environment. If "great hacks" and tricky code are seen
as something to be proud of, that's what you'll get. It's not so much a
matter of ability as it is of attitude. Read Gerald Weinberg's _The
Psychology of Computer Programming_; he discusses at great length both
the organizational/social and personal factors associated with good vs.
bad programming.
And in any case, my understanding is that the typical failure modes of
any large programming project seldom involve low-level issues of the sort
that could be handled by tool-enforced discipline (e.g. passing strings
to functions expecting integers); those should be nipped in the bud by
unit testing and similar practices. Rather they involve macroscopic
things; the individual pieces work by themselves, but not together,
typically due to different people working off assumptions that are
almost, but not quite, identical. Focussing on specific characteristics
of the language is really a form of micro-optimization.