sburrow wrote:
CountChocula wrote:
drogon wrote:
Here in the UK, in schools, the focus is on Scratch, a visual "language" followed by Python (in secondary/high school).
Ah, this brings back memories of my son trying to learn Scratch for his CS class in high school… he wasn't overly fond of it (and neither was I when he asked for help; we both kept fighting with the darn thing because it refused to let us do things the way we wanted). Considering how crazy it drove us, I doubt that a younger child would be able to use it without getting frustrated.
(My son loved Python though—as do I. It was harder for him to learn, but, once he did, its consistency meant not having to constantly deal with all kinds of bugs and strange behaviours.)
Well put. I heard one of my programming friends teach his 12 yo Scratch, don't know how far that really got.
I'm personally NOT a fan of drag-and-drop stuff (or turtles, sorry), very un-useful in the future. Simply teaching the "concepts" of programming is NOT going to get you doing anything (I'm looking at you, Raptor). Immediate results in something useful is more important (in my opinion) and then you can build out from there. Say like in math, when you add two numbers, that skill is useful... forever! Then we say "ah, but now let's put a minus sign there instead" and the concept is nearly identical but in reverse. Same with multiplying. Then simplifying, then solving for x, then derivatives, then integrals. If someone were to say, "Ok, I know you've been dragging and dropping for X years, but today's lesson cannot be done with that method, so now we forget all about that and start typing!" That will not be met well. If they were already typing, they know exactly what to expect.
So, typing is a limitation on younger folks. But my 4 yo is using the keyboard with her whole ONE finger, and it's ok. More will come later.
My point earlier is that I've heard from many folks who "grew up in the 80's" that they had a VIC-20 or C64 plopped down in front of them in at an early age, and they HAD to learn how to program else the machine wouldn't do anything. If 5 yo's in the 80's could program, so can 5 yo's in the 20's.
Thanks everyone.
Chad
EDIT:
Do you know what language was my first programming language? C++, back in 10th grade. It's sad it took that long though. We had these terrible "Turbo Borland" compilers, but gosh darnit I was already making games within the first month of the class. All kids need is the basics of how things work, and off they go! I use C++ DAILY, 30 years later.
I grew up in the 60s and 70s... touched a computer for the first time at the age of 15 in 78. (HP9830A - Basic, then Apple II). I had a slight advantage over my classmates in that I could type. I don't think there were many 5 year olds with computers in the early 80's though. Teenagers - sure! (and I missed out here as I was ~20 when the C64 came out and had cut my teeth on the Apple II and BBC Micro, so from my point of view they were "rubbish" and I had "real" computers to play with at Uni... But the teenagers? They were the ones spending 24 hours a day on their Vic20's and so on... (also possibly because computers were so bloody expensive here in the UK!)
Also a tiny minority were actually programming. The vast majority were playing games.
Fortunately for me, at least I think fortunately, my teacher was an old Algol programmer so he taught me about program structure even in BASIC, and I learned more in a local university (before leaving school) with a high level language called Imp77. Since then it's been C almost all the way (although when I did go to Uni, I had to do all the "usual" others, FORTRAN, COBOL, Pascal - I did C independently, then BCPL)
Back to programming - I do think that it's better to teach programming as a concept rather than a single language. (I don't know what Raptor is) This is based on my own personal experiences though. I still like BASIC and have written my own BASIC interpreter (In C).
People tell me that Python is the new BASIC, but I was never really happy with it. it's really not my thing. Essentially I never got on with OO style programming even though I did work for a PC games company in C++ for a year.
So back to a very simple programming language (on the 6502)... It's BASIC. Give that BASIC functions and features and a hint of structure (e.g. a while loop) and you're half way there. At least I think so. For the 6502? Well, there are many many BASICs. Mostly MS based or MS derived - e.g. EhBASIC. All you need is a 6502 system that'll run a BASIC and porting EhBASIC is relatively trivial these days.
Want a bit more structure? Well, COMAL. The down-side of that is that there is only one Comal system I'm aware of and that runs on the BBC Micro. It's not that hard to make a 6502 system that looks enough like a BBC Micro to run Comal though (I did it with my Ruby 6502 system) Comal uses line numbers but only as an edit feature. You can't GOTO a line number. (Personally not convinced Comal is that good though, but it's there).
Things like turtle - well, it's visual and one thing I've noticed is that if you give young people visual feedback they're likely to stick. I've seen joy in their eyes after giving them a "program" to walk round a playground, (repeat 4, walk 3 paces, turn 1/4) then taking them through the steps of making that a real program and making a turtle draw a square on a screen. The other thing is GPIO - Light an LED, make it blink and so on. Seems almost trivial, but again, I've seen first-hand how newbies (young and old) react to this. Turtle graphics is just a tiny part of Logo, and it's a tiny part of my own BASIC too, but it provides a nice adjunct to simple point plotting and line drawing.
So keep it simple with visual feedback - the first program I had to write was to calculate compound interest. It nearly put me off for life.
Scratch makes it easy - it's almost real-live real-time Nassi Schneiderman diagram programming.
Scratch:
I'm not a fan of scratch myself, but it's there and it is being taught in UK primary schools (up to the age of about 11 - after that in secondary/high school it's more Python, but it depends on the school). There is a thing called Code Club here that sort of embraces it all that a lot of schools also embrace because it's easy for them. (Also driven by the Raspberry Pi Foundation who have a vested interest in getting kids into Python).
Neither Scratch nor Python runs on the 6502. Micro Python could be ported, but who's going to do it?
So IMO, you, we? need a modern BASIC for the 6502. Who's going to write it. Some will say that BBC Basic is already there, but it's old, almost esoteric and some dreadful quirks and foibles (again, my opinion - there are 1000's who'll defend it with their lives!) I don't think it encourages good programming although it's a great BASIC.
What do I think a good BASIC is? Well, I wrote one. It's over 30K lines of C has over 300 keywords and will never ever run on a 6502. Could I pare it down? Yes, given time (and money?) what would it need? Colour graphics, keyboard and mouse. 64KB of RAM/ROM with separate video memory. I'm almost back at the BBC Micro again.
I went back to your examples - they're almost BASIC, but one thing I did in my own BASIC was to make GOTO mandatory in an IF statement. It just reads better (to me, and it's MY BASIC for me). And CALC? Well, that's just LET with different letters to type... I've also found it easier to teach counted loops using a WHILE statement before introducing the FOR statement. Again, it reads better to me - and the young folks I've taught with it (8-14 year olds mostly) see to exhibit confusion with FOR but can read WHILE once they get the hang of variables.
Anyone up for coding a 'new' simplified BASIC in e.g. C for the 6502? I ported cc65 to my Ruby 6502 board, then I ported my nano-like editor to it to. It's about 1.5K lines of C and compiles to just under 16KB of object code and it ran very well, so a tiny basic in C with some simplified structure?
Anyway, rambling on now...
-Gordon