Would be real nice being the open source option to not have their communications locked to proprietary services (Discord, Microsoft GitHub’s forge + discussions) & had alternatives mirrored/bridged.
+1 to LÖVE, it's a capable rapid prototyping tool. I learned programming on QBasic, but if I were starting out today then LÖVE is the tool I would want to be handed.
Let’s not forget P5js which has a long and esteemed history of helping to teach kids and more to program. It’s browser based so it’s compatible with every OS and requires no install. FOSS with an active community of users and contributors. I personally taught some middle schoolers with zero programming experience how to make interactive monsters in 1 hour. It was awesome!
I've been a fan of, and a hacker of LOAD81 since antirez released it, and have put it in tons of places in order to induce hackerdom on kids and adults, alike. Its one of my favourite projects to bust out when someone tells me they want a low-impact, easy way of learning programming.
And since then, I've helped a few of those aspiring programmers become Lua gods! LOAD81 is really a gateway to a lot of wonderful things .. easy/simple programming in Lua, to SDL .. to the Lua VM .. to exending LOAD81 .. to an introduction to antirez other cool projects (redis, lol!) and on it goes ..
So, thank you antirez, this is probably one of my most cloned repo's over the years. ;) I should probably clean up some of my PR's and give you a bit of a laugh to review, one of these days (I added sfxr for sound effects, joystick support, MIDI and a few other things along the way ..)
Shameless plug for my own offering in this area - Kojo (15 years old and still going strong!): https://www.kogics.net/kojo
It's based on Scala, supports turtle (imperative) graphics, picture (functional) graphics, gaming at different levels (imperative, functional, OO), and more...
Anything like this should be compared to Love2D which is the gold standard. LuaJIT and lots of great libraries wrapped into extremely simple lua functions.
I learned to program in Codea since I only had access to an iPad when I was younger. I published my first game on the App Store with it and threw me into the world of Objective-C. I'm really glad to see people are still using it to learn to program.
To this day, I still believe it's one of the best ways to learn to program:
- You're exposed to low-level primitives instead of complicated high-level frameworks (like Unity) that abstract the fun/educational code away.
- The Lua manual is arguably the best programming manual for students learning to program.
- Includes a built-in GLSL shader editor makes advanced graphics programming a small stepping stone.
- They automatically shipped in-depth examples with the app that are intentionally built for learning by reading the code.
- In-app docs encouraged discovering new APIs; I took it as a challenge to use all of the APIs they exposed and learned a lot in the process.
- No package managers, no complicated install steps, no security concerns, and a unified editor.
P.S. If you have an iPad and haven't played Two Lives Left's Crabitron [1] – it's easily the most creative game shipped for iPad.
I was looking for something to teach 11-year-olds a couple of years ago, and ended up using Python with a turtle graphics library; this would have been another great alternative.
Programming using a language like Lua has the advantage over Scratch-like environments (which a friend suggested I use instead) that you can talk about your code more easily if it is based on keyboard entry of keywords and operators
rather than GUI events (such as moving graphical blocks by drag and drop) - although that is based on my intuition rather than backed up by any empirical study (please let me know if you are aware of one to support or refute this).
Lua as a teaching language’s got a strength for everyone - if you’re a pragmatic person, Lua offers a fantastic offramp to gamedev; if you’re a theoretically-inclined person, Lua’s an elegant language - and it’s wonderful to formative programming experiences with elegant languages. (I started with SICP Scheme.)
I've taught programming to beginners a fair bit, adults, teens, and children, in several languages, and lua is the worst of them.
The initial learning hump in programming is difficult and frustrating and lua does nothing to alleviate that. The main resource learners do have is curiosity, and usually an interest in some goal like making a game or website for a particular purpose.
Lua gets them bogged down in writing string manipulation functions that aren't in the standard library or whatever. One of the main things learners want to do is make an http request to an api, you need a library for that. There's no obvious & reliable way to get one, now your beginners are trying to configure luarocks or compile C modules.
To be clear lua is fine, great even, it's an incredible technical accomplishment. But the spiritual admiration experienced programmers have for the simplicity of implementation does not matter to a beginner. Its minimal standard lib and flexible distribution methods are a liability to teaching. I've never seen a language more reliably kill that learner's spark that is the best asset of someone new to coding.
This is somewhat alleviated if you're using it in a controlled environment for a specific goal, like roblox scripting or love. I've had success with that and would do it again. But as a general introduction to programming it's terrible.
You're absolutely right re: the lack of batteries and bureaucracy used – I've only taught programming to teens in the context of recreational after-school courses, where kids know about Roblox and Garry's Mod (unfortunately through "skibidi toilet"), already have that context and pre-installed ideas with gaming. For advanced enrichment, I find that kids also love learning graphics techniques like raytracing via LÖVE, 2D shadows via vector operations, physics concepts like springs etc. (with a suitable pixel-graphics harness).
Now that you point it out, I'm in agreement with your comment about how Python would be a recipe for counterproductive frustration in many, many other contexts, where people have many other contexts and real-world experiences that motivate coding.
I really do respect the challenge of teaching to very different age ranges, and I acknowledge I've only taught in one context! I'm curious – what you do find engages children vs. adults? (I imagine kids might actually love making Discord bots etc.)
I'm mulling over a proposal for a community ed. class in my local community college about "programming for accountants" – I've informally heard from some accountant friends that they're really motivated to learn Excel macros for example with very bespoke accounting worklfows – but I'm dreading the thought of VBA.
I think the most important part at all ages is to connect it to something they actually want to do, and remove as many of the "artificial" barriers to that as possible like tooling configuration, anything beyond rudimentary command line operations, C-style memory allocation and type finessing. It's easier to come back on that stuff once they have some confidence & context for it.
With kids you kind of have to tease out their motivations. A lot of them default to "make a game" because it's something they know and it's tangible, but once they start to see the potential they reorient. For example I've had multiple "game dev" classes devolve into "pull live sports scores and text it to me" once they realize how possible that is.
I've had discord bots brought up before by multiple kids, so that is a good one too. Generative art is another, or like I've seen really academically-focused kids get excited about just using jupyter to make graphs. The younger they are the bigger the swings between excitement and frustration, and the more your value shifts from technical prowess to emotional nurturer.
When I taught adults it was the "fundamentals of programming" module of a web dev bootcamp, the first thing they encountered there. For the most part these were disciplined motivated professionals and the thing they actually wanted to do was learn web development. So it was pretty easy to connect to their goals by just saying like "trust me you need this."
I haven't done a specific goal-oriented focused class like that for adults. But I think the main thing is still just keep it pointed towards the target and don't get bogged down in configuration or tooling. The great thing about an environment like roblox or I assume excel is that you have the total runtime & dev env right there without having to deal with external tools.
Genuine thanks for the advice! For the “accountants’” course I might actually go for Juypter for data wrangling and visualization, now that you suggest it - there might be some interest from accountants in branching out there, and I get to teach about data structures and thinking about transformations and queries.
> But as a general introduction to programming it's terrible.
It’s just a terrible language. Full stop.
Lua is touted by supporters as this orgasmic language.
But there’s a reason it’s relegated to the role of scripting language embedded in something else. It’s small, sure, but it *sucks* in literally every way other way from functionality, to tools, to libraries, to community.
Lua is a fine language. You can do wonderful, delightful things with it.
I've used it in million-dollar products where other languages cowered in fear at the memory BOM. Lua can go places many other programming lanuages simply cannot, such as in embedded/low resource systems, high performance engines, and even scientific realms.
Its not 'just a scripting language', as if that were some sort of valid pejorative.
On top of that, its not just a "language" but also can be used to create an extremely powerful engine for any application, systems software, or high-profile component.
Its a highly flexible and powerful VM-based language which can be wired into EVERYTHING and ANYTHING a competent programmer might find worthwhile.
Lua can do anything and everything, from teaching tools and video games, to network switching equipment to high-precision jet fuel analysis systems.
(Disclaimer: I've shipped all of these types of products using Lua.)
In industrial settings we use ladder logic diagrams, a visual programming language based off of electrical ladder diagrams, and I wholeheartedly agree with this. It is so much easier discussing Python web scraping programs compared to explaining ladder logic. Though the latter was made easier with physical inputs/outputs some are located a good distance away from the PLC, and anything digital had to be shown to be effectively discussed.
Turtle graphics is one of the "batteries" included with Python; I used Python with the turtle library to introduce my nephew to some of the basics of programming a few years ago. Even got to show him function definitions by first coding each instance of a repeated part of the picture separately, and then saying "Now this is what programmers call 'refactoring'" and then pulling the repeated bit out into a function with different call sites and parameters.
He was excited enough about it to want to learn about robotics and aspire to be a programmer for Mars rovers and the like.
The nice thing about Python is that because it's so pervasive as a teaching language, there are many tools for it that specifically cater to this niche. In particular, https://thonny.org is very nice for explaining basic programming concepts like expression evaluation and function calls.
And yeah, turtle graphics is the time-honored method of teaching things like loops, recursion, and parametrization via functions step by step in a way that is visually intuitive. Things like polygons, stars, spirals, and eventually basic fractals like snowflakes and ferns.
Hey, what about merging some of the pending PR's on LOAD81, one of these days? I've got a few more I'll clean up and send your way - SFXR support, for sound effects, joystick (already in the PR queue), MIDI, and a first pass at SVG ..
That's a lot of cool stuff. I'll try to merge them. It's not for lack of interest but for focus concerns (too many projects very the years). I'll also check if I can add some official collaborators to the project, so that some merging/development can be performed without any help from myself. Thanks for this message.
Title should say it's 13 years old and currently unmaintained.
BTW: a modern, maintained alternative (With Python instead of Lua) would be Pyxel (https://github.com/kitao/pyxel -> discussion: https://news.ycombinator.com/item?id=40899520).
There are several alternatives using Lua too, including for instance PICO-8 https://www.lexaloffle.com/pico-8.php
And TIC-80 (https://tic80.com/). It can be used with "lua, ruby, js, moon, fennel, scheme, squirrel, wren, wasm, janet or python".
Would be real nice being the open source option to not have their communications locked to proprietary services (Discord, Microsoft GitHub’s forge + discussions) & had alternatives mirrored/bridged.
Processing and LÖVE are also similar.
+1 to LÖVE, it's a capable rapid prototyping tool. I learned programming on QBasic, but if I were starting out today then LÖVE is the tool I would want to be handed.
It's good for final product too. Moonring is an excellent game by Fluttermind, and written in LÖVE
It's a labour of love - also add Balatro to that list.
[dead]
Another interesting one is LowRes NX, a contemporary project that uses BASIC: https://lowresnx.inutilis.com/
Solar2d covers a similar space https://solar2d.com/
It has a few changes dinduring 2020. Were all of them reverted?
Let’s not forget P5js which has a long and esteemed history of helping to teach kids and more to program. It’s browser based so it’s compatible with every OS and requires no install. FOSS with an active community of users and contributors. I personally taught some middle schoolers with zero programming experience how to make interactive monsters in 1 hour. It was awesome!
https://p5js.org/
I've been a fan of, and a hacker of LOAD81 since antirez released it, and have put it in tons of places in order to induce hackerdom on kids and adults, alike. Its one of my favourite projects to bust out when someone tells me they want a low-impact, easy way of learning programming.
And since then, I've helped a few of those aspiring programmers become Lua gods! LOAD81 is really a gateway to a lot of wonderful things .. easy/simple programming in Lua, to SDL .. to the Lua VM .. to exending LOAD81 .. to an introduction to antirez other cool projects (redis, lol!) and on it goes ..
So, thank you antirez, this is probably one of my most cloned repo's over the years. ;) I should probably clean up some of my PR's and give you a bit of a laugh to review, one of these days (I added sfxr for sound effects, joystick support, MIDI and a few other things along the way ..)
Shameless plug for my own offering in this area - Kojo (15 years old and still going strong!): https://www.kogics.net/kojo
It's based on Scala, supports turtle (imperative) graphics, picture (functional) graphics, gaming at different levels (imperative, functional, OO), and more...
Anything like this should be compared to Love2D which is the gold standard. LuaJIT and lots of great libraries wrapped into extremely simple lua functions.
I learned to program in Codea since I only had access to an iPad when I was younger. I published my first game on the App Store with it and threw me into the world of Objective-C. I'm really glad to see people are still using it to learn to program.
To this day, I still believe it's one of the best ways to learn to program:
- You're exposed to low-level primitives instead of complicated high-level frameworks (like Unity) that abstract the fun/educational code away.
- The Lua manual is arguably the best programming manual for students learning to program.
- Includes a built-in GLSL shader editor makes advanced graphics programming a small stepping stone.
- They automatically shipped in-depth examples with the app that are intentionally built for learning by reading the code.
- In-app docs encouraged discovering new APIs; I took it as a challenge to use all of the APIs they exposed and learned a lot in the process.
- No package managers, no complicated install steps, no security concerns, and a unified editor.
P.S. If you have an iPad and haven't played Two Lives Left's Crabitron [1] – it's easily the most creative game shipped for iPad.
[1] https://apps.apple.com/se/app/crabitron/id440462182?l=en
I was looking for something to teach 11-year-olds a couple of years ago, and ended up using Python with a turtle graphics library; this would have been another great alternative.
Programming using a language like Lua has the advantage over Scratch-like environments (which a friend suggested I use instead) that you can talk about your code more easily if it is based on keyboard entry of keywords and operators rather than GUI events (such as moving graphical blocks by drag and drop) - although that is based on my intuition rather than backed up by any empirical study (please let me know if you are aware of one to support or refute this).
Lua as a teaching language’s got a strength for everyone - if you’re a pragmatic person, Lua offers a fantastic offramp to gamedev; if you’re a theoretically-inclined person, Lua’s an elegant language - and it’s wonderful to formative programming experiences with elegant languages. (I started with SICP Scheme.)
I've taught programming to beginners a fair bit, adults, teens, and children, in several languages, and lua is the worst of them.
The initial learning hump in programming is difficult and frustrating and lua does nothing to alleviate that. The main resource learners do have is curiosity, and usually an interest in some goal like making a game or website for a particular purpose.
Lua gets them bogged down in writing string manipulation functions that aren't in the standard library or whatever. One of the main things learners want to do is make an http request to an api, you need a library for that. There's no obvious & reliable way to get one, now your beginners are trying to configure luarocks or compile C modules.
To be clear lua is fine, great even, it's an incredible technical accomplishment. But the spiritual admiration experienced programmers have for the simplicity of implementation does not matter to a beginner. Its minimal standard lib and flexible distribution methods are a liability to teaching. I've never seen a language more reliably kill that learner's spark that is the best asset of someone new to coding.
This is somewhat alleviated if you're using it in a controlled environment for a specific goal, like roblox scripting or love. I've had success with that and would do it again. But as a general introduction to programming it's terrible.
You're absolutely right re: the lack of batteries and bureaucracy used – I've only taught programming to teens in the context of recreational after-school courses, where kids know about Roblox and Garry's Mod (unfortunately through "skibidi toilet"), already have that context and pre-installed ideas with gaming. For advanced enrichment, I find that kids also love learning graphics techniques like raytracing via LÖVE, 2D shadows via vector operations, physics concepts like springs etc. (with a suitable pixel-graphics harness).
Now that you point it out, I'm in agreement with your comment about how Python would be a recipe for counterproductive frustration in many, many other contexts, where people have many other contexts and real-world experiences that motivate coding.
I really do respect the challenge of teaching to very different age ranges, and I acknowledge I've only taught in one context! I'm curious – what you do find engages children vs. adults? (I imagine kids might actually love making Discord bots etc.)
I'm mulling over a proposal for a community ed. class in my local community college about "programming for accountants" – I've informally heard from some accountant friends that they're really motivated to learn Excel macros for example with very bespoke accounting worklfows – but I'm dreading the thought of VBA.
EDIT: I just realized I said “Python” when I meant Lua. Big whoops!
I think the most important part at all ages is to connect it to something they actually want to do, and remove as many of the "artificial" barriers to that as possible like tooling configuration, anything beyond rudimentary command line operations, C-style memory allocation and type finessing. It's easier to come back on that stuff once they have some confidence & context for it.
With kids you kind of have to tease out their motivations. A lot of them default to "make a game" because it's something they know and it's tangible, but once they start to see the potential they reorient. For example I've had multiple "game dev" classes devolve into "pull live sports scores and text it to me" once they realize how possible that is.
I've had discord bots brought up before by multiple kids, so that is a good one too. Generative art is another, or like I've seen really academically-focused kids get excited about just using jupyter to make graphs. The younger they are the bigger the swings between excitement and frustration, and the more your value shifts from technical prowess to emotional nurturer.
When I taught adults it was the "fundamentals of programming" module of a web dev bootcamp, the first thing they encountered there. For the most part these were disciplined motivated professionals and the thing they actually wanted to do was learn web development. So it was pretty easy to connect to their goals by just saying like "trust me you need this."
I haven't done a specific goal-oriented focused class like that for adults. But I think the main thing is still just keep it pointed towards the target and don't get bogged down in configuration or tooling. The great thing about an environment like roblox or I assume excel is that you have the total runtime & dev env right there without having to deal with external tools.
Genuine thanks for the advice! For the “accountants’” course I might actually go for Juypter for data wrangling and visualization, now that you suggest it - there might be some interest from accountants in branching out there, and I get to teach about data structures and thinking about transformations and queries.
> But as a general introduction to programming it's terrible.
It’s just a terrible language. Full stop.
Lua is touted by supporters as this orgasmic language.
But there’s a reason it’s relegated to the role of scripting language embedded in something else. It’s small, sure, but it *sucks* in literally every way other way from functionality, to tools, to libraries, to community.
Roblox and Pico-8 use LUA.
Lua is a fine language. You can do wonderful, delightful things with it.
I've used it in million-dollar products where other languages cowered in fear at the memory BOM. Lua can go places many other programming lanuages simply cannot, such as in embedded/low resource systems, high performance engines, and even scientific realms.
Its not 'just a scripting language', as if that were some sort of valid pejorative.
On top of that, its not just a "language" but also can be used to create an extremely powerful engine for any application, systems software, or high-profile component.
Its a highly flexible and powerful VM-based language which can be wired into EVERYTHING and ANYTHING a competent programmer might find worthwhile.
Lua can do anything and everything, from teaching tools and video games, to network switching equipment to high-precision jet fuel analysis systems.
(Disclaimer: I've shipped all of these types of products using Lua.)
In industrial settings we use ladder logic diagrams, a visual programming language based off of electrical ladder diagrams, and I wholeheartedly agree with this. It is so much easier discussing Python web scraping programs compared to explaining ladder logic. Though the latter was made easier with physical inputs/outputs some are located a good distance away from the PLC, and anything digital had to be shown to be effectively discussed.
Turtle graphics is one of the "batteries" included with Python; I used Python with the turtle library to introduce my nephew to some of the basics of programming a few years ago. Even got to show him function definitions by first coding each instance of a repeated part of the picture separately, and then saying "Now this is what programmers call 'refactoring'" and then pulling the repeated bit out into a function with different call sites and parameters.
He was excited enough about it to want to learn about robotics and aspire to be a programmer for Mars rovers and the like.
The nice thing about Python is that because it's so pervasive as a teaching language, there are many tools for it that specifically cater to this niche. In particular, https://thonny.org is very nice for explaining basic programming concepts like expression evaluation and function calls.
And yeah, turtle graphics is the time-honored method of teaching things like loops, recursion, and parametrization via functions step by step in a way that is visually intuitive. Things like polygons, stars, spirals, and eventually basic fractals like snowflakes and ferns.
Thonny comes on the Raspberry Pi. I used it to go through that little exercise with my nephew.
I taught a class where we began with Blockly compiling to Lua, and slowly shifted to just Lua as the kids' programs expanded.
the dragonruby game engine looks similar.
https://dragonruby.itch.io/dragonruby-gtk
Another programming environment for kids with its own simple programming language: https://easylang.online/ide/
Isn't this in the spirit of LÖVE?
https://www.love2d.org/
Awesome, I'm working on something similar: https://lua.civboot.org
Did antirez receive any of the upsides from Redis commercialization? Or was that another group that took his code and ran with it?
I believe he sold his participation on the redis company far before the shit show.
What is antirez doing these days? His github history suddenly dropped to zero it seems.
Hi! Mostly writing, embedded programming and some AI stuff. Thanks for the interest :) and right now enjoying NYC.
Hey, what about merging some of the pending PR's on LOAD81, one of these days? I've got a few more I'll clean up and send your way - SFXR support, for sound effects, joystick (already in the PR queue), MIDI, and a first pass at SVG ..
That's a lot of cool stuff. I'll try to merge them. It's not for lack of interest but for focus concerns (too many projects very the years). I'll also check if I can add some official collaborators to the project, so that some merging/development can be performed without any help from myself. Thanks for this message.
He wrote a science-fiction book, then did some things with e-ink hardware and some with AI.
[dead]
Submitting kids to Lua should be considered child abuse.
[flagged]
Please don't do programming language flamewar on HN. We've been trying since the beginning to avoid that here.
https://news.ycombinator.com/newsguidelines.html
nah, Lua's great.