On 3/6/2022 10:46 PM, Rich Morin wrote:
On Mar 6, 2022, at 11:08, Jeffery Mewtamer <mewta...@gmail.com> wrote (offlist):

Perhaps I'm biased on account of having learned to program under the 
Object-oriented paradigm, but I'm curious why you count that as a con of Python.

tl; dr - personal preference, plus concurrency issues.

I apologize for submitting such a long-winded (and arguably off-topic) 
response, but:

- implementation choices can affect end results
- my desired end result is more accessible apps

By way of background, I started programming around 1970.  I adopted modular and 
structured programming syntax as soon as I could, but never found 
object-oriented programming (OOP) to be all that compelling.  I recognize that 
it can solve some problems quite nicely, but I think that it (and inheritance, 
in particular) can easily be overemphasized.

Over the last decade, I've started using functional programming (FP) approaches 
and techniques, mostly in the context of Elixir.  There are assorted things I 
like about FP, including the improved ease of reasoning about code.  As Michael 
Feathers says:

Object oriented programming makes code understandable by encapsulating moving 
parts. Functional programming makes code understandable by minimizing moving 
parts.

I can't offer an attribution, but some wag observed (roughly) that:

Structured programming answers the question "How did I get here?".  Functional 
programming answers the question "How did my data get into this state?".

Avoiding mutable state is a relatively minor benefit in most sequential 
programming, but it's a major benefit in concurrent programming.  Controlling 
the sharing of mutable state seems to be the biggest challenge (and source of 
error) in writing thread-based code.  The Python documentation, for example, 
lists a variety of ways to deal with this:

Concurrent Execution
https://docs.python.org/3/library/concurrency.html

Note: Python offers process-based concurrency, but this appears to rely on OS processes, 
which have high overhead in both compute time and memory space.  Also, it provides no 
safety net, such as the "supervision trees" that are used in Elixir to provide 
fail-soft behavior.  So, it may not be a good fit for performance- and 
reliability-sensitive infrastructure (e.g., high-volume web servers).

Bringing the discussion back to OOP, the practice of hiding implementation 
inside objects can hide unsafe thread behavior.  José Valim, the creator of 
Elixir, ran into this problem as a member of the Rails core team.  They were 
trying to make Rails thread-safe and had to dig into each library's code to 
unearth problematic practices.  Indeed, this was his initial motivation in 
developing a new language.

Distributed applications are inherently concurrent; also, current processor and 
system architecture trends both emphasize concurrency.  So, using a programming 
model (objects combined with threads) which is inherently unsafe seems like a 
poor choice for this project.



Totally on board with it being whitespace sensitive being a con, which makes it 
nearly unusable in my opinion, ...

Whitespace sensitivity is obviously a problem for the visually impaired, but it 
can also set up any programmer for failure.  Here are some examples, for 
consideration:


It is harder but if you want to work with sited co-workers you need to
work with identation.

The advantage that I see in Python or alike languages, is that
indentation is required and thus makes your code "working" and visually
appealing at the same time! :)
Or the code needs to be automatically prettyfied before committing to a CVS.

adhering to conservative standards (PEP8, POSIX ... (splitting lines
insmaller chunks, 80 chars max, use of whitespace)) takes more time to
learn but makes the code more accessible for everyone.

--
John Doe

Reply via email to