We keep making small improvements to Snap!, but mostly they don't affect existing primitives, or change things for existing projects.
There are a few things that I've wanted for quite a while, and keep trying to talk Jens into, that would definitely be incompatible! If we made these changes, we'd have to look at the version number in the project XML header and provide a backward compatibility library so as not to break existing projects. But there would still, most likely, be a period of confusion for users accustomed to the old way (which is, in most cases, also the Scratch way, so that's likely to be an ongoing issue for Scratchers who want to get started in Snap!).
Anyway, I'm curious how people feel about these things. Would they be worth it? Not worth the confusion? Downright harmful?
So, here goes...
-
Directions counterclockwise from East. This isn't so much something I want as something math teachers want. Some of them are very emphatic about it, because angle measurement does have a standard and if you're trying to teach (or learn) algebra or trig, it makes doing problems on the computer a little harder if you always have to translate math book angles to Snap! angles. Our angle measurement (clockwise from North) is something we inherited from Scratch, they inherited from Logo, and they inherited from boat navigation and orienteering -- things based on compass directions. I guess when Logo was designed they figured little kids would be more familiar with compass directions than algebra directions, but I don't think kids know either one! It didn't really matter in Logo, but in Scratch, there are all these costumes that face rightward, and so a sprite's default direction is 90, rather than 0. That's, I think, a little confusing. And the math teacher argument is that Snap! isn't for eight-year-olds, but precisely for the high school age kids who are studying algebra and trig.
-
HSL (hue-saturation-lightness) color instead of HSV (hue-saturation-value). If you look at the color picker in the SET PEN COLOR block, the horizontal direction is hue, basically position in the rainbow, from red on the left to violet on the right. But the vertical direction is sort of complicated. The bottom half, from black to full color, changes Value (which we call "brightness" but that's not the correct technical term) from 0 to 100, while holding Saturation constant at 100. But the top half, from full color to white, holds Value at 100, while varying Saturation from 100 to 0. If both Saturation and Value are different from 100, it's pretty complicated to understand what color you get. In HSL, the vertical axis of our color picker is Lightness, which is 0 for black, 50 for full color, and 100 for white. Then Saturation, which is 100 for all the colors in the color picker, makes the color grayer as it moves toward 0. When Saturation is 0, the color is some flavor of gray: darker for small Lightness and lighter for large Lightness. So, HSL is arguably more intuitive than HSV. If you are a glutton for punishment, head over to https://en.wikipedia.org/wiki/HSL_and_HSV for more than you want to know (definitely more than I wanted to know!) about color spaces.
-
A recent change in Snap! has automated the process of turning text files into list structure and vice versa. A two-dimensional structure (a list of lists) is written out into a .csv (Comma Separated Value, a portable spreadsheet format) file; if the structure has more than two dimensions (it's a list of lists of lists), it's written into a .json file. But if it's just a simple list of words, one-dimensional, then it's written as a one-line .csv file, with all the items on the same line, separated by commas. I think this is really wrong. Snap! should write a one-dimensional list into a .txt file, suitable for reading in a text editor rather than a spreadsheet program, with each item on its own line. When importing, though, a .txt file isn't turned into a list at all; it's read as one huge text string. I think a .txt file should be imported as a one-dimensional list, with each line of text becoming one item of the list.
-
Okay, this is the one I'm expecting trouble about. Names (names of variables, names of blocks, names of sprites -- names, period) should be case-independent. This was how it worked in Lisp dialects until recently; it has always been the case in Logo. The thing is, it's not the case in C, and so it's not the case in the myriad languages that are basically C with bells and whistles: C++, Java, Javascript, Python, etc. There are two minor, obsolete reasons plus one mind-bogglingly stupid reason for case-sensitive names: (1) It takes a little time to do case-independent comparisons, and computers used to be slow. (2) In some languages, the case conversion algorithm is messy. The canonical example is German, in which upper case "SS" can be lower-cased either as "ss" or as "ß." This in turn makes comparison messy, because you have to count all three of those forms as equal. But this is a solved problem, and Javascript provides a case-independent comparison function for all languages. (3) Some people who really like spending their time debugging think that in their programs they should use the same word for the class Foo, the variable foo, the procedure fooFooFoo, and the... I'm not sure, flag bit? FOO. But none of that makes sense in Snap!. We don't have classes, just sprites, which are class-ish and instance-ish depending on how you use them. Our variables are distinguished from procedures by shape and color, not by typography. And our sprite names are generally selected from pulldowns in input slots, again not by typography. And, you know? I think it's a good thing if programs can be read out loud and still be understandable.
Okay, that's the list. (I have a bigger list of things I want that don't raise these issues of compatibility. So I don't really have to ask about those.) What do you think?