Hacker News new | ask | show | jobs
by kleigenfreude 3504 days ago
This post gets it close, but what we need is the best tools that can run in a web browser on a public library computer. Many don't even have a Chromebook or RPi.

And really what we need are the best tools that can run on the lowest end mobile phone. That way a lot more people could code: https://www.cta.tech/News/Blog/Articles/2015/July/How-Mobile... You could just give away free android phones- that'd be easier than trying to get everyone's clamshell phone to allow coding, and typing on a numeric keypad would be difficult. Also, even using Android- how will those people type? Hmm, maybe we just need to give them all computers or Facebook could set up computing centers. Actually, those luckily enough to get a ride into town and some money might afford 15 minutes in an internet cafe, so maybe if you wrote an app that could multifunction as a coding tutorial and universal web email client application at the same time maybe someone might use it. But definitely a low-end computer, so we're back again to serving some additional people realistically if we just have a webbased IDE that runs on a low-end computer. Should it support IE6 or IE7? Also, internet in many places is dog slow.

Still beyond that what is desperately needed is food, clean water, shelter, clothes, blankets, feminine hygiene products, medical assistance, infrastructure, the ability to grow food, doctors that live nearby with a constant supply of resources, and electricity. There are many parts of the world that don't have these things. Don't give them computers first. It would be intercepted before it gets to them or taken away from them or sold for necessary items. Many can't code, as they're struggling to survive.

6 comments

> This post gets it close, but what we need is the best tools that can run in a web browser on a public library computer. Many don't even have a Chromebook or RPi.

This would further the centralization of the internet, which is a disaster waiting to happen. It's easier, it's cheaper, but it's also wrong.

We must teach people to take control of their computing power. This means giving them a personal computer they can control. They need enough computing power (low-end phones and the R-pi are more than enough), a decent I/O setup (screen and keyboard, mostly).

You also want to avoid proprietary software. I won't object too loudly about adults and companies using proprietary products, but when it comes to children, I have to go full RMS: proprietary software is wrong, teaching it is evil. In some cases (MS-Word vs LibreOffice), we really have no excuse.

