The novice agrees about pattern recognition being an important skill (and voted accordingly), however, he hesitates before wondering aloud...
Aren't you implying that all programmers should come from a computer science or math discipline?
Many good programmers have come from other backgrounds: Drama, History, Literature, Medicine, and so on. While some of this training includes a basic understanding of math and problem solving, I doubt very few could articulate your "pattern recognition" requirement or the calculation shortcuts that you quoted in a later reply. They may understand them intuitively or instinctively, but these folks may not be able to articulate them quite as precisely.
You're not saying that these people should give up the practice, are you? (I don't believe you are, but ask to understand your position as clearly as possible.)
In the extremely slim chance that you are thinking along those lines, would it not be more appropriate to consider these (and other folks) as inexperienced and then help them learn the skills? Don't feed them the answers, of course, but point them to pages, nodes, FAQ's, or even books that provide the skills for them to come to the same conclusions. Allow them to learn the craft as they learn the skills by solving problems.
Perl isn't (terribly) hard, programming is hard. Yes, in its purest form, the act of programming requires problem solving and pattern recognition, however, it also requires specific knowledge that can only be learned by doing. Perl requires a firm grounding in regular expressions. If you are fuzzy on regex's, then many examples and solutions are difficult to fully understand.
Also, keep in mind that many folks writing perl scripts (I'll avoid using the more general term given other recent discussions) have come from different OS's and languages. Perl is not BASIC, COBOL, Pascal, or C++. It shares certain features and contains many similarities. It can be used to accomplish the same tasks, but it's still different. There's a mind set that must be learned to "get" Perl.
While elements of this mind set can be learned in other products, certain things can only be learned through experimentation with the language itself. Going back to regular expressions, lets consider the fact that DOS/Windows really only support two very simple wildcards that have neither the scope nor richness of regular expressions. Yes, certain products support regex's, the real proving ground for learning them is Unix itself. If you do not have that experience, you're quite limited until you get them.
As a Windows programmer, I have found that writing good applications for that OS requires an understanding of the API. As a novice perl programmer, I'm seeing that the same general rule applies. I cannot be a good perl programmer without understanding the concepts, command-line utilities, and general mind set of Unix/Linux itself...including regular expressions.
There are many tidbits and factoids that you more experienced perl folks appear to take for granted. For example, printing integer scalars with leading zeros. Simple, yes? Not if your programming background does not contain C or *nix experience. printf works very nicely, but until I found this site, I did not see any examples that showed how to use it to print leading zeros...and I found this site long after the time I needed to do precisely that. (I managed to figure it out after reading and reading the Camel books, but it took me some time.)
Similarly, there's the fact that here documents are interpolated. Obvious from the standard books? No. In one of my first scripts, I was trying to put a lot of style references, ALT tags, and so on in a here document and couldn't understand why it wouldn't compile. It took me three days of frustration to wonder if they could be interpolated and learn that, yes, they actually are.
I don't believe that's obvious to someone experienced in languages where variables are treated more strictly or where interpolation has to be done manually through typecasting, concatenation, and so on.
My point is this: is it not dangerous to presume that everyone has the same background or set of knowledge that we do? If this is indeed dangerous, would it not be preferable to consider unskilled supplicants as raw potential needing gentle guidance and nudging, rather than expecting them to have the same internal knowledge base and insisting on them having a set of skill before (exaggerating) allowing them to kneel before the altar?
There is a reason many schools of thought allow adherents to learn the "secrets" in their own time. Teachers and mentors may (and do) get frustrated at answering the same question over and over. They may be disappointed in having to deal with people who are not as devoted or as serious about the craft as they are. But doesn't the payoff come when you recognize that a student "groks" it? You can see the light bulb turn on.
As a former trainer and tech support person, I found that to be true. When one person "got" it, it made up for several repetitious and "basic" questions--especially when the person that got it was asking all the basic questions.
I believe it's important to presume that questions are honest ones, instead of being suspicious about motives, skills, craft, knowledge, or understanding of basic principles. As nearly everyone's grandmother as said at some point, "The only stupid question is the one you don't ask."
And...finally...there is an important benefit to teaching, in whatever form. In trying to explain something to someone else, you refine your own understanding of it.