Ask Slashdot: How Can You Teach Programming To Schoolchildren?
Slashdot reader SPopulisQR writes:
A new school year is approaching and I wanted to ask what are appropriate programming languages for children of various ages. Specifically, 1) what coding languages should be considered, and 2) are there are any self-guided coding websites that can be used by children to learn coding using guidance and help online? Let's say the ages are 8 and 12.
I know there's lots of opinions about CS education (and about whether or not laptops increase test scores). So leave your own best thoughts in the comments. How can you teach programming to schoolchildren?
I know there's lots of opinions about CS education (and about whether or not laptops increase test scores). So leave your own best thoughts in the comments. How can you teach programming to schoolchildren?
Back in the early 90's we were taught with a tool called LOGO Writer. Used a simple syntax to guide a turtle to draw objects and stuff. You could write loop statements that would have the turtle draw a "circle" and other things. It was pretty effective I thought.
Make SELinux enforcing again!
at that age, so none of the above.
Teach them the basics to get them through life. Few need to know programming. Why spend all that money when they'll just become auto mechanics or sell real estate.
You think I'm kidding but I'm not. Odds are your kid won't program software at all. Let the ones who show interest and have aptitude at the computer. The rest just want to use social media and games.
Teach them mathematics. Programming didn't make sense to me until I took algebra, learned about functions in general and the order of operations in particular. Not that you need mathematics to learn programming, but it does help in figuring out what is supposed to be done in what order.
Teach them to think, and mental discipline. We do not need more code monkeys.
Why bother? Get them grounded in something that won't be obsolete with the next language fad. You know, real science, real knowledge, something that will help them build their analytical and judgement skills. (No, most coding doesn't build analytical skills - most of it is boring boilerplate, which is why there are so many "code-by-cut-n-paste-from-the-net" "experts.") Biology, Chemistry, Physics, Geology ...
Throw in various maths, as well as language (judging by the way so many slashdotters don't know the difference between brake and break, or rain, rein, and reign, if they can spell in 10 years time they'll be seen as brainiacs). And history - so they recognize past mistakes when they repeat them and don't over-commit to a bad course of action.
But forget computers. That they can pick up on their own if they're interested. And if you try to teach them you'll kill their interest by making i seem like school work instead of a possible fun hobby that might, at some future date, come in handy.
"Transparent" is a shit show that trades on every stereotype going. A man in drag is NOT a transsexual.
I learned BASIC on an Apple II back in 6th grade. They bussed us across town to the one school that had them for one segment of the Gifted & Talented program. That was the best thing the school district ever did for me.
I'm not sure what the right answer is for today, but certainly it's a good idea to expose kids to the concept in elementary school. Some of the kids will latch on to it and run with it to be the next generation of developers.
Maybe something that kids can take and go on with themselves would be best, but I don't think the language really matters. Teach kids to program, and the ones that it clicks with will go on to grab whatever works for them.
And for those that say the schools should focus on more core curriculum aspects, I disagree. Yes, you can't neglect those, but you also need a variety of other topics so that kids find the topics that inspire them. For the kids who click with coding, the programming will drive their advancement in algebra and other areas of math.
I hate to even recommend it but I think I have some decent reasons. It's in every browser. Hit F12 and you have a REPL, debugger, and you can start coding on the same machine without downloading anything else. Even though it's a very loose language, you can teach all the basics of control flow, data handling, and you will be forced to deal with numeric and type issues. You also have access to a graphical canvas which is amazing fun for kids.
I wouldn't expect things like File I/O to come up which could be problematic or burdensome. Theoretically you could teach event-driven programming but that's a bit overkill for kids. If you can push anything to a hosted server, they can view it on their phone, too. You can do some of this with other languages, of course. JavaScript just comes on so many things now, though.
Tim Bell in the Computer Science Department at the University of Canterbury in Christchurch New Zealand has developed a comprehensive program for young kids. Tim's a top notch guy too.
If it is to teach them programming concepts such as sorts, loops, etc. then I'd go for a simple language like BASIC. The language is important since you are trying to get them to learn how to think about problems, not be able to write code in a specific language.
If it is to teach them to program in a specific language I'd ask why do this at their age? It's likely whatever language they learn will be outdated by the time they finish school anyway.
I'm a consultant - I convert gibberish into cash-flow.
Kids need an exposure to programming at a young age so they understand it is simply giving instructions to a machine to do something. Some great toys for doing this are:
Dash by Wonderware
Sphero
Ozobots
The early exposure is key because if they don't have a successful early experience, they are less likely to try programming later in education. They will think, "Hmmmm... I programmed in 3rd grade, I can do computer programming, let me take that class."
Without the successful exposure at a young age they may think that computer programming is only for smart people.
I remember the early 80s learning BASIC from those Usborne game books.
Really simple text console games that introduced concepts like variables, loops, and conditionals within programs that mostly fit into 1K or less than 8K at least.
Of course, you could simply translate those programs into something like Python these days and have some fun while learning to program.
Probably the hardest thing to do when starting out on Python is to teach them input sanitising. Everything else is fairly standard.
READY.
PRINT ""+-0
Have you even been around grade school age kids recently?
I don't understand this feeling that kids of that age should not learn programming, when MANY of us here learned programing at that age. If it wasn't a problem for so many computer professionals then, why would it be now?
I think there's a way more important question than what language to use though. Its what CAN the teacher actually use?
If they have zero teachers that can teach programming in any way, probably sadly the answer should be nothing.
But hopefully the school has some resources they could bring to bear - even with limited computers you could teach programming in an after-hours context. One program that seemed to help a lot with some of my friends children was a Lego Mindstorms based competition, which combines programming and robotics - that's probably the most compelling route for younger kids because it is so hands on and visual.
Scratch seems to be widely used, I wish there was something else but it's widely used so there are a lot of resources.
If a school is getting students all iPads, the iPad Playgrounds app is a great way to get into programming and soon will be flooded with a ton of third party educational material because of allowing widespread loading of playgrounds.
But basically, I think a school should try to do something, even if it's only for a subset of kids. The earlier someone finds out they like programming the better.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
I've spent a couple years designing programs for teaching children from 6+ how to do programming. One of the best tools by far is MIT's Scratch.
https://scratch.mit.edu/
With a little adult guidance, you can have them doing electronic story books, drawing, simple quizzes, and tons more (one student recreated pac-man). Kids learn about use of sprites, pictures, control statements very quickly. It's all drag/drop action blocks which make it easy to learn. Some kickstarter campaign had some interesting ideas of teaching programming through robotics.
https://www.kickstarter.com/pr...
https://www.kickstarter.com/pr...
I'd start with Scratch, you'll be impressed, There are books available you can use with you kids:
https://wiki.scratch.mit.edu/w...
Hope that's helpful.
"Imagination is more important than knowledge" - Einstein
Python is today's BASIC/PASCAL.
Nonsense. BASIC is Beginner's All-Purpose Symbolic Instruction Code in which whitespace is not part of the syntax in the pedantic way Python's designer masturbated over "enforced structure." Pascal has a few issues of its own in as much as their is some overhead code - scaffolding they call it these days - before you can even write a simple "Hello World" programme. BASIC remains the excellent introductory computer programming language; there are even BASIC interpreters written in Javascript for ease of availability. Recently, I used BASIC to solve a DNA programming challenge; standard BASIC not the abomination known as Microsoft Visual Basic and its ilk.
For the very young. Start with LOGO as some other posters said. This will teach them to think programaticaly structuraly, and some constructs like loops.
Then move them to Swift PLAYGROUND as soon as they reach a propper age to understand it. not Swift propper, but swift playground.
After swift playground is mastered, things become murkier. Move them to an interpreted language, that has as little scaffolding as possible. Perhaps something vissual where they can plug modules graphicaly in a GUI/IDE and then program the behaviour of the modules as needed be.
Then, finaly, in the latter years of high-school, move them to some real programming language with real IDE. Preferably something usseful for the future. Perhaps Ansi-C or Java, or Python....
*** Suerte a todos y Feliz dia!
Here in Japan they're doing Scratch and then roll into samples in 8 different languages (basically hello world with a loop and some variables) in middle school.
My son however did a scratch book when he was ~7 and did some Arduino programming in that Arduino flavoured C in a robotics course which he's still doing (he's 10), but we're doing some things together in C because of that. I had originally thought about Ruby (because I like it and it's clean) or Python (because there are tons of ways to use it for beginners, like MineCraft scripting), but he's handling C just fine.
Now, what would I recommend for a class of students? Honestly I'm not sure Scratch is better at getting the concepts of program flow than flow charts with stencil templates, I actually think flow charts would make more sense. Once they get the concept of variables and loops look for something simple and visual or something they know and can see immediate results, like that MineCraft and Python setup or maybe even go old school and grab that demo where you move the robot around. Just try not to do the whole think in Scratch, as I think that past a point forcing that visual representation is detrimental and could actually turn off some students who would be into actual programming.
I can't recommend scratch highly enough. https://scratch.mit.edu/ is great. You can do some pretty neat things with it. Here are some projects you can work through http://projects.codeclubworld....
I tried to teach some Javascript game programming to a teen, but the lack of geometry skills (e.g. sin(), cos()) and physics ( e.g. d=at^2/2) made it tough going to fire cannonballs around. There is most likely a library that could hide it all, but why would you?
It's not a full solution by any stretch of the imagination, but if you wanted an entertaining introduction to programming, you could do worse than having them play Human Resources Machine for a while.
It's cute, it's entertaining, and it teaches a simplified version of assembly language (!) programming in such a way that even non-programmers can see how the program's source code interacts with the computer to produce desired (or not-so-desired) behavior.
I don't care if it's 90,000 hectares. That lake was not my doing.
You start by teaching the kids critical thinking and logical problem-solving. Including things like inductive reasoning so they can develop general approaches to solving classes of problems based on the patterns found in a collection of solutions to specific problems. You teach them to trust their own reasoning unless and until someone explains exactly where and how their reasoning is wrong. You teach them that there are usually multiple solutions to any given problem, how to recognize the trade-offs made in the different solutions and how to select the best set of trade-offs for their situation.
Once they've learned that, then you introduce the idea of formal languages for expressing how to solve a problem and how to use those languages to write computer programs.
Unfortunately this'll never happen, because it'll mean raising a generation of children who'll think for themselves and question authority and that's the last thing the professional educators (which is completely distinct from "teacher") want to have to deal with. Ditto the Powers That Be in the various levels of government. Which means we might as well discard the whole idea of teaching computer programming to everyone.
I have 3 kids, ages 7, 10, 4. All love Scratch. The 10yo is doing Python. All have tried some robotics programming (Lego WeDo / Mindstorms and Edison).
Whatever you do, remember that most of the kids are NOT nerds.
Most programming textbooks and advice is written by nerds to nerds.
For not-nerds, this is ultimately boring. They won't care about matrix multiplication, sorting algoritms, finding primes etc.
But everyones loves graphics.
The first tasks should be graphical and/or game-like, with instant feedback and a fun factor.
Let your kids draw boucing bubbles or a floating flower with changing colours.
Let them design some simplest games - whack-a-mole, tic-tac-toe, hangman, etc.
Thus you will need a language with an easy graphics interface. :)
Scratch is great for the first steps.
From there... let us know
Programming is more of an art then a knowledge exercise.
And it needs practice to keep it up.
However one thing we lost since the 8/16 bit computer days are the easy to program computers.
Most kids wants to do graphics (hence the popularity of Logo) but good old basic was good at this too.
Today Python seems to be a good tool but while the kid is still grasping at varables and loops they want to do graphics and to explain how to do that in Python just blows the mind. Because you can't just draw a line. Or paste a gif.
If something is so important that you feel the need to post it on the internet... It probably isn't that important.
They did this at my daughter's school. There is also ClickTeam Fusion as well.
Hopscotch
ClickTeam Fusion
Keep in mind, these are not programming languages but with Hopscotch for example it gets kids familiar with programming concepts like variables, looping and flow control in a fun way.
We'll make great pets
That will always get their attention. I feel Minecraft has created a number of programmers that were never interested in the subject. As they wish to do more, they learn on their own and seek out formal training in their secondary education. Kids these days want to see a result where as rote traditional programming classes are far more abstracted from the end result. Generally if they see the mountain, they will want to climb it.
I don't read AC
The computer is one of the most important tools of our era and you cannot fully utilize it without being a programmer. It's useful even to people who will never work in the field, and a basic grounding in it assists with the development of logical reasoning and understanding the operation of algorithms. Expecting people to become professional programmers is unrealistic. Expecting people to become familiar with a tool that literally everyone uses is basic, and we should expect it from our education system.
"You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
Context is key, if you are in a western culture. You need to explain the current meaning. The original meaning or the meaning in a different culture, is besides the point.
Most symbols good and bad were made from similar symbols and its context has been changed on how it has been used in that culture.
In a few hundred years, this symbol may have a different meaning, and may be acceptable, as it has a positive context. But now it isn't and students need to learn that, and know why it is wrong to show it. Beyond you are a bad kid for showing this symbol that you have a vague understanding what it means that happened to be an easy to program fractal.
If something is so important that you feel the need to post it on the internet... It probably isn't that important.
I have used Tynker with my son. Block code language with lots of teaching exercises. Also includes a Minecraft modding course which is what really sold it to him.
I second Tynker. You can also take the lessons learned in Tynker and apply them to actual devices (such as a Parrot Mini Drone) if you've got a child that is more interested in seeing how you can program something in the physical world. Once you child gets bored with drag and drop programming, I'd move them next to CodeCombat. I completely disagree with the comments saying that you need to make sure your students learn advanced mathematics. As a Math/CS professor, I would much prefer a child learn basic logic skills long before they attempt algebra.. Shifting their video game playing into a slightly different direction through Tynker (with Minecraft if they love that) and CodeCombat seems like an ideal way to give a child an introduction to "real programming" while still keeping their love of gaming intact.
Why is this question flamebait? Has the question "does everyone need to learn to program?" been aswered somewhere and it's a resounding yes!
Ahem, as a professional program, allow me to explain that programming IS program solving. pure and simple. The rest is simply what tools you choose. I was into this stuff from the age of 11 when all hardware was configured using jumper pins and the Internet was virtually all text. The reason virtually all professions these days have elements of IT (and consequently programming) is programming is about documenting successful procedures and being able to reproduce them accurately and cheaply. A doctor who has a programming background is more likely to have a stronger analytical mind than a doctor without skills in programming. And programming isn't necessarily about math (unless you specialize in search libraries or numerical/data analysis). And most of the people in my generation who learned programming, found ourselves in great demand on many levels. As for communicating, half of my job in consulting/development is doing data requirements analysis, and there you learn the biggest challenge in programming is not the computers or tools, but getting people to understand their operations. (a lot of professionals including doctors, engineer and so on don't know their own business process (which is why they can't program their own systems half the time).
Of course you are looking from the point of someone who feels the world is obsessed with tech stuff, and to a degree you are right, and I advocate against the overuse of technology as it is not a proper substitute for thinking individuals. But as for learning other fields before programming (again, problem solving), I would argue against.Most basic reason, I've used robotics to teach math to children who were being help back by teachers who were not following through on their students intellectual capabilities, probably due to overly large class sizes. I would argue teaching subjects WITH programming, because it can be applied anywhere, and in the real world in this day and age, it may be the difference between the highly employable and the those getting phased out by AI's being developed. (see lawyers (AI's are predicting judgements by judges), GP in medicine (as most aren't terribly good these days), insurance actuaries, or any job that quickly becomes a "routine"). It's becoming like the Internet: you are required to have access to that and a computer to graduate from university now. (Not that I totally agree with that, but...I don't make those rules).
"Imagination is more important than knowledge" - Einstein
Everybody is entitled to an opinion but in science, including computer science education, there can be evidence that some things really do work. In the context of the Scalable Game Design project we have explored and evaluated a strategy for teacher professional development. As far as I can tell this is the largest study of its kind:
https://sgd.cs.colorado.edu/wiki/images/4/41/TOCE_2015_Repenning.pdf
Abstract: An educated citizenry that participates in and contributes to Science Technology Engineering and Mathematics innovation in the 21st century will require broad literacy and skills in computer science. School systems will need to give increased attention to opportunities for students to engage in computational thinking and ways to promote a deeper understanding of how technologies and software are used as design tools. However, K-12 students in the United States are facing a pipeline for computer science education that is broken. In response to this problem we have developed the Scalable Game Design curriculum based on a strategy to integrate computer science education into the regular school curriculum. This strategy includes opportunities for students to design and program games and Science Technology Engineering and Mathematics simulations. An approach called Computational Thinking Pattern Analysis has been developed to measure and correlate computational thinking skills relevant to game design and simulations. Results from a study with over 10,000 students demonstrate rapid adoption of this curriculum by teachers from multiple disciplines, high student motivation, high levels of participation by women and interest regardless of demographic background.