On Thu, Mar 19, 2015 at 12:59 AM, Mark Engelberg <mark.engelberg@gmail.com> wrote:
Kirby, have you ever looked at mathpiper? (http://www.mathpiper.org/)  I know you have a strong interest in fusing math explorations with programming, so it seems like something that would be right up your alley -- sort of an accessible Mathematica intended for education.  The docs section also contains a couple e-textbooks that weave in a lot of mathematics examples into the programming instruction (http://www.mathpiper.org/documentation-1)

Thanks Mark, perusing the book / language now.  Rings a bell.   Yes:  https://mail.python.org/pipermail/edu-sig/2010-December/010148.html

Having an interactive console is key I think, so you may use the interpreter as a calculator.  

All the languages we're discussing are like that, including: ISETL (cited by Tim Peters early on), J, APL (both Iverson & Co.), and Mathpiper here (and Wolfram's Mathematica of course, and Guido's Python, and Pyret).  REPL is king. [1]  

Logo was of course a huge pioneer in adding graphical / robot output really early.  Logo had just the one "context turtle" e.g. FD 10 meant the one turtle.  OO makes it easy to incarnate many such animals, each with its own state.  Some schools of though decry "internal state" but I notice that we have it in the real world and value that feature.

I've never been a "one language uber-alles" kind of guy in that I always encourage exposure to multiple languages, at least two that are different enough to provide real contrasts. I'm not eager for everyone to "agree on one language" for all purposes, though "business English" does serve as a kind of global esperanto in some dimensions.  That doesn't mean it should take over in higher level thought.

Sure, one language might be "front burner" compared to another in one's studies.  Python + J (jsoftware.com) has been a combo I've often recommended.  The LEX Institute approach ("Who is Fourier?") to learning human languages has been influential (better to tackle many over just one, because of the synergies involved).

My first exposure to programming in university, no counting high school hours spent with an HP-65 programmable calculator as (a) eclectic and (b) pre-Python.  Our intro course was more of a survey including: PL/1, Snobol, Assembler, APL, LISP.  Obviously we were not to become masters of any, however letting the contrasts sink in really opened my thinking to the "ecosystem" idea.  APL became my favorite in the 1970s (because of REPL in large degree), which explains my later fascination with J (both Iverson languages).[2]

 

Certainly one of the more attractive aspects of Python is that it is both relatively-easy-to-learn and relatively-useful-in-the-real-world.  But there's definitely a school of thought that *no* language used in industry is optimal for education, that the aims of industry and education are too incompatible for one language to rule for both purposes.  It's definitely an interesting debate.  I feel fortunate that I work with young enough kids that I feel little pressure to teach them something with immediate marketable value.  This gives me the freedom to experiment with many different languages; I've found that I rather like teaching ones expressly designed for education, but Python remains one of my favorite educational options of the popular, mainstream languages.


I'm all for encouraging debate.  

What I hear a lot is once your language becomes typecast as "a teaching language" that's "the kiss of death" as far as industry is concerned.  That's a stereotype to overcome I think.   

I tend to think of industry as averaging 10 years ahead of academia with the latter making do with what more competitive / secretive enterprises have contributed to open source (I associate "free and open" with the "liberal" in "liberal arts"). That's more typecasting institutions than individuals, which latter tend to go back and forth between the two.

So my attitude is more "Python and what else?" i.e. lets not stop with Python as if it were some be-all-end-all.  It ain't.  It's another tool, like business English is a tool.

Python + Pyret as a bridge to something else then?  Haskell?  Prolog?

I'm not one of those who think you need to join warring Camp A (OOP) or warring Camp B (FP) and then express loyalty to one by dissing the other.  Rather, play up the strengths of both paradigms (I know Shiriam disputes that OOP is really a "paradigm" but whatever).[3]

For me, the thing that has made me lose some enthusiasm for Python was not even mentioned in the article.  For me, the biggest downside is that the language, with its Global Interpreter Lock, lacks a clean solution to teaching concurrency.  IMHO, concurrency has become a vital issue, and requires a somewhat different way of thinking about problems.  To create the next generation of exceptional programmers, I believe we need to introduce models of concurrent programming much earlier in the curriculum.  Almost every recent programming language places a huge emphasis on concurrency (such as Clojure, Scala, Go, F#, Julia, and many others) but none of those are particularly welcoming to beginner programmers.  So I'd love to see more educational languages that feature concurrency.


That sounds valid and interesting.  How well does Pyret fit that bill I wonder?

Python has new infrastructure growing out of Tulip around the syntax of yield, using from and send, to develop its native asynchronous capabilities even more.  For myself, when I'm at OSCON you'll find me in the Scala and Clojure tutorials. [4]

My friend Dr. David DiNucci has written a book on concurrency which has plunged me back into thinking of programming as theater, scripting characters (agents) to do stuff, oft in parallel.[5]  

Managing concurrency in ordinary life amongst multiple players is something I think we need to get better at in business / enterprise / institution management in general, not just in our use of multiple processors.  Operations Research, as it used to be called, with its PERT charts and critical paths, was always about concurrency (e.g. building a submarine or A-bomb faster than the competition).

I go back to Python being a "glue language" that "plays well with others" and believe in harping on those virtues as they both imply "others" to glue together and play with.  

Python is not like the pythons in Florida, stereotyped as devouring everything else, leaving only pythons (all alligators eaten).  That's not a goal.  

The evolutionary advantages that go with biodiversity is an important principle.  Python is so useful because it's like a tour bus:  once you're on board, you get to visit many alien lands through what it controls i.e. talks to (e.g. Blender).

So for me it's always "Python and what else?" these days, and not "How can we replace Python with something else more trendy?".

Kirby

[1]  http://mathforum.org/kb/message.jspa?messageID=9718737
      http://mathforum.org/kb/message.jspa?messageID=9700004

[2]  http://www.4dsolutions.net/ocn/Jlang.html  (Jiving in J -- Iverson himself helped me catch a typo or two)

[3]  http://cs.brown.edu/~sk/Publications/Papers/Published/sk-teach-pl-post-linnaean/paper.pdf  (anti "paradigms")

[4]  http://controlroom.blogspot.com/search?q=Clojure  (Scala comes up too)

[5]  Dave's book:  http://www.barnesandnoble.com/w/scalable-planning-david-dinucci/1110902186?ean=9781475211160