[Edu-sig] Smalltalk syntax benefits
Paul D. Fernhout
pdfernhout at kurtz-fernhout.com
Thu Aug 10 17:24:16 CEST 2006
Arthur-
As a simplification, admittedly a cartoon, most professional
mathematicians often care very deeply about a very few things for a long
time (where a mathematician might spend ten years thinking about, say,
proving Fermat's last conjecture) where they refine a concise notation
they understand in a specific problem domain (with some cultural norms
perhaps like dX), while most professional programmers need to care
somewhat about a lot of things which change from function to function and
application to application (where in a year a programmer might work on
thousands of functionsand tens of applications, and perhaps read the
intent of hundreds of thousands of function calls). That is why, for
example, when I read code written by mathematicians they feel it totally
acceptable to use, say, "rd" everywhere in a small program, when I as a
professional programmer would prefer "rainfallPerDay_mm", because to me I
experience their program as just one little day trip on a lifelong
journey, and life is too short to spend hours puzzling over cryptic
variable names or mathematical items in simulations used without units
(and often inconsistently in hard to find bugs where the code works but is
wrong).
I think this issue of argument labeling may fall into the same category of
variable naming. Sure, if you maintain one program only and it is short,
or if you spend a lot of time in one problem domain, then not labeling
arguments so anyone can read them may be acceptable. But if you have to
read and understand the intent of literally tens of thousands of function
calls per year across dozens of libraries, then writing or reading
something like "calc(rd, i)" or in your example "Line(point1,point2)" just
does not cut it IMHO. (The Python codebase itself may suffer from
something of the same effect in parts.)
What about constructors like
"Line origin: 10 @ 10 angle: 35 degrees distance: 10 mm"
(which is easy to have in Smalltalk syntax) and so on? And I bet you can
read what it means not even knowing Smalltalk. Would you rather read:
"Line(10, 10, 35, 10)"?
Or at best:
"Line(Point(10, 10), 35, 10)"?
Which is clearer? I think this goes beyond my bias as being experienced
using Smalltalk system keyword syntax.
Not to be too hard on you or Kirby, but I think it is easy to not see the
value of the unfamiliar, and there is a lot functional foo() syntax makes
difficult and awkward looking (Lisp, a Python ancestor in a sense, has a
bit of this problem too).
Again, just because Smalltalk has this and Python does not does not mean
I'm saying "use Smalltalk". I'm just saying, how can Python get this
feature? Maybe it can't. Then my next thing is, can the two syntaxes live
side by side -- a possible area for exploration.
--Paul Fernhout
Arthur wrote:
> Paul D. Fernhout wrote:
>
>
>>In the syntax case, I am continuing to point out that Smalltalk's keyword
>>syntax (e.g. "Point x: 10 y: 20" versus "Point(10, 20)" ) produces code
>>where all arguments are labeled and so it is easier to read and
>>understand.
>>
>
> That is, IMO, an arbitrary point of view, at best.
>
> Touches a particular nerve with me because I went to great trouble in
> the design of PyGeo to *avoid* the use of keyword arguments, feeling it
> in fact important that in creating a construction one should be in
> geometry mindset mode, not programmming mindset mode, and therefore
> *not* have to be explicit in stating the obvious.
>
> See
> http://pygeo.sourceforge.net/docs/Overview.html#built-in-geometric-intelligence
>
> The point is not whether my design is right or wrong, but that I found
> myself to be using a tool that allowed me to express my design exactly
> as I wanted to - right or wrong.
>
> Would I have had the same right to be wrong using Smalltalk?
>
> Art
>
> _______________________________________________
> Edu-sig mailing list
> Edu-sig at python.org
> http://mail.python.org/mailman/listinfo/edu-sig
>
>
More information about the Edu-sig
mailing list