It's interesting and a bit disappointing to me that there's no real current trend towards beginner-friendly (or "end-user"-friendly) programming. For a while we had some interesting candidates, like Processing, Rebol, or how _why presented Ruby, and even Tcl and Python seemed more all-encompassing. These days it seems every programming language development is going again for "professionals" -- Typescript, Rust, Go, etc. (and even Python looks like it's "non-programmer" appeal targets otherwise scientifically literate and educated people)
> It's interesting and a bit disappointing to me that there's no real current trend towards beginner-friendly (or "end-user"-friendly) programming.
I'm honestly not sure it's really needed.
This year I teach a class of graphic students, who have zero coding experience, how to do generative art with p5.js (Processing but in JS). It took a grand total of 8 hours to go from ground zero to making them able to write things involving loops, variables, etc... and making simple generative art autonomously - if anything, they struggle a fair bit more with the maths needed to make pretty things (here are my slides, feedback very welcome! https://interactive-design.jcelerier.name/).
Had the very same experience while teach some programming intro courses for artists and designers (mostly simple python for maya/cinema 4d, and java for processing).
Learning the language is rather easy, and if you're in design you're already experienced into translating and idea between different cognitive fields.
But wrapping their head around algebra and trigonometry and making them conceptually "think" about them was extremely hard. It looked like years of rote formulas memorization and the "don't worry about why it works like that, just accept it" teaching approach took a toll on their minds.
The fact that most maths textbooks are terse to the point of being cryptic didn't help at all.
> But wrapping their head around algebra and trigonometry and making them conceptually "think" about them was extremely hard.
You should abstract these concepts in some way. For example, when you are moving an object in 3D you don't need to spend time projecting 3D objects into a 2D display using linear algebra. You just set the x,y,z coordinates and the engine does the hard work.
> For example, when you are moving an object in 3D you don't need to spend time projecting 3D objects into a 2D display using linear algebra. You just set the x,y,z coordinates and the engine does the hard work.
but setting x,y,z coordinates so that they do the kind of motion that you want is exactly where you need linear algebra.
Say you want to make a ball move in a spiral motion, how do you do that, from code, without students understanding algebra and basic operations like "translation on a plane" ?
As a young kid doing qbasic, everything moving around on the screen was x/y/xchng/ychng. The watershed moment for me was in highschool and suddenly recognizing that sin/cos were how to get from polar to cartesian, and atan2 was how to go the other direction. A week later my little platforming arena shooter had heat-seeking missiles in it.
I think a big part of the problem is a failure to emphasize the right stuff. I always see trigonometry presented in terms of all six functions and arcfunctions and the relationships between them— this is a bunch of abstract stuff that most people don't care about and will never need; it's nuts to present all of this at once when the small piece of it needed for polar coordinate operations is so immediately and obviously useful.
Yeah, and I think you can even take the argument further. 14-year olds with little innate quantitative reasoning ability can be quite facile in Unity3D. And then the point is not how to teach introductory CS concepts. But rather how can they express themselves in 3D, VR, AR, etc. As digital natives, who have grown up with interactive entertainment, they grok the communicative power of new media much more readily than even their instructors might. And the outcome is that they are able to express their truths to their peers with a global reach that really was inconceivable back in Cynthia Solomon's time ;)
I would disagree - Alice[1], Scratch[2], and Snap![3] are all attempts to be beginner friendly; that is the entire area of block based programming. There are also attempts via Python with websites like CodeCombat[4].
However, I would say the issue is there is no "transition" to "real" programming languages. No one builds a Red-Black tree in block based programming and there is still an unrecognized issue about how "end-game" programming should be. Is it through layers of abstraction like corporate Java or is it completely linear with the current adoption trends of Jupyter and Data Science?
In my opinion, where the issue stands currently is that older languages like BASIC made the visual creation aspect of coding super easy. You could write 250 lines of code and you have a rudimentary space invaders game. Today, this requires external libraries, creating objects, etc. It used to simply be "HPLOT" to make graphics, now you have to introduce shaders.
What made writing games in BASIC fun 30 years ago was that amateur graphics weren't much different to professional graphics. But in 2020 the difference between amateur and professional graphics is huge and it's discouraging. So as others have said, things like Pico8 really help fill that gap.
Maybe I'm biased and jaded, but I find alice scratch and snap MUCH harder to use than just coding.
I think the fallacy is that because its bright and pretty and cartoony makes it easier to use. Sure it is more attractive to the youth but when they actually want to build something in their mind they are met with disappointment due to its limitations.
I do agree and its one of the reasons my current research focuses on type-based languages instead. However, I think the issue is specific to your "when they actually want to build something" line - what does this mean? I agree and think this is where some of my reservations come from, but what exactly are we wanting kids to do with code outside of the structured lesson? Maybe they are doing them, but because its not this magical "everyone converts to coding" switch, we aren't seeing it.
> In my opinion, where the issue stands currently is that older languages like BASIC made the visual creation aspect of coding super easy.
This is why I think fantasy consoles like the TIC-80 and PICO-8 are actually valuable educational tools. They still represent a BASIC-like syntax and quick development/play environment for a tiny fraction of what it would cost to buy a Commodore 64 or ZX Spectrum (never mind the convenience of running them on your desktop).
I have an idea for a simple language similar to basic but using emojis to represent functions and variables (really putting the "symbolic" in basic), with click or drag n drop from a toolbox rather than pure typing so everything is available at the start.
This would be a toy language designed for to introduce the world of programming to those who are learning to read. So for example, ⭕5 would draw a circle of size 5 where the cursor currently is. I have a page of notes for implementation but haven't made time to try it out yet.
I started working on a similar idea, called "Wildcard"... The idea was to create a lower cost alternative to Lego Mindstorms for programming simple robots. So "⬆5" would tell a robot to move forward 5 rotations. The other idea I was playing with was to remove the need to type at a keyboard... instead, a child would have a deck of cards with all the syntax they'd need, then they'd lay out their program out on a table or floor, and then use a camera + computer vision to read in the program.
The idea was if we issued one robot to each child, it would be cheaper to program the robot with a camera and deck of "code cards" than to also have to give budget for giving them a tablet or chromebook, too.
your idea (and hugs's) sound a lot like a pictographic version of netlogo's turtle programming. I believe netlogo is open source, so maybe you could just write a frontend that picks a nice subset of the netlogo functions and maps emojis to them?
That's almost where I'm stuck. I was going down a path where Wildcard would "simply" transpile to JavaScript and inherit JS semantics... But yeah, it's so close to Logo, I couldn't decide if I should transpile to Logo instead.
for the reason that my preschool kids can identify a circle from a picture but not the words typed, yes (which is where this is targeted). This wouldn't be programmed from a keyboard (which also is difficult for that age), rather a toolbox would have all the commands available and you would just tap or click or drag them to the program.
> programming language development is going again for "professionals"
Processing is the trust fund kid of programming languages. It is the epitome of the aesthetics of programming. It is literally purpose built for idiosyncratic graphics applications. It was hatched in the crucible of trust funded computing. It cannot, and will never be used, for meaningful software.
I am 100% enthused about programming thanks to Logo. My first buzz, when I told the computer to make a circle. I'll never forget the awe I had, that I could tell the computer what to do. I guess some of us are born for this life.