Google Blockly — a Language With a Difference
mikejuk writes "There are aspects of Google that increasingly don't make sense. First they dump App Inventor — a graphical language for Android apps — in a fit of spring cleaning and closures — and now they have launched another Scratch-like graphical language, Blockly. However Blockly is different. It works like Scratch or App inventor but it is written in JavaScript. This means it can be included in any web page or web app very easily. This, in turn, means that it can be used for education, getting people to learn to program, or as an easy-to-use script generator for the app. The FAQ gives the example of automating GMail filters and management. The additional difference is that Blockly can compile its programs to JavaScript, Dart or Python so you can take the script and develop it further. This is a really good idea. As long as Google doesn't throw this one out in a fit of reorganization and spring cleaning, it's a welcome new language."
I thought Minecraft had comprehensively solved the problem of creating a Turing-complete graphical programming language. It's redstone all the way down.
the preceding comment is my own and in no way reflects the opinion of the Joint Chiefs of Staff
There are things Google does that don't make sense, such as X and Y. Now they've done Z that makes sense of X and Y. I sure hope they don't do to Z what they did with X and Y!
When you bring a product to market, your users just don't expect it to suddenly go away and be replaced by something else a year down the road.
If you violate this expectation too many times, people will stop paying attention. For this reason, "maintenance mode" is one of the most overlooked -- yet most important -- parts of the product lifecycle.
Look Google, yeah, we get it: you like inventing stuff. Great. But here's the thing -- people want to use the products you've invented. We'd rather have you support your existing products than throw them away and spend a year or two developing a replacement. Yes, there's a cost to doing this. But if you care about the long term, you'll put in the extra effort.
There's no -1 for "I don't get it."
As long as Google doesn't throw this one out in a fit of reorganization and spring cleaning, it's a welcome new language.
If the sun doesn't come up in the morning, I can sleep all day!
#naabhaprzrag, #sverubfr-000, #agi-fcbafberq, negvpyr[pynff*=' negvpyr-ary-'] { qvfcynl: abar !vzcbegnag; }
We've developed this new language that... SQUIRREL! Oh, what was that language again. Screw it. Let's dump it and develop a purely functional... SQUIRREL!
May I gently suggest that another language is NOT needed, and that rationally built, compatible extensions and frameworks added to existing languages might, instead, be far, far more useful. C to C++ worked.
Please do not read this sig. Thank you.
Yet Another Google Language.
I think the working definition of "programming" has changed over time. Or at least, there has been the emergence of a new type of programming... "system programming." There is a lot of lower-level stuff that is now taken for granted.
I'm seeing no evidence this is a Google-backed project, at least in the links provided - it's a project from a guy who works at Google, that's all. So expecting Google to guarantee this exists in perpetuity is not particularly realistic. Realistically, you should have the same expectations you'd have on a project from, say, SourceForge.
Basically this looks like a Javascript re-envisioning of Apple's Automator. Might be a fun toy, but not much more than that.
#DeleteChrome
Says the elitist. The demo of a maze solver is a perfect example of teaching logic programming.
Do not look at laser with remaining good eye.
I've heard that before...
http://verydemotivational.files.wordpress.com/2011/10/demotivational-posters-th-grade.jpg
While I've never made time to go do the experiments, I've often wondered why someone hasn't done a Python IDE that provides a Scratch-like UI, but manipulates the Python AST directly. Seems like that should be doable.
Anyway, I believe Scratch-like interfaces are the future of programming languages. Much as when Backus discovered Noam Chomsky's formal grammars and compilers development as it was done in FORTRAN and COBOL was replaced by a grammar-driven parser in the development of Algol, and pretty much all languages since, eventually, the Scratch-ification of the IDE will become the "obvious" replacement for linear streams of ASCII character codes.
So how fluent exactly are you in machine language these days? Wouldn't want to rely on assembler or anything...
Analogies don't equal equalities, they are merely somewhat analogous.
Why is "mikejuk" allowed to just post his own opinion pieces as news?
Not at all. There are two sides to mathematics: the theoretical side, and the practical side. The theoretician would agree completely with what you say: if you can only use the calculator and don't know the underlying process, you aren't doing math.
The practical side disagrees. If you don't need to have an understanding of the underlying principles to do the problem, there is no point to learn it. The thing is, except for a fairly small group of people, programming is a strictly practical function. If you can accomplish what you need to, there is absolutely no point in having an understanding of the underlying process, just as people do not need to understand the chemistry of gasoline combustion or even engine design to drive a car.
"Programming" is the process of writing an automated process on a computer to solve a particular problem. How you do so, and how much you understand what you are doing, is absolutely irrelevant to that end. Granted, a deeper understanding is often necessary, but not always and not for everyone. In those cases, these kinds of languages are useful.
"None can love freedom heartily, but good men; the rest love not freedom, but license." --John Milton
I've taught quite a few courses ranging from traditional programming to tools such as Adobe Flash (which allows you to use any combination of the graphical tools and ActionScript, the latter being a full-fledged object-oriented programming language, with GC and all the other modern niceties). I've drawn boxes around variables to symbolize how they contain the values, I've given assignments to write pseudo-code, I've demonstrated the concept of algorithms by asking students to give me clear instructions on how to order a stack of documents alphabetically, when I only know how to access them by index and compare two documents... and I'm not sure if any of that has been worth the time.
I don't think I've ever run into a student, who would have been able to actually grasp the concept but would then have stumbled because the code part is difficult. There are people who can grasp the concepts and who then have no real trouble with the code and then there are people who don't really understand having one loop inside another, no matter whether you allow them to write down code, draw flowcharts or whatever.
Also, is there any evidence whatsoever that these "graphical" languages are easier for people to learn?
My kid is 5, and he spends hours writing little programs in Scratch. The click and drag aspect of the graphical language makes it much easier for him. If he had to rely on his nascent typing skills to write code, he'd be stuck in the frustration of Syntax Error Hell, as I was for years when I first started pounding out Basic code on the Apple II.
SpyDock: Scientific Python in a Docker container
If you can accomplish what you need to, there is absolutely no point in having an understanding of the underlying process
*shudders* I hate to actually have to watch as civilization collapses...
Your analogy doesn't quite work. Calculators solve math problems. Besides addition and subtraction, a calculator trivializes the work needed to arrive at the solution. It gives you the solution, without you needing to perform any of the in-between steps.
Programming is not a math problem. Computer science is applied mathematics, but even that is not a math problem. Computer science is more like fitting the right mathematics to the problem to arrive at a solution. But programming isn't computer science either.
Programming is far more abstract (as I mentioned above). It exists on a completely different level. The mathematical thinking necessary to solve math problems is needed to write programs, but being able to methodically solve problems is where the similarities end.
But I digress. The goal of this new "language" is to make programming easier from both production and consumption standpoints by making it friendlier to the eye. It does not solve your programming problems for you the way a calculator will solve math problems. You still have to write the algorithms yourself. It's just easier to figure out than say, figuring out the syntax of C or Perl.
"If a nation expects to be ignorant and free in a state of civilization, it expects what never was and never will be."
You're quibbling over symbology, while missing the important distinctions.
At the most trivial level, just about all programming is "graphical". Characters are symbols. A two-dimensional array of symbols is a graphic. You don't think of it as a graphic, but there it is, right there on your display.
If you've got a graphical language that lets you drag colorful boxes around, snap them together, and watch them twinkle contentedly as the program executes, how exactly is that different from using text? If it's "less rich" -- if there are constructs available in a "conventional language" that aren't available in the graphical language -- then we can discuss the graphical language's particular deficits, and perhaps correct them.
Model-Ts were "any color you like, as long as it's black". It was General Motors that started coloring things up and I think they also invented model years. The model year is a not so subtle suggestion that you are driving an "old" car even though it still runs fine.
As people "acquire" technology like search and programming languages, the people who made their scratch creating these things are left with nothing to do. You might think they'd move on to create something entirely different, or that they'd move into maintenance mode as you suggest. However, they have special expertise in creating not maintaining, and moreover they have special exerptise in creating particular kinds of things. The easiest thing for them to do is fool people into believing that thing A is obsolete so they can create thing B which is fundamentally the same. They maximize their profit that way. It's not so much malice as it is simple laziness. It's economics 101, really.
People want recurring revenue. It's the next best thing to economic rent. Or as I like to say, "everybody wants to be a subsidized farmer".
For all intensive purposes, "whom" is no longer a word. That begs the question, "who cares"?
I think that is the point. It takes a lot of motivation to say "I am going to learn assembly" and then to go buy a book and start coding in assembly. It takes a lot less motivation to learn javascript (or probably Blockly). It is a lot quicker and easier to get a program to DO SOMETHING in javascript than in assembly. So, it is easier for someone (like a kid) to pick up quickly and see if they enjoy it. Once they realize they enjoy it (usually after making their first program), they can delve into it deeper. Most people would probably give up on assembly before they even got "Hello World" printed out. And I assume that it is easier to get started in Blockly than in javascript. The advantage there, is that Blockly is built on javascript, so when someone wants to delve in deeper (or wants their program to do something that Blockly doesn't do) they can augment their already made program with javascript. More tools (languages) are better. It means that people can use the tool that works best for them, instead of having to use the one tool that some group of people decided is "the best way of doing it".
That is actually how civilization advances. People specialize. I drive to work every day. I use a car (a tool) that was created by people who have spent most of their career becoming better, through education and experience, at making that tool (the car) better. It makes me A LOT more efficient at my job because I can drive 20min each way instead of walking for 3 hours each way. I, on the other hand, make other tools (computer programs) that they can use in their everyday life to be more efficient. An example of this analogy is g-code. The car specialist can quickly mill out a part to test on a CNC machine without having to do it by hand and without worrying about how the processor interprets the code, or how the mechanical linkages of the mill work, or the energy characteristics of the milling motors. Because he is using a tool, not trying to understand the underlying process.
Its released under an Apache license. Anyone can run with it if they want to.
I got a version that looks like this
when (aProblem.comes(along)){
you.whip(it,must);
}
before(cream.sitsOut(tooLong)){
you.whip(it,must);
}
go(forward);
move(ahead);
try(detect(it));
if(it != too late) {
you.whip(it,good)
}
blog
...,but with the man walking backwards:
Thought for sure that was a goatse link :)
while [ 1 ]; do echo -n -e "\xe2\x95\xb$((($RANDOM&1)+1))"; done