How Scratch teaches kids to follow the hacker ethic
backchannel.com
backchannel.com
By 4th grade, you're probably right. But 2nd, unsure.
I feel that most people who know programming really underestimate how hard syntax is for beginners! You can maybe walk a kid through typing in a canned program in other languages, but the scratch "building blocks" environment makes it way easier to let kids explore and go further on their own.
Edit: 10th grade is correct - I was able to go on the scratch community website and find some sketches I had uploaded 9+ years ago!
I do however think Scratch is great for the younger kids and is a great way to teach them some basic concepts in a fun way.
Steve Krouse, a friend of mine from Penn, has created this to teach kids how to code in NYC. Jumping from Scratch to JS is a big jump, Woof is meant to make that easier.
I'm also planning on using it with my online 1-to-1 course for kids.
Also, it takes a certain kind of computer scientist to teach computer science effectively, and most elementary school teachers do not match that requirement no matter how much PD you give them. I would say most elementary school teachers can't handle much beyond the basics of Scratch, but that is more than enough to get the platform in the hands of kids. If the teachers chooses to just let the kids mess around with Scratch rather than give them structure and clearly defined goals, they will still do just fine. If a teacher takes a similar lax approach with typed programming, the kids will most likely learn nothing at all, and will often develop an aversion to programming altogether.
But I completely agree with you on the importance of teaching typed programming. My heart aches when I hear of middle school CS classes using Scratch. That's the perfect age to start exposing kids to Arduinos, Python, Raspberry Pi, etc. The BBC Microbit foundation has been doing a great job in the UK bridging the gap between Scratch and typed programming with their Microbit platform (microbit.org), and (shameless self-plug) I work on this problem as well with techlabeducation.com and pythonroom.com.
I think what kids miss most of all from typed programming is the idea that a language is just like a human language, where each language has its own metaphors and way of thinking (an idea put forth by Seymour Papert in his 1998 paper "Mindstorms").
This is the same reason so many people can build complex spreadsheets, yet wouldn't know where to start if you put them in front of an IDE.
I brought a book 'Computer coding for kids by Carol Vorderman' for a friend's daughters for Xmas (aged 6 and 8, both VERY bright with grades above their age groups). As learning to program makes you think differently, especially problem solving skills. It's gone down really well. Especially with older one who spends hours reading the book, even when she doesn't have computer access (and is now set on buying Chromebook with her pocket money).
A language such as Scratch is great for sparking initial interest, before going on to more depth.
Inventing on Principle - https://www.youtube.com/watch?v=PUv66718DII (He has a handful of great demos on Youtube and Vimeo).
Another interesting source is Epic's Unreal Engine Dev tools - https://www.youtube.com/watch?v=DshYHUvLaDc
And possibly with obtaining an intuition about whatever it is that you are manipulating. Maybe "direct manipulation" is mostly about that rapid feedback, rather than the concreteness of the objects?
I know that when I hooked up an "as-you-type" evaluator[1] to my experimental programming language[2], I learned more about problems with the language in a minute than I had previously in days or weeks. The feedback bandwidth is incredible, and the short cycle times have a more than linear effect.
It's block-based—you write it by inserting syntax nodes from a big menu—but the visualization of said blocks is plain text. If it's the first type of programming you do, you come out of it able to quickly understand a "real" text-based programming language, because you've been looking at textual programming syntax for a good while already.
This is very interesting because one often hears the same thing - the exact same thing! - about Lisp as a teaching language. And Scratch and Lisp are indeed quite similar, superficially, though Scratch doesn't think of itself as a "real" programming language and hence stops short of providing features that would make it usable as one, like lexical scope.
One big difference is that Lisp simply hides a lot of its syntax behind homogeneous parentheses (many special forms can only be written a certain way, but you have to remember where the parentheses go) whereas Scratch doesn't so much hide it as handle it for you ("here are the slots where things can go in this syntactical form").
Another, separate but easily conflated difference is that it's in some sense "strongly typed" - numbers go in number slots, predicates go in predicate slots, etc etc. The return type of an expression is represented by the shape and color of its block. All types are statically known, and relayed to the programmer. It is impossible to commit a type error because the editor disallows it (which is in turn possible due to the transactional nature of drag-and-drop - what do you do if someone types the wrong thing in, untype it?)
I think these are valuable concepts that don't automatically imply "toy" and should be explored in the context of a "real" programming language. Computer science has consistently unvalued human factors. There is still a lingering sense that "real programmers" don't need to be mollycoddled, and should suck it up and endure byzantine incidental complexity. Never forget the lesson of Python, a slow and technically unremarkable scripting language which is now one of the most popular languages in the world because it is easy and fun to program in. Or the lesson of Lisp, an enormously fast and powerful language that nobody programs in because...?
https://www.youtube.com/watch?v=CAcv12eBqcc
PS: I want to make some leraning videos using twitch/livecoding tv. I think, this idea is good.
edit, as I keep thinking about this: Remixes were also huge - not only could you download someone's project, you could tweak it and reupload it as a remix. There were also galleries with curators, which motivated me to make better projects. I think the language's limitations might have encouraged me to think outside the box, actually... simple things were easy, but any complex logic was very difficult. No functions, only event-driven broadcasts and receivers, and the events had to be pre-declared (no dynamic stuff). I remember doing a lot of hacky stuff with lists, like having look-up tables in lists, or having to implement really simple algorithms on my own in this constrained language...
Thank you so much for the work you and the Scratch Team did! The Scratch online community was a big part of my childhood and opened so many doors in my life by keeping me engaged and leading me to the world of software. Y'all really made the world a better place with the project.
What challenges did you encountered the most when teaching kids to code?
Do you have any suggestion on how to teach coding to kids from non-english-speaking countries? I think it would be much more challenging since most programming languages are written in english, and these kids are not fluent in english. Or, is it better if I write a new programming language using my native language?
- He still spends quite a bit of time finding keys on the keyboard, so that'd be a major distraction and would break flow.
- Memorizing keywords as text and reproducing them is a bit more of an abstract concept than being able to remember the color, location, shape, and appearance of text on the blocks in Scratch. For us, we can imaging keywords and expressions as these conceptual units, sort of like blocks. But we can also reproduce them as those units---we don't mentally deconstruct them into individual characters like my son would have to as he struggles to type them.
- Similarly, with typing, you start with a blank canvas and nothing but a daunting array of tools (keys on the keyboard, which we think of as a single tool) that alone mean nothing until placed into a very specific syntax. With Scratch, you start with a set of identifiable blocks that concretely mean something.
- Scratch aids him in other ways, like providing character and sound selections via a dropdown. You can get this type of things with certain IDEs, but mileage will vary.
Essentially what I'm saying is that I feel like my son using a keyboard at this point instead of blocks is like taking each of those blocks and smashing them with a hammer, and telling him to first assemble the blocks before determining how to use them to assemble the program.
I do wonder when I should try introducing him to text-based languages. He's also learned how to use Minetest in the past week, which is scriptable in Lua, so I wonder if that would be an interesting transition. I thought of maybe introducing him to lisp because of how naturally the syntax of the language translates to/from blocks, but I also don't want to disadvantage him practically when most of the world uses C- or Python-like syntax.
I'm totally new to this. :) But it's exciting!
I don't have kids yet but I am wondering if perhaps letting your child use a keyboard that is without printed letters could help them learn to type better.
Back in 2010 me and a good friend of mine decided to buy a TypeMatrix 2030 USB keyboard each and to switch from QWERTY to Dvorak.
Now of course I am not suggesting you let your child learn Dvorak. Teaching them Dvorak would probably be doing them a disservice at such an early age because of the amount of QWERTY keyboards they are likely to come in contact with.
But I think you should try to let your child use QWERTY with a keyboard that does not have any letters printed on it.
We bought black skins with printed letters and black skins without printed letters. In the beginning I was using the skin with the printed letters and I had to look at the keyboard for each and every letter I was typing. While my initial plan had been to first learn to touch type Dvorak on the TypeMatrix and then put on the skin without printed letters, I soon decided to put on the skin even though I had no idea where each letter was, in order to force myself to learn to touch type sooner. And it worked! It was really painful for the first two or three days. For each letter I was typing I started with the top left key and went through the keys one by one until I got to the correct key and then I used the backspace key to remove all of the letters I had typed which was not the one I was looking for. It was extremely annoying but it worked exactly as I had hoped it would.
Over time I've somewhat "unlearned" QWERTY, and for the first few years I was even carrying my TypeMatrix in my backpack pretty much at all times and in doing so I found it hard to use other keyboards even if I switched the computer to Dvorak.
After one of my keyboards broke due to wear from carrying it with me, I bought a new one but I stopped carrying it with me and started using whatever keyboard is available in Dvorak mode. I use the TypeMatrix at home and I have another one that I use at the office when I work but when I'm elsewhere I use for example the keyboard on my ThinkPad. Many keyboards will have QWERTY printed on them but since I am so proficient at touch typing Dvorak now I'm pretty much not looking at the keyboard at all anyway so it does no harm.
Anyway, point is, not being able to "cheat" by looking at the keyboard turned out to be a highly effective way to learn to touch type 100%.
Kids at my local coderdojo enjoy beetleblocks which is like 3d scratch http://beetleblocks.com/run/ The files can be exported and used in a minecraft clone https://twitter.com/damianmooney/status/843594021024993280
Microsoft have just announced a block based code environment for minecraftedu https://youtu.be/3rKuSlgqePo
It seems like a way of coding that has really taken off.
There is also an open source project called Blockly run by Google. It's the "puzzle piece" portion of Scratch, which is an amazing resource to integrate into other kids learn-to-code projects.
I am using Blockly at http://block.school
We are the first live online school teaching kids to code. We've paired the Scratch concept with a 3D block world sorta like Minecraft. We're building out the curriculum now but you can try a demo here:
http://course.block.school/demo
We have some pretty amazing students building things at ages 6+ :)
It is a great example of a company buying an awesome product and then throwing it on the trash heap of history.
I don't know much about psychology, but I suspect a kid below a certain age is much less interested in how a cat does something than with the cat actually doing it. If they're interested, they'll naturally reach the limit of their tools, and learn about the cat's internals.
From an HN thread today on combinatorics:
list(itertools.permutations('abc'))
I don't want to have to know how that works merely to use it, and if knowing the implementation was required to use it, it would slow down my progress. If I was eight, it might slow down my interest.Taken back to an extreme, a baby on your lap would not be interested if your finger pointed to the word 'cat' on a line of text in a book and said "cat!". But they would be interested if you pointed to a picture of a cat.
Whatever's appropriate for an age, and for an individual, is probably best.
1. How serious are you about your child's coding education?
2. Do you teach her/him too?
3. Would you ever hire an instructor in a 1-on-1 or 1-on-2 setting if it were affordable?
2. I'm not sure teaching is the best way to describe it... more like doing it together, and sharing knowledge. I don't consider myself to be a good teacher (after seen how others do it). Occasionally I pull real good "teachin'" - seriously, but then often I fell into too many details, and he gets bored.
3. Maybe, but possibly when he goes to middleschool.
I grew up in Bulgaria, and since 7th grade I was in specialized Mathematics and Informatics (the "eu" word for "computer science") high-school. I went there because I was good in my elementary, middle school... only to realize I was just average, or even below compared to the other kids. But then I discovered that programming is what I really wanted, unlike many of the other kids (that was back in the 90s), and there was much less competition in this area. Nowadays its quite different... Back then, even saying that you were playing video games, and kids would consider you dork/geek/etc.
But back to math-specialized high-school - Since I've started doing poorly, my parents got me 1-1 (sometimes 1-2) math teacher, just to keep on level. It was the norm to have 30-40 math exams for homework, and it took everyone of us hours to finish (Though one difference with schools here, is that there is rotation when you go to school - one month you go in the morning, the other month in the afternoon - so there was plenty of time to finish homework).
So, it's definitely beneficial to have an instructor. It helped me. We are considering, but also from another standpoint - peer pressure. When all our friends are talking about how their kids go with private tutors/instructors - then you have to get on that bandwagon... I mean I hate that, but I know we have to do it.
Last rant, I wish a classroom where the teacher would have only few kids - 5-6, not 20. I feel this would greatly reduce the need for instructors.
And I'm willing to pay more taxes, whether I had or had not kids.
[1] http://partners.disney.com/hour-of-code/wayfinding-with-code...
I do really really wish they would get off of Flash however. Managing the Flash installs on the shared laptops at our school is a headache.
I am working on a project in the space, I would love to ask you some questions if you don't mind!
I also teach how to edit music and images for importing to Scratch, including transparency and layering. Honestly I think that is some of the more broadly useful stuff in my class -- so many of these kids have no idea how to crop and resize a photo or cut out a portion and make a transparent background. We also cover US Fair Use and intellectual property laws.
I only get each class for about a dozen 55 minute classes per year which really makes me streamline my approach for a minimum of lecture and maximum hands-on time, which can be a challenge, but on the other hand I get 100% of the student body passing through my course, so I get the chance to teach all learners, those with desire and aptitude and those who come in saying "I'm no good at technology" and leave with a sense of pride in what they've achieved.
It's Javascript and extensible.
If you are interested in learning more about this mindset, you should read Mindstorms by Seymour Papert (RIP).
https://www.amazon.com/Mindstorms-Children-Computers-Powerfu...
Scratch can be a "gateway drug" to languages that professional programmers use. The extensions/abstractions of Scratch from Berkeley that deal with making it do complicated things seem like putting a fish on a bicycle. Sometimes, you just have to leap and try to not fall.
I like rms's definition https://www.gnu.org/philosophy/rms-hack.en.html
A hacker is just someone who does not respect boundaries, be it what could be done, and what should not be done, and then more. Just a hacky definition I just came up with :)
I think your information is out of date. In 2015, 60% of piracy incidents were in South-East Asia. http://www.agcs.allianz.com/insights/white-papers-and-case-s...
https://www.amazon.com/Hackers-Computer-Revolution-Steven-Le...
The negative connotation came from the bust of Kevin Mitnick and the American public's shameful lack of knowledge about computers, combined with 1984 style propaganda to scare the public.
Hacker or hacking always meant someone who approaches problems in novel ways. Cracker, like a safe cracker, is someone who breaks in for malicious reasons. The kids on 4chan who follow a guide to DDOS a website are script kiddies, by the way.
That's what these terms always meant, and we're starting to move back after an era of propaganda.
The Jargon File, a glossary for computer programmers that was launched in 1975, lists eight definitions for “hacker.” The first reads, “A person who enjoys exploring the details of programmable systems and how to stretch their capabilities, as opposed to most users, who prefer to learn only the minimum necessary.” The following six are equally approving. The eighth, and last, is “[deprecated] A malicious meddler who tries to discover sensitive information by poking around. Hence password hacker, network hacker. The correct term for this sense is cracker.” http://www.newyorker.com/tech/elements/a-short-history-of-ha...
Back when I was younger, people who references to themselves as hacker (or were referenced as such by others) were usually not trustworthy.
Why isn't there a Scratch for adults? A serious tool targeted to artists and professionals that makes it easy to publish interactive stories and presentations using standard web tech.
I think there isn't a Scratch for artists/professionals to create because the educational aspect is hard to nail, and pairing that with a publishing tool is even harder. It's not impossible, but it sounds really hard to get right.
What exactly would be different between a Scratch for kids and a Scratch for adults?
One problem I see with Scratch is its slow pace in moving forward away from flash and toward something that is easy to self-host: cloud only is great until underpowered Internet at your local library forces kids to stop coding mid session. Flash can sometimes be a challenge to get to work reliably in a modern browser on a pc you might not have admin rights on (compared to something based on fairly conservative js, like https://www.lively-kernel.org/).
I've briefly looked at the Berkley snap!-project, and it looks a little easier to get into self-hosting and modifying (but I've yet to do so): https://snap.berkeley.edu/
In the same breath, I should probably also mention croquet/cobalt - although it appears no one has yet picked it up and ported it to the new generation of vr headsets:
To save some searching: http://pharo.org/
(generally spoken - I don't know the scratch situation)
https://en.m.wikipedia.org/wiki/Visual_programming_language#...
More recently, I started helping kids with their programming projects at my local library's coder dojo using Scratch, JavaScript, Python and other languages. It's a rewarding and fun way to give back to your community. I highly recommend trying it out.
In line with the hacker ethic, we decompiled Minecraft as a demo and started playing around with the jump math with them. It instantly clicked, based on their experience moving Scratch characters, what the changes we were doing were going to do before we ran it. That's a powerful link, even if they didn't realize that "jumping to the clouds" still causes fall damage (Which was subsequently turned off in the code).
My nephews are in elementary school, and we're right next to the local university. I'd love to see if we could get a program like that going here.
IMHO if the kid is doing complex stuff with Scratch, he/she can move to a programming language without much problems.
To me, this would be more of a sign of a "hacker" than figuring out how to code something, though maybe it's me.
IMHO the real reason Scratch teaches its users the "hacker mindset", is the way it forces you to create complex things with a relatively simple and limited toolset. In a similar way to how C64 demo coders push the hardware to its limits to achieve interesting effects.
To give an example, scratch has no 3d rendering capabilities, and the only 2d rendering techniques are using bitmap/svg "sprites", and the "pen", which lets you draw arbitrary lines between points. Despite these limitations, many more advanced users have created 3d polygon rendering engines.
The big downside is that it's only really usable on an iPad.
I know originally it was seen as a Scratch rip off, but they've really done some cool stuff, including having the ability to easily deploy Minecraft mods that he's created, and invite friends to join him to play around with them.
In my view a benefit of Scratch is that teachers can learn it.
It was bout 20 hours of programming concepts in Scratch, and then 10 hours of transferring their learning of Scratch semantics into Python syntax.
Most of the younger students in the class wanted to keep playing with Scratch, but the older ones intuitively understood they could go far with Python -- and that Scratch was a nice place to test/debug algorithms before implementing the "final" version in Python.
John Maloney, who was not mentioned in the article but was the key person to making Scratch happen is working on:
https://wiki.scratch.mit.edu/wiki/GP_(programming_language)
One of the links on that page is to Snap! which was used to introduce programming at Berkeley. You can use it as a Scratch written in Javascript and so able to run in any web browser. The extensions are a bit clunky, but pretty interesting.
Surely we can do better?
https://wiki.scratch.mit.edu/wiki/Alternatives_to_Scratch
Personally my kids didn't like Scratch but my daughter will do some Racket with me.
Although when I used it, it was Scratch 1.x, which was a stand alone app that didn't require Flash.