> A kid today can't write software on a phone like you could with old computers.
On Android, at least, to the extent that that's a problem, its a convenience-of-the-form-factor problem (with tablets even this isn't really a big problem, especially with keyboard cases), rather than a lack-of-support problem (iOS, out of the box, is somewhat more locked down, but even there I think there are some options.)
There are quite a lot of on-device programming environments, largely free-of-charge, in the Google Play Store.
> I wish there was something equivalent in modern devices, but devices in general are too sandboxed, and pretty much all require programming from the computer, which interferes with kids being able to code from wherever they're at, because they have to go and do what their parents/teachers/etc tell them to do.
On Android (without rooting or any other "magic") there are plenty of fairly complete programming environments with comprehensive access to device features (including at least one dialect of BASIC with fairly comprehensive access to sensors, etc.), and there are even dev environments where you can build Android apps on device.
iOS may be "too sandboxed" to allow as much freedom (back when I was using iOS, I remember some similar things, but they were much more restricted than what was on Android at the time, don't know how that has changed since), but if so that's an iOS thing, not a "modern devices" thing.
> Now, even getting a simple app up and running on Android or iOS requires abstraction-on-abstraction-on-boilerplate. And you still don't know what the lower layers are doing.
And there's plenty of people ready to write theses abstraction in the open source world.
> Are we surprised these days that kids (and everyone else) don't see "writing an app" as something they can just try?
It's just as easy and I see just as many kids trying than before. There's millions apps on the
> And making it runnable requires a developer account, etc.
Sure that's definitely not an artificial barrier added to control what gets made... You don't need one to develop on Android by the way ;), nor do you need one on Windows... Linux... Mac... well actually only iOS come to minds, any other?
> And that the end consequence of that is that they don't value the ability to do so?
The consumer aren't aware of that, most of them doesn't want to makes apps, most of them doesn't know the barrier added actually affect their ability to access content.
> Yeah, right. A few months back in 2021 I was asked how to "make an app on the phone". Not FOR a phone, ON a phone, the complete development only using a phone. WTF?
You jest, but it's possible. There is an Android IDE that includes a compiler that runs on Android.
> What is the basis for thinking there are large barriers to most people becoming software makers?
You have an idea for an app. How do you build it? Your options generally are:
1) Do it the hard way: get Xcode/Android Studio, spend years learning to a) program, b) deal with the bloated and overly complicated frameworks, c) deal with the bloated and overly complicated build and deployment infrastructure. Also pay the platform owner for the ability to make it work / distribute it to someone.
2) Do it the easy way: pay some service so that you can make the app in a simplified/low-code way. Now your app is tied to someone else's service.
3) Do it the expensive way: pay someone else a lot of money to do 1) or 2) for you.
What's missing is the option 4): build it in some free, low-code tool, distribute it for free to whoever you want, without entering a relationship with any company whatsoever. That would be "the HyperCard for mobile".
On top of that, these days you're likely to want to have capabilities that are available only either through option 1), or through an API, requiring entering another relationship with some other third party.
Closest thing to 4) I've seen on Android is Tasker, with its ability to dump an .apk containing whatever UIs and if-this-then-that rulesets you created. But it's not exactly ergonomic, it's Android-only, and doesn't solve the distribution problem.
> You can't build an Android or an iOS app without using the toolchains the platforms provide.
That's because of the way Android and iOS were designed. The amount of crap around coding is not a constant, it's very easy to inflate it with things like XML manifests and IDEs.
>The same is true of most modern smartphones. If you wrote an app for an early version of iOS or Android, it simply won't run on modern hardware or software. APIs have changed, SDKs weren't designed with forward compatibility, and app store requirements have evolved.
Forward compatibility is not perfect, it got taken down a few times for compliance reasons (I think I had to fill out a form on whether my app was intended to be primarily used by kids?)
Still, it runs on modern devices with modern OS versions without a hitch. (Much faster than it used to on my HTC Hero in 2012). If you wanted to bemoan mobile functionality degradation, I'd aim at dependencies on communication with proprietary servers, which various companies don't feel obliged to keep around for long.
> A new generation is growing up programming apps (yes, on their desktop computers right now) for this new world and can easily share their creations with millions.
For Android, yeah.
Thing is, I'm teaching "creative computer stuff" (which includes programming) to kids at a volunteer centre. One of the kids came to me and wanted to know if I could help them build an app for their iPod Touch.
Turns out the costs of writing iDevice apps is quite prohibitive to most teenagers.
First, the SDK+simulator is only available for Macs running Mac OS X 10.5.4+, not just any "desktop computer" will do. That is a problem because the "Young Researcher's Centre" runs on donated PCs, most of them old WinXP office machines that are perfectly serviceable for most of our purposes. We never get Macs though (well one time a really ancient one, I doubt one could develop apps on it).
If you do have a Mac, apparently you can get the SDK/emulator for free, I think (Apple's site said "free!" a lot but kept on directing me to some page where I had to pay. I gave up when I found out it couldn't be done on a PC, anyway).
But then comes the next problem. Your app just runs on the simulator. You need to join the "iOS Developer Program" in order to actually run it on a real iDevice, unless you jailbreak it, (which I'm not going to teach the kids mainly because I don't want to be responsible if they accidentally brick it).
The iOS Developer Program costs $99 per year.
Trust me, no kid is going through all that trouble just to have "something that looks like an app running in a bloody simulator", there has to be some tangible end-result.
From there (Wikipedia) "applications can be distributed in three ways: through the App Store, through enterprise deployment to a company's employees only, and on an "Ad-hoc" basis to up to 100 iPhones."
IMO it is ridiculous to teach children a valuable skill (programming) merely in order to immediately sell their services/work on some App Store market. They're children, they need to learn and play--of course if they want to try and sell their apps it can be a valuable experience but it should not be the only reason or the only way. The first point is that you write code for the sheer thrill of having that kind of control over your own devices.
I'm not sure how the "enterprise" method works, but I doubt we'd be eligible.
So finally you're left with paying $99 yearly in order to liberate 100 iPhones so you can write your own code for them. Whoop-tee-doo. And I'm probably forgetting about a whole bunch of ways Apple can get in your way as you try to actually go this route.
Suffice to say, after having figured this out, most kids realized their next phone was going to run Android.
> I cannot currently compile Android on Android or iOS on iOS.
You actually could, hypothetically, compile Android on Android, in a sense, by chrooting into a Debian environment and compiling from there. I've done at least the chroot part (I had a Debian chroot environment with Xfce installed on my Galaxy Tab 2 for quite a while, though it was really slow and limited by the tablet's measly RAM).
The idea of running a GNU/Linux-like system on Android (reusing the device's kernel in a chroot or a similar setup) is basically the idea behind the Ubuntu for Android concept that fizzled away as Ubuntu's mobile version started to be developed: plug your phone into a dock, and the Ubuntu chroot takes over the peripheral devices and presents a desktop.
> I have been developing software for over a decade. I wanted to give Android apps a try too. But when I tried to install the tooling, it was all so heavy and bloated and clunky that I gave up and never tried again
At least it's cross-platform and it doesn't require you to buy special hardware like the main mobile competitor does.
> I would imagine that on the Android side of things are also not that different.
You would indeed imagine that, but the reality is less rosy.
1) Android is stuck on an off-brand Java stack that makes desktop Java seem pleasant by comparison. They are finally starting to make headway on replacing this with Kotlin, but most shops are still heavily invested in Java.
2) Android's UI framework is a weird hybrid of legacy and modern controls, and it only fairly recently that it has been capable of accomplishing things like a long scrolling list without memory/performance headaches. Before that everyone had to use 3rd party controls for complex or performance critical apps.
4) A lot of time spent setting up toolchains, SDKs, etc. God forbid your project incorporates C++ dependencies.
6) Google may provide Android itself, but each chip vendor then layers on their own special sauce, and finally each handset vendor layers on ever more special sauce. Add to that the historically abysmal adoption rate of new versions of android (and many vendors not providing upgraded OS versions for their older hardware), and the odds of being able to use a newly-released Google feaure/API are... not good.
> As a general remark, I get confused and maybe even a little irritated when people conflate Android & iOS with macOS/linux/windows.
Android and iOS represent the majority of devices your software can be run on. They are ubiquitous, and also very dependent on a native UI frameworks that are a somewhat better developer experience than their desktop counterparts, but only because the years of accumulated cruft are less. Incidentally, Android actually does have a desktop mode for it's GUI. That said, users rarely use the desktop Android GUI.
> You can sort of kind of pull this off with a relatively limited web app
I've had better luck with electron and PWAs on the desktop than non-native mobile tooling. This is largely because non-native mobile frameworks often don't have access to the same libraries - or the abstraction layer loses fidelity in trying to be cross platform. There's really no QT grade multiplatform tooling on mobile. There's some promising starts.
> I think it's extremely hard to design the GUI in a way that can work on both mobile and desktop platforms
It's hard to get a decent GUI on both Android and iOS that doesn't have a lot of rough edges with cross platform frameworks. They are coming along, but it's still just not quite there yet.
> our mission has always been to bring computing to everyone
Yet if you try to do computing on Android, you hit a wall: file access is absymal from a user point of view (virtual folders ?). Text editors are terrible. The only thing existing are some BASIC interpreters, terrible to use.
Combine this with the unaccessible GUI (small scroll bars, widgets too big or too small) and everything tells you to go away and never look back.
Android is a computing device, in the same way your microwave is a computing device.
> However, using your phone to create a web app is probably something you haven’t seen before.
About a year ago I have used my phone as an actual software development platform, writing a jam game in C with Allegro using Qt Creator as my IDE and bunch of other tools like GIMP and LMMS, by connecting the phone to an external display, keyboard and mouse: https://tins.amarillion.org/2021/log/entrant/4236
Also, many years ago I've been using my Neo Freerunner to develop bunch of Python code using nothing but its touchscreen, but I'm too old for that now ;)
> Mobile platforms are fundamentally different, and the terminal is not relevant for most things I want to do with a phone.
Computer freedom and programming is about far more than the terminal.
My biggest issue with the locked down nature of phones/tablets is that they hold the next generation of programmers, and instead groom users to be just dumb consumers.
For many people a phone or tablet is their first and often only computer. Especially in emerging markets. You can't create on these devices, they are designed only to consume.
No more curiosity driven discovery of programming. You're not allowed to extend your device, that is reserved for silicon valley elites who can afford an additional $1500 device. So stop asking and just consume what they produce for you.
On Android, at least, to the extent that that's a problem, its a convenience-of-the-form-factor problem (with tablets even this isn't really a big problem, especially with keyboard cases), rather than a lack-of-support problem (iOS, out of the box, is somewhat more locked down, but even there I think there are some options.)
There are quite a lot of on-device programming environments, largely free-of-charge, in the Google Play Store.
reply