[Baypiggies] Frequently Argued Objections
Warren Stringer
warren at muse.com
Sun Jun 22 19:25:03 CEST 2008
On Jun 21, 2008, at 7:13 PM, Shannon -jj Behrens wrote:
> On Sat, Jun 21, 2008 at 11:18 AM, Warren Stringer <warren at muse.com>
> wrote:
>> Yee HAW! Here, have some beef jerky while I explain why us cowboy
>> programmers are annoyed: Self has to be explicitly used yet is
>> implicitly
>> passed as a parameter. Second, when counting keywords in the
>> standard python
>> library, "self" is the most common keyword, beating the 2nd most
>> common
>> keyword by almost a factor of two. I mentioned this to JJ, who says
>> that he
>> uses self and non-self in the same code base. I would love to see
>> an example
>> where this is useful, where the NRO wouldn't suffice. As a mere
>> tenderfoot
>> Pythonista, all I see "self" doing is obfuscating the wide open
>> white spaces
>> that I have grown to love.
>
> Are you sure it was me? Are you referring to calling self by another
> name? I might have said it's possible, but I don't remember ever
> doing it.
>
> -jj
Well, unfortunately, there is no google desktop style search for real-
life (at least yet). If there was, I would put in the keywords "apps
engine conference brown shirt jj" to call up our conversation around
a circular table at a recent google event in San Francisco. I
mentioned the self part, but may have left out the keyword count. This
wasn't about calling self by some other name. To be honest, I wasn't
sure of your reply. I thought that perhaps it had to do with class
factories.
*Is* there a reason to NOT use self? If not, then self is redundant.
If the reason to use self is to bypass name resolution order, then I
would suggest making the less common case explicit and the more common
one implicit.
Since we're taIking about Objections, I find the statement "explicit
is good", without a justification, to be Objectionable. The only
truly explicit computer language is a circuit diagram. Even assembly
language is implicit; anything with op codes is a transformation of an
explicit routing of electrical charges to an implicit pattern that
acts on an operand. Higher level languages build upon lower level ones
by transforming explicit combinations into an implicit pattern.
IMO, languages evolve by compressing complexity. Just as Morse Code
compressed symbols tapped by hand over a wire, where the most common
symbol "E" required a single tap. Python reduces complexity by
removing the redundancy created by the often unnecessary enforcement
of policy with typed variables and by removing the redundancy of using
begin/end symbols (for the compiler) along with whitespace (for the
human coders), when simply using whitespace would suffice. As a
result, Python is a more concise by making coding policy implicit.
However, Python is less concise when it enforces a policy about making
name resolution order explicit. From a statistical viewpoint, this is
akin to a Morse Code that assigning a single tap, not to the letter
'E', where it belongs, but to the letter 'Z'.
While some people may see "self" as an issue of faith, others see it
as a statistical anomaly (in an otherwise compact language).
Cheers,
\~/
More information about the Baypiggies
mailing list