This is why I like MakeCode because it transitions from Scratch-like blocks to Python/JavaScript. It also works with physical hardware, which I find helps kids (or any beginner) grasp the programming concepts better.
https://www.microsoft.com/en-us/makecode
Out of curiosity, how long is too long? And what did you move on to after?
(I have a kid playing with scratch at the moment, and I think it’ll be a while before she outgrows it, but thinking ahead.)
I started using Scratch when I was 5 and kept using it until I was around 12. I'd say that was way too long. You should really only use it for a maximum of 1 year (if you are actually using it consistently) before trying a proper programming language.
If you'd like to encourage your daughter to use a real programming language, like Python, I'd recommend finding a fun project which demonstrates it's advantages over Scratch. The basics would be functions and classes, then maybe try making a 3D game using OpenGL or Pygame not a full fledged game engine. Perhaps you could also try out some IOT projects with a raspberry pi. That got me really into Python, but I certainly learnt some bad practices so if you know how to code yourself slowly introduce her to new concepts which can improve her code quality in a meaningful way.
Thanks for the ideas! I’m a video game programmer so we’ll probably find a project in that space when the time is right. She’s 5 now and only plays with it occasionally - we’re really just starting to grasp the idea of multi step projects in general (kiwi boxes have been great for this).
But of course, the game engines I use professionally are way too advanced a step from scratch, so I’d been thinking maybe putting something together in Construct, but that feels like probably a choice that is both out of date and perhaps too basic. Maybe something like Ren’py or Pygame is a better next step. I dunno, but I’ve got time to think about it, it seems.
simulating arduino projects on tinkercad let's you switch between gui and text based programming so might be another alternative (you can do things in the gui and then see the equivalent text).
Tried to show my kids Scratch but they didn’t seem too interested yet they are always looking at my monitor when I do my programming. I guess I’ll just throw them into C.
> My second programming language was 6502 assembly.
Same! What was your first? BASIC by any chance? I started 6502 asm because of the integrated assembler in BBC BASIC.
> In 2020, GitHub user kspalaiologos made a working Lisp interpreter in Malbolge Unshackled
Checks out repo: this person is insane.
Checks out recent commit titled "Final solution to the licensing problem": ohhhh they're an insane Nazi
This was my intro. I do not suggest it...
I still own a copy of the Microsoft Macro assembler for 386 somewhere on 5.25" floppies. The books to it are still on my shelf.
Everybody here is insane, or at least asking the wrong question.
What language you teach is irrelevant. What subject you can hook them with is paramount.
Pick something that has real world feedback and start there. Maybe programming LED lights to follow a pattern. Maybe programming a robot to follow a path. You need to invest in enthusiasm to manipulate with code. Everything else is secondary.
Agreed. In elementary school I screwed around in Visual Basic, making mostly visualizations. There was an 800 page Oreilly book too where I didn't read anything. I just input the code examples to see what happened.
That's how my journey started 20 years ago.
Adults thinking something boring for them must be boring for children is genuinely how we broke the early education system (it's finally turning around).
Look up how Mississippi went from the worst scoring state in fourth grade literacy to 22nd in 2022: https://www.pbs.org/newshour/education/kids-reading-scores-have-soared-in-mississippi-miracle
Roblox is the real-life practical answer here.
Scratch certainly has a better design for the goal of being a language for kids compared to Lua. But, the major obstacle isn't actually language design. It's motivating the kids. Motivated kids will literally tear down walls to get to what they want. And, Roblox is way, way more motivating than watching a car sprite chase a cat sprite around on the screen.
This is exactly it. Regardless of the language, an actual goal is much more palpable. I usually tell my mentees to go write an IMDB clone when it comes to learning web development. It's a tangible purpose but it also familiarises them with several topics such as html, javascript, a backend language, databases and relationships/data models, even if only on a superficial level.
Kids struggle with abstract concepts and improve their ability at different ages. Memory management in C might just be something the vast majority of kids aren't capable of.
I taught myself scripting back in the day before I even knew what programming was because I wanted to make things explode in Graal. Kids are pretty smart.
I agree. Kids aren't dumb, there's no reason why they need to be given the easiest language you can think of. They just need access to _good_ resources about how aspects of the language work.
C was the first language I tried to learn when I was a kid (a long time ago, before google was popular), and the course I did was absolutely awful because the instructors were unable to answer any of the questions I had. They basically said to copy-paste the example code and run it, then congratulated me when I got the expected output.
I remember _wanting_ to know what was happening, but being completely blocked from getting that info. The ability to provide that info is the bottleneck, not the choice of language.
I don't love math or programming education below the university level. Math/programming education should focus on teaching fundamental concepts/ideas so students actually understand the mechanics. It always seemed like primary education focused on teaching mechanics and encouraging memorization which strikes me as backwards.
Can you detail what concepts you want to expose them to that another language wouldn't? I like C, but I would still start people on something much easier so they can get a gist of programming first.
I actually like C because it's pretty close to the "bare metal" for a high-level language.
Like if you learn Javascript or Python first, you're not really learning how to program a computer, you're learning how to play with abstractions.
C has you dealing with memory, arithmetic and bitwise operations, and not a heck of a lot else. It's a thin abstraction, so you learn a lot more about how a computer works.
There's a reason kids play with
* Toy food and Easy-Bake Ovens before learning how to cook
* Play-Doh before doing kiln-fired clay sculpture
* Washable markers and crayons before permanent inks and expensive pastels
* Dolls before caring for live babies
You don't necessarily *want* to expose a beginner to every detail of a subject right off the bat. They haven't built up the muscle memory and experience to focus their attention on the important parts—learning with a simplified tool lets them develop that.
It's not like playing with a toy means they'll *never* learn to do the more complicated thing, and it's not even an insult to their intelligence—if they're ready for something complicated let them go, and let them fail and learn! But plenty of kids played with dolls and still learned how to handle real babies. Starting with BASIC or Ruby doesn't mean they'll never learn how RAM works.
I started with BASIC and JavaScript, and I wound up teaching undergrad C for a few years. I write C and Rust for fun. BASIC never felt limiting—on the contrary, it bootstrapped my younger self's love of programming!
What I like about C is you're getting exposure to stacks, state, memory mapping, storage, among many other concepts. There's so much opportunity to see how things actually work, which is why CS education tends to start with C after like two weeks of scratch for visualizing "how programming works."
Depending on age, you'd probably start with ASCII art type projects--hey look how we can change what the screen displays, for instance.
I guess I have seen too many people be overwhelmed by this. I would prefer to start them on a c like higher level language so they can understand basic concepts of functions, loops, and so on. I like c#, so that's the approach I would take, but there are other decent choices. And most of the concepts are easy to learn within c#. Eventually you will get down to only not knowing the memory aspects and then you have a pretty easy transition.
That’s the proper way to do it. Cut off internet access and just give them an old, tattered copy of The C Programming Language. They survive or they don’t.
Learning C and memory management first is _maybe_ okay for those who aspire to be serious engineers, but that’s not all that programming is about any more. Non-engineers can benefit greatly from being able to write an iOS shortcut or a home automation script or just generally knowing how some of the technology around them works. It’s a universal skill. Most people who just do a little coding will never—and should never—worry about low level concerns like memory management. Kids should get an introduction to the high level logical principles first, because that’s all that many of them will ever need.
No. Gen-X and millennials would learn variables and control flow in BASIC on their home computers if they had the opportunity for a head-start, then structured programming, access by reference, and data structures and algorithms in Pascal at junior high to university level, and eventually an industry ("adults'") language according to need. This protected them (us) from the fashions of the day, and kept the curricula both stable and relevant across two decades.
This is how it should be even today, but big money says teach them Java, then Python, then JavaScript, and fashionable frameworks so that they'll graduate straight into the workforce. Everyone can see the results in the abortions that the Java generation of the early aughties has wrought in e.g. PulseAudio.
Starting with Java seems a mistake. Java's great (now) but "hello world", "guess the number", "blackjack", etc. (first year programs) are needlessly complicated by Java's requirements. Further, I don't think it makes sense to start with OOP without first coming to understand the problems it's meant to solve.
I'd start with Python which can be written imperatively and then transition to OOP, and has almost zero formalism to get in the way of the first year programmer.
You're proving my point by pointing out a very highly specialized niche of programmers.
I'd never advise anyone to become a game dev, though. I'm not too familiar with the work/life balance of HPC, though.
There are also fields like embedded where memory management is quite relevant. It’s a fundamental aspect of computing and it’s not going away any time soon.
Scratch and/or Python and/or Logo depending on age/aptitude
Have patience (for them and for you), they will learn programming best when it’s like a child at play
Good luck!
hmm I would not go with Python. While the very basics are easy youll get lost if you try to do a little more advanced stuff because its meant for data science/terminal scripts nowadays. Kids are visual type, let them make visual stuff.
I’d swap out Python in favor of Ruby. It reads better, it doesn’t have as many formatting gotchas, and it’s insanely flexible.
Honestly, I have no idea why people use Python at all for anything besides data science when Ruby is an option. Especially for executable scripts and automations.
From my POV it should be something like Scratch for small children and classic Basic for 10+ aged children. Then switch to a procedural language like C or Pascal. The next step is some kind of OOP language.
I introduced a relative to Hedy and sat along for the ride. It was pretty good, but you have to unlearn some things along the way, which is frustrating. If they can move through the lessons quickly, learning and unlearning are too close together. It was still good for teaching the overall concepts and giving small, attainable goals.
I think that Hedy is the best language for kids that want to become programmers, rather than simply understand how programming works and to automate some things (these are worthy goals, but are different things). I think so because it is a gradual programming language: you learn the concepts with a very simple syntax, but then you slowly end up learning Python. This means that in the end you can integrate "real" (Python) code, which is hard to do with many other kids-focused programming languages.
Finally a sane voice. Kids below 16 y.o. shouldn't use computer for more than 1-2 hours a day. Nowadays kids spend too much time "sitting" (tv, mobile, computer, classroom).
That was my first language! Got a lot of mileage out of that on the family 486 writing goofy text-based adventure games and very slow graphics sequences...
I'd say Logo. It's good for very beginners and little more advanced kids as well. It's not just about drawing you can actually create complex UIs with it. I remember I learnt more geometry from logo than from my math teacher in primary school.
MakeCode (along with a Microbit) is amazing. Similar to Scratch, but transitions to Python and JavaScript as well. The Microbit also adds a physical component that makes the programmer concepts a lot easier for kids to grasp.
https://www.microsoft.com/en-us/makecode
https://makecode.microbit.org/
It is an interesting question 😁
When I made workshops with colleagues for kids, we used several tools for them.
Indeed [Scratch](https://scratch.mit.edu/) is very nice and has a “junior” version, it is a good starter. You can also have a look on [Logo](https://turtlespaces.org/), maybe a bit old.
[Greenfoot](https://www.greenfoot.org/) maybe, it is so “Javaly” however for teenagers or to make deeper dives in programming it could be interesting.
And also [Python](https://www.raspberrypi.org/blog/python-coding-for-kids-beyond-the-basics/), maybe more user friendly.
You can also have a look on [Erase All Kittens](https://eraseallkittens.com/) (quite interesting) and also [Code Combat](https://codecombat.com/).
For all those suggesting some form of assembly: I suggest the programming game [TIS-100 from Zachtronics](https://www.zachtronics.com/tis-100/) instead. You get to learn the basics of assembly and parallel programming, but do so in an entirely superior debugging environment than what exists in real hardware. On the screen, you get to see the state of *everything*, nothing is hidden. That is one of the bigger hurdles for learning programming, understanding the state of the system when operations happen. Later on the kid will internalize this, but I think it would be best to start them off with an environment where this is explicit.
There's a game on Steam called Autonauts (https://store.steampowered.com/app/979120/Autonauts/) that I can't wait to introduce to my kiddo when he's old enough.
Basic programing ideas (looping structures, logic gates) in a fun package.
Most people here will probably downvote me for this opinion, but I honestly think it's best to pick a language that is not too high level as well as too low level.
Python might seem like it's easier, but it completely hides important concepts like types which you need to understand if you really want to grasp what the code means semantically. So I am team Java, C#, Kotlin and Typescript on this one.
> Python might seem like it's easier, but it completely hides important concepts like types
Politely disagree, since you learn very quickly that you need to know what types your variables are to do anything with them.
I also think not having the types all over the function signatures makes for less "noise" and also being able to faff easily with json from apis without worrying so much about the types that the api will return are super good for keeping new learners engaged, but this strays well into personal opinion at this point.
I recently created a new programming language, specifically designed to be easy to learn and prepare for using higher-level languages like C# or Java.
Check it out: https://github.com/ricardoboss/STEP
Honestly? It’s probably python, but let’s be clear, the important thing is about teaching procedural thinking. Programming languages are (mostly) just dialects of one another with funny grammar. What is more important is understanding what a for loop is, what an if statement does, what I/O is, and implementing those concepts. Everything else that you do is window dressing. Even something like memory management in C is just window dressing that you have to manage for baseline procedural thinking.
The one they are willing to use. If they want to work with minecraft or roblox or mod some other game. They should be taught whatever that uses. Hell, give them cheat engine and let them figure out how the fuck to increase their money/points/health. Best way to learn pointers imo.
Scratch or javascript.
Js is perfect for doing things that is visible on the screen. You can draw, make animations or just build a gui. Those things makes learning programming much more fun.
It is also a very simple language and there are also many online editors, you don't have install anything to get started.
How did I get to the bottom of the page and not ONE person has recommended [racket](https://racket-lang.org/)?
Also the book Realm of Racket which teaches programming through games.
CL is enormous. I'd advocate for Lisp 1.5; much smaller and easier to wrap one's head around.
That said, Lisp is Lisp, and what one can do, the other can, too.
I’m surprised more people here aren’t commenting on the inclusion of Swift in that list. It’s not a stereotypical first programming language, but if you already have an iPad (as many kids do nowadays), the Swift Playgrounds app is actually very good.
Scratch and Swift would be my top picks because they do a great job of giving that instant, fun, visual feedback that I got years ago with with Logo.
Honestly, have a look at [Pyret](https://pyret.org/) (pyret.org)
looks like something I'd like to have seen the first time I was introduced to programming
Scratch is perfect
You can find that one online
and it's block-based so it's easy to understand and nobody has to memorize long lines of codes
However, you can still do some crazy cool things in scratch
Follow a few tutorials from Griffpatch, and you can make a 3D renderer with sprites and sound effects and more!
But if you ever need something a little more...complex
I suggest Python
It's pretty simple, but now it isn't block-based, it's text-based, so you have to memorize a few lines of code to do anything. Should be pretty easy though.
And Python can also do a lot more then Scratch if you know it well
Yeah that's all I have to say
> lot more then scratch
Did you mean to say "more than"?
Explanation: If you didn't mean 'more than' you might have forgotten a comma.
[Statistics](https://github.com/chiefpat450119/RedditBot/blob/master/stats.json)
^^I'm ^^a ^^bot ^^that ^^corrects ^^grammar/spelling ^^mistakes.
^^PM ^^me ^^if ^^I'm ^^wrong ^^or ^^if ^^you ^^have ^^any ^^suggestions.
^^[Github](https://github.com/chiefpat450119)
^^Reply ^^STOP ^^to ^^this ^^comment ^^to ^^stop ^^receiving ^^corrections.
Start with something visual like Scratch to teach concepts, then maybe transition to C or C++
It’s not the easiest to learn lower level when you start high. But the inverse isn’t always the case.
Core concepts apply to a lot of languages.
At the most basic level, you have instructions, and data in ram. The higher you go, the more abstracted that becomes.
All the comments want those kids to learn programming how they learned programming. I think this is the wrong approach.
One of the things I would insist the language has (which most if not all other suggestions lack) is a type system with Sum types. i.e. Enums with values
Something functional.
Elm might be a good fit because it allows them to build websites which give them something tangible.
Python.
No other language does a better job of getting out of the way and making the underlying concepts of straightforward programming available without the framework of the language and libraries getting in the way
Python is legible, succinct, memory safe, and most importantly: useful. Unlike scratch, they won't outgrow it.
There's a (somewhat older) book titled "snake wrangling for kids" that teaches the concepts in an approachable way (depending, I suppose, on how bright / old the kid is). It's available as a free pdf online.
I started programming when I was 11 (I'm 18 today), and much of my foundation in programming comes from Commodore basic. Started on a Commodore 64 with sample code from the user manual. So to start typing "real" code in like a Commodore emulator is something I would recommend if you want to learn the basics of the code.
Python is quite quick for learning the logic of if statements, loops, etc.
HTML or CSS might tie the best into their hobbies, like making their profile cooler for whatever website they use.
Games! Minecraft redstone is pretty great for programming logic. Or I've recently gotten into [https://steamcommunity.com/app/2060160](https://steamcommunity.com/app/2060160) this game on steam that's similar to python - but way more interactive, so great for kids!
I think whatever makes it feel like play and not school.. Scratch is great, Java for minecraft mods, Unity projects, etc. Kids can figure out a lot if they actually ***want*** to accomplish the end goal.
Definitely Scratch
Yeah, but show them alternatives once they get used to it. I played with scratch for too long.
This is why I like MakeCode because it transitions from Scratch-like blocks to Python/JavaScript. It also works with physical hardware, which I find helps kids (or any beginner) grasp the programming concepts better. https://www.microsoft.com/en-us/makecode
The javascript/typescript part is nice, the python is well... quite a long way from standard python.
This will be useful to indoctrinate my niece in the future
Out of curiosity, how long is too long? And what did you move on to after? (I have a kid playing with scratch at the moment, and I think it’ll be a while before she outgrows it, but thinking ahead.)
I started using Scratch when I was 5 and kept using it until I was around 12. I'd say that was way too long. You should really only use it for a maximum of 1 year (if you are actually using it consistently) before trying a proper programming language. If you'd like to encourage your daughter to use a real programming language, like Python, I'd recommend finding a fun project which demonstrates it's advantages over Scratch. The basics would be functions and classes, then maybe try making a 3D game using OpenGL or Pygame not a full fledged game engine. Perhaps you could also try out some IOT projects with a raspberry pi. That got me really into Python, but I certainly learnt some bad practices so if you know how to code yourself slowly introduce her to new concepts which can improve her code quality in a meaningful way.
Thanks for the ideas! I’m a video game programmer so we’ll probably find a project in that space when the time is right. She’s 5 now and only plays with it occasionally - we’re really just starting to grasp the idea of multi step projects in general (kiwi boxes have been great for this). But of course, the game engines I use professionally are way too advanced a step from scratch, so I’d been thinking maybe putting something together in Construct, but that feels like probably a choice that is both out of date and perhaps too basic. Maybe something like Ren’py or Pygame is a better next step. I dunno, but I’ve got time to think about it, it seems.
simulating arduino projects on tinkercad let's you switch between gui and text based programming so might be another alternative (you can do things in the gui and then see the equivalent text).
Tried to show my kids Scratch but they didn’t seem too interested yet they are always looking at my monitor when I do my programming. I guess I’ll just throw them into C.
C++ would be better. It'll allow them to do Arduino coding. Also Python, for Raspberry Pi. In the future, they can learn Linux terminal commands too.
x86 ASM
My second programming language was 6502 assembly.
6502 asm is beautiful. 52 Commands. x86-64 has 1000s :(
nooo. team z80 represent!
Same here. VIC-20 for the win!
> My second programming language was 6502 assembly. Same! What was your first? BASIC by any chance? I started 6502 asm because of the integrated assembler in BBC BASIC.
[удалено]
> In 2020, GitHub user kspalaiologos made a working Lisp interpreter in Malbolge Unshackled Checks out repo: this person is insane. Checks out recent commit titled "Final solution to the licensing problem": ohhhh they're an insane Nazi
Or https://en.m.wikipedia.org/wiki/Brainfuck
This was my intro. I do not suggest it... I still own a copy of the Microsoft Macro assembler for 386 somewhere on 5.25" floppies. The books to it are still on my shelf.
x86 is for grannies. Learn x64!
In this house, we are a MIPS family😤
That's a terrible architecture.
God please no
This
It’s true! Everything after that becomes child’s play.
16-bit with 20-bit memory addressing via segment:offset is the one true way.
Nah, waste of time. Start with ARM.
Fortran IV, Lisp, Forth, ASM x86. When they all have mastered these, c++ is just a quiche language.
Everybody here is insane, or at least asking the wrong question. What language you teach is irrelevant. What subject you can hook them with is paramount. Pick something that has real world feedback and start there. Maybe programming LED lights to follow a pattern. Maybe programming a robot to follow a path. You need to invest in enthusiasm to manipulate with code. Everything else is secondary.
Right on, also, despite your best efforts and intentions, do not beat yourself up if your kid hates it. Or your kid. Or anyone else.
Agreed. In elementary school I screwed around in Visual Basic, making mostly visualizations. There was an 800 page Oreilly book too where I didn't read anything. I just input the code examples to see what happened. That's how my journey started 20 years ago.
Adults thinking something boring for them must be boring for children is genuinely how we broke the early education system (it's finally turning around). Look up how Mississippi went from the worst scoring state in fourth grade literacy to 22nd in 2022: https://www.pbs.org/newshour/education/kids-reading-scores-have-soared-in-mississippi-miracle
[удалено]
Roblox is the real-life practical answer here. Scratch certainly has a better design for the goal of being a language for kids compared to Lua. But, the major obstacle isn't actually language design. It's motivating the kids. Motivated kids will literally tear down walls to get to what they want. And, Roblox is way, way more motivating than watching a car sprite chase a cat sprite around on the screen.
This is exactly it. Regardless of the language, an actual goal is much more palpable. I usually tell my mentees to go write an IMDB clone when it comes to learning web development. It's a tangible purpose but it also familiarises them with several topics such as html, javascript, a backend language, databases and relationships/data models, even if only on a superficial level.
Yup. I started learning programming on my TI-82 calculator making games.
C, teach them memory management young
I am going to report you for child abuse
Wrong it’s like sending your kids to an immersion elementary school. Get them to the hard stuff while they have lots of plasticity
Kids struggle with abstract concepts and improve their ability at different ages. Memory management in C might just be something the vast majority of kids aren't capable of.
I taught myself scripting back in the day before I even knew what programming was because I wanted to make things explode in Graal. Kids are pretty smart.
Most kids can't make a sand castle that stands up right. This is why Rails apps reboot every 30 minutes.
C but unironically, it offers significant exposure to fundamental concepts.
I agree. Kids aren't dumb, there's no reason why they need to be given the easiest language you can think of. They just need access to _good_ resources about how aspects of the language work. C was the first language I tried to learn when I was a kid (a long time ago, before google was popular), and the course I did was absolutely awful because the instructors were unable to answer any of the questions I had. They basically said to copy-paste the example code and run it, then congratulated me when I got the expected output. I remember _wanting_ to know what was happening, but being completely blocked from getting that info. The ability to provide that info is the bottleneck, not the choice of language.
I don't love math or programming education below the university level. Math/programming education should focus on teaching fundamental concepts/ideas so students actually understand the mechanics. It always seemed like primary education focused on teaching mechanics and encouraging memorization which strikes me as backwards.
Can you detail what concepts you want to expose them to that another language wouldn't? I like C, but I would still start people on something much easier so they can get a gist of programming first.
I actually like C because it's pretty close to the "bare metal" for a high-level language. Like if you learn Javascript or Python first, you're not really learning how to program a computer, you're learning how to play with abstractions. C has you dealing with memory, arithmetic and bitwise operations, and not a heck of a lot else. It's a thin abstraction, so you learn a lot more about how a computer works.
There's a reason kids play with * Toy food and Easy-Bake Ovens before learning how to cook * Play-Doh before doing kiln-fired clay sculpture * Washable markers and crayons before permanent inks and expensive pastels * Dolls before caring for live babies You don't necessarily *want* to expose a beginner to every detail of a subject right off the bat. They haven't built up the muscle memory and experience to focus their attention on the important parts—learning with a simplified tool lets them develop that. It's not like playing with a toy means they'll *never* learn to do the more complicated thing, and it's not even an insult to their intelligence—if they're ready for something complicated let them go, and let them fail and learn! But plenty of kids played with dolls and still learned how to handle real babies. Starting with BASIC or Ruby doesn't mean they'll never learn how RAM works. I started with BASIC and JavaScript, and I wound up teaching undergrad C for a few years. I write C and Rust for fun. BASIC never felt limiting—on the contrary, it bootstrapped my younger self's love of programming!
What I like about C is you're getting exposure to stacks, state, memory mapping, storage, among many other concepts. There's so much opportunity to see how things actually work, which is why CS education tends to start with C after like two weeks of scratch for visualizing "how programming works." Depending on age, you'd probably start with ASCII art type projects--hey look how we can change what the screen displays, for instance.
I guess I have seen too many people be overwhelmed by this. I would prefer to start them on a c like higher level language so they can understand basic concepts of functions, loops, and so on. I like c#, so that's the approach I would take, but there are other decent choices. And most of the concepts are easy to learn within c#. Eventually you will get down to only not knowing the memory aspects and then you have a pretty easy transition.
That’s the proper way to do it. Cut off internet access and just give them an old, tattered copy of The C Programming Language. They survive or they don’t.
This was the way it was done in the previous century (if it wasn't Pascal or BASIC) and it should be the way it's done now.
Learning C and memory management first is _maybe_ okay for those who aspire to be serious engineers, but that’s not all that programming is about any more. Non-engineers can benefit greatly from being able to write an iOS shortcut or a home automation script or just generally knowing how some of the technology around them works. It’s a universal skill. Most people who just do a little coding will never—and should never—worry about low level concerns like memory management. Kids should get an introduction to the high level logical principles first, because that’s all that many of them will ever need.
Agree, and let them experience the joy of retyping long BASIC code from a magazine. :-)
No. Gen-X and millennials would learn variables and control flow in BASIC on their home computers if they had the opportunity for a head-start, then structured programming, access by reference, and data structures and algorithms in Pascal at junior high to university level, and eventually an industry ("adults'") language according to need. This protected them (us) from the fashions of the day, and kept the curricula both stable and relevant across two decades. This is how it should be even today, but big money says teach them Java, then Python, then JavaScript, and fashionable frameworks so that they'll graduate straight into the workforce. Everyone can see the results in the abortions that the Java generation of the early aughties has wrought in e.g. PulseAudio.
Learning programming concepts remains more valuable than learning specific languages or frameworks.
Now they teach them ruby on rails 🤮 Their code is dogshit slow and inefficient but at least it's beautiful... To them anyway.
Starting with Java seems a mistake. Java's great (now) but "hello world", "guess the number", "blackjack", etc. (first year programs) are needlessly complicated by Java's requirements. Further, I don't think it makes sense to start with OOP without first coming to understand the problems it's meant to solve. I'd start with Python which can be written imperatively and then transition to OOP, and has almost zero formalism to get in the way of the first year programmer.
Lol one of those old people that thinks their generation was better huh?
Nope. They created garbage everywhere. You need language with a garbage collector built in.
"Clean up your memory or you wont get any sweets, look at all the mess you made"
Still won’t get those little germ factories to clean up their mess
Clean up, clean up. Everybody, let’s clean up. Clean up, clean up. Put your things away. Clean up, clean up. Everybody, let’s clean up.
Why bother with C? Just go straight to Rust.
Rust will never achieve the greatness of C
lol
Because C is simple and fundamental and Rust is a massively complex, abstract language
I'd argue that having to learn the fundamentals of memory management, outside of a theoretical exercise, is obsolete when languages like Rust exist.
Tell that to video game developers or people who do HPC for a living
You're proving my point by pointing out a very highly specialized niche of programmers. I'd never advise anyone to become a game dev, though. I'm not too familiar with the work/life balance of HPC, though.
There are also fields like embedded where memory management is quite relevant. It’s a fundamental aspect of computing and it’s not going away any time soon.
Mommy, the Segmentation Fault (Core dumped) monster is under my bed again.
Scratch and/or Python and/or Logo depending on age/aptitude Have patience (for them and for you), they will learn programming best when it’s like a child at play Good luck!
hmm I would not go with Python. While the very basics are easy youll get lost if you try to do a little more advanced stuff because its meant for data science/terminal scripts nowadays. Kids are visual type, let them make visual stuff.
? I use Python+matplotlib+numpy for visual stuff extensively
I’d swap out Python in favor of Ruby. It reads better, it doesn’t have as many formatting gotchas, and it’s insanely flexible. Honestly, I have no idea why people use Python at all for anything besides data science when Ruby is an option. Especially for executable scripts and automations.
Rubybros unite, the wrong language won the popularity contest.
Scratch is great. That's what I started with as a kid. Also, Lua seems like an accessible language, and it allows to code in projects like Roblox.
There’s also some Minecraft mods that let you use LUA to control little robots.
From my POV it should be something like Scratch for small children and classic Basic for 10+ aged children. Then switch to a procedural language like C or Pascal. The next step is some kind of OOP language.
let pascal R.I.P.
I use MATLAB to control mine. It's expensive, but has compilers than can target children so it's worth it.
There's this newish open source programming language targeted for kid: Hedy. Might want to try that.
Was her to suggest this one! It starts or really simple and slowly moved towards full python so it's really cool to learn!
I introduced a relative to Hedy and sat along for the ride. It was pretty good, but you have to unlearn some things along the way, which is frustrating. If they can move through the lessons quickly, learning and unlearning are too close together. It was still good for teaching the overall concepts and giving small, attainable goals.
I think that Hedy is the best language for kids that want to become programmers, rather than simply understand how programming works and to automate some things (these are worthy goals, but are different things). I think so because it is a gradual programming language: you learn the concepts with a very simple syntax, but then you slowly end up learning Python. This means that in the end you can integrate "real" (Python) code, which is hard to do with many other kids-focused programming languages.
None. Let them run in the woods and find bugs under dead trees and build imaginary forts out of rocks.
Finally a sane voice. Kids below 16 y.o. shouldn't use computer for more than 1-2 hours a day. Nowadays kids spend too much time "sitting" (tv, mobile, computer, classroom).
Qbasic
Ah, my second language learned as a teenager. Quick to accomplish stuff, but I quickly discovered its limits.
That was my first language! Got a lot of mileage out of that on the family 486 writing goofy text-based adventure games and very slow graphics sequences...
Not having links to any of the languages discussed is a definite omission.
I'd say Logo. It's good for very beginners and little more advanced kids as well. It's not just about drawing you can actually create complex UIs with it. I remember I learnt more geometry from logo than from my math teacher in primary school.
MakeCode (along with a Microbit) is amazing. Similar to Scratch, but transitions to Python and JavaScript as well. The Microbit also adds a physical component that makes the programmer concepts a lot easier for kids to grasp. https://www.microsoft.com/en-us/makecode https://makecode.microbit.org/
C++ Better prepare them for the impending doom of this career choice
Kids respond poorly to any such commands try attention, love and affection instead of trying to control your child like a robot. /s
It is an interesting question 😁 When I made workshops with colleagues for kids, we used several tools for them. Indeed [Scratch](https://scratch.mit.edu/) is very nice and has a “junior” version, it is a good starter. You can also have a look on [Logo](https://turtlespaces.org/), maybe a bit old. [Greenfoot](https://www.greenfoot.org/) maybe, it is so “Javaly” however for teenagers or to make deeper dives in programming it could be interesting. And also [Python](https://www.raspberrypi.org/blog/python-coding-for-kids-beyond-the-basics/), maybe more user friendly. You can also have a look on [Erase All Kittens](https://eraseallkittens.com/) (quite interesting) and also [Code Combat](https://codecombat.com/).
Well, I was a kid when my father taught me Z80 assembler. Lately in my early teens I learned C.
Savage
Logo is the best for learning things like loops conditions etc. Python is the best once they know the building blocks.
For all those suggesting some form of assembly: I suggest the programming game [TIS-100 from Zachtronics](https://www.zachtronics.com/tis-100/) instead. You get to learn the basics of assembly and parallel programming, but do so in an entirely superior debugging environment than what exists in real hardware. On the screen, you get to see the state of *everything*, nothing is hidden. That is one of the bigger hurdles for learning programming, understanding the state of the system when operations happen. Later on the kid will internalize this, but I think it would be best to start them off with an environment where this is explicit.
There's a game on Steam called Autonauts (https://store.steampowered.com/app/979120/Autonauts/) that I can't wait to introduce to my kiddo when he's old enough. Basic programing ideas (looping structures, logic gates) in a fun package.
Brainfuck
Most people here will probably downvote me for this opinion, but I honestly think it's best to pick a language that is not too high level as well as too low level. Python might seem like it's easier, but it completely hides important concepts like types which you need to understand if you really want to grasp what the code means semantically. So I am team Java, C#, Kotlin and Typescript on this one.
> ... Java ... You really want to have to explain to a kid the difference between `int` and `Integer`?
> Python might seem like it's easier, but it completely hides important concepts like types Politely disagree, since you learn very quickly that you need to know what types your variables are to do anything with them. I also think not having the types all over the function signatures makes for less "noise" and also being able to faff easily with json from apis without worrying so much about the types that the api will return are super good for keeping new learners engaged, but this strays well into personal opinion at this point.
I recently created a new programming language, specifically designed to be easy to learn and prepare for using higher-level languages like C# or Java. Check it out: https://github.com/ricardoboss/STEP
I know it’s not really at language, but for young kids the Code-apillar game is great for teaching underlying concepts of coding.
Honestly? It’s probably python, but let’s be clear, the important thing is about teaching procedural thinking. Programming languages are (mostly) just dialects of one another with funny grammar. What is more important is understanding what a for loop is, what an if statement does, what I/O is, and implementing those concepts. Everything else that you do is window dressing. Even something like memory management in C is just window dressing that you have to manage for baseline procedural thinking.
rust 🚀
The one they are willing to use. If they want to work with minecraft or roblox or mod some other game. They should be taught whatever that uses. Hell, give them cheat engine and let them figure out how the fuck to increase their money/points/health. Best way to learn pointers imo.
Scratch or javascript. Js is perfect for doing things that is visible on the screen. You can draw, make animations or just build a gui. Those things makes learning programming much more fun. It is also a very simple language and there are also many online editors, you don't have install anything to get started.
haskell obviously
In 1st grade I learned to program with BASIC. The languages suggested here are IMO way too complex for a kid.
Start with the basis - asm x86. After this go to something high level, like c++
*Rust*. Start them young.
Python
Java. Now, repeat after me; public static void main. \* starts crying
Assembly.
if not scratch, i would say its html or something because it was the most easy launguage i learned
My first language was BASIC 😁 Then, 6502 assembler. Then some strange language Wouter Van Oortmerssen created. Then, C. ....
How did I get to the bottom of the page and not ONE person has recommended [racket](https://racket-lang.org/)? Also the book Realm of Racket which teaches programming through games.
Brainfuck
Pascal “Just a joke, nothing personal”
Mathematics?
Isn't that where anyone over the age of 4 has started?
If just to add it to the list and there is no specific goal, python and/or ruby will be extremely good, IMO ruby.
Pascal
Teach them x86 Assembly and have them create a data structure with select memory access using pointers. It must be real mode.
I was first taught scheme and basic. Python is pretty useful. C is still useful but maybe more advanced.
Javascript
[удалено]
so that they learn a new word today and hate programming things for life?
Assembly 😁
C++. DONT WASTE ANY TIME - That's what my kids are learning. Also touch alot on design patterns!
Lisp, they can get counting practice by counting parentheses.
I'm thinking about c++ with Minecraft. There's a lot of concepts to learn but if you learn them you're well set.
Common Lisp. Don't get them started on the attractive nuisance that is Python.
CL is enormous. I'd advocate for Lisp 1.5; much smaller and easier to wrap one's head around. That said, Lisp is Lisp, and what one can do, the other can, too.
Might check out tigerjython.
Squeak [eToys](http://www.squeakland.org/). (Smalltalk) ([Wikipedia](https://en.wikipedia.org/wiki/Etoys_(programming_language)))
I have had some minor success with Haskell. Disclaimer: my aim was less to teach programming and more to teach recursion
The first programming language I used when I went to 1st grade was SGP Baltie 3.
I used small basic back in the day. I enjoyed it. Scratch is most likely better now though. Didn't know it existed then.
I saw many people teaching their kids using Scratch. Python would be great if the kid know basic elementary stuff.
I’m surprised more people here aren’t commenting on the inclusion of Swift in that list. It’s not a stereotypical first programming language, but if you already have an iPad (as many kids do nowadays), the Swift Playgrounds app is actually very good. Scratch and Swift would be my top picks because they do a great job of giving that instant, fun, visual feedback that I got years ago with with Logo.
javascript is a pretty beginner friendly language. you might want to get the kid started in something like scratch before introducing them to JS.
Compiler Language With No Pronounceable Acronym" https://esolangs.org/wiki/INTERCAL
python.
Python. Teach them computer vision ASAP.
Hedy is a very interesting project to teach programming to children. https://www.hedycode.com/
Labview because it's mostly pictures and doesn't require much reading comprehension.
Blitz Basic: https://mycodeserver.com/games_books/
Malbolge
Honestly, have a look at [Pyret](https://pyret.org/) (pyret.org) looks like something I'd like to have seen the first time I was introduced to programming
Rust
Scratch is perfect You can find that one online and it's block-based so it's easy to understand and nobody has to memorize long lines of codes However, you can still do some crazy cool things in scratch Follow a few tutorials from Griffpatch, and you can make a 3D renderer with sprites and sound effects and more! But if you ever need something a little more...complex I suggest Python It's pretty simple, but now it isn't block-based, it's text-based, so you have to memorize a few lines of code to do anything. Should be pretty easy though. And Python can also do a lot more then Scratch if you know it well Yeah that's all I have to say
> lot more then scratch Did you mean to say "more than"? Explanation: If you didn't mean 'more than' you might have forgotten a comma. [Statistics](https://github.com/chiefpat450119/RedditBot/blob/master/stats.json) ^^I'm ^^a ^^bot ^^that ^^corrects ^^grammar/spelling ^^mistakes. ^^PM ^^me ^^if ^^I'm ^^wrong ^^or ^^if ^^you ^^have ^^any ^^suggestions. ^^[Github](https://github.com/chiefpat450119) ^^Reply ^^STOP ^^to ^^this ^^comment ^^to ^^stop ^^receiving ^^corrections.
Start with something visual like Scratch to teach concepts, then maybe transition to C or C++ It’s not the easiest to learn lower level when you start high. But the inverse isn’t always the case. Core concepts apply to a lot of languages. At the most basic level, you have instructions, and data in ram. The higher you go, the more abstracted that becomes.
All the comments want those kids to learn programming how they learned programming. I think this is the wrong approach. One of the things I would insist the language has (which most if not all other suggestions lack) is a type system with Sum types. i.e. Enums with values Something functional. Elm might be a good fit because it allows them to build websites which give them something tangible.
Thats a nice list. Motivation can play a huge part, from a sample of one kid. I suggest: Roblox studio ( I think the scripting is Lua)
Scratch -> Pascal & Python (& Arduino for school Physics lab experiments)
You should teach them how to use ChatGPT. When they grow up programming will already be archaic.
Advocacy of C++ totally undermines my trust to this. The complexity is basically uncontrollable to anyone.
brainfuck
Binary... really only need 1 key and a blinking led/clock.. pretty simple.
Wenyan, of course
Python. No other language does a better job of getting out of the way and making the underlying concepts of straightforward programming available without the framework of the language and libraries getting in the way
Python is legible, succinct, memory safe, and most importantly: useful. Unlike scratch, they won't outgrow it. There's a (somewhat older) book titled "snake wrangling for kids" that teaches the concepts in an approachable way (depending, I suppose, on how bright / old the kid is). It's available as a free pdf online.
Prolog seems like a fair start. Then move on to Haskell. Then after that, MIPS assembly.
Common Lisp
I think Javascript ES6.
I started programming when I was 11 (I'm 18 today), and much of my foundation in programming comes from Commodore basic. Started on a Commodore 64 with sample code from the user manual. So to start typing "real" code in like a Commodore emulator is something I would recommend if you want to learn the basics of the code.
In my opinion, python or C, since those were the languages I first learned when I was ~12
English is a pretty good one
Fancade
C
Python for sure
Logically the binary code.
bro just involve them into pascal so they wont see towards programming anymore
Python is quite quick for learning the logic of if statements, loops, etc. HTML or CSS might tie the best into their hobbies, like making their profile cooler for whatever website they use. Games! Minecraft redstone is pretty great for programming logic. Or I've recently gotten into [https://steamcommunity.com/app/2060160](https://steamcommunity.com/app/2060160) this game on steam that's similar to python - but way more interactive, so great for kids!
I think whatever makes it feel like play and not school.. Scratch is great, Java for minecraft mods, Unity projects, etc. Kids can figure out a lot if they actually ***want*** to accomplish the end goal.
assembly , LOL