Disadvantages of text

29 Jan 2016

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:

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.