Disadvantages of text
I’ve been following the Scratch community for years now, and one repeated request we see is for text-based Scratch. That’s why I’m making tosh. And I’ve written before about why I like Scratch, and why tosh might be useful.
But there are some problems with the whole idea that might not be apparent until you’ve tried it.
Yes, it’s faster to write. Yes, copy/paste and find/replace and proper undo support are wonderful things to have.
But it’s less immediate. Most importantly, there’s no hot code replacement: you can’t change scripts while they’re running. Granted, I don’t miss this as much as I thought I would. (And I’m working on a design that gently reminds you of this difference.) But there is a sense of delight in changing a number input in Scratch and seeing the running project instantly reflect that change.
There are some other drawbacks which are really difficult or outright impossible to fix:
In tosh, you can only arrange scripts vertically.
Scratch (particularly 2.0, with its new cleanup algorithm) encourages you to arrange scripts spatially: you can put two functions next to each other to make them easier to read together on a wide screen.
Personally I dislike this, so tosh “cleaning up” the scripts into a single vertical column doesn’t bother me. But not everyone agrees: some people value being able to arrange the scripts however they want.
There’s no support for list watchers.
This is a bug in phosphorus, which I’m using to preview projects. Fixing it myself is prohibitively expensive, so it’s not going to happen!
You can’t click and drag on sprites to move them around.
One tester told me: “I didn’t realize how much the interactive stage was a part of the Scratch experience until I tried to drag sprites to position them.”
We could argue that this is actually an advantage, since it encourages explicit initialisation in your code. Automated tools like Hairball and Dr. Scratch encourage this pattern.
There is one interesting and dangerous argument for all these drawbacks. I have being “like a text-based programming language” as an explicit goal, and most modern programming tools are basically awful. Which means you can justify most limitations as intentional!
Of course I’ve tried very hard to avoid this. For example, tosh’s autocomplete and syntax highlighting are state-of-the-art in comparison with other programming languages. (They have to be, because of the design of my language.)
So while I think tosh is nice to use, it might not be what you expect. I conclude with another quote: “It’s extremely cool, but definitely a different experience from Scratch.”
Yes, it helps you get used to text-based programming. (Or at least, I hope so; I haven’t tried this properly, but so far it seems like it might.)
But I think some people confuse representation with language. When they ask for “text-based Scratch”, what they really want is a way to magically switch between Scratch and some mainstream language, such as JavaScript or Python. This is impossible.
The tosh language is just a different representation for Scratch code; it’s just as powerful, no more or less. You can’t do anything with tosh that you can’t do with Scratch. You might be able to input your code faster, because typing is quicker than dragging blocks. But the resulting code will be just the same.