Text Is Keeping Kids from Coding
medium.com
medium.com
The hard part about coding is the problems that aren't in the code. Doing research, setting up environments, understanding platforms, dealing with crashes, dealing with crappy tools, debugging, understanding other people's code. None of this is taught by isolated sandbox games like this. Sandbox games might teach some very useful analytical skills, but it's pretty far from coding.
The only thing you really need to get kids coding is to give them the tools needed to do interesting naughty things. Many of the programmers I know learned to code at an early age by hacking games to cheat against their friends. Reading text was never, ever a problem, but the disillusionment of finding out that coding doesn't involve pretty foolproof user interfaces might have been.
I think browser-based language introductions are great. They remove a huge obstacle and get you into the language right away.
How many people do you know who were exposed to these kinds of games as a child, and are now old enough to plausibly be great programmers?
Anyway, the only kid I know from that class that also ended up a programmer (at Google) spent it getting in trouble for messing with the school network by editing Windows config files.
I don't think there has been enough time to say if any "great programmers" (ugh, that's a horrible horrible term) have learned from graphical tools. MIT's Scratch came out (just) 15 years ago, and was quite primitive. Many career developers really start programming at around age 10, so even if they started on scratch, they would be just 25 now. Only beginning their journey to becoming "great". There just hasn't been enough time to say if this is an effective introductory tool or not.
Spent hours upon hours with that game. The advanced logic required in the harder levels wasn't trivial.
One thing that I remember is that with longer circuits you had to factor in propogation and lag times which basically forced you to refactor down to simpler solutions.
To me the game felt more real or organic than any modern equivalents, although I haven't tried them all.
https://archive.org/details/Rockys_Boots_1982_Learning_Compa...
https://en.wikipedia.org/wiki/Robot_Odyssey
There used to be a fan-made online version, done in Java, called "DroidQuest" - but apparently it is only available via github now:
As for
>The hard part about coding is the problems that aren't in the code
Yes, while I do agree, that's only true once you're already comfortable with coding. I know many people who can set up Eclipse, have no idea that Ctrl+Space is the autocomplete function, and who can write and compile simple programs, but given a slightly more difficult task involving some relatively simple (for us, now) algorithm, would throw their hands up in the air and say that they "don't know how to tell the computer how to do that" (approx. quote).
Though anecdotal, it might be of interest: my youngest cousin started learning how to code through Scratch and Mindstorm (all of which are graphical programming languages) and has had no problem picking up 'true coding' in the past few years, writing simple programs in Python. She's 8 now, I believe. Of course, correlation, causation, it's really up in the air to be honest, but I do think the graphical nature of all of this might have opened her eyes to a much bigger world than the cryptic matrix-like text which fills our screens---which, personally, is how I imagine many people view programming.
But it's also coupled with a sort of… game engine/scene graph kind of thing that your code affects and which you can interact with visually, which probably makes your code seem more tangible?
E.g. in Scratch, as you mentioned, all blocks have text but the flow of the program is given in a graphical way, and can also be dictated in a graphical way. Additionally, the blocks themselves, while having text, also encode their purpose graphically (e.g. start, event-driven blocks, as distinguished from instructions, etc).
Also as you mentioned, there's something nice about these blocks in that the system is completely discoverable and has the flexibility of combining statements, etc., without the exponentially large space one would have to think about if they attempted to discover the language by typing out statements using the keyboard.
In other words, there is much-reduced complexity in graphical languages, along with the fact that programming becomes much less a question of remembering what a block does as opposed to finding the block which does what you want. A much easier problem for those unfamiliar with a language, which also allows them to focus on the problem as opposed to the specifics of learning the syntax of a language.
S.E.U.C.K. [1] was published in 1987. RPGMaker [2] was first published in 1992 and is still going.
[1] https://en.wikipedia.org/wiki/Shoot-%27Em-Up_Construction_Ki...
But, anyways, my point was less that they didn't exist, but rather than one had to know this was a community and actively seek it out, whereas now an interested parent can go look up "learn to program" in the app store and have plenty of apps to install and have their kids run on an iPhone or iPad ready to go, instead of having to go through several websites along with setting up applications on their computer, etc., to get everything ready for their kids' use. Perhaps more succinctly, they have to have no prior knowledge of programming or of the existence of this community in order to have their kids be a part of it.
Of course, before we could still Google stuff and see that it exists, but it seems to have more of an activation energy than a ready-to-install app from the app store; I should also note that this all was also pre-Code.org push, too. Compared to so many of the people I know with kids in elementary and middle school, many of whom are already starting to learn how to program, I can't remember this being the case at all with my year. All of this comes with the big warning label of "anecdotal evidence," but I'd love to know if there are any numbers on this!
Perhaps it was just a British thing. After that it was some BASIC on spectrums, some BASIC on Acorn Archimedes, then some random OO language on Amiga that I've never really been able to track down what it was called.
And I wasn't even that keen on programming, I was just exposed enough and wanted to build better games than my friends at lunch or on our graphical calculators. I remember running out of memory on my graphing calculator trying to get a working version of poker (which I now realize was wildly more ambitious than the versions of blackjack we all made).
A lot of programmers of my age will remember the turtle with fondness.
I guess all of those were incredibly simple to setup to start programming (for the spectrum it would go straight to the command line), but then again these days so's pressing F12 on a web browser to get a working command line.
Fun times, I could sit there for hours trying to figure out how to build shapes like pyramids: http://www.wschellenberger.de/informatik/inf_robotkarol/inf_...
Maybe Amiga E? http://strlen.com/amiga-e/
I know some musicians and I can tell that actually playing the instrument is not the hardest part. That does not mean a toy piano is not a good present to get a 5 years old started. And if painting the keys in colors instead of black and white (icons instead of text) makes the kids more willing to play it, I think it is something very interesting (more for toy piano manufacturers than musicians though).
As an example, my daughter had no real interest in doing anything with a computer until we showed her she could move Moana's raft around with some Scratch/Blockly code in a Disney Hour of Code game. Therefore, I think these games are absolutely worthwhile. Let kids start learning the "hard parts" of programming after we've got them hooked!
Trying to rekindle this was one of the aims of the Raspberry Pi but even with that, there isn't anything quite like the accessibility that the microcomputers of old had. Except maybe web development but in my personal opinion HTML+CSS+JS teaches bad programming habits (unless you're particularly OCD and disciplined).
So I'm all for games like that in the article. In fact in some ways, it reminds me a lot of LOGO (another good gateway drug).
The only real negative to me is that Lua, like most any modern language (i.e. ones that regularly use indentation), doesn't seem particularly well-suited to being edited in a very low resolution window. But it's still the closest I've seen to something that recaptures that "immediate" magic of ROM BASIC.
I downloaded GameSalad one weekend. My 6-year-old son and I ran through the tutorial which took about an hour. Part way through he got distracted. He spent about 20 minutes changing movement speed properties, object colors, & sizes. I was happy to see him get engaged and just start experimenting. While he did not learn how to code, the seed was planted that creating mobile games is something within his reach.
- Using logo to draw stuff, and watching my brother using it to draw a recursive tree and copying him
- Copying[1] games out of old magazines to play them, including torturous sessions with my brother where one of us would read out the assembler array[2] and the other would type it in.
Now, I might not be great, but I'm definitely Good Enough™, and I would count those two experiences as protozoic versions of this kind of educational coding software: make a picture do something, plus video games (because kids like video games).
[1] Yes, I was born for stack overflow
[2] This was an Amstrad c64, and some of the game was BASIC, but for the clever stuff they'd encode a giant array of machine code and just have you type it in. This got me interested in assembler, and I learn (some) while I was there.
You'd sit there for hours, typing page-after-mind-numbing-page of DATA statements - numbers and commas would blur together.
Then - once you had it all typed in (largest one I typed in had to have been around 16K of text - took up around 10 or so pages in the magazine) - you were smart to save it to disk or tape (actually, the smart thing was to save it incrementally as you worked, and break up the task over a few sessions).
If you didn't and you ran it and it had a bug - CRASH - computer would give you a visual (sometimes audio) "lightshow" if you were lucky, but usually, the computer would just hang or reboot - and all the code would be lost.
The fun was just beginning!
Now, if you still had the code saved - you could load it back up, and start the arduous process of comparing the code to what the magazine printed. You'd hope like hell that the magazine wasn't misprinted, or hadn't left a section out, or that the printing wasn't illegible (and you confused things - seriously, wasn't that one of the charms of those days - the listings were printed off a cheap 9-pin dot matrix printer then lithographed for printing - causing all sorts of artifacts to confuse the typist?)...
Some magazines printed next to each line a checksum, which you could run a program to type the lines in and use to compare with the number (it would calculate it on the fly) - but as a kid, I was too stupid to know what it was for, and it seemed pointless.
I probably should've read the fine print on that one, but I probably couldn't - because it was too schmeared by the cheap printing...
TL;DR - MLX was a BASIC app for the C64 that allowed the key entry of hex code with checksums and live validation.
Commodore PET 3016 - PET BASIC
Acorn System 1 - 6502 machine code
BBC Micro (pre-prod unit) - BBC BASIC
Later at home: Commodore 64 - BASIC and machine code
If you haven't and are curious - you should look into what LOGO can really do. It's actually quite a complex language, far beyond just simple "turtle graphics". Unfortunately, most of the rest of LOGO was never taught to many people, and so all we learned was the graphics part.
But LOGO itself is surprisingly complex, and has more than a passing nod to LISP in what it can do.
I recall learning LOGO as a kid - but wrote it off as a "toy language" even then, until one of the magazines I got at the time (which I typed in BASIC games and other things from) had a game of Monopoly coded entirely in a version of LOGO that computer could run (I never did type it in, because I didn't have the language - and it was a fairly expensive piece of software from what I recall). All the graphics, logic, and sound, plus i/o, scoring, disk handling, etc - were all done in LOGO. It impressed me then; still does, in fact.
Introducing basic programming visually then slowly transitioning into text should allow more learners to get over that hump and imagine themselves doing fun & interesting things. (Some kids will jump directly to more difficult tasks and eschew non-text immediately).
I don't think we have nearly enough evidence to say whether any of these kids will be "great. Not to be rude but your anecdotes aren't data either.
I have experimented with building an Android app [1] for graphical programming, but except for some more-or-less funny exercises slightly inspired by Rocky's boot, it feels like graphical programming might be too cumbersome in terms of input effort per instruction. Of course this might be because "my" UI is crappy, but I don't really have good ideas how to make it an order of magnitude better...
So I have started switching to text-based [2], will see how that goes..
1) https://github.com/stefanhaustein/flowgrid
2) https://www.youtube.com/watch?v=zY4TIW3jDM0&list=PLhEJPa6dXG...
Thinking about my own growing-up, while it's true that at school I've had classes about PC Logo, Quick Pascal/Turbo Pascal (and I've had fun with those and enjoyed them, but they were no more than class assignments to me), what really got me started to build stuff in the real world (as side projects back in middle and high school) was essentially the web. Realizing that I could open up Notepad in Windows, with no extra tools, write some HTML in there (even some simple Javascript with alert boxes!), I could then double click the .html file to open it in Internet Explorer and see stuff I've written in code to run, was what really got me into taking coding seriously. Better yet, in the late 90s, HTML code in web sites were not complex, which brings the possibility of just viewing source on any HTML page and understanding what the HTML tags or JS code do and figuring out how to replicate some functionality on your own web page.
I have a theory that once you put someone in front of a system where you can immediately start tweaking attributes, properties and code, press a button to run it to see its effect, most people would be interested enough to keep going. It's how you get to that point of having that system in front of you. In most cases this isn't simple. Even in the case of PC Logo, having to get through installation and running the program and figuring out the first things you can do, can be obstacles. Maybe web pages and simple HTML are a good place to start?
My start in "real programming" was after I received my TRS-80 Color Computer "for Christmas" (my parents actually purchased it much earlier for me, with my understanding that I wouldn't be getting much for actual Christmas - not a problem, I was thrilled).
Plug it in, turn it on, and bam - there you were at a flashing prompt, begging you to type in some BASIC code - which, there was a "tutorial manual" helpfully provided to teach yourself with.
Today, there isn't much like it any more to do the same. The closest would be the various online REPL systems for various languages; these fix the issue of setting up an environment, but very few (there are some) are designed to teach the beginner (to the language, or in general) programming.
I've since applied this logic fairly universally and I'm going to apply it here: SpriteBox does not exist to teach kids to be great coders, it exists to sell copies of SpriteBox.
The challenge of text undoubtedly is a blocker to the sales of SpriteBox.
I do not believe that it is a blocker to a kid becoming a great coder.
Coding absolutely requires a high level of comfort with abstraction. It requires the ability to mentally model abstractions, maintain relationships between abstractions, and make a (sorta) concrete reality of those abstractions.
Coders must be able to make intuitive mental leaps based on disparate and distributed data. Often the solutions that coders come up with are based on little bits and pieces of the puzzle based on SO answers, documentation, blog posts, example code found on github, etc. The solutions to tough problems are rarely found in a single neat all-explaining resource.
So... if a kid is having trouble with text I would candidly posit that the kid may not have the ability to deal with abstraction that coding requires. Not a problem for the industry as there are already enough coders who have this issue, but it creates a sales problem for SpriteBox.
EDIT: typo, clarity
There's no way this won't be confusing.
What makes your argument fall flat is, we already had LightBot: it teaches kids to program with icons only. If text was a blocker for SpriteBox, why would we pursue it at all?
You end by saying that kids who fear text are not well suited for coding. That's like saying kids who fear symbols are not well suited to math. This kind of sentiment is what drives people to believe that they should give up things that they may excel at given enough time and interest. SpriteBox, like many coding apps, is about sparking that interest.
As for text, the real reason we tackle that is because there's a real gap for people between icons and textual programming: some people have this disconnect between what they perceive coding is. Is visual coding "real"? Are formulas in excel "coding"? These are answers programmers can answer, but not people unfamiliar with code.
You do realize SpriteBox is targeting kids in lower elementary school?
Regardless, you didn't really identify any flaws in the primary thesis: decoupling the process of learning how to write error-free syntax (with raw text) from the more important development of an actual understanding of the underlying fundamental concepts may provide better results in many cases, perhaps especially so with younger kids.
I don't know programming was supposed to be hard. I didn't know some adults did it as a job. I just knew that if I learned what was in the books, I could do stuff. So I started reading, and I never ran into anything that was beyond my grasp. I do recall reading one part that said a person who did not draw a flowchart before writing a program was either a genius or a fool and resolved to be a genius (hey I was 9). Not even refusing to create flowcharts prevented me.
I feel in love the day I wrote: 10 PRINT "I LOVE YOU MOM" 20 GOTO 10 And filled the screen then called my mom into the room to look at it.
Text is not keeping kids from coding. Adults are. Adults making kids think it's difficult, adults standing in the way and shuttering them into unnecessarily dumbed down environments, standing over their shoulder and making sure they don't do anything inappropriate, etc. But more than anything, adults filling kids free time and never giving them the opportunity to just sit down, have a quiet few hours, and figure things out.
The point is text looks too complex for younger kids. 5 year old won't sit down for a few hours and figure out things. He will just get bored.
But probably they just read somewhere that programming is the future.
Text IS scary, because it's nontrivial. There's a reason schools start with the ABCs and spend the first four years of school teaching kids to read. And even then we don't stop there: middle school focuses on grammar, and high school focuses on creating long-form content.
Programming is similar: it's non trivial to stand up a knowledge base to be a programmer.
I think the big difference is that most programming classes start in high school or college, well after we've mastered text in general.
But that doesn't mean it can't be done. The key is to start small: don't expect novel-sized programs, expect words and sentences, and make those words and sentences FUN.
For example, my son has had a TON of fun with the micro:bit [1], and it's scratch based system, and Swift playgrounds. [1]
A great preparation they should learn some math or ideally be having fun with their friends, running around outside or perhaps art or something creative.
It's a lot more difficult to learn that later in life than programming, in my opinion as someone who didn't start coding until he was in his early 20's but still struggles with relationships because of a unrelated, intense academic focus as a child.
Not sure why there is a dichotomy between this and playing a game on phone for 30 minutes to learn coding.
move(.up)
What does the `.` do? Why can't it just be: move(up)
What purpose do the parentheses have? Are they essential or optional?Why not:
move up
Ok, you wanted it to be like a "real" language, I guess? Look at Logo and Basic. They largely eschewed punctuation (not entirely) for text and newlines and meaningful names: pen down
forward 100
right 90
forward 50
pen up> move(up)
One of the latter pictures shows "swift syntax", so I expect that's that: .up is a shortcut for a variant in a sum type, as it is in Swift.
You can move towards that syntax, but you can hardly start there.
EDIT:
Actually, I'm going to make a stronger statement. You shouldn't make an educational video game, and particularly an educational programming game, until you've read Mindstorms and learned what Papert and others studied last century.
So yes, we could have gone the "move up" route. In fact, we did at one point! Even then though, icons were far and away less intimidating.
The problem is, real programming languages don't eschew punctuation, Logo included (once you include loops and such). AND our primary goal was to get kids familiar with reading real looking code (in this case, Swift).
The last option would be to start with "move up"s, and then introduce punctuation later... but then players would get confused as to why punctuation, unneeded before, suddenly becomes required?
Finding the middle ground of jumping from icons to textual code (with punctuation) resolved all of these issues best.
And yes, we've read Mindstorms ;)
Pictographs are useful, and effective. I won't deny that. But kids can, and have, learned to code with textual languages when those languages were more effectively chosen and developed for the task of teaching kids. It's unreasonable to make such a strong claim.
We could make the same claim about math and kids (Notation is Keeping Kids from Mathing!), and it would be superficially true, if you started kids off with a notation like geometric algebra (bi-vectors, tri-vectors, multi-vectors, oh my!), instead of arithmetic.
Yes there are kids that had no problem with text or without text. Of course kids can and have learned to code with textual languages. Same with math.
The main idea here is that you can get an even larger population of kids doing math and coding, and engaging, by adopting pictographs first. As demonstrated in DragonBox. As seen in our own testing.
- Numbers are keeping kids from learning math. - Text is keeping kids from reading. - Too many words are keeping kids from listening to lectures.
I don't understand why people find it difficult to just teach a kid how to do something rather than wait for some miracle solution.
A couple of years later, and I was back teaching ICT and the curriculum was being axed, in favour of Computer Science, so I decided to teach myself a little Python, and ended up being a secondary CS teacher in a fairly elite school.
What strikes me now, is at no point did I make a connection between the graphical language I was using back then and the text based languages I would go on to use later. In hindsight it seems obvious that if I enjoyed controlling pixels on a screen with blocks, I would probably enjoy doing it with text. It's anecdotal, but it has turned out to be true.
In my professional capacity as an educator, I have seen how engaged young students can be with graphical languages such as Scratch, and how those same students eventually want the power and control of more powerful languages. These types of games don't teach everyone how to code, but they do awaken a desire to control and manipulate computers, in people who might otherwise never have realised this ambition.
For people who say that the hard part of programming is "not in the text", watch a seven year old try to control a turtle in Scratch and then watch them try to do the same thing in Python. Typing speed is a major factor, as is understanding the importance of case and white space. Not to mention the symbol nightmare of commas, full stops, colons, semi-colons, single and double quotes, hyphens, underscores, equals and double-equals, square braces, curly braces, angle braces, and parenthesis.
Last HN discussion: https://news.ycombinator.com/item?id=14612680
That's because real programming is complicated.
Software systems, with billions or even trillions of switch points, are the most complex things humans have ever built, by far.
We have tried mightily, for many, many decades, to make programming simpler and more accessible. The problem: instructing a computer precisely and unambiguously what to do means you have to precisely and unambiguously specify...what to do! There's no getting around it, just like there's no way (yet) to write a novel without choosing words and pushing letter keys.
The graphic approaches quickly get tedious beyond toy examples. Graphs are fine for telling your Lego robot what to do, but with the Web and app store overflowing with cool apps, the bar for grabbing and keeping a would-be programmer's attention is now quite high.
My bet: non-programmers will "program" at scale when where's a fundamentally new computing model. Machine learning & deep learning are the most promising for this, I think: instead of telling the machine precisely what to do (and how), you show examples of the behavior you want and give feedback when it's wrong.
The things I have seen created in LabVIEW would absolutely astound you - not just in their complexity, but in the fact that they work at all (for various values of "work"), and that someone somewhere out there is able to maintain them without going insane.
/then again, maybe there are more insane LabVIEW developers than I know...
I don't see much difference teaching them programming with a real programming language. They have to be forced to embrace it first.
For i = 1 to 10
Or
For (i = 1; i <= 10; i++)
Once you understand how things work, translating that knowledge to another language and adding on concepts is relatively easy.
But I still remember the BASIC syntax you demonstrate above, 30+ years after I last programmed BASIC.
Tip: they're in the same order they're used: comparison is always run at the beginning of each iteration, and increment is always done at the end.
for(init; cond; last) ...
init; while(cond) { ... ; last;}
But I also dislike it and love "for ... in" constructs.Then again I've found an even more reliably workaround by not writing much C these days.
I was also strangely afraid of the word INTEGER, which I read as INTER-EGER. "Integer" has no meaning to a kid, it's just called a number (as opposed to a dot-number or a fraction).
On the other hand, I never had problems with the fact that is was using text.
[1]: http://www.vintagecomputing.com/index.php/archives/324/324
Then repeated at post-grad chemistry when first asking a question out loud about Orger Electrons (Auger - more like Aubergine, prior to lectures introducing them) - prof was non-plussed... Reading and talking huh ;-)
move up
move left
move up
move left
set
I mean, after all, that's exactly the "syntax" of the replacement icons!Yes, it will probably make your parser more difficult. Yes, for this use case, it's probably worth it. I'm guessing that a game targeted to 5-year-olds won't have such complex nested logic that you can't write a simple DSL like the above.
http://www.calormen.com/jslogo/
Logo was explicitly designed to teach programming, and is pretty much Lisp with a different (and not that different) syntax.
You could probably push Logo even further along the "natural language" axis, but I think that's too brittle: It's too easy to come up with constructions which look like they should work, but fail in a completely opaque fashion. A better plan would be to improve the tooling, to give kids editors which know the language and can provide templates to prevent people from entering invalid syntax. Brad Templeton's ALICE Pascal was an example of this syntax-directed editing.
http://www.atarimagazines.com/v6n2/Alice.html
http://www.templetons.com/brad/alice.html
These days, we could wire in an extensive help system, complete with discussion fora and examples, to specific syntactic constructs and function calls. You know, like how Programming Professionals use StackOverflow.
I used to be a mathematics professor. At that time I found there were a certain number of students who could not learn mathematics. I then was charged with the job of making it easy for businessmen to use our computers. I found it was not a question of whether they could learn mathematics or not, but whether they would. […] They said, ‘Throw those symbols out — I do not know what they mean, I have not time to learn symbols.’ I suggest a reply to those who would like data processing people to use mathematical symbols that they make them first attempt to teach those symbols to vice-presidents or a colonel or admiral. I assure you that I tried it. — Grace Hopper, explaining COBOL (and by extension many modern style guides).
My reaction to maths is that the biggest challenge the symbols poses is that I need to remember each one of them and what to call them, whereas with text keyboards I can at least make an educated guess at pronunciation that other people will understand.
This, to me, is a massive barrier with maths. If I can't read it out without learning how to mentally translate a symbol to a word, it's a hassle. I have too many things I can spend my time on to deal with that.
The choice facing people is one of doing something we find unnecessarily hard and of uncertain payoff vs. doing something much easier with a more certain payoff (because we've got past experience with it).
How is your mandarin? Sanskrit? Klingon?
Of course they start learning concepts in preschool, but it's not an obligation to put your kids in preschool (most parents do, but you don't have to)
So isn't it a problem with text, reading, words... than a specific code problem ?
As a parent, I'm going to teach coding to my kids, starting next year, they'll be 8 yo. I'll start with scratch then probably some python. And I'm lucky my kids are both fluent readers. But I'll still start with scratch.
Using icons makes a lot more sense, as they are immediately recognizable pictures that come with the expectation of no structure to learn, and it looks like from the article they just simply put one icon after another in a list.
So I convert the text to pdf and add some flavor, pictures etc. Then people read it.
edit: by "large" I mean, by my standards, ridiculously small, like 300 to 3000 words top, but people are scared by simple text.
I mean, how does move(.up) look like plain English? What's wrong with "move up"? Are we really so blind as to not realise that any normal person looking at that is going to get the strong impression they don't know what the hell is going on? Hell, I don't know what's going on. What's with the period? What happens if I don't type it? Fragile and incidentally complex.
Now to be fair there are intrinsic differences between typing in a blank text box and dragging and dropping icons. You can type anything in a text box, while icons present a limited selection. This hurts discoverability, which is why the author saw better results when they gradually swapped out the icons for text. Dragging and dropping is an atomic transaction which can be cancelled with good feedback if the user attempts something invalid; this is not quite so easy with typing, because valid code must be reached through invalid states on a letter-by-letter basis.
But proper coding in a Turing-complete sense (which none of the games seem to offer) involves defining your own symbols and wrestling with abstract notions like iteration that lend themselves increasingly badly to representation in sprite form. Scratch is a good example of a system that attempts to use the best of both worlds - its building blocks are text-based, but selectable from a limited number, atomically placed, and statically checked to practically preclude syntax errors. Text itself isn't intrinsically bad.
Lastly - it's a shame the industry moved on from BASIC. Programming was never more accessible than when the average personal computer booted to a REPL of a standardized, easy-to-use language.
The problem as I see it is that parents across the country are trying to prepare their children for a job landscape which may change radically between now and when they graduate high school by getting them while they're young and attempting to introduce them to coding as early as 3. Not programming, not learning how to solve problems with an algorithmic mindset. Coding. As in getting them comfortable with slinging around functions that build a website using magic.
Really, we should be teaching them to do the thing that we're trying to do with programming languages in the first place, which is solve problems with an algorithmic mindset. I think SpriteBox gets it, kinda, where it falls short is that in the end they're still hung up by the whole "let's teach kids how to code" trap and gradually replace the icons with text and do this weird thing where icons are indented because text-based code is indented. In the end kids know how these languages work, and how to do simple things with them, but they've learned all of this within the context of what looks like a platforming game. Extending this to the act of creating something is different.
If you really want to teach kids how to program, create an environment that teaches them how to build and create something cool using a few simple and easy to understand rules. Allow them to experiment with the rules to see what happens. Make it so that the upper threshold for how you can bend the rules, combine rules, etc, is to all concerned essentially non-existent. Enable and reward creativity, which is something a lot of "coding" games and toys and whatever simply don't do. They enable and reward you to help a cute robot walk in a damn line.
AutoIt lets you control the mouse, simulate keyboard input and so on. It was pretty fun as a kid to make a "can't press this button" game and watch others try to beat it. There wer also bindings to various Windows APIs, which I used to build GUI solvers for my math homework.
Ren'Py is a framework for creating visual novels, and I made one that mocked the vocabulary tests by having each choice be a pun on bastardized French or a running gag in my French class. I think pretty much everyone in that class played it at some point.
My point being, there are tools out there with a special-purpose scripting language used by content creators who might themselves not be expert programmers, and I if you let kids play around with that they will probably build something they find fun without anyone telling them to do so.
Currently, I'm working on a web-based game development language. Essentially, I would like to create a simple programming language, like BASIC, Lua, or others, and provide built-in libraries for 2D game making.
Much of my formative programming experience was using using Blitz Basic, a game language. As a teenager, I was able to use it to create games easily.
With all of the visual and graphical game development kits available today, I feel that it has become more difficult to learn programming in the way that I did. Providing a programming-based offering is the only solution, I think.
When constructing functions and loops to coordinate and move or draw sprites, I think it becomes much easier to think about the logic of a computer program and how that knowledge can be practical.
Here is the Duck source code: https://github.com/gregtour/duck-lang/tree/duck2 The documentation reflects the original version, but duck2.cfg shows the new grammar and the /js folder shows the current progress.
I have a mockup of the interface here as well: http://brainplex.net/gamepad/
One big issue is finding time.
What I would concede is that we had fun books to learn from, like these ones for the Atari http://www.atariarchives.org/.
The transition path between them is indeed what you described.
It's a very cool initiative that helps make basic programming more accessible, and I value it as a way to show kids "hey, programming exists and can be fun!"
But I've also had the misfortune of running events where kids use Scratch. These were 7th-9th graders who self-selected in, so up to a decade older than the target audience in this article. The results aren't exactly pretty, and they don't make me optimistic about giving Scratch to 5 year olds.
Scratch seems to have two major problems: awkward control flow, and a gridless environment.
- The first comes through as a large fraction of programs having broken or absurd loop and branch logic - often with a clear plan in mind, but terrible results. The difficulty of establishing hidden state encourages all sorts of ugly practices like handling a health bar by nesting the same code three times in conditionals to handle taking damage.
- The second is that where SpriteBox uses grids to establish clear coordinate systems and touching/overlapping/separate states, Scratch uses a continuous field. It creates awkward and unintuitive collision results, adds a layer of unfriendly abstraction (what does "forward 200" actually mean?), and makes drag-and-drop initialization a touchy and miserable experience, even for adults.
Overall, I think Scratch succeeds at reducing text, but fails to make abstraction and control feel approachable. It also introduces lots of novel headaches not present even in 'real' programming.
> Things we love about blocks
> 1. Blocks lower the barrier for entry
> 2. Less frustration
> 3. Useful hints
> 4. Visual reinforcement of structure
> Things we don't love about blocks
> 1. Penalizes fast typers
> 2. Higher demand on short-term memory
> 3. Small space of visual cues
> 4. Poor Accessibility
They go into detail on each of these.Edit: paper on pre-adolescent and adolescent brain development, especially as it relates to cause and effect and abstract reasoning: http://www.sciencedirect.com/science/article/pii/S1878929314...
Not sure why these people don't believe that Boy Scouts and Girl Scouts can't tell the weather.
I like their approach to transitioning from an icon/diagram approach to a text approach. It highlights that text and iconic/diagram representations don't have to be a false dichotomy. These two ideas can complement each other if done carefully.
If there's one thing I'd love for every person who aspires to create a visual development environment is this: Visual representations should be used to enhance and project program structure, not to replace text altogether. Much in the same way that the CoffeeScript --> JavaScript translation page illuminates the language, I believe we should be projecting our text languages into various clear visual representations.
Having been made to suffer through a few Enterprise Integration Tools (BizTalk, MuleSoft) that take a diagram first approach, I concluded they would be much better served if they took a text-first DSL approach that is isomorphic with a diagram representation. By binding the two at the hip, working with the diagram based UI would visually teach the user's understanding of the DSL syntax. In the other direction, playing with the text interface could instantly reveal how the parser is interpreting the intent of the program.
Again, I'd love to see more people take perspectives past the usual false dichotomies and start researching how different approaches can complement each other rather than compete for attention and mindshare.
Another is that we no longer have the text-based interface in things that we use. In the classic computing era, text games like "Zork" were popular, and even DOS and *nix text shells were the norm. Even adventure games like Sierra Online games had graphic view but had text interface. Perhaps text-based user interface could lessen the anxiety of text in coding, but I think that we no longer value text UI.
Instead, everything is GUI now, with touch-interface on iOS/Android in the mix - and perhaps someday, we no longer will have mouse/keyboard, but rather just verbal and physical interface. By then, we can program things using complex language such as "I'd like to move the yellow box sprite on top of the tree to the left about 50 pixels", then programming code becomes more approachable to average human. We are already on our way, with Alexa and Siri.
Ironically, a lot of business software development works like this (not that it should, just that it does). You have a bunch of BAs who churn out flow charts and hand them over in the form of requirements to developers who implement that logic via syntax.
The algebra comparison is telling; "a study was done that showed that 92.9% of kids using the app achieved mastery of basic algebra after 1.5 hours of play" - where's the similar comparison?
And, how do we measure 'mastery'? Because the mathematical lexicon requires numbers, not pictures, and coding non-trivial things are done with languages that are text, not pictures, the way we test that is also important.
Note that fundamentally I agree with their conclusion that, pursuant to being marketable, they HAVE to use pictures, because people's impressions matter. But in terms of actual benefit, I'd want to know more details.
It may be impossible to say right now whether this change helps kids get better at programming faster, but presumably, more kids will play a game that they feel is more approachable, similar to how the playtesters responded.
Text is an additional layer of abstraction probably involving language and communication systems outside the human visual system. The text is a label or abstraction for the visually represented concepts which must be encountered and learned first.
There is a consistent pattern in learning mathematics and other technical areas that most students learn better and faster with pictures and concrete examples. Abstraction comes later.
This idea is important, but trivially simple to an experienced programmer so easily dismissed. It is not that obvious to a beginner tho.
How do they square that with the presence of parentheses and the use of a syntactically significant period?
It seems strange they didn’t start with something that looked more like Logo before concluding the text was inherently off-putting.
I’m not sure their conclusion was wrong — but I’m confused about the point where they gave up with text.
Also - the final syntax at the end is ugly as hell. Is that the best they can do?
Finally - not even a hat-tip to Scratch/Blockly? If they aren't aware of it then it's very odd. If they are and decided not to mention it - I find that equally odd.
what we lack in the computing world are games they can make by following a book, eventually they'll want to diverge from what's in the book and make their own stuff, the problem is no games are too complex and a simple game might not hold their attention.
Something like Mario Maker is where they probably should start but the extra options to change variables and access scripts later on.
When you see Kay harping on about the dismal state of affairs today, I think it's that he sees this constant pedantic bickering about static vs dynamic typing and all the rest as meddling around in the complexity of things that should be irrelevant.
To the point of the original post, it's also worth noting that Smalltalks were not just text environments, and that while yes much of the code was written in text, these kids were not writing text files that they then compiled/interpreted using their PDP Terminal emulation programs. They were doing everything in the live environment itself.
Considering the existence of things like Smalltalk and Hypercard, whenever some uber programming expert tells you this-or-that reason we cannot have such systems in wide use today, it's akin to saying: "See all this great stuff we used to have? We can't have it anymore"
Something I've noticed all the years, teaching is HARD. Well, teaching effectively and efficiently is.
Sometimes I wonder if being limited to text adventures when I was really young was a benefit. If I typed something that the computer didn't understand, it told me so. It forced me to have patience and to learn to look up the right way to ask for something.
But it is complex. Anything beyond the most basic examples delve into the concepts of calculus.
If we don't expect most children to comprehend advanced mathematics until they're teenagers, why would we expect most of them to grasp anything but the most basic conditional logic until then.
That's not to say that we shouldn't attempt to teach children coding at a young age, but the idea that anyone but a few would understand genuine coding at the same developmental period where they're learning to spell "dog" and to add 2+2 is a bit ridiculous.
I wonder if the authors consulted a child psychologist before beginning their endeavor.
Huh? My codebases at work have never involved calculus. Not all programming proceeds along the lines of Project Euler when getting more complex.
Kids are in their teens before we even have them solving x=y algebra.
To me, equations and relations between variables are not calculus, just algebra. Only when you start studying the infinitesimals of change does it start to count as calculus. I don't have any derivatives or integrals in my programs, and very few do.
Kids who want to learn how to code should just do it with regular tooling. You don't need any special approach.
I learned it at 7-8.
So yeah, I'd say kids start to learn to read at 5 or earlier.
I remembered that in the first grade of elementary school, when I was 6 years old, that we used these workbooks with tear out pages to do these "math" problems. Simple addition and subtraction, IIRC.
But these workbooks didn't use numbers and symbols; instead quantities were shown by fixed objects (like coins, or other images), symbols were replaced by something else, but I don't recall exactly what (maybe simple words - so not completely "text free").
On a different note - a few years ago my wife asked me to look over a friend's child's homework, to try to figure out how to do the problems, and what the answers were, because her child was having problems doing the homework, and neither she nor my wife could figure it out (neither are very math fluent).
I looked at it - and at first it was "gibberish". There were some "standard" symbols for multiplication and addition, subtraction and the like. But everything else was symbols.
Like, there'd be a problem that visually was something like "circle + ? = triangle" or "2 square + 3 triangle = ?" (I may be mis-remembering things, too). It was very confusing, but fortunately the worksheet (which was all I had) had a couple of "example problems" and their solutions included. I studied things for a bit, then it dawned on me:
It was algebra - but it was being taught with symbols instead of numbers, and the solution (and how to arrive at it) was pretty simple to understand, once this was realized. In short, numbers are symbols (hey, I'm not a big math whiz myself - I know just enough to blow my foot off) - so it made sense that swapping these out wasn't that big of a deal, provided you had some base knowledge about the rules (which were provided by the examples).
I was able to figure the problems out, then write down how things worked for her (and her child) to read and understand. AFAIK, the homework was completed and turned in with correct answers.
At the time, her child was probably in the 4th or 5th grade, and it was interesting to me that the school was using such a system to teach algebra at an earlier age than what I recall having learned it (my first real algebra class wasn't until 7th grade, though in elementary school in 5th and 6th grades we had been doing some of the basics beforehand - I guess for "prep" for the coming years).
So, in the case of coding, I can see how this idea of starting with "abstract icons" (somewhat) to represent certain coding statements and ideas - and gradually phasing in text - seems like something that should work (and they seem to prove that it does, too).
Oh - another early example from when I was younger; arguably I first started to "program" when I got my first programmable toy - a Milton Bradley Big Trak. It's keypad used mostly symbols (plus some numbers) - but had other symbols for other actions...hmm.
Now, there is an assumption with a book that kids will learn to read the language. Maybe parents should have the same attitude towards programming.