I say it often, but there is a big pot of money for someone who makes a nice form designer-Python IDE. Specifying a UI in code is a pain in the ass because you have to mentally model how it will look as well as behave. This isn't ideal to do in a text editor, so it's very common to rough it out with pencil and paper or something and then work from that design.
But dropping widgets from a palette onto a blank form and then moving them around with the mouse until they look about right is easy for most people, and saves them a step of analog drawing and then translating that to code. And a few widgets on a form are often Good Enough to provide an accessible UI.
For backend programmers who get ideas about compiling/collecting data and then organizing it into a neat structure where it can be manipulated in useful ways, front-end frameworks are an irritating overhead that distracts from the main task. I make little command line tools for myself, but my non-technical friends get lost easily on the command line and don't find it a natural environment to work in. If something needs a light GUI I'll usually throw something together in Dash that they can use in a browser, but deep down I kinda hate webapps. I'd like to be able to just give them an app that looks and feels like a native desktop tool even if it has very minimal functionality.
Will such lightweight and easy to use tools lead to a surfeit of poorly-designed applications with sorta sketchy widgets that kinda break OS UI guidelines. Yeah...but it'll also mean a lot more utilities that get used regularly rather than tried once and forgotten about, and get more people into programming that otherwise wouldn't try.
Although I completely agree that what you describe would be a great product. If you are throwing together GUIs with dash what's wrong with using electron for making them into web apps? is this more of a hassle than I am imagining?
So what IDE, or development setup, what language with what framework would you give into the hands of a child, to let it play around? Even what OS? All computers in our appartement are Linux or MacOS.
I learned programming basically on my own using QBasic, and then later my dad gave me a simple example app he did at work using Visual Basic 3 (only 20 lines of code or so), and then I got a Visual Basic 3 book, and that's how I learned.
In school, in knew a few other kids learned Delphi instead of VB. I don't know but I assume the learning curve is higher, so many childs maybe would lose interest too soon?
Another friend directly learned C and graphics programming as a child. But he is probably a rare exception.
For Delphi, we have a modern variant as Lazarus.
For VB, I'm not sure. Maybe this sVB, or maybe the mentioned Gambas.
I'm just not sure that the Basic language is really relevant anymore. Object Pascal is maybe slightly better but still very exotic nowadays.
Maybe frameworks like Löve? Not sure about Lua.
Or Python? But what framework? Sth like Pygame? Python maybe is as easy as Basic, but Pygame maybe requires a slightly higher learning curve than Visual Basic? And also, the VB IDE is probably way more beginner friendly than anything for Python?
Or Javascript? Is there a nice beginner friendly framework, to write simple games or so? And again, what IDE?
For my 9-year-old boy, I picked QB64 [1] and things are going very well. The experience is identical to old QBasic, but with a saner language that encourages to declare the type of variables.
At the moment we are following [2], which seems perfect for a child of that age.
[1] https://github.com/QB64Official/qb64 is the repo to follow: after the dramatic split of the dev community happened in 2022, the older one is not used anymore.
I did not follow the events closely, but it seems that one guy, not particularly involved in the development, took charge of the repo and the website and essentially locked it from all the core developers. The story is told here, very interesting read!
I was turned off when it said I needed to create an account to download it. $400 for the basic cross-platform license ($800 for the one I'd actually want to use) with annual renewal is a non-starter IMHO.
Depends on the kid and their interest, but I wouldn't overlook either CircuitPython or Arduino. There's a certain instant gratification from making a program that causes something physical to happen. And it doesn't come with the expectation of being able to make something slick and professional right away.
We had great fun with https://www.glbasic.com in our family. Simple basic for game creation mainly but I did use it for processing data at work for a while :-)
Really tricky, I've recently been trying to work out what language to do with my 12 year old son. In the past we have played around with things like scratch ( https://scratch.mit.edu/ ) which is a great introduction. I went along to an after school programming school to see what they were doing and they were using things like https://www.codemonkey.com/ and Python. They were also using Minecraft and Roblox. My son is really interested in Roblox and I've spent a bit of time looking at Roblox Studio ( quite impressive really ) which uses Lua. In the end I decided to start with C# and Console programs, I was nervous about whether the console would be too boring, but actually, it's going really well. My plan is to really thoroughly cover the concept of basic types, variables, loops, conditionals, scopes, functions, and objects. I've watched a lot of people learn programming on twitch and noticed so many tend to get constantly stuck as they don't have this basic working understanding of the fundamentals and try to advance too quickly. We will then do some GUI stuff, then do some Web stuff, some Roblox Studio, and some embedded/electronics stuff. As part of this I want to teach him about windows and linux inner workings (we also have a mac, but only really care he knows how to use it). So at the end I hope he appreciates multiple languages and multiple OS's and that you can write software for all kinds of things.
For Python, I'd encourage you to look at the BeeWare suite. BeeWare allows you to write GUI's once and build for desktop and mobile (and eventually, web, again). It's still writing a GUI instead of working visually, but for basic to intermediate apps, you don't have to get into the nitty gritty of UI design, know anything about Qt (wooooo), and build a nice, capable GUI app.
I've had some luck teaching middle schoolers Python using the turtle module. (I think we used IDLE.) I think it depends on the child and their interests, ultimately. I once taught a middle school student who was already building websites in Python using Flask and mostly needed me to get him unstuck sometimes.
Delphi was a little higher learning curve but not much and worth it for the fast dependency free exe at the end, I think nothing can beat the ease of Basic for beginners
This is amazing. VB6 and later mIRC were pivotal to my learning as a kid. Well done author on capturing the essence of what made VB6 a great and productive learning tool.
I re-evaluated VB6 with age. We "internet kids" liked to shit all over those dated-looking widgets, but the productivity boost it allowed Grown Up People to write apps to Get Real Shit Done, remains fundamentally unmatched today.
Its main limit was really the same as Windows: it was fundamentally a single-user application model. It's a shame that Microsoft didn't really manage to make something equivalent for the internet age - mostly because of commercial choices made to support Windows and SqlServer.
+1. People seem to have forgotten the impact of VB apps. I would go so far as to say VB was world changing. Suddenly everyone could create professional-looking apps in whatever domain their business needed.
The fact that VB apps had all kinds of DLL hell and security issues cant entirely be laid at the feet of the non professional VB devs of the era, but its cast a pall over what was in some sense a golden age of productivity.
Not sure if this is project related, but I discover port (https://github.com/ptrelford/FunSharp) of Small Basic style on F# and that look awesome for displaying simple concepts. I think all programming languages can have simple setups which would be easy for kids.
I was interested enough to port from Gtk to Avalonia, since that looks much better for Windows and do not degrade anywhere on Linux/Mac OS. Also I run small experiment by try to "internationalize" that library, by porting F# to my language - Ukrainian, just to look if that would be easier to pickup. I think for early education, immidiately after Scratch expressing algorithms in native language maybe beneficia.
I started programming in like 1997 with VB5.5(?) before upgrading to VB6. I don't know if it was just because I was young and excited about programming, or the experience of working with the VB IDE, but that was my favorite time as a programmer. Always coming up with new little projects. I had a folder with something like 40 unfinished projects, half filled with stuff from Planet Source Code.
I too had the exact same experience on the same versions. And I wonder quite often if programming used to be more fun simply because I was younger and more open-minded, or if it really has gotten worse due to modern tooling and languages. I don’t enjoy it anymore.
Nice project. Visual basic like this is so useful for beginners because almost everyone who likes programming wants to create a GUI for their program, but window toolkits are a pain to use and not very intuitive. That is also why I like HTML and plain javascript. It's much easier to design an interface in HTML than write code for one in GTK for example.
Very true. As a teen, before I could program, I would dream up applications that I thought were cool (like an alarm clock application that plays a .wav or .mp3 for the sound!!1) and yep, it involved a gui.
My first programming books were for qbasic and basic and I was like, huh, where does the clicking stuff come in?
Then on irc or a forum, someone pointed me to visual basic and I never looked back. Plus, all the hard stuff like media playing and file picking was a built in control that I could use.
Later, in AP comp sci in high school, they were teaching us the swing ui stuff for java, and that was ... painful by comparison. Kids in class has no idea how easy it could be.
I figure this is sort of a "hedonistic traadmill" for software.
The software most new users work with everyday is going to be GUI and event-driven. If you start with an introductory language (BASIC, Python, whatever) and all you can do is prompt-and-answer, with no native UI conventions, you're not going to feel like you're a first-class citizen-- any wins you have in terms of code structure and algorithm design are always offset by a clunky experience that doesn't feel native. That's going to be a letdown to some new developers.
There's also likely some conceptual language changes: many new developers start because they had an itch to scratch, and if the tooling they see doesn't let them describe what they want, they won't stick around. Today's new devs may well be thinking in terms of a UI.
Another completely from right-field suggestion is TCL/Tk. There was a period (before the era of Python/Tk) when it was the easiest way to get a GUI project up and running on Linux. It occupies an interesting place between "shell automation" and "full scope programming"
I've only played with it and not done anything too serious, but Gambas is honestly amazing for something that has seemingly little adoption. It's so similar to VB6, but with tons of enhancements that keep it from feeling too antiquated or annoying to work with.
Only for those that never bothered with the later improvements to bring back Me and related features.
What VB.NET really missed out was being as easy as VB 6 to produce native binaries and COM libraries. Which also affected the other .NET offerings anyway.
And nowadays CLR seems to mean C# Language Runtime anyway, so that is a moot point.
My eldest son when he was at school used Small Basic, which was actually a really good environment for learning, but for some silly reason (badly justified in my opinion) they didn't provide functions (you could do the equivalent of a gosub, so you had to use global variables). This made so many things much harder for kids! Glad to see this allows functions!
I used to do a lot of work in VB6 back in the day (I'm no longer coding/developing) but it was nice to read about the "joy and excitement" of VB6. That really resonated with me.
Closest I've been since is the simplicity of python, but I always felt it was missing a RAD form maker with good usability considerations.
Xojo uses a "modern" BASIC langauge, is visual like VB was/is, and works on macOS, Windows, and Linux. If you want to stick with a BASIC variant that is.
There used to be a cool program called RapidQ that had a GUI designer and syntax similar to VB. I think you could even create 3D graphics with it, if I recall correctly.
Also, it's a tiny bit weird to have `Namespace Microsoft.SmallVisualBasic` since as best I can tell this is not a Microsoft project. Wouldn't `Namespace VBAndCs.SmallVisualBasic` work just as well and be less confusing?
"An enhanced compiler (yet easier for children and beginners) based on Small Basic, with a form designer and a mini Winforms lib. In short, I made small basic visual , so it became Visual small Basic, or in fact Small Visual Basic as it became a tiny dynamic version of VB6!"
Because the typing is still dynamic, I'd wager. In .NET you can have `dynamic` objects with arbitrary properties/methods/etc (although you are of course going to run the risk of runtime errors rather than compiler errors.)
This is also supported via ExpandoObject, which in most CLR languages has sugar to allow for dynamic declaration of properties/etc. [1]
I say it often, but there is a big pot of money for someone who makes a nice form designer-Python IDE. Specifying a UI in code is a pain in the ass because you have to mentally model how it will look as well as behave. This isn't ideal to do in a text editor, so it's very common to rough it out with pencil and paper or something and then work from that design.
But dropping widgets from a palette onto a blank form and then moving them around with the mouse until they look about right is easy for most people, and saves them a step of analog drawing and then translating that to code. And a few widgets on a form are often Good Enough to provide an accessible UI.
For backend programmers who get ideas about compiling/collecting data and then organizing it into a neat structure where it can be manipulated in useful ways, front-end frameworks are an irritating overhead that distracts from the main task. I make little command line tools for myself, but my non-technical friends get lost easily on the command line and don't find it a natural environment to work in. If something needs a light GUI I'll usually throw something together in Dash that they can use in a browser, but deep down I kinda hate webapps. I'd like to be able to just give them an app that looks and feels like a native desktop tool even if it has very minimal functionality.
Will such lightweight and easy to use tools lead to a surfeit of poorly-designed applications with sorta sketchy widgets that kinda break OS UI guidelines. Yeah...but it'll also mean a lot more utilities that get used regularly rather than tried once and forgotten about, and get more people into programming that otherwise wouldn't try.