It feels sort of like assuming that kids born after commercial aviation became widely available have some magical understanding of fluid dynamics.
The HTDP languages all look like Scheme, as most Racket languages do, but you can actually swap or modify the reader as well, to produce Blub-y languages (for example, someone has implemented ECMAscript: https://docs.racket-lang.org/ecmascript/index.html) that interoperate with other languages in the Racket system (including Racket itself).
At the same time, Racket is "real" in the sense that you can build production systems in it (not in the HTDP languages themselves, but it all interoperates), and it has a pretty good batteries-included core lib and contrib packages. For example, you could integrate the students' code (in a simplified pedagogical language) with the webserver (from the "real" language), so that they can see their code doing stuff out on the web where others can look at it, or they can show their parents, rather than trapped in some educational IDE that's only installed at school.
What you're looking for is Racket. It has a set of options for starting from a barebones language and gradually adding features as you progress through the course. Here's a description of the different student language levels you can use in Racket:
Processing is more like a framework and comes in python and java flavour (although I think the language doesn't really matter as long as you grasp how loops work and what can be done with it).
Something like this:
def setup():
size(400, 400)
stroke(255)
def draw():
line(150, 25, mouseX, mouseY)
def mousePressed():
background(192, 64, 0)
The concepts learned by just playing around with this are valuable in any language.It wasn't just some toy, you could create production applications this way. Unfortunately the low bar resulted in a lot of low quality applications (in terms of ux and engineering) which led to it's downfall.
I am a strange programmer, I think using a debugger is vital to understanding a program ;)
We start with things like Python and Turtle, drawing shapes and emoticons. Then we move on to functions and objects and stuff.
Thanks, I'll almost certainly be using this.
this is one of my favorite tools for python, lets you iterate through every step in your program
I was recently at a couple of secondary open evenings with my son, and it blew my mind how far CS education has come. The only thing that seemed slightly lacking was anything around tooling and unit testing, TDD being a nice segway between theoretical and practical application imo.
I strongly believe in a few years the current "${library} experience === cushy fintech job" environment will be completely reversed, as the number of strong developers grows and the self-taught guys like myself that have been in industry for ages die off.
More importantly I suspect the demand for more practical, industry recognized vocational CS qualifications will grow.
Pyret was designed by many of the same people involved in the Dr.Racket community, and has been specially tailored for early programming education. It uses a functional programming style, pattern matching, and tests built into function definitions.
If you ignore the pretty blocks, you can see that scratch is nearly a normal language. There is no reason we can't have a language with both representations, plain text and pretty blocks. You could even have a hotkey to switch the pretty colors on and off.
I strongly suspect that most modern programming languages would almost work with a block-based editor. You might need to leave out a few things, but not much.
Consider C. You can't tolerate a macro that expands to an opening curly brace, but you can tolerate both function-like and const-like macros. You could load many normal *.c files, and you could save them, and the only thing lost would be some whitespace.
A decent predictor is having enjoyed writing math proofs. Normally this starts in a geometry class, though sometimes a few proofs are done in beginner algebra classes. Many people hate proofs.
A weaker predictor is having experience with a plain-text editor (not Word or GMail, but raw ASCII) and with filesystem directory trees.
Foreign language is completely different. It's irregular. It involves making and hearing sounds.
For the past few years, we have been working on a Scala based 'real' coding environment that's easy to get going with (via Turtle graphics), but also supports more advanced stuff (generative art, games, circuits/robots):
Not for beginners, for everyone. For beginners, it's only overwhelming and can be helped with someone who already knows it. For people who are solving real problems - the awful tooling programmers have to deal with everyday is a major pain point that hasn't been addressed in decades.
I wonder though, if the problem with existing platforms is in the environment and tooling, is a new programming language going to help? Wouldn't it make more sense to build better tools around one of the existing ones? Ones that are more "real deal", as you said? (e.g. TypeScript, Kotlin, Swift, ...)
Even presuming it's gone zombie, it'll be 30+ years before it might scatter to the winds...
(And that's presuming that VBA is finally no longer a thing.)
In the meantime, some of these kids might someday make a living at maintaining VB codebases.
This might be of interest for you to try---it's a super simple Python IDE for beginners: https://codewith.mu/ I've tried it out for doing basic coding demos and works really well...
This will be my first time so we'll see how it goes. But it is cross platform, small, has everything built in and can be used to make games. It is also real so students can take it beyond educational tutorials.
http://www.coding2learn.org/blog/2013/07/29/kids-cant-use-co...
I've cobbled together a curriculum, starting with CS unplugged activities to explain computational thinking. I found this to be highly effective! https://teachinglondoncomputing.org which is a fantastic resource to teach basic CS concepts. The locked-in activity in particular is highly effective in making things click. You get students to tackle a real world problem. You can introduce linear and binary search (or rather, have them come up with it themselves). And finally, you can teach them complexity analysis with a goal: how to write the book the fastest way.
Before any programming can happen, getting computational thinking into their heads is essential. Moving from that to code brings its own challenges. I found Scratch and similar block based environments to be a bit of a deterrent with this age bracket. The kids know it's not "the real deal".
However, there aren't any non-overwhelming "real" coding platforms out there. Python comes very close, but is far from simple (pip, IDE, maybe mypy, because it turns out types are helpful when learning to program).
So, while I think the CS side is pretty well covered, there is amlack of beginner friendly programming environments that don't overwhelm the learner, or treat them like they are "stupid". This could be one thing where the community could make a difference. I'm building a statically typed structured PL for that purpose at the moment.