|We don't bite newbies here... much|
On a tangent, but not entirely without Perl content ...
I would just like to point out that most of todays usage of 'cargo cult' is based on an impoverished view of some of the practices found in the South Seas islands. That there were/are such cults isn't at issue --- but to think that they sprung up as a post-war belief system is to miss a great deal. Even as early as 1830, missionaries were subverting beliefs and rituals involving ancestors returning in a great ship bringing wealth and prosperity (a new age) --- ie, that converting to christianity would bring peace and vessels carrying abundances of goods (Gilson R.P.(1970) "Samoa 1830-1900" Univ Oxford Press). The fact that the missionary supply ships, as well as other ships of exploration, indeed had a wealth of goods from the West was almost certainly not lost on the people in question.
There are other factors as well --- more elaborate cults (the kind caricatured in the modern metaphor) have been seen to be part and parcel of political unrest, anti-colonial movements and protest, etc. But I only wanted to bring forth the idea that the quicky version that Feynman uses (to good effect I might add, but see below) --- ie, that there was a sudden ritualistic copying of airstrips based entirely on a lack of understanding --- is not a version that tells us much of anything about the people or the cargo cults of the South Seas, nor in the many other places of the world where similar (but not specifically geared to wartime cargo planes and western "cargo") beliefs and movements also took place. It is easy to look with incredulity upon a practice such as "cargo cults" when they are stripped of their historical, religious, polical, and cultural contexts, and to pronounce such beliefs as simply "mistaken" or "misguided" or involving a fundamental lack of understanding.
Why did I bring all this up? Well, it isn't like it isn't important to at least imagine that there is more to the story than what we've been told. But it continues. The cry of 'cargo cultism' is definitely a negative or derogatory term, and, using only Feynman's account, rightly so if justly applied. One example of where we hear this cry today, specifically relating to Perl (see, I'm not entirely off topic), can be found right here (regarding ref($proto) in new() methods.
To be sure merlyn makes a case for avoiding this particular construct --- he also admits that other prominent members of the Perl community disagree. Indeed, Tom Christiansen would be one of them, and the standard documentation that comes with perl contains the perltoot manpage where he suggests using the very technique merlyn advises us against, and explains that it provides more flexibility to the constructor. I have no problem that such a disagreement exists --- but I do think the cry of "cargo cult" (in Feynman's sense) is quite misplaced and unfairly presupposes a great deal about those who might choose one way or the other. Sure, some might actually be cargo-culting it in one sense (that's how Tom C. does it, so that's how I'll do it even though I have no idea what it means or really does). Others, however, may perfectly well understand what it means and how it works but may not have considered merlyn's argument about why not to use it --- is that cargo culting? No. Others still may know both what it does and understand merlyn's disagreement, but choose to use it anyway. Perhaps merlyn was influenced by programming Smalltalk in 1980, but using that experience as a defense of his position regarding 'ref($proto)' may also be called 'cargo culting' in the same vacuous sense as his denouncement of 'ref($proto)' as cargo cult (after all, this is neither Smalltalk nor 1980, and we've been provided zero information about why *that* matters in the current debate) --- it ignores more information than it provides and tells us nothing about the people involved or their reasons for doing things in a given way.
I am not saying that merlyn did not give reasons (beyond the Smalltalk reference), he did in the post referenced above, and TomC gives flexibility as a reason in perltoot. What I am saying is that using the technique may or may not be cargo-culting in exactly the same way that avoiding the technique (or using a clone() method) based on merlyn's post may or may not be cargo-culting --- it all depends on the understanding of the programmer in question, not the technique.
To go a step further, there is a fundamental misalignment in how the term is used in programming circles --- a telling factor in Feynman's story is that the planes *failed to land*, yet the cultists continued the practice. In programming, the real problem isn't when I copy your technique (without understanding it) but can't get it to work --- though that certainly accounts for a number of "why won't this work" posts on various programming forums. No, the real problem in programming is when I copy it (without understanding it) and it *does* work (or appears to work), and thus it propogates not only in my code, but perhaps in other's code as well ... setting myself up for failures down the road that I won't be able to understand because I didn't understand the technique and why it (seemed to) work in the first place. That is, the real problem is the propogation of bad practices because they appear to work --- and in Feynman's cargo-cult science the problem is exactly the same ... the poor science propogates because it *appears* to offer explanatory power where it does not
Thus, the term "cargo cult" itself may be said to have been 'cargo culted' as a meme that is semantically misaligned with the context from which it was taken. At any rate, I really wanted to simply bring home the point that with the current meme, an accusation of 'cargo cult' is not saying something negative about the code in question, but rather about the coder in question. And yet, we still often see "code" labelled as cargo culted --- and, sadly, there appears to be a tendency for the discourse to be ruder when thusly labelled code is exposed than when a simple lack of understanding is exposed through code that does not have such a label attached. What does this say of us I wonder?