Yup, I want - and plan - to get rid of the "Create Variables" library, and also of the "Getters and Setters" one, for different reasons.
"Create Variables" is a band-aid kludge that helps other libraries bundle data with their blocks. Some blocks rely on the existence of a global variable to keep track of some setting, e.g. of whether string comparison should be treated case-sensitive or not. That's why when you import that library you need to first run an initialization routine that creates such a variable, or - as it's done lately - we can create such a variable on the fly. What we really need, however, is to simply allow libraries to also include persistent data, such as we're already supporting for exported sprites. Programmatically creating named variables on the fly is only a weak fix to a more general issue that we'll be addressing in future versions.
Aside from this very narrow use-case for which we've designed the "Create Variables" library the main problem I have with it is that is confuses too many users who otherwise can't program their way out of a paper bag. It looks like a solution to the problem of referring to data by a name, but it's not. Instead programmers should learn about key-value associations, data structures, and - most importantly - first-class (anonymous) data. This is especially true for learners that Snap! caters to, because programmatically creating variables on the fly is not readily supported by any other programming language they'll use later, and if you do end up tricking Python or JavaScript into letting you do it you'll be laughed out of the room or frowned upon by those who know better. The reason for that is that you don't need to associate names with data, because you already have the data and you already have a name for it. It's a so-called "tautology", an example of circular logic. The fact that "Create Variables" pops up in the libraries dialog makes it seem as if this were a good programming practice, or that there were a legitimate class of use cases for this kind of meta programming, but that's not true. So instead of educating learners we confuse them and do them a disservice by providing the library.
TL;DR: You never need to programmatically create a variable.
"Getters and Setters" is a different story. That library is now mostly redundant, because we've included almost all of its options in the primitives that are just always there already, plus many more that the library is missing. But some of those settings have been deprecated, even a long time ago, or are no longer supported. By listing those abandoned or experimental settings as options the library conveys the wrong impression that there are "secret" power switches ("smooth animations", "retina display support", ) that - in fact - don't exist (but somehow keep popping up in the forums as fake "solution").
Other settings are problematic, because they don't do what users will expect, or they can - accidentally, or by design - make you loose your work or make Snap unresponsive.
There is also a philosophical design argument between old accomplished hackers like Brian, Ken, and some others, and me, about whether everything that you can do in the IDE "should" also be doable with blocks. But that argument is mostly relevant to curriculum designers and to people giving presentations at conferences. I can't think of any good reason, why a student's mid-term project would need to programmatically resize the stage, switch to and from presentation mode, flip between different palette categories, change the "long form input dialog" or "plain prototype labels" preferences or suddenly turn on keyboard editing and input sliders or force the viewer of a project into another design mode. On the contrary, if a project suddenly does these things it's probably not what the viewer of that projects wants. In my strong opinion the programmer of a project gets to control what happens onstage, but the user of the IDE owns control over the editor. Letting the project programmer take over the IDE is disrespectful towards others and detrimental to sharing your work with others.
TL;DR: The "Getters and Setters" library is outdated, and parts of it are controversial.
"Jens doesn't want anybody using any lib". On the contrary! I've spent most of last year designing and building an extension mechanism that lets us support many more libraries! Plus, I've personally written most of the existing libraries myself:
- Parallalization
- List Comprehension
- World Map
- Menus (new, currently in dev)
- Text Costumes
- Text to Speech
- Animation
- Pixels
- AudioComp
- Frequency Distribution Analysis
- Database (together with Jadga)
- Web services access (together with Bernat)
and contributed to most others. I've even re-written the current "Create Variables" library for the new extension system.
One problem with libraries in the past has been that we relied on them too much. For example, for many years the Higher-Order-Function blocks (MAP, KEEP, COMBINE) and the FOR loop used to be part of the "tools" library, and we had to tell every BJC student to always load that library first when working on any project. So in recent years we've moved to include more features to be just "always available" in Snap. This has lead to other issues, because the number of blocks has increased, so now we need to support microworlds that wish the hide them again