Teaching CS in the schools
cs.uni.edu
cs.uni.edu
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.
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 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.
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.
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.
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):
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:
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...
http://www.coding2learn.org/blog/2013/07/29/kids-cant-use-co...
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.
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.
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.
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.
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.
Everyone should be able to create digital media, not just consume it.
Everyone should be able to understand their tools, not just use them.
People should know that technology is not magic.This is unfortunately very true. It's kinda sad seing my nephews and nieces struggling when using a desktop computer. I guess scrolling down on instagram and watching netflix doesn't teach you anything about computers.
They're not native with the desktop computer metaphor, but so what? Why does that matter? Why is desktop computing the true computing that identifies whether you're native or not?
And of course, none of this has anything to do with computer science, does it? You can do good computer science with a desktop, a tablet, or a pen and paper.
What development environments run well on a tablet?
Given the choice I wouldn't, my point was more that only having access to an iPad is no reason to not be able to learn how to program.
It's the one platform that allows you to be really productive (at least in an office context).
I personally already struggle when trying to write some proper longer text on a smartphone or table. I don't think I could comfortably write some nice Word letter with maybe some custom design on such a device.
It maybe works out if you are some artist... Idk.
Easy to understand and you can see the result right away. You don't complex languages or "playgrounds" to teach the basics of programming.
Obviously we need some students to become programmers, and we should start them early, but do we need all students? The student who wants to be a doctor should learn to type and then move on to more science/biology classes. The student who isn't sure what they want to do with their life (this is most, even though they all have done a "what I want to be when I grow up paper") needs to good general background. going deep into math, science, and reading/writing (ie the 3 Rs) will get them much father than specialized education in computers - they can figure out what they need to know a lot better than someone with a deep knowledge of CS can figure out something else.
Computers are tools. They are useful when you know some other domain well and then use the computer to take care of some work for you.
Why is "science" one of "the 3Rs", but computer science is not?
I've always viewed the current use of programmers to be temporary - in the future, most people will so a little programming, but much of their day will be in their specialty.
Because most everyone would benefit from some programming, but not enough to justify pairing them with one or neglecting their other duties entirely.
Today we are crippled by a lack of coders. Take most anyones jobs (who isnt a coder) and you are likely to find ways a program or two would help - but not enough to justify using one of the too-rare coders. Once they can code a bit themselves, they can quickly address that problem.
Most people interface with a computer during their jobs, even many physical-labor based tasks. It's a small step to ask them to code a bit.
The rest of us that code 100% will be making tools and analytics, not doing a job that could easily be replaced if enough people knew excel.