[math-fun] Learning computer programming for a bright 13-year old ?
My very bright 13-year-old nephew would like to learn computer programming (from scratch). He's quite familiar with using software, especially having used Midi music software for several years now. At this point I don't think he has any specific goal of building a particular kind of software; he just wants to learn what computer programming is all about. Has anyone had success with a particular language and/or book in similar circumstances? All suggestions are welcome. At this point I'd like to give him something simple (so probably Java is out) but not too simple (so maybe Alice is out). But my mind's not made up about these, either. Many thanks for your ideas. --Dan
You could give C a try. He can begin to program in C using just the simplest programming concepts, and gradually augment his knowledge. Since C is a language used by professional software engineers, none of the experience would go to waste. Gene --- Daniel Asimov <dasimov@earthlink.net> wrote:
My very bright 13-year-old nephew would like to learn computer programming (from scratch). He's quite familiar with using software,
especially having used Midi music software for several years now.
At this point I don't think he has any specific goal of building a particular kind of software; he just wants to learn what computer programming is all about.
Has anyone had success with a particular language and/or book in similar circumstances? All suggestions are welcome.
At this point I'd like to give him something simple (so probably Java is out) but not too simple (so maybe Alice is out). But my mind's not made up about these, either.
Many thanks for your ideas.
--Dan> _______________________________________________ math-fun mailing list math-fun@mailman.xmission.com http://mailman.xmission.com/cgi-bin/mailman/listinfo/math-fun
__________________________________ Do you Yahoo!? Dress up your holiday email, Hollywood style. Learn more. http://celebrity.mail.yahoo.com
My very bright 13-year-old nephew would like to learn computer programming (from scratch). He's quite familiar with using software,
Dan, there are some kids where the absolutely best place to start would be the console toggle switches and indicator lamps on an ancient mainframe, if you can find a live one in a computer museum, e.g. There are other kids who take best to the opposite extreme, say generic functions (object-oriented LISP). For a certain concrete thinker, I'm planning the following first program: Combine Macsyma's string manipulation functions, especially CARDINAL_STRING (12 -> "twelve") and ORDINAL_STRING (12 -> "twelfth") to make a FRACTION_STRING function (11/12 -> "eleven twelfths"). There are nice opportunities for bugs ("one twelfths", 1/2 -> "one second", 3 -> "three firsts") and features (improper vs proper format, "three quarters"), generalization (RATIONAL_STRING, NUMBER_STRING even taking floats), and finally Robinson Crusoeing one's own CARDINAL_ and ORDINAL_ STRINGs. (Captious: "third", "thirteenth", "twenty third".) --rwg
--- "R. William Gosper" <rwg@osots.com> wrote:
My very bright 13-year-old nephew would like to learn computer programming (from scratch). He's quite familiar with using software,
Dan, there are some kids where the absolutely best place to start would be the console toggle switches and indicator lamps on an ancient mainframe, if you can find a live one in a computer museum, e.g. There are other kids who take best to the opposite extreme, say generic functions (object-oriented LISP). For a certain concrete thinker, I'm planning the following first program: Combine Macsyma's string manipulation functions, especially CARDINAL_STRING (12 -> "twelve") and ORDINAL_STRING (12 -> "twelfth") to make a FRACTION_STRING function (11/12 -> "eleven twelfths"). There are nice opportunities for bugs ("one twelfths", 1/2 -> "one second", 3 -> "three firsts") and features (improper vs proper format, "three quarters"), generalization (RATIONAL_STRING, NUMBER_STRING even taking floats), and finally Robinson Crusoeing one's own CARDINAL_ and ORDINAL_ STRINGs. (Captious: "third", "thirteenth", "twenty third".) --rwg
There's a very nice, nostalgic, computer museum in Mountain View CA. Here's the link, you can go search for your first computer. (Mine was the IBM 650.) But the machines aren't operating, and you can't touch them. http://www.computerhistory.org/ Bill is right about starting with console switches and lights. A PDP-8 might be difficult to get, but something from the Z-80 based S-100 days might be available. The names "TRS-80" and "Cromemco" pop into my mind. Step two would be assembly language, and the Z-80 is just the right processor for that purpose. However, if you're stuck with a PC or Mac, you surely don't want to force its assembly language onto your kid. Then C is the lowest level compiler language, the closest to the machine hardware. For starters, get an old PC and walk your kid through loading it with DOS and Borland C. Let him learn to use the keyboard and command line interface; don't spoil him with mice and graphics interfaces. Gene __________________________________ Do you Yahoo!? Yahoo! Mail - now with 250MB free storage. Learn more. http://info.mail.yahoo.com/mail_250
I said
Dan, there are some kids where the absolutely best place to start would be the console toggle switches and indicator lamps on an ancient mainframe, if you can find a live one in a computer museum, e.g.
The most amazing console I ever touched was the UNIVAC 1206 (a clone of a Seymour Cray design). Every flipflop in the CPU had a neon illuminated, complementing pushbutton. You could actually compute 1!, 2!, 3!, ... with ZERO instructions in memory, just by pressing single cycle after putting the CPU in a mode called Repeat Advance, with multiply-immediate 1 in the instruction register. Actually, there was one non-neon flipflop: FAULT. It was Big and Red and Shameful. The only way to turn it out was with the RESET button, which cleared every flipflop in the CPU unless the RUN light was on, whereupon it did nothing but extinguish the glaring FAULT of shame. A closely guarded secret, told only to a few Advanced Programmers, was that executing an unused op code, besides turning on FAULT, trapped to a fixed location and saved the processor state, just like the PDP-1 cal instruction, or the PDP-6,-10 U(n)U(sed)O(p), which eventually became the way to call the operaing system. But there were no operating systems on the early machines, nor were there stack-oriented subroutine calls, until the PDP-6. Few machine-language programmers understood the incredible benefits of a stack, but those who did rolled their own, using what PDP-1 people called a "cal handler". It was probably Cray's intent for UNIVAC to follow suit, but he left in disgust before convincing the UNIVAC Oberkommandants of the idea. Another little-known fact was that you could run the machine without clearing the FAULT light. Faced with a numerical triple integral with integrals in the limits, I wrote a recursive Simpson's rule which FAULTed every few milliseconds. The resident tweedy, pipe-smoking, infinitely self-assured Advanced Programmer (first name Fritz!) walked into the machine room and said, "Your program faulted," a UNIVACkers worst fear. I just said "Yep" and went on reading my Flexowriter listing. "Ah, I get it," he smiled, and walked over and pressed RESET, apparently expecting me to freak at the prospect of losing many cpu minutes, but instead, his smile disappeared when the light didn't even flicker. "You're wasting valuable machine time." "No I'm not." Whereupon he left to confer with my boss. By the time they returned, I had my answer (a submarine kill probability), and my boss deciding he didn't even need an explanation, shrugged and left, leaving Fritz to wonder if the whole thing was a trap. --rwg
Quoting "R. William Gosper" <rwg@osots.com>:
The resident tweedy, pipe-smoking, infinitely self-assured Advanced Programmer (first name Fritz!) walked into the machine room and said, ...
You mean that they actually let people smoke in the environs of a computer facility? Hopefully he didn't do that in the machine room itself. Well, worse could happen. Like when some psychologist put a PDP-8 (more likely LINC) in the pigeon room to run some testing and training programs. - hvm ------------------------------------------------- www.correo.unam.mx UNAMonos Comunicándonos
There was a private request for another early 60s computer story, and the UNIVAC tale had a sequel that might entertain some funsters. We were not allowed to list classified data on the Flexowriters because each character's binary code energized a distinct set of solenoids, broadcasting a signal that, in principal, could be decoded at a considerable distance. I seriously doubt (but dearly hope) the KGB expended the resources to intercept my Simpson's rule printout. If they ever figured out how it worked, the mathematics contained a completely fallacious model of our sensors, and the fancy programming gave the monstrous misimpression that we knew what we were doing. In fact, the Systems Analysts flatly rejected my computation, and very rudely told me to go back and try again. But I was sure of my results, and even surer that the analysts were bozos. These were the guys who spent over a year coming up with a way to intersect three ellipsoids. One of them once accused me of "ruining the randomness" by scaling uniform Monte Carlo variables instead of retrying until I got one in the desired range. He later demanded to know why the sum of two logarithms wasn't the log of the sum. I finally got some high-level director to force the bozos to show me the math behind their disputed integral. It turned out they were using a decaying Gaussian to model a distribution whose actual density was zero outside an annulus with an expanding hole whose center was the mode of their Gaussian. --rwg
<<It turned out they were using a decaying Gaussian to model a distribution whose actual density was zero outside an annulus with an expanding hole whose center was the mode of their Gaussian.>>
--rwg
That's the best punchline I've ever seen. --Ed Pegg Jr
Quoting Eugene Salamin <gene_salamin@yahoo.com>:
You could give C a try. He can begin to program in C using just the simplest programming concepts, and gradually augment his knowledge. Since C is a language used by professional software engineers, none of the experience would go to waste.
--- Daniel Asimov <dasimov@earthlink.net> wrote:
My very bright 13-year-old nephew would like to learn computer programming (from scratch). He's quite familiar with using software, ...
How about good old LISP? It seems to me that the problem is not so much to find a nice language; they abound. It is to get that language into a nice environment where it can be used and experimented with. That means having a favorable operating system on a reliable computer, and it certainly wouldn't hurt to have an understandable operating manual or introduction (or even a sympathetic uncle). I've got students maybe 50% older and of who knows what brilliance, but the same problem exists. ... Good luck! - hvm ------------------------------------------------- www.correo.unam.mx UNAMonos Comunicándonos
Dan, I'm very partial to the language Python. It's free (you can download it from http://python.org, and there are tons of tutorials documents about it. For example, there is a nice introduction to programming (for non-programmers) in Python at http://www.freenetpages.co.uk/hp/alan.gauld/ Victor
I'm currently trying to do the same project with an 11-year-old nephew. I created the rudiments of a little paint program in Java and I'm getting him to add features (new paint tools and such). The nice thing about Java is it won't crash like C will. But it is still C-like syntax, which is useful to learn. The bad part is the syntax is a bit complex for a beginner because of all the object & method stuff. I don't know if there are any BASIC implementations floating around still (there must be). That might be a fairly simple choice. If you are interested I'm happy to share the little Java paint program. Erik Neumann erikn@MyPhysicsLab.com -----Original Message----- From: math-fun-bounces+erikn=myphysicslab.com@mailman.xmission.com [mailto:math-fun-bounces+erikn=myphysicslab.com@mailman.xmission.com] On Behalf Of Daniel Asimov Sent: Monday, December 27, 2004 12:43 PM To: math-fun@mailman.xmission.com Subject: [math-fun] Learning computer programming for a bright 13-year old ? My very bright 13-year-old nephew would like to learn computer programming (from scratch). He's quite familiar with using software, especially having used Midi music software for several years now. At this point I don't think he has any specific goal of building a particular kind of software; he just wants to learn what computer programming is all about. Has anyone had success with a particular language and/or book in similar circumstances? All suggestions are welcome. At this point I'd like to give him something simple (so probably Java is out) but not too simple (so maybe Alice is out). But my mind's not made up about these, either. Many thanks for your ideas. --Dan
Dan, Have you thought about PostScript? It's an interpeted language [a deviant of Forth], has good documentation, many tutorial books [though mostly for its graphics features], widespread implementation (GhostScript plus half the printers in the world), and one can get up to speed very quickly for producing 2D graphics. And it doesn't have quite as many parentheses as LISP. From a programmer's standpoint its main disadvantages have to do with limits (single-precision floating point, 32-bit integers, array sizes limited to 2^16), but there are no reserved words so just about anything can be redefined at the expense of speed. --ms Daniel Asimov wrote:
My very bright 13-year-old nephew would like to learn computer programming (from scratch). He's quite familiar with using software, especially having used Midi music software for several years now.
At this point I don't think he has any specific goal of building a particular kind of software; he just wants to learn what computer programming is all about.
Has anyone had success with a particular language and/or book in similar circumstances? All suggestions are welcome.
At this point I'd like to give him something simple (so probably Java is out) but not too simple (so maybe Alice is out). But my mind's not made up about these, either.
Many thanks for your ideas.
--Dan
------------------------------------------------------------------------
_______________________________________________ math-fun mailing list math-fun@mailman.xmission.com http://mailman.xmission.com/cgi-bin/mailman/listinfo/math-fun
--- Daniel Asimov <dasimov@earthlink.net> wrote:
My very bright 13-year-old nephew would like to learn computer programming (from scratch). He's quite familiar with using software,
especially having used Midi music software for several years now.
At this point I don't think he has any specific goal of building a particular kind of software; he just wants to learn what computer programming is all about.
If your nephew likes music, perhaps an enjoyable software project would be to record sound using an analog-to-digital board, and create his own waveforms using a digital-to-analog board (or even just toggling a digital bit). You can control these boards by reading and writing to I/O Port addresses. Look at http://www.measurementcomputing.com/index.html Gene __________________________________ Do you Yahoo!? The all-new My Yahoo! - Get yours free! http://my.yahoo.com
Robocode is a good way to learn: http://www-106.ibm.com/developerworks/java/library/j-robocode/index.html http://robocode.alphaworks.ibm.com/home/home.html It uses Java, but I don¹t think it should be particularly difficult for a bright 13-year-old. Lego Mindstorms is another cool way to learn programming: http://mindstorms.lego.com/eng/default.asp Paul On 12/27/04 2:42 PM, "Daniel Asimov" <dasimov@earthlink.net> wrote:
My very bright 13-year-old nephew would like to learn computer programming (from scratch). He's quite familiar with using software, especially having used Midi music software for several years now.
At this point I don't think he has any specific goal of building a particular kind of software; he just wants to learn what computer programming is all about.
Has anyone had success with a particular language and/or book in similar circumstances? All suggestions are welcome.
At this point I'd like to give him something simple (so probably Java is out) but not too simple (so maybe Alice is out). But my mind's not made up about these, either.
participants (9)
-
Daniel Asimov -
ed pegg -
Erik Neumann -
Eugene Salamin -
mcintosh@servidor.unam.mx -
Mike Speciner -
Paul Reiners -
R. William Gosper -
victor@idaccr.org