Letters to the Editor
-
What Brin wants:
He wants a simple UNIVERSAL procederal programming language that EVERYONE can be conversant with and use.
He's talking about something on the level of arithmetic, not on the level of calculus or beyond. Something that is step by step and completely clear, something which teaches thinking, not computers or web page design. The other languages that people are mentioning are not at all suitable for this purpose.
-
It's more than scripting; it's also about computer architecture
I'm a bit disappointed at the number of mac users who responded to this article. Their many suggestions for scripting languages and HTML only further proved the point the author made. That is -- scripting languages don't teach you a darn thing about how the computer actually works! What's really going on down below. But that's been my chief complaint against Apple for so many years; they hide the inner workings of the computer from the user, so the users are all but computer illiterate!
The old-style BASIC interpreters forced you to learn a thing or two about the very hardware and critical functions of the CPU in order to write a program. Today's scripting languages don't do that at all. You can't Peek and Poke a memory location. You aren't forced to think mathematically about iterating an array of numbers across memory locations that correspond to bitmaps to draw pictures on your screen. Did you know that's how modern computers draw all those fancy graphics? See this text I'm writting? Ever see the math involved in rendering all these little letters through your video card? You'll never understand those things if Perl is your first language. (Oh, and for the record, HTML is not a lanuage despite the fact LANUAGE is part of it's name.)
I was in elementary school when my father bought a Commodore64 and I loved that thing. Thinking about it now, you had complete and total control of every hardware microchip on that machine. All you needed was the memory address and it was your to control!
Now-a-days with protected memory schemes, well it's quite a bit more complex. (I hold a bachelors in computer engineering and I still have to pull out my textbooks to remember how it all works. How the page is translated in the TLB to generate a logical address and moved into the memory management unit and transformed into a physical address. Unless a page fault and move to the disk. bleh.)
I agree with the other posters who suggested using the TI programmable calculators and Lego Mindstorm sets. I'm not sure how much computer architecture one can learn, but maybe it's something.
My opinion would be to start down low, with the basic concepts of binary arithmetic and binary logic tables. Then progress to assembler language. You'll have to provide an environment pre-configured for assembler code. I would suggest Linux and how to compile assembler code to make it run with the libc libraries. From there, move on to the concept of a compiler, how it works and how the C language is really just high-level assembler. Then from there it's just a quick understanding of object oriented structures and before you know it, everything makes sense.
-
BASIC??? Python!!!
Python fills this niche quite handily, allowing you to enter programs a line at a time and use introspection to see what's going on. BASIC has fallen by the wayside becauase it lacks many of the modern features that are now the staple of program design (built-in data structures, exception handling, native code interfaces, object s, etc). I would bet that Python is easier to learn, as well, as it is more consistent, has a small syntax "footprint", and has more current documentation, books, etc.
-
Logo - Machine/assembler and pointers
It's not clear to me why Logo failed his tests. That's what I introduced my nieces and nephew to.
I am about to start teaching the son of a friend of mine. He wants to learn C to write games. I agree with Joel Spolsky that you need to grok pointers to do that. I also couldn't trivially find what I thought was a good emulator (I was looking for a PDP-11, the source of modern computer architecture) so I thought a bit, added some Not Invented Here and am going to write an emulator designed to be easy to use to get experience in this area. I expect it will be up on SourceForge in about a month.
I also don't understand his distinction between machine code and assembler, since they map one to one unless he is referring to macro assemblers.
-
For the author...
A quick google found a site called QBasic cafe, which has a current quickbasic. I don't know anything about them but they are not alone in the world of emulators.
Assembly is harder although Microsoft I believe still sells MASM. If not, NASM is a selectable install option for the inexpensive commercial linux distributions (Redhat, Suse). You should be able to simply open a command window and text editor, and a browser to download examples :))
The people who wrote about web development as programming made me sad.
Honestly, a book with BASIC examples in it is either an intellectual classic or worthless. Why not start with C, using the very approachable examples in Kernigan and Ritchie's "The C Programming Language?" They will work on any free compiler from microsoft, and they are twenty eight years old! There's something to be said for learning assembler, but the requirements of machine programming are well described in C as well, and there's this great book that starts with printf("Hello World");...the conventions of C have informed everything since.
The other great language to set up, if one is setting up old languages for reasons of edifyication and amusement, might be Smalltalk. Smalltalk gave rise to most of the common languages of today -- .NET and its manifestations, Java, C++. Its been used as an educational language and even getting the SQUEAK project to run was kind of fun, out of date and funky as it was.
When I was young and dumb(er), there were developer boards called KIM-1's which were the cat's pajama's for assembler programming. There was even a small basic. If you want to give your kid that, any Freescale development board with the cheap or free SDK and some kind of A/D -- from a speaker to the truly cool -- is a beautiful introduction to memory types, machine instruction sets, allocation issues, and tiny tiny increments of time. And its more accessible to motivated kids than the engineers at Motorola might think....
