Elite developer David Braben's RaspberryPi may have generated headlines aplenty, but it's not the first 1980s-style teach-yourself-programming gadget, one Reg reader insists. Step forward Julian Skidmore, developer and seller of FIGnition, a 20 quid DIY "retro computer built with modern parts... designed to be built by its users …
What language should I start my kids learning, so they can get the same enjoyment out of programming that I did when I was 11?
I mean, it's just not the same these days as when you could turn on the VIC-20 and be straight into coding in BASIC. Arguably not the best language for learning to be a proper "developer" but easy enough to satify your curiosity and make it do useful stuff.
Is there anything equivalent around? (with my oldest coming up to 11 now)
Does this still ship with MS operating systems?
If not, a simple Linux install will give you access to PHP (via the command line - no need for a full webserver) which is a very forgiving and accessible language for new learners.
Microsoft's Small Basic - http://smallbasic.com/ - is an attempt to produce a modernised equivalent to the introduction to programming through BASIC you'd get on a 1980s machine. It seemed decent enough to me when I tried it, though the BASIC dialect was not particularly good (no local variables, for example).
There is the Windows version of BBC BASIC - http://bbcbasic.co.uk/ - which provides a far superior language.
With functional programming languages being all the rage these days Logo is probably a good place to look though it seems most people don't get much further than the turtle graphics part to appreciate it as a decent enough language in its own right!
clean, simple, free (including the IDE), modular - with buckets of resuable stuff out there, OO, ...
go on, do'em a favour and start them out on the right track
Under the hood it is Java, but has 2d and 3d drawing (built in and OpenGL).
I don't really understand why it hasn't got more traction.
Keep it interesting
You could start with something intended to get kids interested in programming, and getting the basic concepts over. Once the interest is there you can start on other languages or going deeper into what the hardware is actually doing.
Lego mindstorms might be worth a try too.
You could really confuse them with REBOL!
... or Scratch? Please STAY AWAY FROM THE BASIC!
Rebol is great.
But *HONESTLY*, don't do this to your kid until they understand the fundamentals.
It's very nice, but my concerns re: this language is it's still quite idiosyncratic and I am uncertain about its future, coming from just one source.
I like it and have used it to craft some quick and dirty GUI clients (I actually like it more than python) but honestly, to teach a beginner this, might not be the best idea.
For a complete newb, show them Scratch first and see how things go and adapt accordingly.
I know, Scratch is again coming only from one source, but I think it just illustrates concepts so well, I suspect they'll breeze thru' it quickly and then will be conditioned to learn a real programming language.
Another prop for scratch.
Really on how much your child can grasp conceptually already.
Scratch is a good idea as suggested by another. If anything to whet the appetite.
I honestly would also consider encourgaging lower level stuff eventually. If your kid is anyway curious and motivated he or she will eventually want to go to take a look anyways. If your kid is bored with scratch etc... they may want something like this:
This is probably what I'd want if I were 12 today. When I was 12, it was a 6502 manual and a copy what's where in the Apple ][. But I started at an earlier age.
Some recommend trying python. Look, it's not bad and much better than basic, but versions change and with that small subtle things... And eventually they'll have to learn a scripting language. I just don't like it all that much as a 'sense of wonder' language but your kid could.
Conceptually, to someone completely naive to programming, at present I can't think of anything better than Scratch. If someone does I'd like to know what it is.
To be honest, I still mess around with it from time to time for the lols.
And this is the thing.
For a 11-12 year old, I suspect it will afford them *MANY* lols.
And that's what you want to encourage don't you?
with regards to PHP
I used it for a living, and am fully aware of it's foibles and craziness... I wouldn't learn to program with PHP though.
That's a lot of extravagance.
The Raspberry Pi is based on the FIGnition.
The Raspberry Pi is an ARM 11 based system with a 700MHz ARM 11 CPU, 128MB Ram, USB 2, SD Card slot and and it can run the ARM edition of Ubuntu. This thing appears to have an 8Bit CPU, 8KB of memory and 384KB of flash memory.
So no, I'd say the Raspberry Pi is not based on the FIGnition.
Still this FIGnition looks cool, but I want something that will run Speccy games or something like that (I mean, some sort of new hardware that is designed to run Speccy stuff).
Sorry, slight mix up. I was thinking about an article on the BBC News site about how easy is it to make a retro 8 bit computer now. They have also covered the RaspberryPi
So how do you type?
Slowly, I guess
Surely the poor user doesn't have to type ASCII in binary do they!?
Maybe should have got rid of half those buttons, and put on a PS/2 keyboard connector instead?
Hmm. Even if it's targeting the same audience as Raspberry Pi, you would be hard pressed to imagine more radically different designs (I want one of each!)
looke like a case for
a Chorded keyboard
Python - easy to get started, no complex IDE needed. SImple programs are very simple - there is no boiler plate header stuff. Has built in very good help on all the commands.
You can use it for procedural, object orientated and function (sort of) programming.
And you can write real world apps with it.
And there are lots of free, learn programming with python books
Python?! Your kids will beg you to by them a real language
Any language where whitespace is significant is a no-no for children. Imagine explaining to an 8-year-old why their program didn't work because of the lack of invisible stuff at the start of a line.
I started my kids at six by helping them take an old computer apart and showing them what each part did, and explaining why computers are useless without instructions.
Around 8 they started playing with Scratch, getting the cutesy cat thing to move around. They learnt that there was this thing called Java under the covers, but that was it. The most important lesson you can teach a child about a computer is that there are _always_ things under the covers, and to really master computing requires a little bit of knowledge of what's going on down below.
Now they're 11 they watch as I program and sometimes roll their own. I don't fix their bugs, but I provide hints sometimes. We're also talking about how programmers need to manage the computer's resources, and code efficiency (at a very high level: eg "if you had to search your room for a sock, what would be the fastest way to do it?" leads on to a discussion of why some search algorithms are faster than others)
It may all be too late. My language of choice for quick jobs is Perl. I've probably scarred them for life.
"Any language where whitespace is significant is a no-no for children"
What are you talking about?
It's no more difficult than understanding where to put the nipple brackets in your Java and Perl programs.
..the page isn't full of nipple brackets in every available space, some of which are real nipple brackets and some of which are just empty space. Could that be why significant white space, that looks no different to insignificant white space, is a no no for kids?
"It's no more difficult than understanding where to put the nipple brackets in your Java and Perl programs."
Yes it is. I can SEE the bloody brackets. Making whitespace anything more than a token-separator (as it is in Forth, in fact) is braindead. Wasn't Fortran enough of a warning?
Python is unusable because of this incredibly stupid design error. And by "unusable" I mean "not usable by anyone trying to get their work done and leave behind maintainable code".
Will teach children to count.
They will f*** up, I still do, quite honestly, but perhaps that will teach one good habits about tidying up as you go. Which is a good habit as I'll be honest with you, I prefer to manage my own dynamic storage than to rely on a GC, but YMMV of course.
And no, you have not scarred them for life. Maybe if you teach them APL or forth.... :P
The gameduino looks interesting too, and should be shipping in the next week or so...
gameduino.com. Sits on an arduino board, programmable in C/C++
If it was good enough for you why not introduce your kids to the same? A VIC20 emulator on your PC and jobs a good un. I still have a lot of my old 1980s magazines knocking around which I'll use for my kids when they are old enough
Make sure you remove the TAB key from their keyboard first
Oh, so you want them to start hardware hacking too?
Looks like my old programming skills may be needed again. Tra La ..
> FORTH !!!
There's still a *lot* of Forth being written. It just doesn't generally make too many headlines; it just chunters along doing stuff without users being aware of the language in use. No "Traceback (most recent call last)" here :-)
[Disclosure: one of my customers is a major Forth compiler vendor]
Now, usually I don't do this but uh
Gone ahead on break 'em off wit a lil' preview of the remix
FIGnition is not capable of very advanced languages, so BASIC would be a reasonable choice here, but RaspberryPI has much more power and memory, so you can run full-scale languages. The suggested Python is not a bad idea, but in spite of it being fairly easy to approach, it is also very difficult to find errors in programs.
I would prefer a language designed specifically for teaching, which would have the following properties:
- An easy-to-understand model of computation. This rules out, for example, OO languages and scripting languages with strange scope rules.
- Support for case-based programming, i.e., pattern matching on structured data.
- Read/write access to a screen buffer with primitives for reading/writing rectangular areas of the screen and for drawing simple figures such as lines, circles, polygons, flood-fills etc. Much like BBC Basic. Support for scroll in four directions.
- A primitie soundtrack datatype and an interruptable queue of sound effects that would support multiple concurrent sounds. So you, for example, can start a music track, add sound effects on top of this and interrupt the music when something happens.
- Primitives for reading/writing bitmaps and sounds in many different formats (PNG, JPEG, MP3, ...).
- Automatic memory management (garbage collection).
I specifically don't want a language where a lot happens "under the hood" that is not easily understood. Scratch and similar languages that have mechanisms for animation and collision detection remove control and understanding of what actually happens.
"I would prefer a language designed specifically for teaching ..."
So, PASCAL then? Not that daft an idea really, although it falls down on some of the criteria that you specify later on, but then we didn't seem to need them back in the way back when.
Cake and eat it?
I see where you're coming from but garbage collection *is* "a lot happening under the hood". Look at how long C++ has struggled to get it working. Indeed, even Smalltalk and Java developers still routinely muse on how to improve it. It is not a simple task.
Forth is an easy to understand model of computation, and once you get the hang of it you can layer object-oriented extensions onto it complete with garbage collection. But it brings you in at a very low level initially where you can get a real feel for the issues involved in such layers. Which sounds like a good chunk of what you want, really. And a BNF parser in Forth should set you back about 32 lines of code, so you can do your matching of structured data too.
Your language spec sounds pretty good for a first programing language. Powerful enough to have things happening to keep kids occupied, but simple enough they aren't going to get hung up on weird brackets rules, indirection operators, and horrible abuse of seemingly random punctuation.
If you find a language that fits, let me know...
Forth? It was a waste of space when it was new - why on god's green earth would anyone think it was due for a revival now?
python my arse
How to put them off programming for life.
BASIC or LOGO
what about pascal - aka delphi ???
it's still used a bit, and is really easy to learn. just my tuppence worth
has been priced out of the pocket of the average person... But I understand there are facsimiles out there.
I am well aware there are Delphi shops out there with large codebases and they need to maintain code - this bit I understand - but as a de novo choice, but I'm not sure that Delphi/pascal is the right way to go.
There are better alternatives, imho and reasons not to learn pascal/delphi.
I wouldn't touch it with a 10 foot bargepole.
There is a book for kids to learn programming, and it uses python. I forgot the exact title, but it's probably something like "Programming for Kids".
I can also appreciate the value of Processing, because it is so visual, and can be treated rather like Logo if you approach it in the right way, although we can ask ourselves whether the 'curly bracket' languages (C family) deserve another generation of potential bigots who are all fingers and thumbs the moment they are required to use a different syntax (e.g. python, lisp family, pascal family).
We've already seen complaints here about python's use of white space, as if the C family had nothing equally rotten in its syntax. (I have no preference, but I have yet to see a convincing argument as to why white space is such a liability in python).
I haven't looked at scratch. We could also mention Squeak and other Smalltalk variants, which was designed for kids in the first place.
No one mentioned
COBAL! I'm joking of course! that would put them off for life!
I was bought up on BBC Basic at school (about 12 then), and loved it, really easy to learn, I then moved onto PASCAL at college, taught myself C and PHP, did VB at night school, and now program JAVA & Flex at work.
But really I don't see why people would get this Kit rather then download and install an emulator, its surely got to be less hassle,
Nobody will be put off anything.
Pretty much everybody who was a child in the 80s first learned to program on BASIC or LOGO. I learned both. Then FORTRAN and MODULA2.
Each is useful in its own way, for its own purpose. BASIC has a very low entry requirement for English speakers, and is as unstructured as machine code. LOGO was a good introduction to procedural programming and had powerful graphics capabilities in the day. MODULA2 was, in retrospect, less useful, but it did introduce me to the idea of black box libraries. And some people, apparently, like FORTRAN.
BASIC and LOGO are both accessible, and, for new users, accessibility – and immediacy – is very important. This is why so many people programmed their computers in the 80s: when you booted up you had an accessible language, and you booted into a programming environment. If you typed 'PRINT "Hello World!"' you saw the output right there. No compiling, no './program_name': it was immediate. (The excellent paper manuals which came with the likes of the ZX Spectrum may have helped, too.)
When we were starting out, we didn't care about variable typing, class inheritance or code structure. Why should we impose barriers on our children?
Out of left field
PASCAL-like syntax, clear logic if divided up into logical units, only pulls the code it needs from libraries, not the whole library so compact binaries and, best of all, READABLE 6 months or 6 years later.
I learned programming by setting console switches on the front panel of an IBM 1620, then moved on to SPS (Symbolic Programming System - a direct predecessor to ASSEMBLER), then FORTRAN II so I'm not a quiche-eating psuedo-programmer.*
I just got introduced to Ada through its look-alike, PL/SQL and learned to love it.
*Google "Real Programmers Don't Eat Quiche" from Datamation magazine.