(An ubiquitous counter-argument is, not knowing MS-Word makes it harder to find a job. This ultimately does not matter, because "proper" training will cause other* people to be unemployed. To reduce unemployment, we have to either create more jobs or share what we have (4 days work-weeks come to mind). Of course, since computing is mainly about destroying menial work, don't get your hopes up about job creation.)

Sadly most people don't want to, as they are mentally exhausted after pulling triple shifts and whatsnot to keep food on the table. They just want to vege out, with the web being the new cable TV.
Of course. Basic needs first. Let's start with a 4 days work-week, so people have time to breathe and think. (You can keep the same net salary, because if done in the whole country, this mechanically reduces unemployment and related insurances).
>> This post gets it close, but what we need is the best tools that can run in a web browser on a public library computer. Many don't even have a Chromebook or RPi.

> This would further the centralization of the internet, which is a disaster waiting to happen. It's easier, it's cheaper, but it's also wrong.

Sorry, honest question - I don't understand what you're saying here. Could you please explain?

Okay. The whole story is long and complicated, so I'm going to over-simply things.

At its core, the internet has no centre. It's just a network of computers, peers in the network, who can talk to any other computer in the network without restriction (besides bandwidth). There are complications, such as the distinction between an internet user and a full fledged operator, but as long as the operators give us a set of basic guarantees (no filtering, no snooping…) we mostly don't care.

Such a structure have far reaching consequences. The most obvious is the freedom of expression just got real. Anybody can publish most anything in the internet. This was not true before. Journals, TV, radio, all were controlled by a relatively low number of people. Just count how many people have ever published anything on paper, including research papers and letters to the editors. Compare that to the number of people who posted articles or comments on the web.

Basically, an a-centered internet fundamentally change the way we communicate. This necessarily changes the power structures. Historically, whoever had the power before such a change tended to resist, leading to lots of spilled blood. Just think how the printing press enabled the enlightenment, religious schisms, and revolution. Mostly for the better, but quite bloody still.

The first centre of the internet is the DNS system. To contact a computer, you need its IP address. It's like a phone number, only worse: it's longer, and you're going to talk to a lot of computers in practice. Hence DNS, to have memorable names. Thankfully, the DNS system is distributed into domain and sub-domains, so it's not so bad.

There are however other problems. See, to be a actual peer in the network, you need to be a client and a server. Publishing something on the internet mostly means giving it upon request, the way web servers do. You need a public IP address, and you need to be up all the time (modulo unavoidable downtimes). This was totally the case for university servers, but not home computers.

When the internet began to popularise in the 90's, home computers used to connect to the internet by making a phone call to the ISP. An actual phone call, that hold on the line and cost money (most phone companies charged by the minute and mileage). You couldn't be connected 24/7, it cost way too much. So, no web server for you, and no mail server either. You had to borrow someone else's.

To remedy this problem, internet providers also provided an e-mail address and a way of publishing stuff on the web. That was the first serious step towards centralization.

Later, the ADSL came up. A stands for "Asymmetric". This one doesn't monopolizes your phone line, because it uses higher frequencies. You can also connect all the time for a reasonable price. Alas, you still couldn't have your own server, because the upload rates were just not build for that.

They could have made it symmetric. They chose not to, I think for commercial reasons: they assumed (mostly rightly) that people are mostly consumers. They don't upload much, they mostly download. So let's sacrifice the upload for a better download. Makes total sense, right?

Not quite. One big application was significantly hurt by this choice: peer-to-peer file sharing, which needs both upload and download to work smoothly. Also, while people didn't in fact upload much, many did have an email address and their personal blog. They could easily be hosted at home, if the provider had their router host those instead of centralised servers.

In any case, it all went downhill from there. Gmail was such a big hit that now Google actively reads a scarily high proportion of all email worldwide. (They use algorithms instead of humans, which is worse, because it scales.) You distribute your videos with a handful of services such as YouTube, you talk to your friends through Facebook… And of course the ubiquitous search box, but that one has an excuse: we don't quite know how to decentralise that one yet.

This centralization is not neutral: there are terms of service you need to abide, DCMA takedowns, policies. This is a rather pervasive and direct attack on free speech. Privacy is hurt big time too: it's not exactly easy to secure a private chat connection these days. At the very least, you tend to make a request to some central server just to connect with your friend, such that even if the server doesn't log or record your conversation, it knows you attempted to connect.

This doesn't have to be. The truth is, if everyone had a private server (no bigger than an R-pi) at home, and a reasonably broad symmetric bandwidth, there would be no need for Gmail, YouTube, Facebook, or Medium. There's also a good chance there would be little need for centralised forums such as right here (moderation might be a problem, though). This would mean much harder mass surveillance, which we now know is not exactly a conspiracy theory, thank Snowden.

---

Programs decide what we can do, and how we can do it, all the time. Programmers write those programs, hereby influencing our lives. You really want control over the programs that affect you. This means Free Software, but this also means understanding the damn thing, and executing it on your own hardware whenever possible, not on some remote server. So, when teaching children the basics of computing, we must also demonstrate some good habits. The centralization of a web app is not a good habit.

Thanks a lot for this writeup, I think I understand this topic a little bit better now. I really appreciate you taking the time to do this :)
I agree with the sentiment. Do note that people said exactly the same about mobile phones in Africa - shouldn't be a priority. The article you link wouldn't have been written had we said "no, first give them water and blankets". Maybe the benefits turn out to be surprising even in deprived areas?

As for web-based vs native, I can see it going either way. If connectivity is too unreliable and/or expensive then native will win. Many people in the developing world spend a lot of time with no credit on their phones.

The biggest problem I see with teaching people computing these days, which is only partly addressed by cheaper computing devices and IDEs, is the sheer number of tools and abstractions to learn. What order do you teach in? What if there's no teacher? Version control, testing, frameworks etc. are all great things, and a certain proportion of people will need to learn them at some point. For others it's overwhelming, and for most it at least hinders the teaching process. Too much "ignore this for now" can be demotivating and confusing. Yet, it's also not enough to start with just a BASIC prompt any more. People have now seen all the cool modern things you can do and want to do it themselves, so moving an X across the screen is not motivating either. I have found completely dedicated environments like https://scratch.mit.edu to be great for younger kids, but not sure how the rest of the learning curve should be shaped.

> What order do you teach in?

Not the same for everyone... here's a weak attempt at answering:

Kids:

1. Visual 2D: https://scratch.mit.edu/

2. Visual 3D: https://minecraft.net/en/

3. Interacting with real world: https://www.lego.com/en-us/mindstorms

