You seem to address a broad public, from high school students to adults.
That's the idea, anyway. Perhaps it will turn out that a more specialised approach (for different groups) is better, though I'm interested in the history of this and BASIC suggests a one-size-fits-all approach isn't necessarily impractical or ineffective. I'm not married to it-- for kids it's possible that games are the prevailing answer. I'm not convinced, but there's evidence it helps.
Logo can be done without computers, and still be used to teach about Variables, I/O, Basic math, Loops, Conditionals and Functions. Those are the things I focus on. You can do plenty with those, especially when I file arrays under "variables" and functions can be used as a gateway to introducing shell commands.
Have you noticed "patterns" (generic or not) in what helps them?
That's one of the central themes, and it's why I made many of the decisions I did in my favourite design. I call it my favourite because it's the one I've used most for 5 years, it's the one I enjoy working with the most and it's the one I put the most into designing. But I'm not married to it in the sense that I try other things, and whatever works is great.
This isn't a one-language approach. If someone wants to learn Lisp as a beginner, I can't imagine a better tool to start with than Racket. I'm not saying that's all it's good for but it's certainly ideal for that.
For instance, I've noticed in my job the most efficient way to structure my trainings was to design them as the story of the future professional life of the students, the less efficient being thematic exploration.
Oh, that sort of pattern. I mean I'm getting into pedagogy here and there, like you do in this sort of situation, but I'm approaching that the same way I've approached anything I'm arguably good at-- by trial and error.
I'm largely treating this from a design and advocacy angle. I have worked with several people of course, to test my ideas in a practical setting-- i.e. teaching. That was the goal-- not just to experiment, also to have the tools to do the work of teaching people. But so far this aspect of it is more limited than I would prefer.
One of the things that makes this more challenging is how I've built politics into all of this. I mean as an accessory or feature, not as a requirement. Most of my work (including all of the necessary tools) is in the public domain, and there are no policies on what people must do with it. This is incidentally consistent with BSD's approach.
I will confess that I am a Free Software advocate, albeit one at odds with the current FSF. I support rms and to a degree, copyleft. Though I am comfortable in the BSD world and I have no desire to change it. I would rather reform Free Software (along the lines of its own values and traditions) than foolishly try to impose those on BSD, which has its own culture.
This may seem wildly off topic, but it slows down progress. I've spent as much of the past few years working on other things, to the point where the educational work is not quite but nearly a side project. That doesn't make me happy-- however, I do need software (an OS, an editor I'm happy using) to do my work. I'm happy to say that after a couple of years of fleeing one "platform" after another, I've said for quite a while that I think BSD is the "future" of all this. Because I kept putting off determining its readiness. I feel silly having waited, I only have a sole GNU/Linux machine left and almost exclusivesly run BSD after a surprisingly quick migration.
But it doesn't stop with the OS-- everything I work with (including Python) is in a state of upheaval.
What I'm saying is that I try to teach about software in general, while teaching about coding. And at this point in history it's like trying to teach geography in the middle of global war, while national borders all over are in flux.
But when someone naturally doesn't care about that, I do simply focus on the code. After all, I do not require that people subscribe to my views-- my goal is to give people tools and knowledge they can use to figure out the world for themselves. Of course I work to impart what I know, ethics included. But this would be incomplete if I did not impart the knowledge that I'm just a person, and not the global arbiter of truth. Indepedent critical thinking is one of the most vital lessons there is. The best teachers I had made this clear, and admired the students who were prone to it.
Of course, you could not transpose this to your activity, because digital empowerment is about giving people resources to invent a unique life taking advantage of computers rather than adhering to a ready-made professional scenario, so you likely have drawn very different conclusions from your experience and that's interesting.
I'm not against job training, career training or industry training, only the replacement of general knowledge with whatever the industry would like people to know. In the 90s I think education could look at Microsoft as a neutral party, in regards to advice about what software skills to teach. This was a mistake-- however to sidestep that debate, imagine if Facebook was to heavily influence what students learned about privacy?
Ultimately people are going to have to learn industry tools to use industry tools, I'm only against that being imposed on early students. An ideal scenario would be more general computer knowledge earlier in school, where focus on specific tools comes later-- high school at the earliest, but by uni it's unavoidable. I'm certainly not against university classes for learning industry-favoured applications. Nor do they have to be at a university (a lot of faster and less expensive alternatives exist).
I'm also curious to know if you occasionally get feedback about how your students integrated what they've learned with you into their lives.
Absolutely, but not at a scale I would prefer-- that's a work in progress. Since beginning this project I've moved (physical location) more than once, worked on at least 3 or 4 other "languages" for experimental purposes, worked with several people in an educational context, used the language to work on remasters of not just one but 5 or 6 distros (I don't use the word "distro" for BSD, but I've never remastered it either) and I've done very little to promote any of this.
Throw in a pandemic, and most people would have given up on this sort of thing by now. The truth is, before I started working on this, my FOCUS was simply Free Software advocacy. That says a lot about how I got to this point about education. It will explain this better than anything I've said so far.
By "advocacy" I mean helping people learn to use tools that free them from worse tools-- I want people to be free of telemetry and updates they don't have any control over, before THIS work started, I my focus was getting free PCs nobody wanted anymore, refurbishing with Debian (not anymore) and giving them for free to people having computer trouble.
Back then, the "experiment" was "how can I get more people using GNU/Linux?" Please note, the reason I'm using BSD is to get as far from the Linux kernel as possible. Topic for another post (if at all) but I'm certainly not here to promote that.
I working on giving away CDs and DVDs, helping people dual boot, fixing machines that were hobbled by outdated (or frequently abused) Windows installations by giving them a new lease with Debian-- but nothing was as successful as giving away computers with Debian already on them.
Once a computer lets someone down and they invest in a new one, the old one is like a Computer non grata to them-- frequently they want nothing to do with it, even if it's fixed. People are funny-- years of marketing plays a role obviously.
So my "hack" on this was to take away the machines people didn't want (it is for a good cause) and then refurbish.
Then when someone has Windows trouble-- a lot of people I knew were too poor (or sometimes, just cheap) to get these things fixed, but didn't care about much except one or two applications.
So I'd say "Hey, if you need a computer I can LOAN you this one. I won't charge you for it-- when you're done with it I'll take it back, but if you like it you can keep it."
This sidesteps most of the qualms people have:
- they don't have to use it
- they don't have to keep it
- they don't have to pay for it
Average people don't want to invest in a free computer that's new anymore than they want to invest in one they're paying for. They don't think of it as a free computer, they think of it as a responsibility-- like giving them a kitten.
So I absolve them of that by offering to take it back if they don't like it. But just as often they decide to keep it. And since I save them the "big decision" that leads to them not trying it in the first place, there's less friction.
Instead of fixing their "broken" computer, they use the one that works. It's true, most people don't care what OS they have. These were not "computer people", you know. I mean it's almost obvious from the story.
Long story short, I never thought I'd need another distro other than Debian. I've probably tried 70 of the things, I went upstream and figured "we're good." Oops.
I've spent the past half decade working to reboot that effort, so this educational coding stuff came up in the interim.
I was already working on developing a night school course for refurbishing machines with Debian at the time...
So without a usable distro for myself or for students, it became about coding, instead.
And THEN, Microsoft bought Github...
You know, I was (foolishly) using Github myself, to host my language. It wasn't my idea, a good friend pushed me into it.
I would say these were setbacks. I mean that's a fair thing to call them. On the other hand, this was all about advocacy from the beginning. This is a project, AND a long term goal and long-running effort.
The difference is that while I was simply offering a working computer with Debian to "non-computer" people before, now I also work on ways to teach "non-computer" people about coding.
I always thought coding (even the simplest of it) was the QUICK route to understanding computers. The alternative is that people think it's magical and mysterious. That's too submissive a position. People know their car is a dumb machine they can hit with a wrench. I want them to have that attitude when they face the command line-- even if I have to command line that is simplified for them. Not a hobbled command line, just a friendlier one.
I know it sounds overly ambitious or even naive, but the work is to make programming languages easier (I've encountered the concern about people creating "more languages" before-- languages are constantly being created and the worst scenario is really that one out of dozens of those might actually prove to be a useful tool for a job that was being done less adequately by another tool) for people that would not code otherwise.
I even made a very handy Python-based command shell, complete with internal commands and support for external commands, JUST because I tried to help a student install UNXUTILS and it had grown somehow to 2gb since the days in which I used it.
dir /b /a /s and let the student practice using pipes in an environment that otherwise had very little to offer someone using them. This shell was loaded with simple Unix-like features implemented in Python, which being included and self-contained would function as something useful in Windows.
But if you move it to GNU/Linux or BSD, it still worked there-- and didn't stop you from using standard (external) features. For example, in Windows it mapped
find to use the local feature, but on other platforms it left
find to its own (native) devices.
As a result, that student is now completely comfortable with the command line. When they use a real command shell they're happy.
I did that. I'm proud of it. They had already learned Java, but they had NEVER used the command line. I don't think it makes me a zealot if I feel that was something that was left out of their education. At least it was at the time.
First impressions count for so much! If the first effort with the command line goes badly, a lot of people will feel that way for years. They won't give it another chance. If their first impression is easy and fun? They might consider the most awful challenges easier and more fun as well. Never screw up the first impression with coding-- I mean, if you can help it.
But if someone's doing it for money, I mean you can (this is not sarcasm) go full-military on it and essentially beat them into the ability to code. I'm not saying that you do that, only that some do and it doesn't always fail. If the only goal is to keep the workforce stocked with professional coders, you can use that approach to weed out the people who aren't going to be heavily committed. It's just a different method with a different objective. Mine is solely to give the user control and knowledge of their tools, not whip them into shape.
It's the "control" part that is taking so long. That really is another topic, but it's fraught with poltics and at least OpenBSD gives the user about as much control as Debian did. So if I knew then what I know now, I would be developing a night class on refurbishing computers with OpenBSD.
Unfortunately, I no longer live anywhere near the school that I was developing the class for. But one of my students is now interested in teaching what I teach, even in a classroom with more than one student-- and that is a truimph that makes this sort of thing worthwhile. One of the values I try to impart (and hopefully demonstrate) is that if it's important enough to you-- just keep doing it. You can sometimes abandon one angle and try something else, but don't give up the overarching goal if it really matters.
Something I advocated even before I had these tools is that some of us work with educators to develop new tools specifically for teaching. That's sort of what the MIT media lab was focused on, but they were utterly corrupted by funding from very bad people. I don't know if they'll ever recover from that, but I have no sympathy for MIT or their corruption.
When I was a kid I wanted to go there-- when I was a kid, I actually visited. But I'm more interested in other universities now. Not to teach at personally, that's not going to happen. It's a bit late for a formal academic career and that's not what I'm pursuing. However, I won't rule out working with them. I realise how silly that sounds at this stage, but I think it's doable and I have plenty to keep me busy if it isn't.
I want to mention this-- no amount of experience or qualification necessarily sways people into thinking something is possible if it seems outlandish. Grace Hopper was told that her compiler based on keywords could NEVER WORK, even after she wrote it. The Wright brothers were considered to be throwing their careers and reputations away on quack science. There is as much work done in dismissing ideas as impossible than exploring ways to improve things.
I like the research attitude de Raadt has. We don't agree on everything, but he's my favourite BSD developer. If you really believe in an idea, and your approach is scientific enough to find and jettison smaller aspects of an idea that make it non-working, IMO you should pursue that until you are sufficiently confident that it is impossible, impractical or until you have an even better idea. And of course, keep learning along the way-- if you base it on false assumptions, continuing to learn gives the better odds you'll figure that out.