Past and Future Turtles: The Evolution of the Logo Programming Language (Part 1)
turtlespaces.org
turtlespaces.org
I finally gave up when I realized that most of the teachers I worked with saw the pretty pictures produced by the screen turtle as the goal, rather than the deep insights produced by the programming process. For them, Logo was never going to be anything more than an Etch-a-Sketch.
Sigh
Could you please e-mail me at melody at retrocoders.org ? I'd love to chat with you about BBN. We're in Victoria
I bet that's a habit from 45rpm records...
The solution would be to put the book in the system. That is what Smalltalk-80 came close to offering. But 8 bit floppy-based computers were not up to that. Eventually the Internet would become a way around the gatekeepers, but by then the idea that Logo had failed had become widespread and we had to wait for Scratch to occupy (not very well) that space.
For some reason many people don't take Scratch seriously because of its visual nature. So they do a similar system where you can press a button and see your block as JavaScript text so you can know that you are doing "real programming". The real reason Scratch is limited is because it was created that way on purpose to make it easy to make simple games and animations. It could easily be expanded into a full programming language and the Snap! project at Berkeley did exactly that.
Logo was a full programming language from the start. Early versions didn't even have the famous turtle and focused on text applications. By the time of the 8 bit microcomputers it had become associated with the graphics (and so was used as the world's most awkward drawing program) and limited implementations. 64KB was a huge amount of memory for Basic or Forth, but only allowed the simplest Logo programs to fit and ran them very slowly. This made people think that Logo was just a toy (which was not true) like today they think Scratch is a toy (which is true, though not for the reasons they think).
In spite of the feelings of the teachers, it worked. One day one of us (may be, maybe it was my friend Ronny, I dunno) figured out that we could open up a magic screen that let us type more than one command, and have them all executed when we were done. We were programming and didn't really know it!
I realized years later that I'd learned programming from Logo, and look back on those days in the computer room with great fondness.
I can't help but think "ah, like NFT art". Schools made and prepared us to do exactly this.
In Logo's heyday there were several other fine Logo books -- like Brian Harvey's Computer Science Logo Style, and one whose title I'm forgetting, by several authors, billing itself as for a particular Logo implementation but with lots of rather interesting projects like a basic proof assistant.
And another written in Java, as part of a more elaborate edutainment adventure game I still have in an unfinished state: https://github.com/JohnEarnest/MLogo
If it really piques your curiosity, I might be able to dig up the demo build I distributed to a few colleagues.
Oh, and another feature that isn't really shown off there is the manual- all of the examples can copied into an editor buffer and then tinkered with directly at the REPL: https://i.imgur.com/CwCaLY5.gif
$ python
>>> from turtle import *
You now have logo! You can do 'fd(100)' for example and it will pop up a window with the turtle.I plan to have my kids do this when they get a little older.
https://hourofpython.trinket.io/a-visual-introduction-to-pyt...
Logo is a small, simple, and powerful language. It has simple syntax and a small number of concepts, making it easy to learn.
Python is a large, hairy scripting language that is currently an in-vogue way to glue together performant C libraries and get work done. Python can be useful, but I do not think it is nearly as well suited to education as Logo is.
You can probably reimplement much in Python, but at some point you will have to admit you’ve written a LOGO interpreter.
Anyway, I've taught with Python a fair amount and have been pleased with the results, especially when using the `turtle` module.
to circle
fd 3
rt 7
circle
end
Add a parameter, and get a spiral. The turtle winds its way off the screen, and again the student can stop the program manually: to spiral :x
fd :x
rt 30
spiral (:x + 1)
end
Introduce a base-case, and now the program stops itself at a desired size: to spiral :x
if (:x = 30) [ stop ]
fd :x
rt 30
spiral (:x + 1)
end
Small, unsurprising steps building up an intuitive grasp of a useful concept.TCE can also improve the economy of the language, reducing the number of "primitive" control flow concepts that need to be provided out of the box. Since Logo has no "special forms" and is not eagerly evaluated like a Lisp, it's easy to make new control constructs without needing to teach any magic:
to while :cond :proc
unless run :cond [ stop ]
run :proc
while :cond :proc
end
Little things matter.Yet, the creation of a "while" here isn't so different than making a new function which performs that logic. Was your example intended to demonstrate creating new syntax?
It takes two arguments ("cond" and "proc") which would both be bracketed lists. "unless" is common sugar for a negated if statement. "run" evaluates a list as an expression. You'll notice that if/unless also take their bodies as lists, rather than any sort of special-purpose block syntax. "stop" short-circuits the current procedure and immediately returns.
Since Logo has dynamic scope, any variable references in "cond" and "proc" will resolve the same within "while" as they did in its caller; no nasty visibility surprises. Since Logo does not eagerly evaluate lists, there is no need to "quote" or otherwise escape the lists in the caller's context. It is precisely that one can define such a construct without defining new syntax per se that is useful.
That's a handy feature. Thanks for the explanation.
One extra note: LOGO does not have closures (closures require lexical scope). Dynamic scope gives the possibility to, e.g., define new control flow without quoting, but lexical closures are not possible.
This is unmatched, and can never be matched, by Python.
You can certainly mix in Python if you want, but you don't have to.
[1]: https://en.wikipedia.org/wiki/ABC_(programming_language)
I liked it so much that I took extra course after hours to do more of it.
This was thanks to French state "Plan_informatique_pour_tous"'plan (https://fr.wikipedia.org/wiki/Plan_informatique_pour_tous) which put a computer in every middle school of the country.
It had a concept of an Agents living in an Environment. It had several builtin agents, i.e. an "Ant" and a "Painter", etc.
The syntax was more Pascal-like than Logo itself.
Just like Logo it was designed to teach programming to very young kids.
It was rather limited, so the second half of the book was introducing Rapira [3,4] - a SETL-based programming language with Russian keywords. It was rather advanced dynamic language and had lots of data types: tuples, sets, etc.
Recently at work I did some simulations using NetLogo - so it was fun.
--
[1] https://en.wikipedia.org/wiki/Robic
[2] https://ru.wikipedia.org/wiki/%D0%A0%D0%BE%D0%B1%D0%B8%D0%BA
[3] https://en.wikipedia.org/wiki/Rapira
[4] https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%BF%D0%B8%D1%80...
edit: there's also a very good three-book series for beginners called Computer Science Logo Style, by a UC Berkeley prof whose name I can't recall... Brian Harvey maybe?
As a reward, we'd sometimes get to spend our lunch hour with them unsupervised. This led to us learning basic, finding early demoscene-like animations (that someone got from a high schooler! wow!), and typing in programs from the backs of computer magazines.
I'll never forget that feeling of discovery and control - it was so empowering to be able to make this box do something that I created.
Now I spend my days trying to thwart ransomware and cybercrime... sigh...
And since we're still paying >$100 for 1990s tier graphing calculators (OK, I think they finally got color screens) it doesn't seem infeasible to give each student their own little robot to play around with?
Also, can anyone confirm that the Turtle robot is from the 1940s? What's the story behind that?
Edit: Found it: https://en.wikipedia.org/wiki/William_Grey_Walter#Robots
1. [http://people.eecs.berkeley.edu/~bh/v1-toc2.html]
2.[https://turtlespaces.org/books/]
1. may be too advanced for children...
I'll be here all week, thank you.