4. Machine learning (why? it's the future!): http://stats.stackexchange.com/questions/22504/what-can-one-...

Adults:

1. Take class(es) on using a computer or phone. Many don't have confidence for things we take for granted.

2. Online tutorials: http://javascript.info/ http://iwanttolearnruby.com/ https://wiki.python.org/moin/BeginnersGuide/Programmers https://netbeans.org/kb/articles/learn-java.html https://msdn.microsoft.com/en-us/library/aa288436(v=vs.71).a... or go to school.

3. Learn enough to contribute to an open source project.

4. Get a job coding or code at your existing job, if allowed. On the job experience is essential.

I think the gap between 1) and 2) for adults is gigantic, because of the issues I mentioned. I don't think you've really addressed the complexity of all the stuff surrounding programming.

I don't doubt there are long lists of links to starting programming, as there are for every conceivable subject (also "go to school" doesn't work for the disadvantaged/developing countries).

The point is keeping someone's enthusiasm alive and making good use of their time. In the "golden age" you would see, say, Space Invaders, and it would be within your ability (even as a teenager) to reproduce it, starting from the BASIC prompt and short manual that came with your computer. If you want someone to work efficiently now, on the things they want to work on (fun/visual/relevant to their life), they need to learn a lot more to get started. That's an improvement over the past in many ways, because it was simply not possible to work as efficiently then (e.g. no high-quality libraries, only basic line editing). In a way, people want more and can do more. But planning how to get there is harder.

>"Still beyond that what is desperately needed is food, clean water, shelter, clothes, blankets, feminine hygiene products, medical assistance, infrastructure, the ability to grow food, doctors that live nearby with a constant supply of resources, and electricity." //

I agree with the sentiment of that so much but it's not an either or thing in some situations.

Also, computers, in the form of feature phones mainly AFAIK, have helped some of the poorest people by enabling communications and information acquisition that can help with water, food, shelter, medical aid, etc..

If you RTF though you'll see it only addresses the disadvantaged in developed countries where the above are not widespread issues.

Having lived thru the era, admittedly in the USA not UK, the article clearly was not written by a gen-xer because "effectively cut children from lower-income households off from the computer revolution" is complete nonsense. If anything the tradition of constructing computers to operate for a decade was still in play while rapid technological advancement meant kids could have somewhat used computers pretty much free for the asking. This continued well into the 90s where it seems every linux install story began with "first obtain a free discarded computer" to install on. Now a days you have to spend $75 on a new pi and its required accessories, but in the "old days" you learned for free on a used machine.

I suppose no matter how bad it is for the environment, filling the worlds landfills with e-waste is at least good for the economy.

I've actually been looking at this too.

I posted more detail on another comment, but it should be possible to write a nodejs server app inside the package that will serve up the electron HTML to the web app (i.e. with command flags like [--server --port $port]). You'd probably have to implement the keystroke handler and a renderer for the menus, but otherwise it _should_ work.

Of course, I have no idea how much work would really be involved (although I imagine quite a bit), and you'd end up with something that resembles Cloud 9 or Mozilla Che, albeit with VS Code's extension library.

It just feels like something that would be better built directly into Electron though, so it could work for e.g. Atom as well.

Some computers are too old and slow to run the JS in the client as the IDE. Either the browser is old and incompatible, or it would just waste precious internet cafe/library computer time for each action.

Either the JS needs to be fast and compliant with much older browsers, or you just do a webform with old HTML tables as structure and so everything server-side.

Then you have the opposite problem in that those with newer computers wouldn't want to use it. So you might have to provide multiple levels of support, similar to how Gmail and OWA have a light client and a heavy client.

By far the best, easiest on-ramp for these users is a good web-based development environment. It will run on a public computer, or an unmodified Chromebook (preserving those security properties), and they are useful for everything from first-steps learning to Real Programming.

Of course I'm biased, because I make one (https://anvil.works) - but there are loads of great platforms out there. You can learn and practice basic Python with Trinket (https://trinket.io), or command the full complexity of a Linux workstation system with Cloud 9 (https://c9.io). (With Anvil, we aim somewhere in the middle - useful, deployable, earn-or-save-money-with-them apps, without the full horror of the Web. But my point is that there are many good choices available.)

Or maybe we need to get Chromebooks/RPis into public libraries instead? I admit RPis are probably a bit of a stretch - given the potential for malicious usage, but Chromebooks seem to be an ideal fit, for much the same reasons they're good for the education market.
(Note: fredley responded when my comment was just the first line about public libraries.)

I think this gets too expensive. Instead, I think you need to just serve the lowest denominator and help those that don't even have that with other resources.