View Full Version : Programming languages for kids' education
Sideroxylon
2nd October 2009, 04:06 AM
My 10-year-old son is keen on learning about programing basics, both at home and at his school's computer club. He has started messing arround with Visual Basic - mostly following online tutorial projects. I am looking for suggestions for a suitable language for kids to learn. I have found a nice big list on Wikipedia (http://en.wikipedia.org/wiki/Educational_programming_language) but would love some pointers. So far MIT's Scratch (http://scratch.mit.edu/) looks quite interesting. His teacher has Pascal in mind but I wonder if what he learns through that can be applied to modern languages.
Leif Roar
2nd October 2009, 04:36 AM
His teacher has Pascal in mind but I wonder if what he learns through that can be applied to modern languages.
Yes, without doubt. Pascal is a very good choice for an introductory language.
DallasDad
2nd October 2009, 05:04 AM
There are only a few paradigms used in computer programming. Once one grasps the ideas, learning a new language is simply a matter of figuring out (or looking up) how to accomplish a known task in the vocabulary of the new language.
If your son wants to be a programmer, he should learn assembly language first, because everything else is a gloss on top of that. If he wants to have fun and produce quick results without having any real idea what he's doing, then VB or Java are good choices. If he wants to learn how all procedural languages work, then Pascal or C are excellent starting places. If he wants a good grounding in OOP, then C++ is probably best (other, newer languages are OOPier, but C++ forces one to know what's happening and take responsibility for making it happen correctly).
BenBurch
2nd October 2009, 05:35 AM
LOGO has some good course materials for it. Not sure about modern implementations of it, however.
The game "Chipwits" was how I introduced my kids to programming many years ago;
http://www.chipwits.com/
Careyp74
2nd October 2009, 05:54 AM
LOGO has some good course materials for it. Not sure about modern implementations of it, however.
The game "Chipwits" was how I introduced my kids to programming many years ago;
http://www.chipwits.com/
TURTLE!!!
That was my intro to programming back in Elem. School. Good choice.
After that I would move into Lego's. Yes, the building blocks. The MindStorm series is quite good at teaching the basics, we used it in college and had a lot of fun with it. Check youtube for a lot of cool videos. You can transition from that into C++ easily.
ETA: I am thinking like an Engineer. Leif might have a better insight into what languages to move into after Mindstorm, mine was C++ because of chip programming.
Leif Roar
2nd October 2009, 06:01 AM
If your son wants to be a programmer, he should learn assembly language first, because everything else is a gloss on top of that.
No, absolutely not -- especially not on a modern CPU. That would be like teaching a child physics by starting with quantum mechanics and working upwards.
If he wants to have fun and produce quick results without having any real idea what he's doing, then VB or Java are good choices.
I don't think either Visual Basic nor Java are good choices for an introductory language. Visual Basic is too unstructured and too focused on rapid prototyping, and Java's syntax is too messy and too wedded to object-oriented methodology and its base library is just too big for it to be suitable.
If he wants to learn how all procedural languages work, then Pascal or C are excellent starting places.
Pascal is good, but C suffers from a far too brittle syntax and too limited semantics. Fine if you're in need for a portable assembler, but not something to learn good programming habits with.
If he wants a good grounding in OOP, then C++ is probably best (other, newer languages are OOPier, but C++ forces one to know what's happening and take responsibility for making it happen correctly).
ABSOLUTELY NOT! C++ is a horrible suggestion for a first programming language -- almost worse than assembler. It's too big, too convoluted and suffers from a syntax that's only beaten by Perl in its propensity for instilling bad habits.
SumDood
2nd October 2009, 06:06 AM
There are only a few paradigms used in computer programming. Once one grasps the ideas, learning a new language is simply a matter of figuring out (or looking up) how to accomplish a known task in the vocabulary of the new language.
If your son wants to be a programmer, he should learn assembly language first, because everything else is a gloss on top of that. If he wants to have fun and produce quick results without having any real idea what he's doing, then VB or Java are good choices. If he wants to learn how all procedural languages work, then Pascal or C are excellent starting places. If he wants a good grounding in OOP, then C++ is probably best (other, newer languages are OOPier, but C++ forces one to know what's happening and take responsibility for making it happen correctly).
I have to respectfully disagree. I don't really see the point in learning assembly language. Sure, in certain disciples it is necessary, but one can have a very successful career programming in one of the higher 'gloss' languages. I assume when you say "without having any real idea what he's doing" you mean what goes on 'behind the scenes' underneath the higher languages' code. But do you really need to know that? One, especially a kid, would benefit greatly from learning Java.
Try here:
http://www.video-animation.com/java_000.shtml
Careyp74
2nd October 2009, 06:09 AM
I have to respectfully disagree. I don't really see the point in learning assembly language. Sure, in certain disciples it is necessary, but one can have a very successful career programming in one of the higher 'gloss' languages. I assume when you say "without having any real idea what he's doing" you mean what goes on 'behind the scenes' underneath the higher languages' code. But do you really need to know that? One, especially a kid, would benefit greatly from learning Java.
Try here:
http://www.video-animation.com/java_000.shtml
I wouldn't take the advice of some dude on the internet, especially if he is telling me to give my kids coffee :)
DallasDad
2nd October 2009, 06:55 AM
Ah, I'd forgotten how contentious discussions of programming languages can be.
To the OP: Take my suggestions with a grain of salt, recognizing that programmers can be every bit as religious as fundies when it comes to defending their chosen ground. I write from the perspective of a professional programmer (that's my day job) who's proficient in several dozen languages. I choose the tool that's appropriate for the job at hand. I started out with assembler, then graduated to C, and only learned other languages in the past 15 years or so. This colors my perception of the process, since my default orientation is toward efficiency of code and precision of control. People like me are the ones who write the operating systems and the higher-level languages others use, but we seldom use high-level languages ourselves for anything we consider "serious" work. Snobbery at its best, I'm afraid, and not terribly productive snobbery, since often RAD is more important than the size or speed of the final code.
I think most programmers agree that, to be proficient in any aspect of programming, good analysis skills and a firm grasp on the basics of procedural languages are indispensible. From there, one's own job experience and incidents of success seem to color the opinions far more than any objective weighing of pros and cons.
I shall indulge in a few generalities, however. The closer the language is to the hardware, the more powerful the language -- not in terms of getting complex tasks done quickly, but in terms of controlling the machine. There's a trade-off between power and safety, of course, which is where choosing the appropriate tool comes in. Languages like C or C++ let you make spectacular mistakes, and rely on the programmer to refrain from doing stupid things. Higher-level languages can save the programmer from shooting himself in the foot, but only at the cost of assuming his aim is likely to be bad and therefore carrying around a medical kit at all times.
For a 10-year-old, these discussions are irrelevant. If he's interested in what's going on inside the machine, he'll gravitate toward the lower-level languages on his own; if he's more practical, he probably won't. But at this point, learning procedurals and general concepts is far more pertinent and beneficial than choosing a specific language to learn. Anything that teaches him that computers are really DWIS1 instead of DWIM2 will be helpful. You really can't make a bad choice at his age. If you have someone who wants to work with him using a particular language, that probably means far more in terms of his education than the language used.
Inflation forces me to charge $0.04, while recognizing the value has fallen to zero.
===================
1 DWIS = Do What I Said
2 DWIM = Do What I Meant
dasmiller
2nd October 2009, 07:00 AM
I'd pick Pascal over C/C++ because the syntax is more readable and I think you really, really want start out with a strictly-typed language. IMHO, C/C++ allow you to do *way* too many things that you shouldn't do, and while that may (or may not) be good for the experienced programmer, it's a bad idea for a beginner.
I'm a hard-core OOP programmer, but I wouldn't start out a kid in OOP.
I'm vacillating on whether the kid should start with an interpreted language.
Uhhhh as I think this through, it gets to be a bigger topic than can easily be addressed in one short post.
drkitten
2nd October 2009, 07:08 AM
His teacher has Pascal in mind but I wonder if what he learns through that can be applied to modern languages.
Pascal is a very good teaching language and a very poor working language. As DallasDad said, there are really only a few programming language paradigms out there, and if you know how to program in Pascal, you also know how to program in any of the other ALGOL-based languages, including ALGOL, C, Modula-2, and if you ignore the OO bits, Java and C++. And, of course, vice versa.
The other paradigm I would suggest for a start is LISP, which is both radically different and will improve his mathematical ability to no end. But it also will NOT teach him Java or C.... I believe MIT uses LISP as their first language, and I think they're unique in doing so.
I would stay away from assembly language at all costs. It's neither useful nor fun, and it teaches all sorts of bad habits. Yes, he will eventually need to learn assembly, just as he will probably eventually need to learn Perl, but they're terrible starting languages.
But the big point I would make is that the language he learns in is not necessarily the language he will use to write programs once he's got a bit of experience. Most major league pitchers started out with T-ball, so there's no shame in starting with something designed to be easy to learn.....
JJM 777
2nd October 2009, 07:26 AM
php and JavaScript are handy, they are used for making websites, which is one of the most common and most fun uses for any programming
Wudang
3rd October 2009, 04:49 AM
I still sometimes write in assembler but I have to point out that it's been a long time since IBM wrote operating systems in assembler - they use a PLI-like language called PL/AS when I used it but I think is now PL/X. Assembler teaches bad programming habits.
Leif talks a lot of sense.
This (http://www.amazon.co.uk/PASCAL-Introduction-Methodical-Programming-Instructions/dp/0273021885) was my introduction to programming and it was very good - especially since I had one writer as my tutor. I'd also recommend something to get him thinking about the data - Joe Celko's SQL for Smarties is one of my favourite books or his SQL Programming Style - both are about how to think about the data.
AgeGap
3rd October 2009, 06:55 AM
I am currently trying to teach myself Python.
I am trying to get my head around indenting appropriately. A 10 year old should find it easier.
Computers passed me by until I got to age 40 so I have a lot of catching up.
cyborg
3rd October 2009, 07:35 AM
I vote for LOGO - instant feedback is important when you're trying to get to grips with these things.
roger
3rd October 2009, 07:55 AM
Ah, I'd forgotten how contentious discussions of programming languages can be.It's not contentiousness for the sake of contentiousness, it's that you offered rather poor choices for a 10 year old boy. Think for a second - the kid is trying to master several skill sets at once - structured thinking, algebraic type equations (x=x+1 stalled out my high school intro class for a few days until they 'got it'), concepts of variables, procedures, loops, etc. On top of all that you want the kid to fight an extremely unforgiving architecture and environment? It's relatively easy to debug an interpreted language, and not to bad to do high level languages with modern IDEs - you can inspect code, inject values into variables, even recompile a single line of code and inject it into the still running code. In comparison, you execute your assembly program, it crashes, and you go 'waaaa???" Just to do a simple loop in assembly requires significant understanding of the hardware. It's a huge hurdle, to no effect. I'm not experienced in child development, but I doubt a 10 year old has the mental capacity to maintain the structure of 100+ lines of assembly in his head, which is required to write all but the smallest function .
Sure, it's possible for a 10 year old to do assembly first, but why? The vast majority would give up. I taught myself it when I was 14, but it was damned hard, I never did much with it until I was older and otherwise much better at designing programs, and I was the kid that taught himself calculus, relativity, etc in high school. Not exactly average.
10 year olds want to play. Give him a decent interpreted language, sit him at the command prompt, and give him some suggestions now and again. If he takes to it start introducing some real concepts. If/when you introduce a compiled language, make sure it has a state of the art debugger. He'll probably be pretty hungry for them, because he'll quickly run into a wall, wanting to write the next Halo, but be producing 20 line programs that are so spaghetti like he can't understand them. It's a good education, and a good way to build the desire to become better. Needing to learn the various ways to address memory (immediate, indirect, etc) before you write a simple loop? Ah, no.
PixyMisa
3rd October 2009, 10:58 AM
I fourth those who recommended Logo. It's awesome. It has all the power of Lisp but a more accessible syntax, and turtles.
There's a really great series of books called Computer Science Logo Style - you can also read it online (http://www.cs.berkeley.edu/~bh/). It's aimed at a slightly older audience, but with a bit of help an enthusiastic 10-year-old could probably do pretty well.
JJM 777
3rd October 2009, 12:01 PM
How many of you guys started programming at 10 anyway?
I started at 7, with VIC-20 and BASIC. Games made with BASIC were published in magazines as source code back then. Oh the times.
BenBurch
3rd October 2009, 07:48 PM
Just was playing with ChipWits. Its still fun.
Mark the Hiker
5th October 2009, 04:26 PM
I introduced my daughter to Python around age 7. She immediately caught on to what a variable is, and enjoyed playing with it.
Then, there was a hitch. She wanted to make a calculation regarding money, and it got a floating-point representation problem, where $1.49 came out to be 1.4899999 or something like that. It was difficult to describe floating-point representation problems to my 7 year-old.
She still uses python interactively to do calculations with a lot of inputs.
I have more recently showed her the if statement and while loops. She hasn't spent much time with it. At the moment she is more interested in reading about history, and coin collecting.
W.D.Clinger
5th October 2009, 04:31 PM
The other paradigm I would suggest for a start is LISP, which is both radically different and will improve his mathematical ability to no end. But it also will NOT teach him Java or C.... I believe MIT uses LISP as their first language, and I think they're unique in doing so.
MIT used to use Scheme (which is a dialect of Lisp). At one time there were about a hundred other departments that used Scheme, mainly because of the Abelson/Sussman textbook. I think MIT has switched to Python, although they may still use Scheme in some courses.
For a ten-year-old, I'd recommend something like Logo or TeachScheme. Scratch looks plausible, although I didn't know about it until it was mentioned here.
Low-level languages such as assembly languages, C, and C++ aren't appropriate for a ten-year-old, and will be less important by the time he's 20 than they are today.
Will
dropzone
5th October 2009, 07:00 PM
The MindStorm series is quite good at teaching the basics, we used it in college and had a lot of fun with it.Isn't the Mindstorm language a dialect of Logo?
Logo is a brilliant language and, as it's infinitely extensible, you can do pretty much anything with it. And though it's interpreted, modern computers are so bloody fast that it stops being an issue.
Edited to ask: Does anybody outside the retrocomputing community still code in assembler?
DevilsAdvocate
6th October 2009, 12:05 AM
I would go for Visual Basic simply because you can use VBA. You get to work with the MS Office suite, and do code, and manipulate Office applications, and can record record macros and see what code you get, and the language is easy to understand and forgiving. Decent place for a kid to start fooling around.
cyborg
6th October 2009, 12:17 AM
Edited to ask: Does anybody outside the retrocomputing community still code in assembler?
Well somebody has to make all those lovely libraries which allow us lesser mortals to pretend that computers are somewhat homogenous.
cyborg
6th October 2009, 12:18 AM
Then, there was a hitch. She wanted to make a calculation regarding money, and it got a floating-point representation problem, where $1.49 came out to be 1.4899999 or something like that. It was difficult to describe floating-point representation problems to my 7 year-old.
This module looks useful:
http://www.ohloh.net/p/python-money
Leif Roar
6th October 2009, 12:49 AM
Well somebody has to make all those lovely libraries which allow us lesser mortals to pretend that computers are somewhat homogenous.
Most of that is written in C, though.
Assembly programming really is a very narrow field these days. Compiler programmers have to know assembler code, of course, but they don't really program in assembler -- most compilers are written in higher level languages.
There is always the case of a new CPU, of course, where in theory one needs to write a boot-strapping compiler in assembler first -- but what with modern CPU lines backward compatibility and cross-compiling that doesn't really happen either. (Perhaps for some of the weirder embedded CPUs it's still done.)
Again in theory, assembler might be used for "extreme optimisation" of important inner loops, but in practice modern compilers usually produce better and faster assembler code than humans writing it for hand does, so again it is quite rare to actually do so.
My guess would be that the main writers of assembler today are the chip manufacturers, and much of that would be for testing and verification, but there might be areas I've overlooked.
dasmiller
6th October 2009, 06:54 AM
Again in theory, assembler might be used for "extreme optimisation" of important inner loops, but in practice modern compilers usually produce better and faster assembler code than humans writing it for hand does, so again it is quite rare to actually do so.
Concur. I've actually done it, on occasion, with some time-critical routines. And it takes a fair amount of fine-tuning simply to get the assembler version to run as fast as the compiled code. It turns out that modern compilers are really, really good at optimizing the lower-level code.
I don't think I ever got more than 20% speed improvement by going to assembler, and even then, the improvement often seemed to be very processor-specific.
ETA: back to the OP - as I think about it more, I'm liking Python more for a child's learning language.
ponderingturtle
6th October 2009, 07:15 AM
TURTLE!!!
That was my intro to programming back in Elem. School. Good choice.
After that I would move into Lego's. Yes, the building blocks. The MindStorm series is quite good at teaching the basics, we used it in college and had a lot of fun with it. Check youtube for a lot of cool videos. You can transition from that into C++ easily.
ETA: I am thinking like an Engineer. Leif might have a better insight into what languages to move into after Mindstorm, mine was C++ because of chip programming.
Well doesn't Mindstorm use a Labview version in it?
andycal
6th October 2009, 09:59 AM
Shoot me down in flames if you like but I'm about to make a completely bonkers suggestion.
I've been using something called 'Runtime Revolution' (http://www.runrev.com/home/product-family/) which is essentially Hypercard. It creates Linux, Mac and Windows executables and it pretty easy to learn. You can also create proper applications with it.
I'm not sure if it's great for kids (mine is only two so he's busy working out how to dissasemble Bob the Builder's diggers) but I reckon it's a good start.
Has code like "Move the graphic 'graphic1' left by five pixels".
Has a stupid license model, but it's a great system.
Mark the Hiker
6th October 2009, 11:04 AM
This module looks useful:
http://www.ohloh.net/p/python-money
Sure, I found the Decimal package at the time, but I wasn't ready to explain classes to her yet either. We hadn't even done "if" yet.
The reason I used python for introducing programming to my kid is the easy interactivity.
She has also used some turtle type programs in Linux, which she regards as more of a game ( so much the better, lets learn through playing ). She also has a spreadsheet to keep track of her allowance.
Another classic, to introduce string handling, is to do "madlibs", where the program asks for nouns, verbs, etc, and prints out a story. Those are easy for a kid to hack on, and they will soon cause themselves a syntax error that is easy to fix.
When she was around 3, I would set up wordpad in 36 point font, turn on caps lock, and let her bang away. It was a matter of playing with the alphabet, and she regarded it as a game.
Almo
9th October 2009, 02:56 PM
I don't recommend PASCAL as a first language. It is way too restrictive. Let them be sloppy with BASIC first time around, and then learn proper structure later. That's my opinion anyway.
Oliver
10th October 2009, 02:19 AM
php and JavaScript are handy, they are used for making websites, which is one of the most common and most fun uses for any programming
Well, maybe a kid should start off with HTML first, don't you think?
Bobby078
10th October 2009, 03:47 AM
I think pascal is a good first language. ok it may be restrictive but it is simple and they get something out of their effort easily.
If you start with something too hard he might just give up.
Leif Roar
10th October 2009, 07:26 AM
Well, maybe a kid should start off with HTML first, don't you think?
As HTML isn't a programming language and coding HTML doesn't teach you anything about programming, that wouldn't be a very good choice.
Wowbagger
10th October 2009, 07:57 AM
If your son wants to be a programmer, he should learn assembly language first, because everything else is a gloss on top of that. If he wants to have fun and produce quick results without having any real idea what he's doing, then VB or Java are good choices... No, this is phenomenally bad advice.
VB and Java are excellent good choice for first time programmers, especially VB! (Or, perhaps QuickBasic, if you happen to have an old copy lying around.) It will get your child familiar with all of the basic concepts of programming: Variables, decisions, loops, boolean logic, object oriented stuff, etc. without all of the frustration of low level plumbing getting in the way.
Eventually, if your son wants to be stand out programmer, it pays to have some good knowledge about all the layers of abstraction that go into a typical software enviornment, including assembly language. But, bombarding him with all that stuff now might only turn him off the whole thing.
Oliver
10th October 2009, 11:14 AM
As HTML isn't a programming language and coding HTML doesn't teach you anything about programming, that wouldn't be a very good choice.
Well, yes - HTML isn't a programming language, but it's certainly useful as an introducing step to get to PHP, Javascript and Java.
Leif Roar
10th October 2009, 12:04 PM
Well, yes - HTML isn't a programming language, but it's certainly useful as an introducing step to get to PHP, Javascript and Java.
I disagree entirely. PHP and Javascript are dedicated web languages which are of limited use without knowing HTML, but when it comes to learning how to program as a general skill, HTML is absolutely irrelevant and of no use whatsoever.
oggiesnr
12th October 2009, 06:07 AM
Oh for the days when it was simple :)
At college (early 1970's) we learnt the basics of structure etc in BASIC and then went on to Fortran. If you were really keen (I wasn't) you progressed to Algol and Cobol. All done on an ICL 1900 "George" with 1kb of memory and punch cards or tape.
Depending where he's got to I still think BASIC is a reasonable start. After that it's a question of what type of programming interests him.
All the best
Steve
Kevin_Lowe
12th October 2009, 06:35 AM
I think you are all being very silly. Clearly his first language should be lolcode (http://lolcode.com/).
quixotecoyote
12th October 2009, 01:45 PM
I remember in high school learning BASIC out of the 3-2-1 Contact magazines.
I had a blast.
I never did anything with it, as my talents lay in other directions, but now when I plunk around with game studio software the concepts help.
BenBurch
12th October 2009, 02:29 PM
The fewer people who know machine language the better.
More work for me.
CatOfGrey
12th October 2009, 04:39 PM
My 10-year-old son is keen on learning about programing basics, both at home and at his school's computer club. He has started messing arround with Visual Basic - mostly following online tutorial projects. I am looking for suggestions for a suitable language for kids to learn. I have found a nice big list on Wikipedia (http://en.wikipedia.org/wiki/Educational_programming_language) but would love some pointers. So far MIT's Scratch (http://scratch.mit.edu/) looks quite interesting. His teacher has Pascal in mind but I wonder if what he learns through that can be applied to modern languages.
I'm not familiar with Scratch, but can heartily and completely recommend Python as an introductory language. Like Pascal and BASIC, it is generally easy to understand what a statement means. There is a minimum of extra work to program - you don't even have to declare variables.
For a 10-year old, the purpose of programming is to establish a connection between an instruction and an outcome. Python is by far the best and most current way to do that.
Incidentally, the Python installation for Windows usually comes with the IDLE interface, meaning that in minutes, you can type in a program, run the program, and see results. No compiling, no additional modules, straightforward and clear.
CatOfGrey
12th October 2009, 04:47 PM
The fewer people who know machine language the better.
More work for me.
This is for teaching programming to a ten-year old.
How long does it take to write a program in Assembly that displays a request for input ("Please enter a number of inches: "), then after the number is entered, multiplies it by 2.54 and then displays the length in centimeters?
I last did Assembly language programming on an Apple II. It had it's place, and opened up a big wide world of what I could do with a computer. But that's not for a ten-year old. When the kid is older, and even more geeky, then they can take up C or assembly language, and take over the world.
Wowbagger
12th October 2009, 05:07 PM
I remember in high school learning BASIC out of the 3-2-1 Contact magazines.Those programs sucked!
But, for some reason, I managed to have a blast with them, too! :)
Andrew Wiggin
15th October 2009, 12:25 AM
I learned apple basic and logo in high school. Apple basic was clunky, and the class was taught by a teacher who had little understanding beyond just reading the textbook, but logo was cool. I also had a radio shack/tandy microcomputer trainer that was programmed directly in machine language, and I learned a lot from that, though I wouldn't have learned as much if not for my father, who was one of the original programmers for NCR when NCR stopped being about mechanical cash registers and started being about computer hardware. He actually understood the machine language on a level that he could explain to me, and it was helpful that he could read binary and hexadecimal, and could teach me how to as well.
I'd vote for some version of basic, combined with some material on how the actual machine language is processed.
A
six7s
28th October 2009, 11:58 PM
There are only a few paradigms used in computer programming.True :)
If your son wants to be a programmer...
If he wants to have fun and produce quick results without having any real idea what he's doing...
If he wants a good grounding in OOP...
If he wants to learn how to be a GOOD programmer, then - before turning on his computer - he should learn the fundamentals; analysis, design (incl. Structured English (http://en.wikipedia.org/wiki/Structured_English#Example_of_Structured_English)) and testing
And how to make good (i.e. full-caffeine) coffee :)
And how to supplement his diet with artifical vitamin-D ;)
SezMe
29th October 2009, 02:30 AM
I write from the perspective of a professional programmer (that's my day job) who's proficient in several dozen languages. I choose the tool that's appropriate for the job at hand. I started out with assembler, then graduated to C, and only learned other languages in the past 15 years or so.
Nobody is proficient in several dozen languages. Assuming "several" means 3 or more. That means you think you are proficient in 36 languages. And you started 15 years ago, which means you are learning a new language every six months or less. Actually, not learning but becoming proficient.
Nope.
ponderingturtle
29th October 2009, 12:16 PM
Nobody is proficient in several dozen languages. Assuming "several" means 3 or more. That means you think you are proficient in 36 languages. And you started 15 years ago, which means you are learning a new language every six months or less. Actually, not learning but becoming proficient.
Nope.
My uncle figured out that he had programed in about 26 or so languages. Of course this is probably in about 40 years doing programing.
six7s
29th October 2009, 12:49 PM
My uncle figured out that he had programed in about 26 or so languages. Of course this is probably in about 40 years doing programing.I have a friend who first learned Assembler and then COBOL in the early 70s... their CV now lists 29 languages... many of which are very, very similar in terms of syntax
Although 29 isn't several dozen, it is a rather large number... but then she has a thorough understanding of the fundamentals... so learning a 'new' language is now a gazillion times easier than learning the first
SezMe
29th October 2009, 01:01 PM
Remember, the claim was not about how many languages he knows, it is how many languages he is "proficient" in. I claim knowledge and proficiency are two different animals.
Paul C. Anagnostopoulos
29th October 2009, 03:18 PM
Oh cripes, we're going to bring up a generation of kids who think that whitespace languages are a good idea. That, and Perl.
Buy the kid an IBM 402.
~~ Paul
crackerjack5
29th October 2009, 05:14 PM
C++ was the first language I learned. It's easier than most Object-Oriented Programming. Not sure if it's good for kids, though.
sphenisc
29th October 2009, 05:31 PM
BASIC - the clue's in the acronym.
dropzone
29th October 2009, 06:33 PM
If he wants to learn how to be a GOOD programmer, then - before turning on his computer - he should learn the fundamentals; analysis, design (incl. Structured English (http://en.wikipedia.org/wiki/Structured_English#Example_of_Structured_English)) ....Oh, QuickBASIC!
Took a fundamentals of programming class that also pretended ;) its "Structured English" was not QuickBASIC with some syntax errors. I fixed the errors and my professor never noticed. :D
DallasDad
29th October 2009, 06:40 PM
Did I say several dozen? That's an oops. I was thinking "several" and expanded it to "a dozen" after more thought, but didn't edit well. My bad.
six7s
29th October 2009, 09:29 PM
Oh cripes, we're going to bring up a generation of kids who think that whitespace languages are a good idea.Not entirely... there's also a trend towards metrosexual programming, with every line indented "beautifully"
headrush.typepad.com/creating_passionate_users/2006/03/code_like_a_gir.html (http://headrush.typepad.com/creating_passionate_users/2006/03/code_like_a_gir.html)
Do engineers and programmers care about concepts like beauty and elegance? Should they? Designers have always known that looks matter--that the outside (interface) matters. <snip/>...a kind of "Design Eye for the Code Guy" way.
While I'm stereotyping with abandon, I might as well be honest. I've been going to tech conferences for the last 15 years, and I swear the ratio of pocket protectors to Urban Outfitter clothes has shifted dramatically. <snip/>
"As for spending too much time on making the code look right down to the last indentation - my code has been called “girl code” for the same reason..."
<snip/>
zaphod2016
30th October 2009, 02:26 AM
php and JavaScript are handy, they are used for making websites, which is one of the most common and most fun uses for any programming
I 2nd PHP as a great first language.
Now, people will holler and yell and tell you that PHP is not a "real" programming language, and before PHP5 they would have been right. As ooPHP gains wider use, as the language matures, it has resulted in an impressive library of open-source software and easy-to-follow tutorials.
For what its worth- this very forum runs on vBulletin, which was written in PHP.
To get more specific- show him WordPress, and the plugin "hello dolly". The kid will have hacked together something functional an hour later. WordPress plugins are a great way to learn programming, and to see how smart practices allow scalability and collaboration (anyone can write a plugin, so long as they understand the "rules"- the API)
Once he gets bored of hacking "hello dolly", have him download an interesting plugin, reverse engineer it until he understands what it does and how, and repeat as necessary.
How many of you guys started programming at 10 anyway?
I started at 7, with VIC-20 and BASIC. Games made with BASIC were published in magazines as source code back then. Oh the times.
goto: 1986
print 'mom can I have a Nintendo?'
print 'no'
goto basic
play gorillas tossing bananas
get bored
write own game
note: I haven't used BASIC in so long I totally forgot the syntax. F5 runs; and the good ole' break key I remember well, but the syntax is long gone to me.
Wavicle
8th November 2009, 11:32 AM
My 10-year-old son is keen on learning about programing basics, both at home and at his school's computer club. He has started messing arround with Visual Basic - mostly following online tutorial projects. I am looking for suggestions for a suitable language for kids to learn. I have found a nice big list on Wikipedia (http://en.wikipedia.org/wiki/Educational_programming_language) but would love some pointers. So far MIT's Scratch (http://scratch.mit.edu/) looks quite interesting. His teacher has Pascal in mind but I wonder if what he learns through that can be applied to modern languages.
I am just going to throw in for Python (http://www.python.org/). Guido van Rossum, Python's creator, started by working on a language called ABC (http://en.wikipedia.org/wiki/ABC_programming_language), where they actually sat down and looked at what caused difficulty learning programming languages and worked at creating a programming language that would mitigate this difficulty. ABC heavily influenced Guido when he was creating Python. Python is really easy to use and supports to some degree several programming paradigms: imperative, object-oriented and functional.
Can what he learns in Python be applied to modern languages? Certainly, because Python is a modern language. Python is on track to be the most used language in scientific computing. Python has a very rich set of 3rd party modules and can be used in just about every context you can think of (except embedded, Python is really bad in the embedded space).
DazzaD
9th November 2009, 03:31 AM
For a ten year old I am inclined to agree with my brother (http://ledow.blogspot.com/2008/06/hobbyist-programming-advice.html) about programming as a hobby.
Having a vast amount of experience teaching kids of all ages IT (and maths and science and just about every subject under the sun in the guise of a Cub and Scout leader) then I would recommend looking at the Stage 2 and Stage 3 of the IT badge:
http://www.scoutbase.org.uk/library/hqdocs/badges/staged-it.htm
The badge is staged to go across all sections from age 6 to age 18. As such stage 2 or 3 ish is where most 10 year olds could aspire to.
My personal recommendation would be to learn a smattering of stuff:
html is not a bad start to introduce to someone who doesnt know anything about syntax or editors or checking their work. It is quick and easy and the results are immediate and (reasonably) obvious. No its not programming but then neither is mathematics, but a good mathematician can often be taught programming fairly easily.
BASIC - even quickbasic. Its old, dirty but the thing is.. its a lovely introduction to the world of programming and what it is all about, specially for a 10 year old.
From there they can pick up bits and bobs, not much wrong with a bit of java, or a bit of mindstorms lego, or a even those "cobble a game together editors".
Let him have a play around and see what really grabs his interest.
Salerio
9th November 2009, 03:48 AM
What the heck, I might as well chip in too.
I think it depends on what he wants to do with it and how much involvement you want as well.
For a procedural language Pascal is probably as good as anything, it rigorous and will teach him good practice.
For down-right fun at his age Logo (which I learnt a little older than him) is fantastic, especially if you get involved as well. I built (with my dad) a little robot including the penup/pendown function and had it trundling around on large sheets of paper drawing stuff. If you go this route you also get to play with an Arduino which could form the heart of your robot :) And these days it'd be wireless instead of having RS232 cables.
If you want an on-screen Logo check out Net Logo.
If you want to be cruel Prolog or Lisp ;)
six7s
9th November 2009, 06:17 AM
html is not a bad start to introduce to someone who doesnt know anything about syntax or editors or checking their work. It is quick and easy and the results are immediate and (reasonably) obvious.I agree
And it presents an ideal opportunity to introduce file structures, the client/server model, protocols, etc - all invaluable stuff for any programmer
...a good mathematician can often be taught programming fairly easily.Funny, that (http://www.google.com/search?client=opera&rls=en&q=tim+berners+lee+mathematician&sourceid=opera&ie=utf-8&oe=utf-8) ;)
Fontwell
9th November 2009, 08:47 AM
Nobody keen on tcl ( http://en.wikipedia.org/wiki/Tcl ) then?
AgeGap
30th November 2009, 02:08 AM
I have got this book and I would recommend it.
Head First Programming
A learner's guide to programming using the Python language (http://oreilly.com/catalog/9780596802387/preview)
I may also seek out other books in the series.
justcharlie09
30th November 2009, 07:18 AM
To the original poster: My son is really into computers and techie stuff, too. He's about the same age 9 going on 10.
Thanks for this thread!
Right now, my husband has him using something called Ubuntu (a free linux open source OS) and he's been messing around with VB and Java using my "for dummies" books (please, no comments on that...I like the for dummies series...I also like to think that doesn't reflect negatively on my intellectual abilities :D ).
Also, though it's not programming, he has a lot of stuff from Elenco and so does his little brother. The snap circuits were a big hit with them, and still are...along with the binary robot. We also have a microprocessor kit we've used to build some things but I don't think it was from Elenco...somewhere else.
Very cool.
eGadfly
30th November 2009, 08:54 AM
http://www.alice.org/
*I know nothing of programming.
six7s
30th November 2009, 10:24 AM
http://www.alice.org/
*I know nothing of programming.Alas, Alice doesn't know (or, perhaps, care) enough about standards to be recommended as a teacher:
http://validator.w3.org/check?uri=http://www.alice.org (http://validator.w3.org/check?uri=http%3A%2F%2Fwww.alice.org%2F&charset=%28detect+automatically%29&doctype=Inline&group=0)Result: 17 Errors, 1 warning(s)
logical muse
30th November 2009, 01:40 PM
Alas, Alice doesn't know (or, perhaps, care) enough about standards to be recommended as a teacher:
http://validator.w3.org/check?uri=http://www.alice.org (http://validator.w3.org/check?uri=http%3A%2F%2Fwww.alice.org%2F&charset=%28detect+automatically%29&doctype=Inline&group=0)
In that case, this forum shouldn't be recommended either:
http://validator.w3.org/check?verbose=1&uri=http%3A%2F%2Fforums.randi.org%2F
Errors found while checking this document as XHTML 1.0 Transitional!
Result: 200 Errors
My suggestion would be to not judge the content on the basis of the html.
six7s
30th November 2009, 01:46 PM
In that case, this forum shouldn't be recommended either:
http://validator.w3.org/check?verbose=1&uri=http%3A%2F%2Fforums.randi.org%2FAs a resource for teaching programming? No, of course not
six7s
30th November 2009, 01:47 PM
My suggestion would be to not judge the content on the basis of the html.Why not?
logical muse
30th November 2009, 02:17 PM
Alas, Alice doesn't know (or, perhaps, care) enough about standards to be recommended as a teacher
To justify this claim, you'd need to show that the errors in the html (as insignificant as they are) somehow relate to the ability of the Alice software to be effective as a teaching tool. For example, Alice is coded in Java, the website in html (or xhtml). An ability in one does not reflect on the other. It's also likely that the web site coding was performed by someone other than the Alice coders.
I have no affiliation with Alice; in fact I know nothing about it. I just don't see the relevance of the point you are making. I wouldn't want anyone to miss out on whatever they might learn from Alice based on your post.
Disclaimer: I'm a web developer, and a computer programmer. I try as much as I can to adhere to web standards, and I validate my code (usually).
kuroyume0161
30th November 2009, 02:21 PM
I'll throw in here:
BASIC
Python
Pascal
All three are good implementations of high-level languages.
C/C++ are too deep and obfusated for a 10 year old just beginning to learn computer programming. I have like six years of C++ experience (and about twenty in C) and I *still* hate C++. ;)
Mindstorm's LOGO is really easy when playing with basic robotics.
***
Side note: I don't get this issue over number of languages. When I say that I know 8800 asm, x86 asm, C, C++, Java, Python, Pascal, BASIC (several flavors), Objective-C, LISP, AutoLISP, etc. and so on, I don't mean "hey, I learned the language for a week and moved on". I mean "I used the language for a substantial amount of time and for real projects that, YES, I am proficient in it". Are you saying that I can't program in any of these even if it takes a week or so to remember and recalibrate some that I don't use often or haven't used in a while? I have an answer but it can't be typed here...
six7s
30th November 2009, 03:00 PM
An ability in one does not reflect on the other
Says who?
Attention to detail is attention to detail is attention to detail; it ought to be applied across the board - especially with regard to the trivial yet fundamentally important issues
I'm a web developer, and a computer programmer. I try as much as I can to adhere to web standards, and I validate my code (usually).I reckon that evidence of neglecting to validate something as simple (i.e. easy) as HTML is reason to doubt the 'authority' of any programmer(s) selling their wares on teh interwebs...
------------
ETA:
By the above 'reasoning', I'd question Sun, too
http://validator.w3.org/check?uri=http://www.sun.com (http://validator.w3.org/check?uri=http%3A%2F%2Fwww.sun.com%2F&charset=(detect+automatically)&doctype=Inline&group=0)Result: 32 Errors, 29 warning(s)
logical muse
30th November 2009, 03:14 PM
Says who?
Attention to detail is attention to detail is attention to detail; it ought to be applied across the board - especially with regard to the trivial yet fundamentally important issues
I reckon that evidence of neglecting to validate something as simple (i.e. easy) as HTML is reason to doubt the 'authority' of any programmer(s) selling their wares on teh interwebs...
You haven't justified why Alice isn't to be recommended.
You haven't shown that the developers of Alice are the same people who developed the web site.
You haven't shown how neglecting to use the "alt" attribute in the image tag in the html (and one or two other trivial ommissions) reflects on the Alice system.
logical muse
30th November 2009, 03:16 PM
By the above 'reasoning', I'd question Sun, too
http://validator.w3.org/check?uri=http://www.sun.com (http://validator.w3.org/check?uri=http%3A%2F%2Fwww.sun.com%2F&charset=(detect+automatically)&doctype=Inline&group=0)
Good, so you see my point and are questioning the validity of your own reasoning now. :D ;)
six7s
30th November 2009, 03:31 PM
Good, so you see my point Nope
and are questioning the validity of your own reasoning now. :D ;)ALWAYS :p
Pythonic
8th January 2010, 11:15 AM
Actually, I started out at 17 years old with assembler straight off. I have found that understanding enormously useful for every other language I've learned since.
CaptainManacles
14th January 2010, 09:55 PM
Python
It's incredibly intuitive and requires 10 times less work to accomplish the same task as other programming languages and is much less convoluted. It's everything you want out of an introductory language. The only downsides to the language is that it uses a crapload (it's a technical term, I swear) of memory and processing power, and if you're trying to do a really huge project it's hard to manage and organize.
But none of these really become a problem until you're doing really serious professional stuff, and even then most business applications aren't going to use enough memory for Python's bulkiness to matter. In fact, the only real downside is that it'll spoil him, he may have a hard time tolerating anything else once he gets use to it.
CaptainManacles
14th January 2010, 10:09 PM
Actually, I started out at 17 years old with assembler straight off. I have found that understanding enormously useful for every other language I've learned since.
It was more relevant the further you go back further in time. The power of modern computers and the tasks we generally set them upon makes it less relevant as time goes on, especially considering we're talking about a 10 year old kid here, and the things he's going to be kept interested by something that's going to take him months before he can figure out how to take input from the keyboard.
kuroyume0161
14th January 2010, 10:43 PM
Assembly is still a strong factor in device drivers and in some time critical operations on computers. But it is definitely not for the feint of heart. I could deal with it only because I started with it on a C64 (along with BASIC and Pascal) which transferred to Amiga and then MS-DOS without too much accomodation.
The courses that I've seen usually take the soft->hard tact so that the progression is more natural. Starting out with assembly language will totally confuse most people - especially since there aren't many 'real world' cases to employ it practically and it is extremely time consuming compared to modern OOPLs. The one course video set that I saw started with a simplified scripty language interface over Java. Later on they went into Java itself, Python, and C++ a bit. Then you got into C (which totally confused them - haha! I loved them asking about pointers - no clue).
The problem is that C is about as close to Assembly as most programmers will (or usually need to) get these days. And it has all of those complexities to boot: preprocessor directives, defines, pragmas, horrible independent modern support (such as no built-in UNICODE or wide-character support), inline functions, and so on. While it has a good language structure, being 100%, dyed-in-the-wool procedural without any OOP in sight (except via C++) makes it truly foreign to most incumbent programmers, especially those more acquainted with OOP.
ThatSoundAgain
15th January 2010, 12:47 AM
Python
It's incredibly intuitive and requires 10 times less work to accomplish the same task as other programming languages and is much less convoluted. It's everything you want out of an introductory language. The only downsides to the language is that it uses a crapload (it's a technical term, I swear) of memory and processing power, and if you're trying to do a really huge project it's hard to manage and organize.
But none of these really become a problem until you're doing really serious professional stuff, and even then most business applications aren't going to use enough memory for Python's bulkiness to matter. In fact, the only real downside is that it'll spoil him, he may have a hard time tolerating anything else once he gets use to it.
The only other downside I can think of is that you'll have people bitching about the concept of significant whitespace whenever they hear the word Python. Just tell them that I (and the whole C64 generation of kids along with me) was able to unlearn goto, which is much worse.
Really, this language was made for beginners. It scales from single statements to procedural to full-fledged OOP seamlessly, so it's good for starting out and powerful to boot. It grows with you.
Plus, once you tire of the vanilla stdout, there's lots of modules to be had. These days you'll also find it as a built-in scripting language for complex applications.
Really, the most important thing is to let him take it at his own pace, and, in time, to use the programming for real-world problems. It's more motivating to use it as a tool for an interesting goal than to follow the textbook (you can always do that later).
rocketdodger
24th January 2010, 01:10 AM
I think most of you are missing the point -- this is a 10 year old kid.
The "first language" for a kid should be choosen on the basis of one and only one criteria -- How easy is it for them to do what they want to do in that language?
six7s
24th January 2010, 01:24 PM
I think most of you are missing the point -- this is a 10 year old kid.
The "first language" for a kid should be choosen on the basis of one and only one criteria -- How easy is it for them to do what they want to do in that language?Ermmm...
Not if (when!) what they want to do is dick around... beware, for there there be dragons
Education - by definition - involves leading kids in an efficient and effective direction towards a worthwhile goal
If all you want is an electronic baby-sitter, then sure... let them pick any language
If you want them to think and learn about programming, you gotta do some preparatory work yourself
RecoveringYuppy
24th January 2010, 01:54 PM
Not sure if this is age appropriate, but this really introduces the concepts at a very basic and understandable level:
http://www.retrothing.com/2009/10/build_your_own_.html
RecoveringYuppy
24th January 2010, 02:00 PM
I vote for LOGO - instant feedback is important when you're trying to get to grips with these things.
Second that idea. LOGO or APL. Both a bit obscure but the instant feed back would seem very important to me. I'm not up to date on the current state of LISP but they typically offered instant results too. Maybe drkitten can comment.
ETA: Smalltalk falls in to the category of instant feedback also, and can demonstrate object oriented concepts.
rocketdodger
25th January 2010, 12:51 AM
Ermmm...
Not if (when!) what they want to do is dick around... beware, for there there be dragons
Education - by definition - involves leading kids in an efficient and effective direction towards a worthwhile goal
If all you want is an electronic baby-sitter, then sure... let them pick any language
If you want them to think and learn about programming, you gotta do some preparatory work yourself
Yeah, cause those kids that just "dick around" on computers when they are young never turn out to be of any value.
We don't want innovation or creativity in our society, we just want an army of little rule-following software engineers that complete their tasks "efficiently and effectively."
God forbid a kid should be able to pursue their own goals and learn at their own pace in their own way.
I really am thankful that there are such upstanding members of society, like yourself, around to make sure our children do exactly what we want them to do and learn exactly what we want them to learn. I will sleep better at night knowing you exist, six7s!
six7s
25th January 2010, 04:05 PM
God forbid a kid should be able to pursue their own goals and learn at their own pace in their own way.Please describe one such goal, in the context of this sub-forum
TYIA :)
I really am thankful that there are such upstanding members of society, like yourself, around to make sure our children do exactly what we want them to do and learn exactly what we want them to learn. I will sleep better at night knowing you exist, six7s!http://forums.randi.org/imagehosting/1760247eb39a5107c0.gif
rocketdodger
26th January 2010, 09:28 AM
Please describe one such goal, in the context of this sub-forum
I was thinking something like making their own little MUD, or an mp3 player, or a website with some cool interactive stuff, or anything else a kid might want to do.
But anyway I was being a bit sarcastic. My point is that "dicking around" is actually a very good way to learn because invariably one is somewhat interested in what they are "dicking around" with.
six7s
26th January 2010, 01:08 PM
I was thinking something like making their own little MUD, or an mp3 player, or a website with some cool interactive stuff, or anything else a kid might want to do.OK... so what's wrong with leading them, in an effective and efficient manner? :confused:
There's phrase that comes to mind:20 hours coding can save 2 hours of design
My point is that "dicking around" is actually a very good way to learn because invariably one is somewhat interested in what they are "dicking around" with.I contend that your "because" is bollocks
Please, do prove me wrong by illustrating how/where/when 'just having a go' is better than a step-by-step approach, beginning with the fundamentals
rocketdodger
26th January 2010, 03:55 PM
Please, do prove me wrong by illustrating how/where/when 'just having a go' is better than a step-by-step approach, beginning with the fundamentals
When the person in question is impatient and easily distracted and is tired of school and homework and just wants to "have a go" rather than spend any time learning fundamentals.
Or, in other words, a kid.
six7s
27th January 2010, 12:11 AM
Please, do prove me wrong by illustrating how/where/when 'just having a go' is better than a step-by-step approach, beginning with the fundamentalsWhen the person in question is impatient and easily distracted and is tired of school and homework and just wants to "have a go" rather than spend any time learning fundamentals.
Or, in other words, a kid.Oh... right... arguments from ignorance count when they're combined with sweeping generalisations, huh?
:rolleyes:
CaptainManacles
29th January 2010, 04:42 PM
Oh... right... arguments from ignorance count when they're combined with sweeping generalisations, huh?
:rolleyes:
Though I sort of agree with you, it's not an argument from ignorance. An argument from ignorance is in the form of "I don't understand X therefore...." not "Kids are impatient therefore..."
And I still think starting with assembly is like trying to teach your kid about the weather by starting with string theory. It may be technically the foundation of understanding the more macro phenomenon, but in this day and age it's just so far removed it's incredibly stupid to start there.
I mean, if we're arguing that one must start as close to the fundamentals as possible, why stop there? Make the little wanker bust out the transistors and build the machine himself before he programs on it. Or better yet, make him generate his own electricity.
andycal
29th January 2010, 11:56 PM
I mean, if we're arguing that one must start as close to the fundamentals as possible, why stop there? Make the little wanker bust out the transistors and build the machine himself before he programs on it. Or better yet, make him generate his own electricity.
I just wet myself a little bit.
But since it's just got me interested in this thread again, I'll add my 2c.
I'm with Captain and the Rocket (isn't that an Elton John album?). All this anal "teach them from the absolute basics how to everything to give them a solid foundation" crap just serves to turn out social retards.
I work with programmers all day and the best ones ever are not the ones that spent their salad days learning assembler and taking apart every single byte of code. The best ones are those that learn on the job, at the coalface, working with customers and building on their skills as they go.
Also, the best programs are the ones built with the latest tools and technologies for the latest devices. Sure there are assembler coders out there, but to keep them safe we put them in the middle of busy town centre ring roads. As they have difficulty operating pelican crossings it means they can't get out so we don't have to talk to them.
Wudang
30th January 2010, 06:59 AM
In fact I'd say, as someone who has to fix assembler code every year or two, knowledge of assembler is only of benefit to people coding procedural languages and where performance may be an issue. It does not help in an OO system any more than knowledge of QM makes you a better driver.
stevea
31st January 2010, 04:31 AM
There are only a few paradigms used in computer programming. Once one grasps the ideas, learning a new language is simply a matter of figuring out (or looking up) how to accomplish a known task in the vocabulary of the new language.
I have to call "lie" on this. The skills you learn in asm, C or other procedural languages are impediments to using OO languages properly; it's far more than a vocabulary change. but a different means of addressing problems. Then we have languages like lisp, snobol/icon, erlang or haskell that all use fundamentally different models.
If your son wants to be a programmer, he should learn assembly language first, because everything else is a gloss
I might agree if this was 1985 and nearly everyone used basic procedural languages, but today most BSCS grads do not understand at a procedural level what is actually happening when they write C++ or Java code. So we've come to an era where not all auto drivers need to be mechanics and not all programmers need to understand asm.
No, absolutely not -- especially not on a modern CPU. That would be like teaching a child physics by starting with quantum mechanics and working upwards.
I agree with the comment wrt programming languages, however I disagree wrt physics. I see the error of teaching 16th century physics first and then trying to make people re-learn everything as some new mystery in college. Even Ph.D physicists walk around with a lot of mental baggage of having learned the wrong stuff first. The fact is that advanced concepts can be integrated into high school level physics courses without problems, and IMO the earlier the concepts are introduced the better.
C++ is a fine OO language, but too advanced for a 10yo IMO.
C is more easily learned, and it is a sort of Lingua Franca of programming languages, but I strongly feel than a better language would be advisable as a first language.
Pascal is a very poor choice for several reasons. It was designed to teach structured programming and in that sense it's a good intro language to structured programming. Pascal is nearly a dead language outside of academia (where it is also nearly dead). C is as good as Pascal in all respects, and more widely used and available.
A child is motivated to continue with a programming language because he/she can make the machine do something AND offers the possibility of doing more/intersting things. This is where Pascal and Scratch fall apart as choices. You will learn programing methods, but the child will quickly find out that they cannot do much outside or raw computation and basic I/O. Pascal for example is unlikely to interface well with modern devices, network, graphics and database. These lesser used languages simple lack the APIs to do much except computation and file i/o. It's akin to providing the kid with a dozen kynex blocks while everything else uses lego. The possibilities which motivate learning will be far greater for a mainstream language.
I personally think that Java is a great fit. Java does require the programmer to use the extensive libraries, but so do all modern OO languages. The very nice thing about Java is that it executes anywhere and the 10yo will rapidly be motivated by the possibility of writing Java apps for cell phones or iPhones or ... Java compilers are readily freely available now and JVMs execute on numerous architectures. There are a lot of good online Java tutorials and examples.
My feeling is that pushing a 10yo into an simple interpreted language is probably an underestimation of his/her capabilities. Perhaps this would be useful if the kid requires more rapid gratification (or maybe I overestimate 10yo's). If you decide to go this way choose a decent language. I'd suggest Ruby or Python. Basic and Perl are terrible IMO.
The MIT language you mention may be a good language, but it is certain that it is not widely used and not widely implemented and will have few interfaces to other apps and tools; so this is certain to limit the child's interest in time. Still these might be a decent first step, with a change of language when limits are reached.
six7s
31st January 2010, 10:16 PM
And I still think starting with assembly is like trying to teach your kid about the weather by starting with string theory. It may be technically the foundation...Did I mention assembly? :confused:
If he wants to learn how to be a GOOD programmer, then - before turning on his computer - he should learn the fundamentals; analysis, design (incl. Structured English (http://en.wikipedia.org/wiki/Structured_English#Example_of_Structured_English)) and testing
stevea
1st February 2010, 01:24 PM
OK... so what's wrong with leading them, in an effective and efficient manner? :confused:
What's wrong is that you are leading them down well-worn paths rather than allowing them to first explore and learn from experience. It creates mental blinders to be given the "one true way" and to NOT be allowed to explore why the dogma works (or doesn't).
I would agree that in many technical fields there are well defined and useful practices, but the ppl I consider to be morons are exactly the ones who do not know exactly when a discipline is useful nor when "breaking the rules" is the best course.
Another problem I regularly see is that when you work near the edge of any technology you are stuck exploring. There are no books or best practices to help you find a way. Those who can only regurgitate well known practices and follow where they are led are most often useless at that point.
These issues amount to a lack of critical thinking, often cause by a lack of a deep understanding of a field. It's extremely common among software developers/BSCS types unable to think out of the box.
There's phrase that comes to mind:20 hours coding can save 2 hours of design
Certainly true, but "play" and "learning "is necessarily less or un- structured and not subject to design.
Please, do prove me wrong by illustrating how/where/when 'just having a go' is better than a step-by-step approach, beginning with the fundamentals
Driving a car, learning to cook, learning to hit a ball with a bat. The point of "having a go" is learning - that is to gain experience. So it is a universally better approach to learning than following wrote instructions step-by-step.
Originally Posted by six7s View Post
If he wants to learn how to be a GOOD programmer, then - before turning on his computer - he should learn the fundamentals; analysis, design (incl. Structured English) and testing
If you want to create a closed minded follower that's a great approach.
six7s
1st February 2010, 02:24 PM
These issues amount to a lack of critical thinking, often cause by a lack of a deep understanding of a field.Teh irony... it burnzzzzzzzzz
Driving a car, learning to cook, learning to hit a ball with a bat.I sincerely hope you don't inflict your "critical thinking" on any learner drivers
The point of "having a go" is learning - that is to gain experience.Yeah... right...
And the point of vacuous nonsense is to what? Waste bandwidth?
So it is a universally better approach to learning than following wrote instructions step-by-step.This crap has been plucked from your arse, right?
Please, prove me wrong by illustrating - by reference to famously good software developers - where and when your 'have a go' approach has worked
TYIA :)
roger
1st February 2010, 02:52 PM
I'm very good, and I started by programing interpreted basic, all line numbers and gotos. Then I learned production code techniques. That pretty much describes most of the really good people I know.
GreyICE
5th February 2010, 09:30 AM
This looks interesting:
http://www.alice.org/index.php?page=what_is_alice/what_is_alice
I'm a fan of simple languages that kids can see what they are doing. IMHO, the most important part of programming is knowing what you want to happen, knowing how to lay out and comment the code so it works efficiently, and knowing what procedures you want to accomplish certain goals.
Writing the code is really secondary.
andycal
5th February 2010, 10:53 AM
Please, prove me wrong by illustrating - by reference to famously good software developers - where and when your 'have a go' approach has worked
TYIA :)
Pretty much anything Microsoft has released??
I believe the mantra of nearly all web2.0 companies was "Get it out there, version 2.0 is the bug fix".
I mean, don't get me wrong, if you want to just write code to the absolute best of your ability and never have a bug and it be absolutely, totally efficient then great, your approach is spot on, but if you want to get married, have kids and enjoy the company of friends, I'd say steer clear.. :)
Earthborn
5th February 2010, 12:39 PM
And the point of vacuous nonsense is to what?Fun.
Please, prove me wrong by illustrating - by reference to famously good software developers - where and when your 'have a go' approach has workedJust because some kid has an interest in programming does not mean they want to be "good software developers". Programming is a creative art, so just as a child who likes banging stuff to make noise does not necessarily need to become a classical musician, or a kid who likes to finger paint needs to become a great artist, a kid who likes to cobble together silly games does not need the instruction to program "properly".
If s/he has an interest in "proper" software design, your advice is sound, just like a child with an interest in playing the violin needs proper violin lessons. However if s/he only sees programming as another way to play, your approach is likely to just ruin their perfectly valid fun.
oggiesnr
5th February 2010, 01:33 PM
Fun.
Just because some kid has an interest in programming does not mean they want to be "good software developers". Programming is a creative art, so just as a child who likes banging stuff to make noise does not necessarily need to become a classical musician, or a kid who likes to finger paint needs to become a great artist, a kid who likes to cobble together silly games does not need the instruction to program "properly".
If s/he has an interest in "proper" software design, your advice is sound, just like a child with an interest in playing the violin needs proper violin lessons. However if s/he only sees programming as another way to play, your approach is likely to just ruin their perfectly valid fun.
The big difference is that banging a drum or painting with fingers produces something tangible, no matter how good or bad. However typing random instructions into a computer will produce nothing. Hence the need for structure of some description from the start.
Steve
Earthborn
5th February 2010, 02:23 PM
However typing random instructions into a computer will produce nothing. Hence the need for structure of some description from the start.Depends entirely on the programming language. Sticking random instruction blocks together in Turtle Art or Alice will produce plenty, no matter how good or bad. While for many programming languages there is need to learn some structure from the start, this does not have to prevent a learning programmer to "dick around".
Leif Roar
6th February 2010, 04:41 AM
Programming is a creative art,
Not really. Sure, in the broad, technical sense it's a "creative art" -- then again, so is baking -- but the approach and process is entirely different what's usually thought of as "creative arts" and programming appeals to a different kind of person than creative arts do. It's much more similar to mathematics and, perhaps, architecture than to painting or writing.
Earthborn
6th February 2010, 05:02 AM
(snip) the approach and process is entirely different what's usually thought of as "creative arts"In what way is it "entirely different" ?
programming appeals to a different kind of person than creative arts do.This is often true, but there is no need for it. Some people have created a technical air around it so that most artsy types don't consider it as another way of expression, but I personally don't see how it is inherently so different from other arts.
Leif Roar
6th February 2010, 05:10 AM
I have to call "lie" on this. The skills you learn in asm, C or other procedural languages are impediments to using OO languages properly; it's far more than a vocabulary change. but a different means of addressing problems.
Oh balderdash. Oft repeated balderdash, perhaps, but balderdash nonetheless. Yes, object oriented programming is a different way of thinking and it does take time to switch from a procedural mindset to an object-oriented one, but the skills and knowledge of procedural programming is not an impediment to object-oriented programming.
You still need procedural flow-control inside your methods, you still divide projects up into modules and you still extract common functionality out into libraries. You've still got to think in algorithms and think about big-O for time and memory.
If you can't handle both procedural, object-oriented and functional mindsets and apply different ones at various granularities, you're not much of programmer -- regardless of which one you learned first.
I agree with the comment wrt programming languages, however I disagree wrt physics. I see the error of teaching 16th century physics first and then trying to make people re-learn everything as some new mystery in college. Even Ph.D physicists walk around with a lot of mental baggage of having learned the wrong stuff first. The fact is that advanced concepts can be integrated into high school level physics courses without problems, and IMO the earlier the concepts are introduced the better.
The problem isn't the order in which we teach physics, but that our minds -- perhaps from birth, certainly by the time education is started -- are predisposed to a certain mindset (Euclidian, non-relativistic, non-quantum-physical) because that's how the world appears on the level which we experience it. When you want to teach someone physics you have to start from how they already perceive the world and go from there.
C++ is a fine OO language,
You, sir, have no soul.
C is more easily learned, and it is a sort of Lingua Franca of programming languages,
Really, it's more of a pidgin.
Pascal is a very poor choice for several reasons. It was designed to teach structured programming and in that sense it's a good intro language to structured programming.
No, it was designed to teach programming. There is a lot to learn about programming before you start butting up against the difference between a structured design approach and an object-oriented design approach: what a variable is, what memory is, what a loop is, how to manipulate Strings, how to do IO, how to debug, flow control, error handling, input validation, freeing resources, algorithms, types, computations and all the other really fundamental stuff you have to learn first!
Pascal is a very good language for teaching that, which makes it a very good language for people who are new to programming. It's a good first language, but not a very good second language.
Pascal is nearly a dead language outside of academia
As we're talking about what language is suited for teaching (and, by effect, for learning), that's absolutely irrelevant.
C is as good as Pascal in all respects,
Absolutely rubbish.
This is where Pascal and Scratch fall apart as choices. You will learn programing methods, but the child will quickly find out that they cannot do much outside or raw computation and basic I/O.
Which is absolutely fine for a first language.
Pascal for example is unlikely to interface well with modern devices, network, graphics and database.
A modern pascal does graphics just fine, and none of the rest are going to be of interest for the first couple of years. Databases and network? First you have to learn the difference between an int and a float.
I personally think that Java is a great fit.
You happen to be wrong. Java isn't the worst choice, but it's not a very good choice. It's got a complex syntax, badly designed and overgrown core library, a complicated runtime environment and too many things that rest on conventions.
Java does require the programmer to use the extensive libraries, but so do all modern OO languages.
Which is one reason why they make poor introductory languages.
Leif Roar
6th February 2010, 05:18 AM
In what way is it "entirely different" ?
First of all, because the core of it is problem solving rather than aesthetics. Secondly, because it requires an entirely different type and degree of abstraction. Thirdly, because there is no concrete manifestation of the work.
Some people have created a technical air around it so that most artsy types don't consider it as another way of expression, but I personally don't see how it is inherently so different from other arts.
Programming is inherently technical, and it's not "another way of expression." You can express a mathematical formula in a computer program, but you can't use it to express your love of nature or the beauty of your love. It's an art, but it's not art.
roger
6th February 2010, 09:55 PM
I guess after reading all these, err, interesting assertions I wonder how I ever managed to program mission critical software used in various situations like war and keeping the President's plane from crashing into a mountain, while having started out programming by playing with a few typed of interpreted basic (example, the Sinclair ZX-81, a TI-94, and some oddball miniframe type computer at school) , with no formal instruction at all.
Because the arguments here make it sound completely impossible.
Play is play, and it is fun. At some point you recognize the limits of play and where it will get you. That play does not somehow melt your brain and make you incapable of learning basic and advanced concepts, nor does it keep you from being able to field as complex and correct software as you could ever find.
RecoveringYuppy
6th February 2010, 10:02 PM
That play does not somehow melt your brain and make you incapable of learning basic and advanced concepts, nor does it keep you from being able to field as complex and correct software as you could ever find.
But if your brain had melted how would you know?
ThatSoundAgain
8th February 2010, 03:06 AM
Play is play, and it is fun. At some point you recognize the limits of play and where it will get you. That play does not somehow melt your brain and make you incapable of learning basic and advanced concepts, nor does it keep you from being able to field as complex and correct software as you could ever find.
Every developer I've asked, good or bad, has started out playing. Mostly around here in my generation, that means dinking with C64 / Commodore Amiga as a child. You simply won't get far as a programmer without curiosity about computers, and naturally that curiosity first manifests itself at the easiest points of entry. HTML, GameMaker, BASIC, HyperCard in the old days.
Myself, I'm a below average developer but have enough of an all-round knowledge and still play enough with different technologies that I've found a few niches; I know enough about diverse languages and technologies that I can usually construct something from several parts. Through a simple awareness of what's possible, the ability to read documentation, persistence, knowing when to get help, and not least a playful attitude, I can usually find tech work. Looking back, this method has been with me always, and started out with really basic stuff like taking apart electronics without any clue how to put them back together again. Not with EE 101.
Regarding what to do with an interested kid, it's pretty simple: I'd start out a kid interested in painting by supplying him with materials and letting him go crazy. I can always cart him off to the Louvre to copy the great masters later.
The challenge is to stimulate the kid's interests and talents enough to keep him going - not to discourage him with "best practices" from the get-go.
roger
8th February 2010, 08:12 AM
But if your brain had melted how would you know?gah??
stevea
9th February 2010, 12:00 PM
Teh irony... it burnzzzzzzzzz
I sincerely hope you don't inflict your "critical thinking" on any learner drivers
Yeah... right...
And the point of vacuous nonsense is to what? Waste bandwidth?
This crap has been plucked from your arse, right?
Please, prove me wrong by illustrating - by reference to famously good software developers - where and when your 'have a go' approach has worked
TYIA :)
When reviewing your comments above, what is clear is that you have no logical rebuttal agains my arguments except for ad hominem - the last refuge of the ignoramus. Creating a learning experience and designing a product are two entirely different things. No you do NOT teach a 10yo formal design methodology before allowing them any programming experience, for exactly the same reason you do not teach a child English syntax rules before allowing them to speak.
I never suggested that "having a go at it" was a valid design methodology or resulted generally in good products, that's your strawman. What I did clearly say is that learning generally is not just about wrote prescriptive information transfer, just as driving a car is not just about traffic rules and vehicle maintenance.
The fact is that no software design methodology (or other formalized method) is perfect and those ppl who have "learned the method" as their first exposure are exactly the ones who are blind to the problems, or who can only 'parrot the company line' when it some to systemic shortcomings - school-bots. They are often blind to the shortcomings. Their world-view (on the topic at least) is shaped by the methodology they have learned, and they are far less likely to form another viewpoint since they have heavy psychological investment in the status quo. In many ways learning the current formal methods before attaining some experience prevents innovation and insight. It's perhaps no coincidence that Einstein puzzled over how magnets, electric motor/generators worked before he learned the dogma of "Newton's laws".
In the current era the de rigiour software design methodology is that "design pattern", "Gang of four" work. I think there is a lot to recommend it, but it's more of an academic success than a well honed practice. I do appreciate that the method has clear shortcoming. "refactoring" isn't generally better than re-writing from scratch and software reusability remains elusive despite decades of lip service from various method advocates.
An intersting and insightful contrary view ...
http://c2.com/cgi/wiki?TopMind
69dodge
20th February 2010, 12:53 PM
from Coders at Work, a book of interviews conducted by Peter Seibel with a number of famous programmers:Seibel: It seems a lot of the people I've talked to had direct access to a machine when they were starting out. Yet Dijkstra has a paper I'm sure you're familiar with, where he basically says we shouldn't let computer-science students touch a machine for the first few years of their training; they should spend all their time manipulating symbols.
Knuth: But that's not the way he learned either. He said a lot of really great things and inspirational things, but he's not always right. Neither am I, but my take on it is this: Take a scientist in any field. The scientist gets older and says, "Oh, yes, some of the things that I've been doing have a really great payoff and other things, I'm not using anymore. I'm not going to have my students waste time on the stuff that doesn't make giant steps. I'm not going to talk about low-level stuff at all. These theoretical concepts are really so powerful---that's the whole story. Forget about how I got to this point."
I think that's a fundamental error made by scientists in every field. They don't realize that when you're learning something you've got to see something at all levels. You've got to see the floor before you build the ceiling. That all goes into the brain and gets shoved down to the point where the older people forget that they needed it.
© 2001-2009, James Randi Educational Foundation. All Rights Reserved.
vBulletin® v3.7.5, Copyright ©2000-2010, Jelsoft Enterprises Ltd.