When I got to university, I discovered how much of the theoretical side I was missing. The main problem with teaching programming at an early age is that it really needs to be accompanied by teaching logic and then game and graph theory. I've seen classes that do this well for under-10s, but they're very rare.
[1] The Dijkstra comment that teaching BASIC should be a criminal offence doesn't really apply to BBC BASIC, which had full support for structured programming, an integrated assembler, and direct access to memory-mapped hardware.
[2] Back then, you really needed makefiles because there was no equivalent to a modern compiler driver. Compilation, assembly, and linking were all separate, manual, steps.
FOR i = 0 TO 9
PRINT i
Or
0 to: 9 do: [
:x | Transcript show: x ]
That's right, the difference is syntax and you've picked a terrible example. A better example would be method invocation. The differences between calling a C function pointer, a C++ virtual function, a Java method or an Objective-C method are significant.
No it isn't. NaCl is a great proof of concept. It shows that you can sandbox x86 apps using some static analysis of the binaries and a few other constraints (it also showed that segmentation support on modern x86 chips is pretty poor and terrible on Atom). The problem is that it only works on x86 binaries. What proportion of Web use these days is (ARM-based) phones and tablets? 20%? If you make something that only works for 80% (and falling) of your customers, then that's a problem.
PNaCl is promising, but it's currently in early draft stage. It hard-codes some things into the ABI too early and misses other important things (e.g. no mechanism for exceptions, and they're very difficult to implement correctly in a PNaCl model). And, unlike NaCl, PNaCl relies on a complex compiler being bug free for security, and we all know how well that worked out for Java...
I think there's a world market for about five computers. -- attr. Thomas J. Watson (Chairman of the Board, IBM), 1943