How To Encourage a Young Teen To Learn Programming?
Anonymous Hacker writes "I'm in a bit of a bind. My young teenage son is starting to get curious about computers, and in particular, programming. Now, I'm a long time kernel hacker (Linux, BSD and UNIX). I have no trouble handling some of the more obscure things in the
kernel. But teaching is not something that I'm good at, by any means. Heck, I can't even write useful documentation for non-techies. So my question is: what's the best way to encourage his curiosity and enable him to learn? Now, I know there are folks out there with far better experience in this area than myself. I'd really appreciate any wisdom you can offer. I'd also be especially interested in what younger people think, in particular those who are currently in college or high school. I've shown my son some of the basics of the shell, the filesystem, and even how to do a 'Hello World' program in C. Yet, I have to wonder if this is the really the right approach. This was great when I was first learning things. And it still is for kernel hacking, and other things. But I'm concerned whether this will bore him, now that there's so much more available and much of this world is oriented towards point-n-click. What's the best way to for a young teen to get started in exploring this wonderful world of computers and learning how to program? In a *NIX environment, preferably."
Whether or not you have suggestions for generating interest or teaching methods, there was probably something that first piqued your curiosity. It seems like a lot of people get into programming by just wondering how something works or what they can make it do. So, what caught your eye?
Problem solving ability grows only by tackling small small challenges at first.Again, u build that ability by slowly advancing your level.Not to mention that, you have to burn out to really learn something. To write great code, you have to go through great code that others have written. In short,there are no shortcuts .
Teach him python (or ruby, or whatever else that is high-level and easy).
It's the same as basic was twenty years ago, just much more powerful, easyer to learn and more fun.
Tie two birds together: although they have four wings, they cannot fly. (The blind man)
Your approach is still correct. The point and click gives results fast, but doesn't actually teach you anything. If he find the basics, boring, don't even bother anymore. Programming isn't for him.
Heck, I can say that programming for me became boring the day I started doing it professionally. I would rather direct my son in a completely orthogonal direction.
I thought geeks didn't have sex ...
Geeks clone themselves, it provides the same benefits without all the hassle with bodily fluids.
I don't know what your family situation is (indeed, I don't know if your his mother or father) but is the other parent any good at teaching?
I'd say let him try out a few high level languages where he can build simple programs that at least do something quickly - he could get bored with the details of C - and see which suits him. Help him out if and only if he gets stuck. If he reaches the limits of that language then maybe it's time to indtroduce C or assembler.
Confucius say, "Find worm in apple - bad. Find half a worm - worse."
Write a game, perhaps based on a favourite book. Or something that involves a subject he's already interested. Doesn't matter if it's a simple text game. Let him write it on his own. Then when he's finished suggest a few improvements. Repeat. Once he's bored with that, start a new project.
That's how I learnt.
And for pity sake, do not ask him to kernel hack. It's way too abstract. You need something user-level with immediate and very visible results.
Teach about game programming. E.g. show how to draw simple graphics using libSDL and then perhaps give hints how the graphics could be moved etc.
I started programming myself, because I wanted to write games. I've been programming for 10 years and I still write games on my free time.
Just because you're a loser doesn't mean we all are, I hate to tell you.
http://www.alice.org/
Nice 3d programming tool, and useful too.
he'll amaze friends!
Tell him that if you can program you can create games. (Don't mention how hard it is to pull off creating a 3D-game for one person. ) By the time I realized that my father didn't mention how hard it was to create really cool games I was allready interested in programming. ;)
btw. You might want to suggest a language for him that more easily makes him able to get instant results. People are going to shoot me for this but something like Python, Java/C# or even *gasp* VB.
(On the other hand, if he's enjoying C that's great as well.)
C++ primer plus by stephen prata.
http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326973/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1216718603&sr=8-1
It is one of the best ways to learn programming from absolutely knowing nothing! Because it explains in very accurate, precise and simple language that is very well expressed.
This is where I learned to program years ago, and I'd challenge anyone to find a better place to bring an absolute know nothing about programming into the fold.
It explains all the simple functions and whatnot for console programming, etc, if he can't dig that then he's not fit to program, the book makes C++ as easy as something as python, or the old visual basic.
The old visual basic 6 is not a BAD place to start if you can find some good programming books, because the old VB gave "immediate" results that kids often look for.
I taught myself BASIC on an Apple ][e when I was eight or so from books I checked out at the library.
It's fairly easy to read, i.e. TO, FOR, LET, GOTO etc, are self explanatory.
The most important thing to get through to him is program flow, learning other languages is cake once you understand how to efficiently break a task into parts.
A couple months later I found out about javascript and bought a book about it. Then it was Perl and the Cammel, then C.
I think you should try to show him skills that seem valuable to him, maybe because he could brag about it to his friends, or (if he admires you), he could get some recognition from his pop, or even try to make a little money creating a website.
Anyhow, the bottom line is that I think you should give him what he will find valuable and useful. I'm sure he'll find his way to unix soon enough, I did.
In common with (I suspect) a lot of Slashdotters, I started out on computers in the Spectrum/CBM64/BBC days when you had to program, in BASIC, to get anything done and that's what got me going.
I stayed in computers, eventually doing a Computer Studied degree and worked for several years as a programmer for an IT consultancy company, using C++, Visual Basic, Java and C#. In the end (about five years ago) it seemed that all there was in "programming" was SQL. Now I'm not knocking database developers, but that didn't float my boat, so I moved into business analysis.
It seems that now, the majority of big programming is done off-shore, in India for the most part.
I'd suggest something web-oriented to get someone interested, but maybe teaching the basics of variables, looping, procedure calls and such-like in something like C++ or (dare I say it) Visual Basic would be a good place to start.
simon
http://hacketyhack.net/ is the answer!
You can write blogs, mp3 downloader/reader and basic graphical interfaces in a few (Ruby) lines. :-/
I wish I had it when I was a kid... GWBasic wasn't so glamour
Basic "Hello 3D" with triangle rotating can be done in ~ 20 lines.
It takes a while to grasp, but it encourages and rewards experimentation.
First they will fiddle with numeric constants and see what it ends up, then they will add lines to add more objects, eventually learning cycles and arrays for some animation ...
Just don't bore them with background stuff unless they want to know it.
-- Technology for the sake of technology is as pathetic as eschewing technology because it's technology.
I disagree with SDL. pyglet would be a much better idea.
Based on personal memories
My father was into it, working on IBM 390 systems and I was eager to get my own computer, to see how it worked and to know how people could program it.
When we received the beast (ZX81) my father just spent a few hours showing me trivias about variables, for-loops and simple input / outputs. That was it.
Then it was just a question of personnal interest, that turned into passion, finaly. Later then the adult can help from time to time or give tips, perpectives, etc.
So my idea is that plain simple basic might be enough. May be just an old VB or a simple PHP sandbox. OOP, web technos can wait a bit. Just start with the 101 and look how your kid responds.
Hope this helps,
F.
Show him how he can solve some simple problems for school, so he can later try to solve some more complicated problems. I have started this way when I was 12.
Extreme Programming - Redundant Array of Inexpensive Developers
Being able to produce pretty pictures is always fun. I learnt programming by spending all my time drawing bouncing balls that changed colour in 320x200 VGA. Of course nowadays kids can use a lot more powerful graphics libraries like the aforementioned SDL, which can let them make a lot cooler stuff.
If he gets the hang of it, you could even teach him how to write a raytracer. That would also be good for his math, and be a nice project where more advanced programming techniques (e.g. data structures, recursion) and more advanced math (calculus, 3D geometry) have practical uses.
Get him on a typing tutor first. It'll come in handy regardless of whether he sticks to programming. As he's learning to type, print out some interesting program listings (or get a book). Have him type in the programs (don't let him just cut and paste). Once he has the programs entered and debugged, have him modify or customize them.
Once he's done a few of these, he'll have experienced the rewards and tedium of programming and should be able to decide if this is the right path for him.
Javascript is not really a best first language to learn, I don't suppose. But my teenage son was more interested in it than in the C 'hello world' example I showed him, because he was familiar with web pages and web browsers and he could immediately see the implications.
My guess is that if you do a simple script that moves something around on the screen and then let him play around with it some, that this will spark his interest.
Good luck
FAQs are evil.
Maybe game maker is nice way to get his interest.
It might not be the best introduction to programming, but it is fun and beats surfing the internet and dull programming in a true language.
I have to second this one. I got hooked on programming in high school in a class where we had to program robotic Lego sets to do specific things using BASIC. Regardless of what you use to interest him, I would avoid projects longer than 3 months. If kids work at something too long without any reward, they're likely to lose interest.
Please stop hurting America -- Jon Stewart
I started with the Atari 800XL/ Amstrad CPC basic and I think visual basic it's way too complicated because it uses many things of windows that can obscure the learning process. That said, if we learned with older machines, why not give a try at some emulators and let him start doing things in pretty plain old basic? You can find most basic manuals for old computers quite easily and he won't be frustrated if a dll is not found or if he cannot guess why a weird event does not happen.
Most programmers started out teaching themselves. Only mild support is necessary. Either he has the interest or he doesn't. Chances are if he's not especially moved by a hello world program he's probably not going be that motivated to stick with it.
I record my sleeptalking
Give him nethack (or any other OSS game) to play. After a while when he will get interested - give him the source code for it.
Programming games is probably most engaging activity. I'm 31 now - but still on it ;)
All hope abandon ye who enter here.
Why not start with PHP where he can see the result instantly?
The best language to teach him is $trendy_language_of_the_moment. If you don't teach him that then he'll never get anywhere. How can people hope to encourage people to learn when they're using $formerly_trendy_language? It's just so horrible that I'd rather gouge someone else's eyes out with a spoon that use it instead of $trendy_language_of_the_moment!
When I was 14-ish, I liked to futz-around rather than program seriously. If he is like me, and has a short attention span, buy him 3-4 books on programming, and point him to as many free source code websites as possible. Ebay has some cheap books I'm sure. Ideally, get him books on 2 different languages, and find ones that are moderately comprehensive.
The other 2 should be like coloring books for programmers, although I didn't understand nearly enough of the math at the time, DirectX in 24 hours was cool.
No, really. That way he can share his games or whatever with his classmates, simply by sending them a link.
Of course it'll be a longish road to get to that point, but it might be a goal he can relate to - and I know I simply wouldn't learn anything unless I could see the point. Still don't at 34, come to think of it :)
First off, I think you should start with a language such as Python or Ruby. I started with BASIC which was easy to grasp, and more modern languages are easy yet more powerful.
Second, when I started programming I was first looking at my brother, writing really simple BASIC programs on the C64. Later, I was interested in fractals and wrote algorithms for drawing fractals. I had a book with code examples for different fractals, but in some other language (I don't remember which). The process of interpreting the algorithm in the first language and translating it to BASIC was very good for learning. Tweaking and extending the algorithms and seeing the changes visually was very encouraging.
Today, if I were to teach a kid programming, I think I would look into Lego Mindstorms. It helps if the kid is into Lego or robotics, of course. That's a contained environment with a powerful and easy language, which is also part of something else, with immediate feedback on the changes. You can program it in either the Lego-supplied RCX Code (BASIC-like) or ROBOLAB (LabView-based), or any of a number of languages supplied by the community (C, C++, C#, Java, Lua etc).
:wq!
When my mom was learning, she thought it was fun making things and putting them on the screen, then changing them and seeing what happens. Just today, I tried to see what happens if I change all me velocity vectors to integers and it was fun to see everything stop moving because their velocity was always less than one to begin with.
Teach him how to play with code.
Also, whether or not you'd bore him is a level of his determination. I've been programming since 16 and I made worthless, unimpressive code until I was 18, but I kept on because I knew I'd some day make games. All that experience made it so that with one semester of C++ and an SDL tutorial, I could make a sweet and simple game.
On the other hand, many of the people who graduated for a degree in computer science claimed they never wanted to program again. Determination will decide whether he programs or not. He can have all the knowledge in the world, but not touch a computer again if he lacks determination.
That's THE way to get ANY teenager to do ANYTHING.
IMHO the answer is don't. If he is really interested in programming, he will not need much encouragement, in fact the problem might be how to keep in away from the computer long enough to have social life. If he loses interest or finds it too hard, then you might unintentionally put him under pressure to keep going just to keep you happy or to prove he is smart enough, and that ain't no recipe for happiness. Be prepared to deal with a possibility that he might decide programming is not for him and that he really wants to be a male ballerina or something, because that's fine too if it would make him happier in the long run. As for the teaching methods, that's a tough one. I kind of lean towards getting them immersed in one thing, language for example, until they understand it in some depth and then using that as a base to learn other stuff. But then different things work for different kids, so there is no one correct approach
Negative moral value of force outweighs the positive value of good intentions.
Ruby (maybe Python) is one of the last 'frustrating' and 'discouraging' languages out there. To make it even more interesting, give him Qt to play with. With Ruby/Qt or PyQt you can open up a window in just a couple of lines. Even 3D stuff can be done with that combination and that keeps him entertained for quite a while. Bonus: object oriented programming from the beginning.
I think logo was my first programming experience and I enjoyed it. It's great to see the fruits of your labor instantly in graphical form.
I don't see that not having a flashy GUI means anything. I grew up in a world where I saw flashy GUI's for exactly what they were. I was much happier hacking DOS to get that extra few KB of base memory than I was playing about in Windows 3.1.
The problem is that you can't foster curiosity, which is the main driver here. Nothing will make you sit down and learn a programming language more than curiosity for what you can make the computer do, whether you can do something better than Microsoft, etc. You can try very hard to keep interest, though, and there practical results tend to have greater effect - this is why most basic ICT in schools is based around roaming turtles, Lego RCX, "traffic-light" kits etc. Computer-controlled with visible, physical effect.
Personally, I think the best way to foster the right computer skills isn't to use a computer much at all (this is a philosophy I've held for most of my life - the best way to program is in your head, not a machine - the best way to write a story is on paper, not a word-processor, etc.). The best things to use to learn are simple gadgets. I'm not a gadget person. I'm not even very good at electronics but I struggle along and get a lot done.
Wire your house for a burglar alarm, controlled by a computer, and involve your children in every step. If your practical skills aren't up to scratch (good, you can "learn" by your mistakes together and your child can try to "out-think" you when you both hit the same problem), you can get X10/DMX-style equipment that makes it a cinch. But there's nothing like a bug that'll scare the crap out of you when the alarm goes off because you didn't cater for a niche-case (opening the back-door while the power was out etc.). It only needs an ancient "sacrifical" computer that doesn't matter if you blow its parallel port, and it introduces every single reason behind having computers - automate tasks that a human could do using simple, cheap components.
You can learn programming, you can learn embedded programming, you learn about the importance of bug-checking and clean code, you learn about interfacing, buses, serial/parallel data transfer, physical and real-world effects and how to counter them in software (e.g. switch debouncing). You even get to learn how the damn computer does its job so that it's no longer a magic box that does stuff. You get to interface with all types of cool gear. You get to bring practical, real-life skills into the learning environment which can help immensely if your child learns better that way. (And I don't count "how to write a letter in Office", I mean REAL life skills, like practical problems, electricity and electronics, wiring, why the bloody ladder won't stay still and why Daddy put his foot through the roof).
The rewards are instant, visible, practical, extendible and "show-off-able". The "reward" of having the whole family laugh at a a doorbell that plays a WAV when someone presses it is very rewarding especially when "it was all my son's work". My particular favourite is a doorbell that goes "knock knock" when you ring it. I also bought an old-fashioned door knocker which has an integrated switch in it and want it to set off a "ding-dong" sound, just to see the postman's face. I'm doing it with simple electronics and one of those recorable greetings-card chips but you can do it with a PC easily. Ten minutes of very basic wiring to an old-fashioned joystick port (ancient laptops are great for this sort of thing), a WAV file off a free website and a twenty line program. You can see exactly where his skills lie. Is he a better programmer? Is he a better thinker? Is he better at practicalities? But no matter what he is, it's so simple to do that you can have great fun wiring it up (probably with Mum in the background tapping her feet because she's getting sick of "Yankee Doodle" every time the neighbour's call).
Then you need to get to the point, as quickly as possible, where he can *think* of new stuff to do himself. You started with a doorbell
I started learning programming with QBASIC (on my own, wth some help from google).
It's simple to understand (a kind of...), and if you show him some the graphical stuff (different resolutions, on text mode, graphical mode) it think will be courious to learn. (make sure that your windows/dosbox emulator supports that graphical modes)
At first some "Guess a number" (with the output from the computer "lower"/"higher"/"right" or "cold"/"colder"/"hot"/"burning").
Next maybe a pong game (but be attent at the geometry/phisics stuff, which may be a bit hard if he's so young) or a simpler space invaders, or even a tic-tac-toe (with random chooses, later a very weak AI).
anyway, keep it simple!
(Bonus points if he knows about text-mode games like nethack or will code a "Hunt for Wumpus")
(Posed as AC beucase I don't have an account here)
Video games are fun, and making your own video games is fun too.
Start by making him learn text game programming, like the price is right. That's both on the very basic level of programming, and a quickly gratifying game to learn.
Then, maybe I suggest low level game program. And by low level I mean no SDL (well, maybe a wrapper), but writing your own pixels to a frame buffer is more gratifying. As in, teach him how to make a function that write a rectangle on a frame buffer depending on the rectangle's size and the coordinates of its center, then make him move the rectangle around by pressing keys.
Build on top of that by making he do a very basic game like pong. My first graphical video game was a pong and I coded it in two days, that's how easy it is.
From that point on, he will probably start to get ambitions. As in, he'll want to draw lines, load sprites, rotate them, use physics, learn about tcp/ip network, signal processing theory and techniques, etc, to achieve a precise purpose. All of these things will fuel his interest towards mathematics and physics, and give him a good reason to learn about and understand these things.
Finally, introduce him to more "real world" type of programming, by giving him some of the stuff you have to do at work, for uhh.. the sake of his education!
You just got troll'd!
Processing is a java subset (but you can use full java if you wish) geared toward "visual computation". You can see some great examples here http://complexification.net/gallery/ or on flickr (just search for "processing" tags). Project home page is here http://processing.org/
I already used it to teach something to my nephew (12yo) and he finds it great, mainly because he can have some "cool" effects and stuff on the screen and can instantly see what his code does.
C is a great and powerful language, but maybe it's not so good for a teenager to begin with. Myself, I began with QBasic, which was on DOS on our computer. I only started learning C at later. QBasic was a great language to begin with because, it being a scripting language, had very helpful error messages if something went wrong and was very easy to debug. QBasic also had a quite nifty documentation. And there were two example games included which could be modified to start seeing the effect of changing code. I also loved it because you could do graphics with it - had I started with C back then, I'd have been bored by text input and output very soon. Of course today DOS and QBasic are less relavant today, and also not *nix as you asked. But maybe another language that is also a scripting language like QBasic, such as Python or Ruby, could be helpful?
I would suggest you start off with some basic C to demonstrate variables, functions and then some more advanced but very important stuff such as pointers and structs. Structs are an easy concept for the introduction of classes, for which i would suggest some scripting language such as ruby (to ease experimenting on his own). This way he may appreciate the use of classes and the avoidance of pointers more than without knowing the dirty origins.
You give them a computer, if they're the kind that's built for programming they'll do it themselves.
I started programming when I was about 12, and I am completely self taught. My parents knew nothing about computers, and still know nothing now despite my efforts. Anyway, i started with javascript, html, and php. (This was around 6 years ago). I think it was much easier to start learning the basics of this kinda stuff when you don't have to deal with all the boring (to a 12yo) details of memory management, libraries, and compilers etc. Web programming is something were you can get the instant results and action, you can just keep tweaking the source file and hitting F5 until you get something that works and looks vaguely like what you're after; this is especially useful when you don't know what you're doing. :)
I had a few books which taught me the basics, a javascript book and a html book. They only covered simple things, (I think the js book was a For Dummies..., actually), but it was enough to get me started. After that I found the php.net docs and a friend showed me loads of his php code and i picked that up fairly quickly.
Being a website, it's something easy to show off too, it was kinda cool to be like "dude, the whole world can see my webpage!". Following that theme, i got started on irc bots, eggdrops are written in C, and you can script em with tcl. Be careful tho, tcl is kinda quirky and weird (at least, that's how i remember it). But it's great for simple stuff, get the bot to parse some text and reply etc. This might also be a good time to learn some networking stuff. Also since eggdrops can also have C modules written, this is a possible path into C, although I didn't go that way so I don't know how good it is.
I eventually learned C(++) from some online tutorial, http://www.cplusplus.com/doc/tutorial/ I think. And I wrote a load of code for manipulating some large binary files (game resource files, from Halo). I certainly don't recommend letting anyone learn C solely from some tutorial, since I had rather large gaps in my knowledge at this point (that code i wrote is terrible), but it was some great experience anyway. I played around with some .NET (ugh!) gui stuff, because I didn't know how else to make a gui program at the time (seriously, I don't know how I was meant to know about qt, gtk, or win32 etc at this point) and a program that just prints text on the command line got boring real fast.
Hacking at computer games was what really drove my interest in C at that time. Reverse engineering of the file formats was fun! Even if I did kinda suck at it and just found most of the info on the web.
Looking back, I'm thinking I probably would have liked someone to show me python (and maybe perl) much earlier than when i eventually discovered them. php sucks as a general purpose scripting language and C gets tedious for those little tasks.
Sorry that was all probably a little incoherent, I spent the time I was meant to be doing english homework programming ;)
First, like the other poster said, start him out with an easy to learn language like Python. Then as he gets more experienced, he can use the innumerable Python add-on packages to do all sorts of things. Remember, the O'Reilly Python quick reference book is the thinnest of all of them. I use Python and various incarnations of Numeric Python as the language doesn't get in the way of prototyping algorithms. Later they can be ported into C or FORTRAN.
You don't say what age he is but do ask for the opinions of those in high school so I am assuming he has already learned quite a bit about math (although this is 2008, not 1975, so who knows what crap they are teaching kids?) I was always bored with math especially in high school. Thus he might be at a stage where he could find out where applied mathematics is really done- on a computer.
The real world doesn't boil down to simple closed loop equations, as many simply cannot be solved in practice on a piece of paper or an exam. They require iteration to some tolerable error function, so that a very close approximation of the answer can be found. That requires the very high speed of the computer in order to do the iterationa in some reasonable amount of time.
Moreover, topics like integral calculus are very easy to explain on a computer, since the computer performs it just like is done in the first week of classes, by breaking the area under a curve into very small parts, and adding up all of the resultant parts of the function. Thats a lot more intuitive than some obscure looking equation.
I could go on and on, but I think you get the general idea where math is concerned. In science, where many calculations might be needed to solve a problem, he could just write a simple program to do the same in a microsecond. A great example of how a computer can speed up productivity and research. It would probably be great for homework, although he would still need to know the curriculum of the class in order to pass an exam- unless they now use computers in math exams, which I doubt.
I really wish I had a computer in high school, as I was already doing quite a bit of electronics. But alas it took a few more years for the PC to be invented. In my days, just having a hand-held calculator was quite a luxury.
I know you're lying : you actually enjoy telling him.
(\__/) This is Lapinator
(='.'=) copy it in your sig
(")_(") so it can take over the world
Don't try your to encourage your child to do anything for which they don't have a natural inclination, they will end up hating anything you try to push them towards to forcefully. Give them a well rounded education and make programming one of many things you expose them to, this was what my parents did and I am thankful for it. I lost count of how many people I met in college whose parents had enthusiastically encouraged them to learn one topic or another, especially the children of professors. Some people took off with whatever topic their parents introduced to them but most of them ended up switching majors 4 or 5 times and spending years and many dollars on undergraduate education. Demand excellence in whatever your child has interest in, with the caveat that as they get closer to 18 they have a plan on how they will feed themselves (so you want to be an actor Johnny? Great, better double major in something practical otherwise you'll be waiting tables cause I won't be paying your bills).
I think the invisible hand of the market has its middle finger extended
--A wise old fart named SC0RN
Bigges geek producing machine ever. :)
Draw upon the extensive knowledge of the GNU/Linux community, for example:
If he actually does find a bug, here are some of the basics you should tell him about bug reporting:
Now this post may seem like a troll, but if you do exactly the opposite of what I advise, he should do well.
I'm going to transform myself into a mighty hawk. Either that or I'll just go and work at Dixons, haven't decided yet.
... then show him something *you* made that builds on his interest, making it even cooler. Robots, tanks, helicopters, police cars, whatever it takes. That will pique his interest like nothing. Encouragement, explanation, even bribery (reward coding something specific with money - worked for me). Both of my parents were developers back in the early days of mainframes, and that's how they got me hooked. I've been coding since about 6 or 7. I say "coding" - back then it wasn't much, but it sure was excellent fun.
My father worked at a chemistry research lab and they had a small computer room with 4 486 computer (it was 10 years ago).
I went there with my father wanting to play Mario but one of the people there started Pascal and showed me how to draw lines and circles in it.
So I started drawing houses and trees and I got hooked.
Buy him some uber-cool hardware which doesn't have *nix drivers, and delete his only copy of windows.
http://cafepress.com/spankymm - for the Masturbating Monkey in you!
when i was young (12ish), i had a magazine subscription that had a section in the back of every issue called "basic training" where it gave you the code for a simple game that you could program yourself.
i sat myself in front of my IBM PS/2 (which i still have, and it still works) and typed in the BASIC code, only to discover that QBASIC does stuff differently than whatever version of BASIC the magazine used. but i had spend hours coding, i refused to let that go to waste, so i read the error messages and help files, and eventually got some of them to work. then i modified them.
then i started making my own games, (including that RPG that every single programmer in the world is working on yet never finishes.)
i was playing a lot of command and conquer around this time, and i discovered the awesome power of the "rules.ini" file, so i started making games with separate text files to control the variables, so i could tweak them game more easily.
then i finished elementary school, and got stuck in high school with the crappy workload, making coding impossible.
high school programming class was a joke, but then when i went to art school, i got really excited about micro controllers, and the BASIC stap let me use QBASIC again, and i was happy.
then i discoved the picaxe system, which is an even easier form of basic, and way less soldering.
i would have to say, working with BASIC powered micro controllers is the way to go. BASIC is so easy, even I can do it, and when you finish, you have something that you have built yourself, and it actually does something! its a damn good feeling.
-I only code in BASIC.-
Tell him if he does it right he'll make tons of money and then all the women will want him.
If Google really cared they would fix Android Chrome to reflow text, instead of discriminating
My lad started coding when he was about 10, but it took a few false starts. In my experience, compiled languages like C aren't a great place to begin, as the need for compilation really gets in the way of the learning experience. I also had a failure with PHP - I thought that he'd enjoy web hacking as he was comfortable with HTML, but I found that cookies and sessions - without which you can't do much in a web environment - were a huge conceptual problem for a young mind.
You need to start with something that's simple, rewarding, well documented and with good community support. A language that permits procedural code and dynamic typing is also much easier to teach. I suggest Python for the language as it has a great beginner's IDE on Linux (DrPython) and, importantly, it produces comprehensible error messages (Ruby on Rails: I'm looking at you). It also produces clean, legible code.
You need to move beyond text-based programs pretty quickly: no-one wants to show off a terminal session to their mates. GUI interfaces aren't very teenage, so I suggest you check out PyGame for graphics and sounds - simple to learn with quick rewards.
Finally, enter the next PyWeek competition with your lad - he'll never win, but it'll help him to see how a more complex project fits together and give him a gret sense of achievement.
Start with SML (moscowML is a nice one), teach him what recursive functions are and how to solve problems. Teach him about datatypes and how to define your own, show him how to make trees and how to traverse them (go look at the curriculum, run the same thing with him - heck as a C programmer chances are you will learn something) If someone is used to programming ML can be quite hard to understand and very frustrating, however as a language for someone new to programming its easy to get started with and it wont teach you bad habits like PHP.
Next is usually Java, its a nice object oriented programming language for newcomers to learn about objects and its a safer way to program compared to C/C++. If the interests in programming still persists at this point show him C/C++ and the work you are doing.
Also remember, while doing all this you should gradually introduce stuff like algorithms and advanced math, they go hand in hand with programming.
Whether you teach him programming or someone else does, the most important thing you can do for him is to show your enthusiasm for programming and demonstrate why you love it. Those kinds of things are infectious. If he catches the bug then he'll learn it, one way or another.
-deane
Help him to find a project he's interested in, in a language/environment where he can get damn-near instant results, and then let him run with it, offering guidance only if he asks for it.
Hell, I got in to programming when I saw my brother playing on a BBC Micro, and asked him to teach me. I was 8 at the time. He helped me draw a picture of a door (using grid paper to sketch it out, and then copious LINE() or whatever statements). It was the coolest thing I'd ever seen. Next I drew a space-ship (and a pretty piss-poor one too ;-)
No-one needed to teach me after that. I read all the programming books I could find and old Micro World or whatever it was called magazines... And, I still love programming :-D
Get him started with Javascript. It's an awesome little language that scales up to all sorts of useful programming concepts, but best of all, you can get visual results reeeally quickly. There are lots of tutorials on the web, even if most are shitty. If he's still on it after a week, buy him the ORA book.
-P
Score:-1, Funny
Put slackware, gentoo or another advanced distro on it, but don't install a gui (the next step is games, which burn away a kid's time).
Let him figure things out by himself and make sure he's got easy access to the basic information, the rest he should be able to figure out himself.
Make sure he's got complete access to all information about his machine (so he can maintain it by himself).
Hello World is C? Sweet Zombie Jebus....
We all started on something easy like Basic, or tapping something into a TI calculator, or what have you. It was the almost instant gratification that got us hooked.
A little typing, tapping, It Ran! oh wait, that's not quite right....
A little typing, tapping, It Ran! oh wait, that's not quite right.... and a few years later you look up to discover you're a Nerd.
Now granted that's horrible coding practice, but it's what we started with. We all programmed little games. Who among us didn't try their hands at tank wars or Pac Man, and of course most of us tried to write a character generator for our favorite RPG. The point is we didn't start programming, we had other interests that programming could help us with in a cool manner.
Don't start with anything low level. Don't even think it. C? Seriously? Please do introduce good practices. Write out a flow chart, do your pseudocode!
Find a little project for him. Start with something small. Show him how to tweak things. You'd be amazed at how cool it is to change a little bit of text on some program. Do something related to something in the real world that he enjoys.
And don't be peeved if he decides it's a giant PITA, 'cause we all know it IS. :D
-T
Give him a copy of VS with C# as primary language and set him some simple challenges to do. Perhaps start with something like "make a basic calculator" all of this can be done in the VS GUI without him having to go in depth for all the framework and structs of the project all he'd have to do is create the onclick events to take the 2 inputs and the action fairly simple and yet should be challenging enough to get him interested. If he can manage that kind of task in something simple like VS then you'll find it'll really get him interested and he'll then start poking around at the more complex stuff. Alternatively give him EditPlus and tell him to make you a simple signup and login website in something like PHP and MySQL again simple enough but with enough challenge he'll have to look up some stuff and read some docs etc.
A good and appropriate project is the way to go. Then choose which tools are most suited.
Write a rehearsal application, a database for his music collection, program Lego Mindstorms, whatever. A project automatically set both short-term and long-term goals, your kid will inituitively pick up quickly how things work, and it is easier to think about the problem encountered.
You can always go more low-level afterwards, according to the developing interests of your child.
Not NetHack! It was written by the evil Wizard of Yendor with help from his idiot minion Eric S. Raymond; consequently, the source is a horrifying abomination worthy only of the renegade god Moloch. It is not a good learning example. You should be at least a level 20 Kernel Hacker to venture inside.
Can I suggest instead that you look for a simple game written in Python or Ruby. They are likely to have source that is possible for level 1 Noobies to understand.
You need to show him something that will quickly show results, preferably something that can display a UI and I guess these days that would be best done via a web browser. Try to teach him some PHP so that he can quickly see the fruits of his work on the web, and from there move to Javascript, mySQL, and then to AJAX. With that knowledge teach him to learn for himself by developing a facebook application by reading the facebook api and going from there. From there you can move him onto some of the C/Java code at which point he should have a strong understanding of the logic and will have picked up some useful SQL skills.
Quick results are what got me into programming. Seeing that I could code a small, higher or lower game in about 10 mins for the BBC Micro or an Acorn and then show that to anyone who was interested was almost instant gratification. These days a web based project would be more impressive and easier to distribute.
Chuck has been covered before on /.
http://ask.slashdot.org/article.pl?sid=07/01/20/0434210
Although the syntax *might* be a little too advanced at this stage ... being able to get real time audio feedback from method calls etc. will provide a certain fun factor that could spur his interest more than simple text output on a terminal screen (and could double as a great debugging aide).
There is full documentation with the install, and a lot of example functions and classes to get started. The separate GUI environment miniAudicle - currently in beta - allows Chuck programs (Shreds in Chuck speak) to be started and stopped in realtime, making it very easy to use.
It's a little like the old days of "Logo" but with sound :)
http://chuck.cs.princeton.edu/
http://audicle.cs.princeton.edu/mini/
(not sure why but the server is currently unavailable).
More info here:
http://en.wikipedia.org/wiki/ChucK
Peace,
Andy.
There is a very nice language for learnig to program.
Euphoria
www.rapideuphoria.com
As easy as Basic, with all the stuff a programmer needs, without the need to use object-oriented methods.
Very, very nice and clean syntax
A teenager can learn all the stuff he needs to start writting his own programs in an afternoon.
It has a VERY friendly mailing list, discussion forum, 1800 programs submitted by users,
on Windows it has a nice clicking IDE - submitted by some user and written in Euphoria itself.
It also runs on Linux and has even FreeBSD binary available for download.
There are quite a few graphical games written in Euphoria, Euphoria Editor (with syntax highlighting that works as an "IDE" written in Euphoria), many, many libraries, lots of stuff. Ready for download and tinkering.
I know there are quite a few C programs (or python, or perl, or [insert the name of your favourite language here]) available, but majority of those 1800 programs written in Euphoria are readable (and understandable) by an absolute beginner.
I personally have learned how to program with "raw" Windows API using Euphoria and their win32lib. I have created a simple Windows graphical game. By writting code, not by clicking on fancy buttons.
It is a simple interpreter with a GRAPHICAL debuger (by graphical I mean running in color terminal in text mode, resembling the very old Borland C you remember from 'good ole DOS days') that can be used to step through the program ((this is one of the most important tools for a beginning programmer)) and display variables, and ... ... surprise, also written in Euphoria.
The debugger is surprise
When you have program debuged and you want speed, you simply "compile" your into a C source and run that through a compiler of your choice.
The newest version is OpenSource (used to be shareware, nagware, free for non-commercial use)
I'd start here http://www.squeakland.org/ the environment is based on smalltalk 80 and is pretty pure OO, so even though it looks like a toy they will 'get their mind right'.
On the surface it has a fantastic drag'n'drop tile based scripting layer that allows kids to quickly get toy and demo things working - building both familiarity with concepts, confidence, and interest. This http://www.squeakland.org/school/drive_a_car/html/Drivecar12.html jumps into instructions for a 5 minute draw a car and write the program to bind it to a drawn steering wheel. You can quickly progress to programs with sensors doing track following. I've used it to make flocking games (like herding cows etc) for the amusement of my kids.
It is intended that you can drop under the scripting and start using the full OO smalltalk (http://www.squeak.com) classes, inheritence, coding while you debug while you run. OS integration, OpenGL bindings, links to DBs, multimedia, a whole host of good stuff.
The idea is to give them something it's easy o come to grips with but that is OO, open, and as deep as you want to go.
Geeks clone themselves, it provides the same benefits without all the hassle with women.
It seems you made a mistake in your post, I've gone ahead and fixed it though.
Such as chasing girls? Seriously, programming can never be good for a kid.
Beauty is in the beholder of the eye.
Don't encourage. Let them have happy and social life.
No, I didn't read TFA.
As a teenager I liked the simple putpixel to draw on the screen.
You can see immediately what changes you are doing by changing x and y position and/or color. And ofcourse create your own line/circle/polygon routines.
When you can see what you are coding it makes it more fun.
Just my two cents.
When I learned to program (I was 8), it was DOS and text mode and BASIC. The programs I wrote were simple "enter some text or numbers, get some response". It doesn't have to have fancy graphics and the like to be interesting.
And I'm not saying that because I'm an old fart. Everybody I know who programs started that way, although the younger folk usually started with GNU or BSD and Perl or Python, rather than DOS and BASIC. They do stuff that looks pretty uninteresting to non-programmers, but is very valuable to them. Usually, they start by automating something that they do often. Sometimes, they've found something they found cool (e.g. a script found on the web) and started tinkering with it. I had a book from the library with source code for a couple of simple games.
Another approach that can be very rewarding is web development. You can get impressive-looking results relatively quickly, and it scales all the way up to what the big guys are doing.
In the end, though, I think programming is something you have to want to learn. You may want your son to learn to program, and your son may be dreaming of making his own great game or operating system, but that's not enough. You need to develop the way of thinking that allows you to break down your idea into what you can express in your programming language, and that takes time and effort. It's going to be frustrating until you get it. Most people aren't really motivated to work through that, and will give up after a short while. That's ok. You can still learn to program when you are older, and you can be happy in life even if you don't ever learn to program at all.
Please correct me if I got my facts wrong.
... and let him learn on his own. Many of us learned programming from reading books and tutorials, and most of all from just trying stuff.
So if he doesn't have it on the machine, install a compiler or interpreter for the language he tries to learn, give him a link to a good tutorial, and then just wait and answer his questions.
If his geeky farther isn't available, it might be good to know where to contact the community for help (relevant web forums (like perlmonks if he choses perl), mailing lists or the like).
If he (or you) doesn't know which language to start with, be sure to pick one where he doesn't have to bother about memory management first. That kills the fun at first, and segfaults are hard to debug.
Try Hackety Hack.
Personally I got into programming after reading those strange books you used to have as a kid where depending on the decision you made you had to switch to a certain page in the book.. I tried to program my own story-game that way. Basically it was just a load of simple IF statements, but it is what got me into programming.
I also made a few simple scrolling graphics projects. Mostly huge "spaceships" which scrolled across the screen, made with ASCII blocks hehehe..
This was when I was about 10 I think.
Back when I was about 13, I asked my dad to teach me programming. He pushed a visual basic beginner's book and the visual basic 3 floppies into my hands, and wished me good luck. In retrospect, I don't think this was such a bad approach.
What you'll need first and foremost is an environment with immediate visual feedback, that you can do one-liners in that gradually grow into larger programs. Visual basic fit the bill at the time, but these days I'd look more towards adobe flex (the gui tool, not the sdk), or if you get the heebie-jeebies from commercial products, just use html + javascript.
What's important is to recognize that there should be some measure of reward right at the start. The kid should be able to build stuff that does "something" his first day, and be able to grow that into building programs that he designs himself.
Don't try to push him in any way, let him discover things on his own pace. And don't try to enforce your "standards of work" on the kid, because it took you years, or even decades, to build up those standards, and it would be too off-putting to require him to "do it right" the first time around. Following from that sentiment, avoid pushing tools because they're "correct", but instead choose tools that have gradual learning curves, even if you wouldn't use them yourself necessarily.
I can't tell you how to teach, but I can tell you how I started to learn.
My father bought a MicroBee with a tape recorder. He bought games, and I played games. I wasn't interested in programming. He did however code together some small text games, from magazines.
I played those too.. we solved adventure games together, and when we couldn't progress any longer, we looked at the code.. but neither of us understood it.
Ofcourse this didn't teach me to code.. what it did was to teach me that there were code, and that computer programs was code.. and could be reed, modified at choice.
Then I got my own computer, a Commodore 128, with basic.. I didn't touch basic for a long time.. I played games.. but when I got stuck in a game, I did know.. that the games code somewhere did hold the solution for my problem.. I coded a few hundred lines of basic on that machine..
I got an Amiga, and with that came AMOS, a basic. It was coding in a secure environment. You couldn't touch the hardware (well maybe you could). And I started to do some coding for fun in it.. After all I did know what all computer programs was code :-)
After that I was self going, and installed Linux and reed C manual pages. I bought a C++ book and started to learn how to really code.
--
I guess that todays version of this would be to show him games, and from his age I guess you already have.. So I would get him VisualBasic. Powerful for the beginner, yet no need to peek and pook memoryaddresses :-)
Get him access to a small bundle of O'Reilley books... make sure he's a bit bored or at least doesn't have any other distractions, and leave him alone.
Also might consider eventually getting him a little Eee PC or Nokia N810 or OpenMoko device once he gets into it a little more. Install Python or an compiler on it and let him find a creative use for it somewhere with a bit of hacking.
When I was young, we just had graphing calculators to play with, and we'd play with little programs on them in our free time on the school bus or wherever just because there wasn't all that much to do.
I've seen a few other people mention story writing, and I'd second that whole-heartedly. My friend and I first got hooked on programming when we started writing simple 'Choose-Your-Own-Adventure' style branching games in Q-Basic (complete with sqealing PC speaker musical soundtracks).
My friend even got more sophisticated and started creating simple RPGs - random number generators with modifiers for the attacks, variables for vital character stats, etc. They were alwasy *very* simple, but we had a great time, and learned a lot as a result of it.
I began programming when I was 16. First I made simple chatbots and console i/o to learn C and C++. Then I moved on to graphics programming because it allowed me to learn many useful algorithms and data structures. I remember the glory when I got my first pixel on the screen. I began coding demo effects and software 3D engines. Actually seeing self-made things move on the screen provided me with motivation to learn more. Now, at 25, I write ray tracers and little games.
Who is John Galt?
There are so many reasons not to start with PHP, that I'm not even going to start listing them here. PHP is a HORRIBLE first language, and a horrible second, third or forth language. It corrupts minds, and makes it harder to learn other languages. It's a lot worse than corrupting someone by teaching BASIC as a first language.
You should be ashamed of yourself for suggesting teaching PHP to a kid.
-Don
Take a look and feel free: http://www.PieMenu.com
I would recommend staying away from the low level stuff to start. If he enjoys programming, he'll naturally want to learn that stuff as he gets more advanced.
I got hooked on programming a little different than most people did. I started to make programs for my calculator that did things that could help me out in my math classes way back in ninth grade, I've been hooked ever since. I've noticed in my academic studies that the best students were those that pushed themselves on their own. I believe that these students will be the ones that succeed in the field because they have a natural inclination to want to learn more. So, I recommend to start to get him interested in making a program that he thinks would be cool. Have it a little simple to start off, and then help him do some more advanced things in it. If he enjoys programming, he will want to do some of the more advanced things on his own.
It might be easier to have him start with a Basic-type language to start off with. A modern C-style language may be too difficult to learn the concepts at first, as a lot of beginning students really trip up on OO concepts/syntax. If he can handle the C-style language, why not teach him PHP. It is heavily supported by the open source community, meaning tons of examples and online help. This will allow him to move at his own pace. I would not recommend going with a Ruby or Python for an initial language. The syntax is so different than the C-style that is prevalent in the major languages, potentially not aiding him in his initial studies (also making it more difficult to move on to new languages as other languages do not share the syntax structure).
Provide him with a computer. Provide him with help when he asks (or not, figuring things out yourself is best).
Show him how useful it can be to write programs to make the computer do whatever you want.
If he wants to learn, he will. If not, bad luck.
Yeah, especially if you're aware of this rusky plot to corrupt our precious bodily fluids!
That's why I only drink rain water, and don't allow women my natural essence...
I remember the first days of programming on a C64, I could program the heck out of it. Part of it was that you could start so easy, but then under DOS/Qbasic I did a lot less and under the Windows API it died completely. At the time it looked like you needed immense amounts of dark magic just to throw up a basic application. I'd probably go with C++/Qt since it's what I know and I think Qt makes C++ high-level, but no matter what I'd say use all the tools like a proper IDE, graphical dialog designers and so on. There's plenty time for learning the hard way manually later, but now is not the time to learn low-level semantics, memory allocation, programming a layout as code and all that. That's to learn when the interest is burning and he's asking to do things that go beyond.
Live today, because you never know what tomorrow brings
Programming is a means to an end. Ask him what he wants to program, then determine how to go about that, which may not be a direct route.
For (a really roundabout) example, there's a good chance he's interested in video games. Download Blender and turn him loose on that. Eventually he'll need some Python knowledge to put Blender's game engine to use, and probably want to make textures for his models, so GIMP enters the picture.
Nerdy women need lovin' too... Or so I've heard.
I started programming at 13, back in the '80s. An older brother had a Sinclair ZX Spectrum and after seeing some of the cool things it could do, I begged him to let me use it too.
The user manual was a reference as well a tutorial (with exercises at the end of each chapter) and I taught myself just by working through that. Admitted, modern languages can be much more complex.
I guess it will help if your son has some itch to scratch, likes to "build things" - even if it has not much value in the world at large. One of my first large projects (after the flashy screens and sounds) was to code an electronic version of a board game. I guess programming is much a solution in search of a problem, and finding a problem that interests your son and will keep his attention long enough to learn something useful is half the battle.
Problem is, with modern computers much has already been done, and a newbie programmer could possible get quite disheartened with what he is able to achieve on his own.
I did some part-time teaching too at a stage, and my biggest struggle always was to find some practical example to demonstrate the use of some or other concept, to try and keep the attentions occupied. Programming seems to be too abstract for many to grasp the usefulness of. When I had to give a small presentation at the start of one year to try to get more pupils interested in taking my subject, I used a Lego Robotics kit (yeah, Q&D point&click programming, I know) to try and get a more tangible demonstration of what programming entails. It certainly was less boring for the kids.... Perhaps also consider some robotics with good old solder and chips, when you son is old enough :-)
Free, as in your money being freed from the confines of your account.
Teach him JavaScript.
Set up Firefox and Firebug, and you have a wonderful console for programming right from the browser. You can do fun animations, effects, and various cool things.
And showing it to friends is as easy as uploading to a host...
My son was bored with my attempts to show him how cool kernel hacking is and I began to despair. Some weeks later he came to me and asked if it would be possible to set up an 'auto-typer' to help in an online game that involves repeated typing of the same phrases. He was willing to get involved in putting the script together because he saw a use for it. He even agrees that our approach was better than just downloading one that does almost what he wanted.
3 months? I lose interest after just a couple of sec
When all else fails, try.
When I was 15, I had never seen a computer, but I knew that I wanted to work with them. The _idea_ of computing, of writing instructions to make the computer do what I wanted, of playing with something that exhibited some of the powers of human mind, was terribly interesting to me. Getting my hands on my first PC, a thing with a BASIC interpreter and graphics! display in a TV monitor, was an intense experience, even if I cannot say why, what clicked inside me. The making of my very first BASIC program, unaided, reading a manual in a foreign almost-unknown language (English) was a triumph. The making of a program that draw a circle on the screen by calculating the distance to the center, was making mathematics come alive for me for the first time.
What I mean is that, in my case, no stimulation was needed, and probably difficulties just added emotion. The interest and emotional attachment to the computing world was immediate and intense. I don't know if I'm a typical case, but my anecdotal evidence is yours for what's worth.
Rome taught me patience and assiduous application to detail. Virtues which temper the boldness of great, general views.
I started by writing scripts for game engines, mods and such. Why? Because it was easy, the community would go "wow, cool" when you did something (ego++;). That taught me the basic concepts, and that it could be fun, then look where I am now, 4 years later, sitting in a room, writing programs all day.
No, second thoughts, don't teach him to program, drinking and sailing is much more fun.
scratch.mit.edu should be enough for introduction. It is visual and like building Lego. It contains the known parts of a programming language (loops and tests and stuff).
Insert `fortune -o` here
C, Lua, and Assembler :-).
But, it may be wise starting him on some XHTML 1.1 first. I started my computing journey by learning HTML in Neopets ages back :-|.
Curious about PCs, eh? I started crashin 'em when I was 13. In the grander scheme, I'll still a youngen in my mid 20s, so compared to all those sysadmin gurus, I know squat. :P
What did spark my interest around that age was HTML. HTML is an easy language to learn and gives those instants results so many before have suggested. It lays a foundation for your child to build on but can also introduce him to so many other concepts (proper coding standards, other languages to build on such as PHP or Javascript, proper tag closing, browser interpretation, etc) of programming.
Really it'll depend on both what you and your son are comfortable with. HTML is a rather easy language to pickup and has many avenues you can venture down. However, if he doesn't want to be bothered with anything to do w/ the web AT ALL you may try something else...
When I was a kid my mother taught me my first lesson in programming a computer. Back then they used to have these books that has the source code to simple BASIC games printed in them. She said that the secret to successful programing is in typing the program exactly as printed in the book, otherwise it might not work. Of course, I soon noticed that some typos didn't break the program... they just made it do something different. In time I was writing my own programs by recycling and recombining elements from these programs while still thinking of them as somewhat magical. I think this basic approach is quite sound as it parallels the way we learn natural language. We mimic others and learn in a very stimulus-response oriented way.
I would suggested to anyone wishing to learn programming that they start by taking an available opensource program and learn the steps needed to build it from source. Then experiment with tweaking the source and seeing if it will still build/run. Games are perfect for this because the the bug/feature distinction can be very arbitrary.
If a beginner is determined to write programs from scratch, I would recommend learning basic HTML and then PHP. It's relatively easy to write programs that do interesting things in just a few lines with PHP. Also, writing for the web lets you rely on the browser for I/O which spares the beginner a lot of tedium. PHP, like BASIC, may not be the most robust language, but I think that may actually make it a better language for a beginner. It takes years to learn programming anyway, so why not start with something easy?
+1 Funny for you, sir.
Patrick Doyle
I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
I think the right approach is to start with teaching him how to configure stuff himself. Linux only, of course.
Then throw him the Gentoo-bone.
Make sure that you give him a new cool distro, with some cool stuff - that just doesn't work straight out of the box. Something he wants to use, but that quite simply doesn't work as it should. Make sure it's easy to fix, though. Make sure you don't have time to help him more than by pointing at the documentation.
And of course, the kid should have root.
Make sure that each new cool thing is always 'one step away' from not working, but always in different areas.
Kind of fun how quick kids are to learn how to fix stuff, when they want to get something to work.
"Rune Kristian Viken" - http://www.nwo.no - arca
http://www.spacebarcowboy.com/ascii/a-z/a-z.html
and also
http://www.ljudmila.org/~vuk/ascii/deep.htm
That should get him up to geek level in no time.
The lunatic is in my head
Try Alice. It's the 21st century version of turtle:
I am currently 14 years old. I started my programming days back in windows 3.11 land. For Christmas I got a crappy old laptop that had a broken screen, so I had to hook up a CRT fishbowl screen (why are you wincing?). From there I found a DOS 6 manual and started screwing around with colour boot menus (AUTOEXEC.BAT FTW!). From there I learnt the ins and outs of windows by 'fiddling' (In windows 3.11 I completely screwed the hard-drive during a disk compression error). I only just discovered Linux in the form of an ubuntu tutorial in the Aussie magazine Atomic MPC. This year I started IT and got my first real taste of programming with VB Express, but I had a teacher to aid with that. I'd suggest buying him a 'Programming for Dummies', 'The Complete idiots Guide to Programming' book or something like that to get him started. The original ubuntu tutorial is not on the Atomic website, but there is a new one, Linux for windows users. Look it up at www.atomicmpc.com.au
I took a summer course at a local school. I learned the basics of programming and how to write simple programs in FOCAL (sort of like BASIC). This was in the 1960s. I was 13 or 14.
I would recommend something like this -- a class for beginners that's not part of "regular" school time (and so, not graded or affecting the time he needs to spend doing homework). Summer or winter break would be a perfect time.
There are so many reasons not to start with PHP, that I'm not even going to start listing them here. PHP is a HORRIBLE first language, and a horrible second, third or forth language. It corrupts minds, and makes it harder to learn other languages. It's a lot worse than corrupting someone by teaching BASIC as a first language.
You should be ashamed of yourself for suggesting teaching PHP to a kid.
-Don
To be quite honest, you are terribly wrong, PHP looks alot like C or C++ is syntax, it has somewhat OK OOP (will be even better with php6), yet provides alot of functions for most things, it has tons of interfaces to UNIX-like enviroments and is easy to grasp.
Ofcourse like most languages intended for webdevelopment, it is not optimal for system programming, even tho it provides alot of functionallity for it. I have no idea why you think its horrible, its really not. Want languages that will make it hard to learn other langugages if you learn them first? Look into Visual Basic or Python.
Speaking as a 23 year old who's largely self-taught in programming...
Find out what he'd like to do, give him direction if he doesn't know. I find the greatest hurdle to learning, for me at least, is lack of ideas. Often, I end up programming the same thing first in new environments and languages: a dice roller. It's sort of my "Hello World." That said, while it's a good way to just get something done, it doesn't help me learn much. I learn best when I try to tackle something that's just beyond my level of expertise-- too far beyond, and I just can't do it. Too easy and I'm not learning anything.
Just as an example, say he was interested in writing a program for his favorite game. The first thing I'd suggest to him is working on a functional GUI using the tools of an IDE. There's really nothing quite so satisfying as a really nice GUI; a command line app is often more functional, depending on your needs, but it's just not as satisfying.
Next, you might suggest that he learn some of the I/O tools and add save/load functionality to his program, using simple text files. After that, you could show him some more interesting techniques for saving, like serialization or XML.
Another example: Teach him how to use a database. Start off with a simple database with a couple of tables, maybe a list of customers and a list of items. Then start introducing normalization, joins, etc.
I am 15. I became really interested in computers when I was 13, when I started writing HTML. I then did a lot of TI-83+ programming when I was bored in school, and now i'm learning C++, and basic shellcoding. Your son is already incredibly lucky. My parents take little to no interest in my geeky pursuits. If he can always come to you for help, and if he's already shown an interest, I bet he'll stick with it. It's addicting.
Javascript was my first programming language. It's something everyone's got simple access to, it's very forgiving (though it does set you up for some bad habits), and it's very simple to make GUIs and interact with the user.
You must have learned programming as an adult in college. Those of us that actually learned programming as a kid know what you just said is the exact opposite of what it takes to get hooked on programming at a young age.
Patrick Doyle
I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
Comment removed based on user account deletion
Once he has a solid knowledge of basic programming and if he's still interested in learning more of the basics of how computers work and if you are willing to dedicate quite a lot of time and effort to destroying the social life of your kid once and for all and turning him into a full blown geek I'd recommend that you take a look at a course that has been called "From NAND to Tetris" in which students are given a NAND logic gate and must construct their own (simulated) computer out of that by gradually building on top of that NAND gate. Eventually they end up implementing a simple game, such as tetris or snake in a computer that they build from the ground up.
Here are some links for this material:
A short introduction to the course: http://www.youtube.com/watch?v=JtXvUoPx4Qs
A long introduction to the course (Google Tech Talk) http://video.google.com/videoplay?docid=7654043762021156507
The course material itself: http://www.cs.rpi.edu/news/colloquia/December8_2005.html
Above all else I think you need to be sensitive to your kids needs and longings. Who knows, maybe he will not be interested in all about learning the internals of computers but more interested in the usability and design of interfaces (I know, your worst nightmare I'm sure). My point is, don't push him into a direction that isn't to his liking.
You don't think enough... therefore you better not be!
Independent from the decision what language to learn, talk to him about artificial life (programming little animats that live in an artificial environment and have artificial genetics). It is such great fun to program little animals running across the screen. IMHO, this is a perfect approach to learn programming:
(1) You can start off simple (without any genetics or physics) and already have fun, then add more and more features to your animats and to your environment.
(2) The concept of object oriented design is very obvious here: each animat is an instance of a class and has methods and attributes.
(3) If you add genetics, your son will develop a natural view on evolution, which in turn will prevent him from becoming a creationist (god willing).
+1 and then some.
I reviewed and gave feedback on an early draft of this book for Chris (as did a lot of people at my previous place of employement), and I'm a long-time Ruby fan, so I may be biased, but I really recommend this.
Me and my wife went through about half of it together, and she really did seem to get a lot more understanding of what it is that I do as a programmer. (She isn't much of a techie despite we met on IRC, so she isn't scripting for her self just yet.) The book is a fairly good fit for the early teens, doesn't fly a lot of tech jargon over their heads and isn't condecending either. ... now if you'd pair this with an insane Ruby book from whytheluckystiff, you've got a dynamite combo that will never be boring. :)
For me it was Basic on the Aster (CP/M), and not much later the c64. However, I remember getting really 'drawn in' after getting the 'feedback' of what my programs did. There's nothing that gives more feedback than Lego Mindstorms robotics; even the old sets (cheap second hands) will allow a very simple (GUI) start, and allow an upgrade path (NQC for example) which could later lead to *nix hacking.
I would not start with writing a game from scratch, many games such as Neverwinter Nights or Tremulous or what-have-you feature a scripting environment and sometimes even an IDE. Starting to write small modules gets you nearly instant reward as you can see the results in the game and teaches the basic concepts of control flow and APIs.
something clever to make me stand out!
More than half of the a woman's body is water. So without loss of generality, he could just have written "without all the hassle with opinionated bodily fluids".
Ezekiel 23:20
I started programmed calculators when I was in ninth grade! (Last year.) I am teaching myself C++ now, and you are absolutely right, the OO stuff is hard to get used to. I hope to learn PHP soon, (I might start looking into it next year) and as I'm going through C++, I'm starting to learn a little x86 assembly. I hope that I can get good at this, though I probably won't pursue a career in computer science. (Physics has always been my favorite.) I really wish that I had someone in my family that could help me. I think I'm talented, though. I often use programs on tests (mostly to beat the others ;)).
Tell him computers are for grown-ups, and that he'll be punished it you catch him programming before he's 18.
Stasis is death. Embrace change.
Is that when i was younger my dad was desperate to get me to learn to program. Unfortunatly i had better things to do at the time (or so i thought heh) and so never did. Fast forward a good few years and im now a sysadmin. My dad passed away last year and its always bugged me that i never took him up on it, i know virtually nothing about programming but really want to learn (for my own amusement if nothing else). So as a total noob and to tag onto this disscussion what would the slashdot crew suggest as good place to start learning/playing around in this field. Any guidence would be GREATLY appriciated thanks.
Well, Bart, your uncle Arthur used to have a saying: "Shoot 'em all and let God sort 'em out."
Like most others, I agree with starting out with something like Perl, Python or even PHP. If you got him on with HTML, CSS, PHP and SQL, then he could develop web sites quick and easily - what with the web being the most used thing now. The first language I started with was (dare I say it) Visual Basic, as you can make some "traditional" looking MS/Win32 apps very quickly, the syntax isn't tricky at all and the overall feel is very Micrsoft-y. Saying all of that though, I've been playing with C and Assembler for the ARM achitecture (using GamePark Holdings GP2X console) and trying to get involved with the Demo Scene. I've also been looking at 3D engines and low-level libraries as knowing how things work from the ground-up is what interests me the most. I think it took about 7 years of coding in general before I finally found the thing that interests me the most - so see if you can find out _what_ he would like to achieve from his code, and then try to direct him that way.
I've often found that by far the best way of teaching him to do this kind of thing relies on finding something he wants his computer to do for him.
:) )
This could be just about anything - if he likes sports, it could be a sports results and stats database, if he likes RC modeling it could be an interactive application for setups for his radiocontrolled cars. Your only real role here is to ensure he chooses something feasible in a reasonable timeframe (don't suggest writing Quake5
The thing I like about this approach, is that it will teach him far more than just "how to do it" - you can start it with a discussion about how he wants to go about it, to start with which language (pros and cons, quick GUI development vs. old school stuff - basically just see what ticks his boxes) and it'll then take you through the basics of data models, and the fact it'll be useful will keep him motivated. Help him break the task up into little bits, and use the first few to teach him the ropes, and then let him try some on his own.
Make it clear it's his project, that you're there to help whenever and wherever you can - but don't judge. If he wants to start with an Access DB - by all means point out the pros and cons, but it's his toy - let him do it, he should be old enough now to see for himself whether it's "right" or "wrong".
Try NetBSD... safe,straightforward,useful.
I'd recommend Real Basic. You can get really nice results with very little effort or programing knowledge. This gets them hooked. Then as they want to do even more with there programs they will then end up learning all the good messy stuff underneath.
Just show him what you know and show him that whatever you don't know is really easy to learn. He'll probably ask you things that you haven't got any experience in and then you'll figure it out together. He might even teach you something in a few years.
I'm too lazy too look for the source, but I read an article suggesting that the commandline is the best place to start learning. But who cares? The most important thing is that you don't discourage him by forcing him to take a certain path or hide complexity. Peer instruction works the best so if you have the time just sit with him and do something that is new to you too.
Show a man some news, distract him for an hour. Show a man some mod points, distract him for the rest of his life.
Greenfoot looks neat and all, but it definitely has a Java mentality of programming on top of a massive framework that's provided for you.
I'd think simple turtle graphics would be much simpler to grasp at first. The kids need to learn control structures (loops, if statements), variables, etc. before they tackle some huge object-oriented application framework.
It's admirable that they want to teach OO programming early, but let's face it -- there's zero motivation to use OO until your programs reach a certain size (say 100 lines). There's plenty they can have fun doing before they ever get to that size limit.
Patrick Doyle
I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
http://www.alice.org/ I heard about this almost a year ago in a talk by Randy Pausch from Carnegie Mellon University, but haven't had time to check it out. It is supposed to make the learning experience of programming better. Also maybe if you have some first programs written a bit of competition could do no harm: http://www.topcoder.com/ The series of Head First books from O'Reilly also made a favourable impression on me.
Tell them their parents hate it. Naturally, they'll rebel!
While wanting to help your son in his curiousity, I think you shouldn't guide him too much but provide help when he gets stuck or something he tries to do doesn't work.
For me personally, I learned programming by experimenting, doing, my curiousity and drive to do something on a PC often brought me into different fields of programming. It's the curiousity and that geeky drive that made me want to discover more. Often, when I found a good resource on how to do a particular task, it bored me as the challenge got lost. The same goes with having a peer with "all the answers", it makes you shut off your own creative process.
Programming is to me exploration and experimentation, building on past "discoveries" and solutions you've thought up. If you'd want his curiousity sparked, allow him to be creative, think out new things to push himself further and constantly feeling a sense of realisation or achievement. Something that is "your own".
Wherever that's on Linux, some flashmovie, a "hello world"-movie, for some a HTML-page, a clever JavaScript, it doesn't matter.
I think we can keep recursing like this until someone returns 1
There are so many reasons not to start with PHP, that I'm not even going to start listing them here.
I think you should, because this is a horrible way to make your case. Although it's true that PHP allows you to make hugely incomprehensible programs, that's no reason to write it off completely. C and C++ allow for even far more rancid hacks, and the only thing I've heard people say about those languages is that it's hard because of the compilation step...
PHP has come a long way since PHP3. Although the typing system is still pretty weak, PHP5 has a nice OO model and Exception handling interface. What makes it great as a first language is that you have very easy access to a visual interface system (html) and that it has a huge library that help you along on the more complicated stuff, with proper documentation. Oh, and it's definitely worse to teach BASIC as a first language than PHP. Let's talk evaluation strategies...
Assuming he already knows how to do "hello world" (in other words, he knows the basic syntax and structure of the language and how to make stuff run), then the next step is easy. I didn't read the other comments so sorry if someone already said this, but the easiest way is to find a project. Something that he'd like to make a computer do for him. Once he has a project, just turn him loose. Show him where help can be found online and answer any questions he has when he has them. Other than that, leave him alone!
Informing people about the scams, shams, and bunk that assault them on a daily basis. http://www.jeremyduffy.com
After weatching and at time helping hime build a few nothing boxes (neon ring counters of a sort) crystal radios etc, I got interested in electronics, that ultimately led to computers which lead to S/W.
I guess to start hime off, try some simple games. HILO Hangman or Towers of Hanoi (for advanced stuff).
All of those can be non-graphical at first using any language such as Perl.
Be sure to explain a lot. At 7, a Nothing Box was just flashing lights until I was told the properties of the neon bulb and a capacitor. Simple explainations will work if the kid has a bent for these things.
-- Many men would appreciate a woman's mind more if they could fondle it
This is an interesting environment. You get a 3d environment to play in and prompted programming statements. Although not a "real" language, it would be a good introduction to programming and gives some immediate feedback to the beginner.
http://www.alice.org/
I think you have to want to do it. If he wants to program, he's going to learn how to do it and if he's self directed he'll figure out what questions he needs to ask.
This is my sig.
y = sin(x) in Pascal (That was the language at school at the time)
From there, research in non-linear algebra and research support for a supercomputer and cluster - mainly code tuning, optimisation and parallelisation.
.
...the hassle with women.
It seems you made a mistake in your post, I've gone ahead and fixed it though.
Why don't you two just stop complaining and fix the problem once and for all by writing a proper manpage on women?
Only to idiots, are orders laws.
-- Henning von Tresckow
I would recommend looking for solutions with two key pieces, and an overarching theme. The stuff he is doing must relate to daily life in some way. This can be difficult depending on what he spends his day doing - but if he plays fantasy sports, he should be working up to a program that helps him manage his team / gives him an edge. If he collects rocks, he should be working towards something that helps manage his collection, pictures, etc. If it doesn't apply beyond the keyboard, good luck. Part 2 is similar - it should be something that can be shared easily with others. You put that much time into learning how to create stuff, and your going to want to share it. Impress people, help people, scare people...whatever. Those are the two big inducers though - its got to be stuff that can apply to your life or things that can easily be shared with other people. Thats the bit of heroin high you give him after he gets by the crossfire on the street and the giant rottweiler in the yard - if hes going to get good at programming, he'll be back. This points to web app type stuff usually - from my point of view, you'll get no where fast on the command line - he will find that stuff if hes interested, but the teenage social call will pull any reasonable adjusted kid away from anything so solitary pretty quickly. You have to sneak in some of this creation heroin before your car is out of the driveway for 6 hours every night - if your lucky, for every night he's shotgunning beers and chasing girls, there might be an hour of programming as he beats the hangover.
It might help to see how I was stimulated by my parents to take up programming at an early age.
At 12 years old I started programming at school on a VIC-20. BASIC of course. Although I was interested in computers to begin with, my mother pushed me to do a course. In that time (1984) she already had the foresight to tell me that it would be a smart move. I am still thankful for that after all these years.
Although BASIC seems a outdated choice now, in retrospect, the simplicity and the speed at which results became visible was important to keep me going at that age. This is the reason I would suggest to start simple. Perl perhaps. Also don't try object-oriented stuff yet. It will come later if the interest is there...
The next push was a challenge: A few months later (I moved on to a C-64), IBM was programming a piece of software for the company of my parents. I noted this when it was discussed some time during diner. I remarked that it didn't sound very complex and wondered about the enormous costs that seemed connected to it. They asked me if I thought I could do it. I said yes. My father then said to me: "If you manage that, you earned yourself a printer and a disk drive for your C-64". Around that time, this was a unimaginable wealth for an underage C-64 owner (at least it was for me). I started on it and a few weeks later it was there. It worked, I got my hardware (and my father a huge discount from IBM after he showed them my program telling them that he wouldn't pay that asked price for software that could be delivered by a mere child in his spare time in a few weeks LOL)
After this I went on on my own. During my studies I met some people with the same hobby and that completed my addiction ;-) These people also introduced me to higher languages like Pascal and C++.
At this moment I am a regular perl/ruby/RoR/C++ programmer and still having a lot of fun!
So a good approach seems to be:
1) Start out simple (script?)
2) Set challenges to overcome to keep stuff interesting.
3) Slowly move to higher generation languages.
Yeah, 'cuz the question is indeed about a budding programmer...
Given enough hydrogen, just about anything is possible.
Programming is a pure intellectual pursuit and can be learned at anytime.
If I could go back into time, I would have spent more time on those artsy and sports subjects instead of locking myself away with my computer code. I grew up to be a lonely and shy person, while the concert pianists, dancers, and athletes had plenty of friends, partners, and much more success in life in general - all because they were much more easy around people.
P.S. Many of those "dumb" jocks I went to school with are now Drs. and Lawyers and engineers; married to wonderful women and have a family.
I agree with the basic premise that a high-level scripting language is a great first tool. No explicit compiler required, and you can accomplish things in a pretty straightforward way.
Just after learning the basics of imperative programming, though, I would recommend a short primer in how microprocessors or microcontrollers work. Registers, limited storage, direct access to hardware, opcodes, and so on.
As it happens, a little while ago I decided I wanted to write a cheesy simulator for a six-bit microcontroller in python. The bytes are six bits, the address space is six bits wide. It all fits on a chess board. http://halley.cc/code?python/octalplus.py
[
M-x woman
(goes after that man page like a pig at the troff)
Get thee glass eyes, and, like a scurvy politician, seem to see things thou dost not.--King Lear
My dad wrote me a multiplication test game for our C64 when I was young (much younger than this kid) and made the screen change colour when you got it right.
From then on I tried to figure out how to change screen colours, make stuff scroll, deal with input... it went from there. Soon I was trying to alter the code for games (the ones written in BASIC anyway, there were a good few) and see what happened.
Whatever it is I advise something that is simple but gets immediate results. That's what turned me on to computing at the beginning - making these wonderful machines do tricks for me, and doing things with them that other people can't or don't even think about.
Oh, you're good with computers because you can know how to use word? Well check *this* shit out!
Teens have immense power over other teens. There is some sort of herd instinct that can be turned to your advantage. Get your son involved with other teens who are learning to program, hack etc.. There might be a formal teen computing club in your area but if not there may be a way to find avid teens who are computer junkies. Perhaps adults you know have teens active in computing. The garage band type of model for teens learning computing is hard to beat. His schools guidance councilor may be aware of teens involved in computing. Sadly a lot of Windows exposure will be hard to avoid.
Before getting into *nix systems or Windows systems, i think probably he shud be understanding first, 'bout programming paradigms. Rather than restricting somebody to some system or a particular language,the person should be taught on how to tackle a situation, no matter what language he is using.After all, computer languages are way of expressing how you tackle a particular problem and make the computer do it for ya.So,essentially, paltform to platform, the syntax might change, but of course logic remains the same.But to improve logic, he needs to see the problem in a 3rd person view..as in..what he has with him (language) and what he wants to do. Once he gets into that, (atleast, a fair idea of how he is gonna tackle..start by writing out pseudocode)logic will improve.Once he gets the logic,converting that logic into a particular syntax is not a big deal.He will learn the art of solving problems rather than a particular language or a system.
I don't know about your son, but I for one was so excited about programming that I didn't need much of a teacher. If you find the right instrument to get him excited about programming, he'll come to you with questions or figure out how to answer his own questions and lead his own learning path. Of course I'm sure he would still appreciate some ideas and guidance from time to time. Personally, I enjoy game programming. There are free game programming environments on Microsoft's web site if you're not too heavily anti-MS. The modern environments are, I suspect, much more entertaining to use for a beginner than the environment you're used to using. To get started, head to their "explore by intrest" page.
Also, I am working on a more visual (less coding) game development environment (Scrolling Game Development Kit 2), and trying to make it a bit more portable (it might work in Linux someday since I am almost done converting it from DirectX to the OpenGL-based OpenTK library). I think game development is a very rewarding way to learn programming.
While I'll aggree that kernel hacking won't get anyone interested in programming, I think programming web sites is somewhat lacking in motivation. As you were saying, you want it to provide some serious bragging rights.
Whatever you want to do on the web at teen level, has been done before and better. Publishing photos? There are a ton of providers which achieve the same thing. Forums? Ditto. All you need for a good guild web site are webmaster skills or maybe graphics design, _not_ programming. Approaching it from the programming side is the way to get the least bragging rights, with the most effort. Everyone won't go "woot, what an original forum you programmed!", but the more discouraging, "geesh, why don't you use PhpBB like everyone else?"
Personally, looking back at what motivated _me_ back then, I'd say start with games. That was my motivation. I could throw together a game as good as Psion and the gang made for the ZX 81 and later ZX Spectrum, and show it to my classmates and get some serious appreciation. The first game I wrote, when I invited a couple of classmates to see it, they ended up playing it all afternoon. Mind you, it was uber-simplistic by today's standards, but it was as good as anyone could possibly do on a 1K ZX-81.
It was motivating enough to get me started on assembly and converting it by hand to hex.
Nowadays I wouldn't advise anyone to write a game from scratch at home, but there's a _lot_ you can achieve as a mod. And mod-friendly games are getting rather common these days. I can think of a few where most of the game logic (i.e., minus the graphics and such) was Python, one even TCL, and one was scripted in Java.
So basically I'd say, show the guy how to make his own mods. Even if it's just for cheating it's a start.
And the distant carrot of making it big and famous is there too. Both Counter-Strike and Team Fortress started as mods, and ended up major successes.
A polar bear is a cartesian bear after a coordinate transform.
I think the main thing is to get more interesting results. I hooked my son by designing the outline of a text adventure, that he had to program in LOGO. It worked. He is a professional now. I think creating an intresting subject is more important than the choice of a specific language.
Sorry for the polemic, but believe me, your son will stretch himself to understand you far more than he will even for the most gifted teacher. What I owe to my parents can never be repaid, and there isn't a day goes by that I don't miss them.
I've calculated my velocity with such exquisite precision that I have no idea where I am.
#include <stdio.h>
#include <stdint.h>
int main() { uint32_t x[] = { 544499015, 1768693857, 1931502950, 2190959 }; printf("%s\n", &x); return 0; }
I agree about encouraging the son to program in some high-level language (in which the father is also proficient), but I disagree with your dismissive "it's the same as basic was twenty years ago".
Twenty years ago, the computer had a kind of mystique which is now, if it still exists at all, much less strong. The way society relates to computers now, compared to twenty years ago, is really different. I have the distinct feeling that this is causing there to be less interest in learning about computers because they're much less exotic.
Or maybe just a different demographic is interested in computers --- perhaps the kind of kids who were interesting in computers then, might now be more interested in far-out stuff like nanotechnology, space exploration, particle physics, and genetic engineering, and the kids interested in computers now are more like the hot-rodders/car freaks of then (note: this is not meant to be judgmental of either group).
In addition, twenty years ago society wasn't saturated with exposure to computers running impressive programs like interactive 3D games, or with computer generated movies. A dreaming teenager today must be a bit more intimidated looking at all this stuff when he is starting out, writing "Hello world".
Games are what got me interested in programming. I used to read Creative Computing BASIC games compilations in bed as a youngin'. They had the source code of a game along with a couple of printed-out test runs. I found this an interesting application of programming that spoke to my hobby of video games.
Why don't you write a game with your son? A text adventure a la Infocom, or a slot machine or dice rolling board game?
What got me interested in programming was video games. I played a lot of Sega Genesis when I was a kid and eventually Doom on the PC. I really didn't start programming though until High School. I started HTML when I was like around 10 years old, but this is not really programming in the true sense. Though I guess it wouldn't hurt to start with something like that. High School I really didn't learn a thing. I learned most of the stuff I know on my own. It was mostly out of interest using books and the Internet. C/C++ and various Assembly languages I am familiar with. I am now in college majoring in Computer Science. I think a person really needs an interest in the subject to take it seriously. But I guess it still doesn't hurt to try. Buy him a book on C or another language. I learned a lot about pointers and memory management in C through an old book my stepdad had.
"Without curiosity and knowledge, the mind is a vast void. Without the mind, curiosity and knowledge are nonexistent."
1) C? Oh dear me no. You need too much understanding of computer science to get on with C - better to use a language that protects you from having to use pointers and the like. If the syntax for setting up an array, for instance, is complicated, he'll try to find a way to solve the problem without using an array, which will just end in disaster.
1)a) Fortran. Fortran is an awesome beginners language - it teaches good programming practice like explicit variable declarations (I'm looking at you, basic) and being absolutely damn certain that the code does what you think it does (I'm looking at you, matlab), whilst at the same time, not being hard and unforgiving like C. It's not case sensitive this means that you don't get into the habit of having a variable named 'i', and one named 'I', and since that's begging for hard-to-find bugs to crop up, not doing it in the first place is good.
2) Find something to do. I spent several years kicking about with QBasic and got nothing out of it. Why? Because I didn't have a problem to solve. Sitting down at the interpreter (or IDE) and not having a problem to solve just isn't productive.
Come up with a good list of problems to solve and algorithms to implement:
etc, etc, etc.
FGD 135
I went in that direction, I'm not suggesting that being the next step in the learning process ... although ...
.
A bit further down the line you might get a gameboy advance emulator e.g. VisualBoy Advance and devkitpro. Nothing beats banging the metal for sheer excitement. Before you know it he'll be writing *new* games for the DS...
Oh, and don't forget to set him some pretty programming tasks like the gingerbread man, mandelbrot set etc....
Andy
I've always found that I'm a terrible teacher, as I don't learn in the most usual way. If I'm given a fact I'll just forget it. Given a theory I can remember it.
Normally I find myself trying to describe why something is like it is (even though these days I consciously try and avoid doing it). I tend to get a lot of blank looks, and people wondering why I don't just tell them the 'simple' version. To me a list of facts is just useless as I would forget the lot!
What I'm getting towards is there is probably much similarity in how you and your son's brains work - especially if you're both interested in computing. Even if you're a terrible teacher for everyone else, you may find you are good at teaching your son. Or maybe not! - my brain works the same way as my dad's, but my brother's does not.
How is Python making it hard to learn other languages? (well, apart from showing how pointless semicolons and fancy brackets are)
Get him good introductory math books. Get him the SICP book. Show him high order languages like Ocaml, Haskell, CommonLisp.
Just point him to Why's (Poignant) Guide to Ruby. That shouldn't be too boring. I enjoy reading just for its style, even though I already know Ruby :-)
You don't have teenage children, I suppose?
The original post makes it sound like he's asking for suggestions on how to make things more interesting for his teenage son (and that he's already explained a bit about the "shell"). Unless his son is quite special, I doubt that formal programming is going to be more interesting for him than something with graphics and user interaction.
Inferring that all geeks must be male is rather a large assumption.
i have been teaching 16 year old students for the better part of the last 5 years. after learning html about half of them started learning php on their own. (they had chosen an IT career path in the beginning)
it really depends a lot on age and personality, but here are the details that worked for me:
- find a project they are really interested in
- don't teach theory when you can point to possible solutions a kid can acquire on its own
- use the simplest development environment that fulfills the need (otherwise they have to learn to navigate that, too. e.g.: i start my html course with notepad, move to notepad++ after an hour and some move to dreamweaver after a week)
good luck
give them an editor that has boobs in it.
The best way to get a kid's interest for programming is to program something he likes to use. Even though I deal with non-game programming now, that was what originally got me interested in computers at a teen. My father was typing in computer games from old Compute! magazines, and I wanted to learn how to do the same. I also remember a summer course that taught LOGO. BASIC might seem "evil" to a Linux kernel programming, but put Visual Basic on a Windows machine is a good way to do it, or Java.
--
Luck is just skill you didn't know you had.
I just recently started hacking RockBox, and it's a lot of fun. You can quickly go from having a boring MP3 player to doing something unique. It's portable, so you can show your friends, etc.
You're limited to using C, but that way he's got half a chance of understanding what's going on in the machine, unlike with high level languages.
I'd install it on a player, maybe a spare one that isn't actively in use (though it may be an upgrade to the existing firmware, it's pretty slick). Let him see the demos, modify them, and go from there. You could start with simple things like changing the colours or something in the existing programs.
When I learned BASIC it had line numbers, GOTOs, and some versions didn't even have functions (just GOSUB). This is a far cry from PHP which effectively retains all of C's syntax.
Yes, it has inconsistent function names and register_globals/magic_quotes are really stupid from a security point of view. But neither of these are relevant when teaching a kid.
Plus, web programming is a much more visible way of using those newfound skills. A child who's learned PHP can write a cool webpage and show his friends. A child who's learned C can write maybe a text-mode executable, but it's going to be hard to pass it around.
Computers themselves have always been enough to interest me.
In the beginning the thing that drove me away from computers was my father and stepmother controlling every single thing I did with their computer because it cost them $2,000 USD nearly 20 years ago, I absolutely hated being confined like that & I instead got involved in construction where there was more room (for me at least) to grow.
I'd have an extra 10 years of experience, and might have even stayed in school, if I'd been given even a piece of crap computer to do whatever I wanted with or at least hadn't been confined like I was.
Sad part is they'd bought it to be a "business" computer & it just ended up going to waste, fucking assholes. I hate them soo much.
Wanna fight ? Bend over, stick your head up your ass, and fight for air.
How about Alice?
JJ
Why not try something fun and interactive like Processing?
Mr. Period: Nine is the one that's right by ten!
Nine: One day I will kill him. Then, I will be Ten.
Get him on Python for starts. There's a good book out there called "Think Python". Its in pdf form right now and will be published in 2009. Its written by a high school computer science teacher who discovered Python when he was trying to teach his students C. The book is a revised edition of another book he did called "How to Think Like a Computer Scientist: Learning with Python".
You can find it here: http://www.greenteapress.com/thinkpython/
Those were MY first experiments in programing. I built all sorts of little games in TI-BASIC, a few of which became popular around the school. I never moved on the Z80 assembler, but some do...
IBM created a framework to encourage kids to learn programming, but apparently it's so engaging that big kids who really ought to be working spend their time obsessed with it too. You create a bot class, overriding it's methods that respond to events in the game, and then have your bot compete in battle with other bots. As a side effect you learn fundamentals of Java.
Robocode is at http://robocode.sourceforge.net/ While googling I also found http://robocoderepository.com/ which is a Robocode enthusiast site.
"If you're not passionate about your operating system, you're married to the wrong one."
Teach him html, css and php.
Spiffy websites impress women a lot more than a hello world program in real mode assembler. Trust me.
Shoes:
http://code.whytheluckystiff.net/shoes/
Try Ruby:
http://tryruby.hobix.com/
William Gibson books.
Garry's Mod.
Jag pratar lite svenska.
Then adopt an Indian boy who already knows how to code.
Like most people at my office, I am a huge fan of the Head First series of books by O'Reilly. A number of people at our office have gone from not knowing anything about computers (we have a number of hardcore theoretical mathematicians) to being proficient java programmers with these books.
-1: flamebait should really be -1: inciteful
There are a couple of reasons that it's getting harder to teach languages.
1. Languages are moving away from knowing fundemental coding constructs (loops, if statements, etc) and towards knowing an API. You can't really do anything with a modern language without knowing what the libraries are. I suspect these things are frustrating for the learner programmer. I'd pick something with as simple an API as possible.
2. Back in the day, a junior programmer could write something in a couple of hours that was almost as good as the games, etc you purchased. This is no longer the case. I think it's difficult teaching the basics of programming when no child is going to produce anything that comes close to the games they play or the programs they use.
If I were to try and teach programming, I'd look at something like scratch or Hackety Hack
Good luck.
Training monkeys for world domination since 1439
Strangely enough, the first programming I learned was on a Texas Instruments Ti-89 scientific calculator. I wasn't even sure in what language I was programming in, but I found some games (generally text-based RPGs) and science programs (math or physics) and decided to understand what was going on. Soon I was making my own RPG (never completed it but I learned a lot) and my own math/physics programs.
I won't say this is the best way to learn programming, but everyone has a different introduction, and this one definitely piqued my interest enough to take a computer science class in college (which I loved).
On a somewhat unrelated note, there's a great book that may get him interested in Ruby: Why's Poignant Guide to Ruby. Maybe give that a try.
This space up for sale.
It's probably the most productive language and programming paradigm ever created.
It'll probably blow your mind apart, but youngsters take to it like ducks to water.
The slogan is: Smalltalk makes hard things possible, and the impossible, possible.
If he gets a reasonable grasp of the principles of these, I assure you he can look forward to a very profitable and rewarding life.
Impossible. The documentation will only apply to a single instance and will forever be incomplete.
Nerd rage is the funniest rage.
In my opinion by far your best bet is something like FreeBASIC (http://www.freebasic.net/) which has a number of advantages as such:
I taught my girlfriend to program using FreeBASIC in a single evening and she picked it up really quickly, even writing her first game (using circles for the objects) over two nights.
With it being BASIC it's quick to get started, but has enough modern features and bindings that it's perfectly suitable for serious work. I've used it for quick prototyping and written quite a few helper apps and utilities for work, and I know others who've used it to write Windows Services without too much trouble.
> How To Encourage a Young Teen To Learn Programming?
Tell him if he finishes the work, you'll get him a purple, season 11, tier 43 sword.
(-1: Post disagrees with my already-settled worldview) is not a valid mod option.
I wonder if there is a modern equivalent to Logo. In elementary school they had us making the turtle draw complex scenes, eventually involving functions and loops.
Sometime after that my dad upgraded to a old world perform power mac. (60MHz, 512MB disk space) and installed a C compiler [probably so he could poke it at some point, not that he ever did]) and gave me a lesson or two in C, before I started coding/learning on my own.
A little before the LOGO writer he tried to show me basic.. but at that point I had little interest.. or really didn't like the line numbers
The real trick is the logic mindset and desire to change the logic. Then you can learn any language once you figure out some of the syntax. However very few people think this way even in the field I find.
Obviously today that's not possible. But I think where you can still produce stuff as good as the pros is in developing a Web 2.0 web site.
I'd suggest getting him started on Ruby on Rails and working through a book like "Ruby on Rails E-Commerce" (exciting title eh!) or similar ones that you work through to build a social networking site.
As he gets into it you can perhaps guide him to other aspects of the system:
If he's got a bit of math geek in him then perhaps look behind some of the data structures especially the ones RoR uses to hide the complexity (eg hashes).
Edward
Bad analogies are like waxing a monkey with a rainbow.
Give him access to alternatives. I was interested in computers, programming, etc... as a kid but I also had access to hardware. I began with Basic / C (coding games) and ended up migrating to coding for PLDs / FPGAs, then to designing audio amplifiers, until finally I found myself in antennas / electromagnetics - I'm now working on my doctorate. Computers are the first introduction to technology, and programming is the easiest to start with, but it certainly isn't the only thing to learn. All I'm saying is to make sure there are options.
In general, I think it's good to find something your son likes and find a programming project that fits. Then go from there.
If he likes PC gaming at all, find one he likes that is scriptable, preferably with a C like structure. Neverwinter Nights & Unreal come to mind immediately, but I'm sure there are many others.
There is a war going on for your mind.
Just show your son these comments. It'll convince him to learn to play the violin or become a social worker instead.
Can he sing? Tell him to get three of his friends and start a boy band. Then you can retire and hack your kernel in style.
You are welcome on my lawn.
'Teenage' can cover a wide range, but we've had fun with Lego Mindstorms http://shop.lego.com/ByTheme/Product.aspx?p=8527&cn=17&d=70
I used to work as a TA in some intro classes that used Karel and Karel++ http://pclc.pace.edu/~bergin/karel.html Kinda like Lego Mindstorms on your screen. It's really pretty cool what you can do with it (make a binary calculator out of robots, for instance). The classes would start with a few weeks of Karel, then move on to other languages.
For me anyway, it's about learning to think and express your ideas via programming, the language is really secondary (i.e. most learn more than one, if they go on in the field).
Stuff like this was fun (for most people) and laid a decent foundation for later.
Logo combines simple programming with rewarding Turtle graphics. Programming gets much more interesting when you can make something nice appear on the screen.
After that, I suggest Robowar a game where you program robots to fight against each other. It combines programming with tactics and graphical animation of combats.
XML is like violence. If it doesn't solve the problem, use more. Junta
Hello world will get old after a while. You need something easy, that can produce something that would interest him. For that, I would suggest either VB, because it is very easy to get a GUI app up and running, Java, or HTML, with php/asp/J2EE, all for similar reasons.
Ages 7, 8, and 9... and they are all very interested in the computer; naturally, for the games. So when they see me programming (usually snippets for stuff on project euler) they are always asking "How can I make a game like WoW?"
The nine year-old is good at typing, and great at reading. I've worked with him on some of the different "higher level lower functional" programming languages that focus on children. He loves it. Though he fell from it when it became somewhat like a lesson and less like a flashy game. I think that, personally, is my biggest hurdle. Teaching without the flash, when I know they need to know the stuff behind the flash first. As they get older, the flash will come, but at least with my kids, they outgrow the "draw a line and the turtle follows it" stuff fast. Also, I have to admit, the oldest may simply not like programming! Which is ok too, I guess. Until the day they tell me HTML is a programming language. :P
Well, if you guys both like math challenges, you should check out http://projecteuler.net./ To quote the homepage :
Maybe you could tackle those problems together ? You could design algorithms together, let your son do the writing and then review his code and discuss better approaches. Also, when you solve a problem, you can access a forum on the website where other users post their solutions. You can learn a lot by comparing the approaches there. And since every user on the site has his or her favorite programming language, you can broaden your horizons by looking at solutions to the same problem written in K, Python, C, assembly language...
I've solved 51% of the problems and they've been great at making me remember some good programming practices.
A MUD (Multiple User Dimension, Multiple User Dungeon, or Multiple User Dialogue) is a computer program which users can log into and explore. Each user takes control of a computerized persona/avatar/incarnation/character. You can walk around, chat with other characters, explore dangerous monster-infested areas, solve puzzles, and even create your very own rooms, descriptions and items. You can also get lost or confused if you jump right in, so be sure to read this document before starting.
Part 1: MUDs and MUDding contains general information about muds and mudding, connecting to muds, mud etiquette, and some commonly used terms found within muds.
Part 2: MUD Clients and Servers contains general information about mud clients and mud servers and provides links and descriptions of various types of clients and servers that are available.
Part 3: RWHO and mudwho contains basic information about RWHO and mudwho, utilities for getting information about who is logged into a mud at a given time.
Part 4: Servers at a glance contains a more detailed breakdown of the various mud server types that are available. This section is limited right now but will grow with time.
As for the programming background for muds -- they come in C, C++, C#, Java, uLPC (Pike), Python, VB.NET, PHP, etc.
There's no question that unless he's bored, start with scratch. I use it with senior undergrads, and we'll be looking at it in my grad class today. It is easy enough for a child, and you can do enough with it, especially if you add the robotics tools such as the picocricket module for scratch.
https://www.tandfonline.com/doi/full/10.1080/1369118X.2013.808365
You've hit on something there. I started messing around with computers when I was 12, and got such a kick out of getting them to do the simplest things, like print messages on the screen. And I can't say the thrill of getting one of these dumb lumps of matter to do what I want it to has never really gone away.
I think Python would be an excellent starting point, but the language I would choose for a kid's first taste of programming is javascript. They're already familiar with browsers, and within seconds they can be bossing one around, leveraging all its graphical power.
There are girl geeks... Few, but some... So you can't assume your % of woman / water, it could have been % of male / water, etc..
Off topic, but...
One GG that I know, and is rather pleasant to view, decided the biological ticking was too loud. Having not found a suitable male after being hurt/rejected a few times, she decided to completely forgo the male part of the equation. A few Dr. visits, lots of $$ for fertility drugs, and some frozen sperm = twin babies on the way, no father needed.
Now, in reality, a male was the initial donor of the frozen sperm, and I told her that she could of saved a lot of money by just going to a bar and drinking a lot of vodka, but she went on spouting about genetic core, family traits, selectability, et al...
I almost wanted to point out the story of Dr. Jacobs who was convicted of fathering children with his own sperm instead of the donor sperm that was selected, but figured that would only cause too much angst.
BTW, I guess this is becoming a trend among some women today, so the available men better figure things out soon, or the next generation will all be wearing "popsicle"(tm) T-shirts... (I'm out of the game, married with 2 kids myself, so don't blame me.)
--- Relax, that mass muderer is just trying to reduce our carbon footprint, one fetus at a time...
I would go for Ruby. It's one of the simplest programming languages (you can understand code if you understand english). It could be, however, even better to first learn basic HTML and maybe some JavaScript tricks.
Absolutely. If he has any aptitude for programming, GameMaker will bring it out and get him thinking like a programmer. The next step towards real development would probably be Flash. After that, most other mainstream languages will not be too hard.
"O'Connor, smash the window." "Why me, Bigboote?" "It might be boobie-trapped!" "Oh!"<smash> -Buckaroo Banzai
Buy them a $150 scribbler robot with Bluetooth camera module that you program in Python, and turn them loose on our free online textbook.
Robot: http://www.georgiarobotics.com/roboteducation/products-1.html
Textbook: http://wiki.roboteducation.org/Learning_Computing_With_Robots
Disclaimer: I teach this class, and work for IPRE ( http://www.roboteducation.org/ )
Hey, I learned PHP as a first language you insensiti-Warning: Cannot modify header information - headers already sent by (output started at /home/a9286564/public_html/x/forum/bb-settings.php:169) in /home/a9286564/public_html/x/forum/bb-admin/install.php on line 10
Well for the parent of a young teen, the best way to intrigue a young teen in a topic is to make it forbidden.
BAN your son from programming!
Sure enough soon he'll be sneaking out of his bed at night to code on his own.
Part of the hacker mind is that whole idea of getting noticed, and for me, feeling noticed was getting my stuff out there where it could be seen - i went into user interfaces.
so rather than trying to force-feed him into low level unix hacking, start from the top - set up a http/php/mysql environment and give him something to do like, say, make an app that catalogs the dvd and cd collection.
with that, you should see the "don't repeat yourself" start to come into play - as you start the boring job of entering data, you figure there's got to be a way to automate that, and then you can encourage them into looking at ajax and freedb's web services to auto-populate the fields on cd insert and other hacks like that.
the hack is the short-cut that works better than the real solution, but in order to appreciate the hack (and come up with your own), you have to at least start making the real solution first.
"But remember, most lynch mobs aren't this nice." (H.Simpson)
-- Joe
The worst thing you can do is force it out of him. My dad tried the same thing by pulling his own whatsamacallit-tiny-thing-with-no-nonvolatile-memory-and-16k-ram-or-something. I can sort of remember the word "variable" out of an hour long conversation where he tries to explain the basics. Granted, he did buy me a book and I was reading through it but... what I really needed at that point was just basic "programming" stuff, not methodologies, techniques and correctness tips.
It wasn't until a few years later that I really got into it, I picked it up myself, out of my own accord and I fuelled myself forward. OK, so I was trying to program in a Microsoft Word 97 vb macro utilities but I was young. So so young.
What your son really needs is to find a reason to do it himself. The project needs to be large. My first real program was in C, writing cheats for online games. It was a vast undertaking, including grabbing a http page, parsing it enough to find certain things, calculating the next thing along to do.
The most important thing was that I kept myself going on this part. At this point, if I asked my dad for help, he'd look over something and point out an obvious but anything specific he'd just mutter "I can't remember, I'd have to look it up, why don't you do that?" or something similar. This would be down to simple things such as, "how do I use function pointers" or something.
Well, fortunately I can now use libraries and their documentation and know how to look things up in a grown up "all by myself" way. Unfortunately I learnt through going through every online tutorial on C available. They like to gloss over the why and reasons for doing something but between about 5-10 (following one, looking up the topics in others), they'll kind of explain the topic between them. My desire to work out what's "good" and "bad" in programming seemed to naturally calculate things and work themselves out. Then I learnt the formal approach to patterns, consistency, etc.
If your son is in high school, this would be the perfect time and approach. After the whole affair, everything I ever learnt at all was turned upside down for the better.
Anyway, to your son: good luck and have fun!
If you're a PHP programmer, you're irresponsible if you're not already aware of its flaws, because you have not educated yourself by reading any of the following well publicized articles. Once you understand the flaws of PHP, you can't honestly make the statement that it's a well designed language suitable for teaching programming to kids.
First there is this classic article, Edwin Martin's "What I don't Like about PHP", which goes into detail about the following fundamental flaws:
Then there is the mind-set of the PHP language designers and community, which is deeply flawed. Ian Bicking's "PHP Ghetto" article sums up the problem with PHP's design and community pretty well:
Jonathan Ellis' "Why PHP sucks" article makes a lot of good points and links to many other sites with more information to back up the claim that PHP sucks.
He perfectly summarizes the yapping of the PHP apologists when he says: Basically these all boil down to, "I don't have enough experience to recognize PHP's flaws because I haven't used anything better."
He summarizes:
There is also a lot of great stuff about why PHP is so bad on http://www.ranting-wolf.info/category/technology/programming/php/ including a concise description of why the "Smarty" templating system is such a horribly ill conceive and terribly implemented idea.
And if you're still not convinced the design of PHP is deeply flawed, because language design is HARD and should only be attempted on purpose by experienced people, here's what the Father of PHP Rasmus Lerdorf himself said in an ITConversations interview, quoted in "Why PHP sucks, Part III":
Take a look and feel free: http://www.PieMenu.com
I got a great beginning by learning Flash. This worked well for me because initially, I got immediate gratification from seeing my colored shapes tween around the screen. Once I got bored with that, I was able to make more involved projects by learning ActionScript, which is a very well documented and teachable language. Although it limited you to working in Flash, it gave excellent results for not that much work, and it taught me the basics of programming in any language (IFs, loops, functions) Once I wanted to expand my horizons, learning c++ was easy as pie. It also game me a reason to learn things like PHP, mySQL, and JavaScript, to make even more useful and involved projects.
Hey,
Try DrScheme; learning Lisp is a lot more palatable for beginners in my experience and DrScheme has a wonderful interface. He can have fun with simple programming and making his own algorithms without having to go through all the tedious memorization and syntax that would comes with a lot of languages.
My non-techie mom loves puzzles and is a competitive (and damn good) bridge player - I'd always wanted to get her into computer science, but was never able to because having to think about compilers or calling pre-existing packages would just make her eyes glaze over. I finally broke through with DrScheme - now she makes her own programs to crack those puzzles that are in the newspaper each day (and has no idea that that is programming - she assumes programming means something ugly like Java).
http://www.drscheme.org/
:)
No, seriously. You can write some shit code, and it's not very powerful, but it's easy to do stuff with (just not complex stuff)
I don't like the .NET one, but version 6 learns nicely. It was my first actual language (aside from like HTML).
The thing that's nice about it is you can draw your window and run it. It'll work, but not do anything. Changing properties is also a GUI - no .setVisible(false) or anything like that.
Then, when he's made a window that suits him (take two minutes to explain the basics of ergonomics - ok and cancel go bottom-right, etc), have him double-click a button and explain that this will run when you click, etc.
Very simple to learn and use, and decently useful.
I have developed a truly marvelous proof of this comment, which this signature is too narrow to contain.
I can't comment to a teenager, but I've been having success getting my 7 year old daughter interested in programming with Scratch. She's been using it to make movies and games. The thing that really captured her attention was that she could publish her work through Scratch and get positive feedback from the community on the Scratch website. The idea of building a fan base really appeals to her. I've also told her that if she develops the skills, when she's ready for her first job, we will give her part time work instead of her having to get a job in some fast food joint or convenience store, and that seems to have made an impression on her.
Seems to me the best thing you can do to get your teenager involved in *nix programming is to get them involved in an online community that will give them some positive feedback and the possibility of celebrity, then show them some of the success stories out there that started in just that way. And, of course, let them know you're genuinely proud of them when they create something.
-1 Uncomfortable Truth
The seed of my love of programming was implanted by a BASIC programming course in 7th grade. I never coded BASIC again, but the thrill of it stayed with me and in High School I took a C++ course, received top honors, and declared CS early decision that year.
I wasn't even very good with computers...didn't know DOS or UNIX before college... but the logic of the programming was seducing.
"I only speak the truth"
Karma: null(Mostly affected by an unassigned variable)
Here's an idea: http://www.alice.org/index.php?page=what_is_alice/what_is_alice It's a great intro to object oriented programming and would probably draw the video game types.
Oh they dont need men at all if i recall correctly
http://science.slashdot.org/article.pl?sid=08/02/02/0244213&from=rss
Invaders must die
Like nobody would be able to figure out who the parent AC is. Holy-moley, can you leave any more clues?
But I can imagine it would be difficult to keep more than one relationship going at once. Which is why I'm monogamous. Why people want to have more than one and spend the extra effort to keep them separate and secret borders on masochistic.
As to open multi-homed relationships, you are correct sir. Not everyone is up for the challenge.
cat sig >
In order to prompt him to program something other than games (and there's nothing wrong with that,) ban Windows from the house and suggest that he install Gentoo. Then he'll have all the source for all the software on his computer at his fingertips. It'd help him find things other than games, maybe he'd develop an interest in a particular area.
Moffett's Ghost
Hey it worked on me when I was a kid!
"MIT betrayed all of its basic principles."
I am also a teen programmer who has only just started learning, with C. Although I am interested with computing and what a career programming what really got me hooked was games. Although it will be a while before I can write anything good, Ive written a few Pokemon style battle programs as they are easy and simple. I use a really informative book "Absolute beginners guide to C" which you can get on Amazon. Your a programmer yourself so it at least if h has any questions you should know the answer where I just had to keep trying until it works.
You should let him decide! Don't push him, let him come to you and ask... Maybe it will catch on, maybe not! If not, just accept that we are not all born to be hackers, programmers or whatever our parents wish...
Just make sure you answer his questions regardless how simple they seem...
Absolutely spot on. The reason comes first, the means after. I first learned to program because I wanted to play the computer games published in computer magazines. Since they were mostly written in BASIC for Apple and I had a PC, I had to learn how to modify them for PC. Likewise, I learned to configure my PC because I needed to get the damn games I bought to run.
Having now read more messages in this thread, I think too few people are mentioning specialized description languages like PovRay or even game description languages. Probably a lot more fun than trying to do a fractal in basic nowadays...
Non-Linux Penguins ?
here
let him learn assembly, just as I'm sure you probably would have, only this time he has these handy things called system calls for useful things :)
programming from the ground up will help his knowledge of how computers work also, so when he codes in c, he can know what it's actually being compiled into.
If you're going to pursue this dream for your son, I suggest the "stage mother" approach. Force him to program, drag him to computer conventions and force him to take computer classes, and when he starts to cry tell him you're going to put his dog to sleep if he doesn't perform. It may sound harsh, but if you're ever going to exploit and live vicariously through your kid. It's the time-tested way.
Granted, to date, it's mostly been used for singers and actors. But there is no reason it couldn't work for other professions as well. Just be careful to dodge the whiskey bottles when he gets older.
SJW: Someone who has run out of real oppression, and has to fake it.
The teaching resources are already out there. Maybe a bit heavy for a kid learning the ropes but he doesn't have to cram a course into 15 or so weeks.
My concern would be that if I just let him do a project that he wants to do he may not learn the overall picture. Maybe I'm wrong but I'd sooner have a rounded understanding of what's all there. I recall as a n00b with a fantastic Vic 20 that I just did what I wanted to do without following that fine manual page for page and while I learned a lot I also missed a lot. it wasn't until I got a C=64 and some intermediate programing guides that I found that some of the stuff I was doing was doing it the hard way.
But I didn't have anyone who knew how to code to help lead the way either. I was really in the dark with a candle, trying to find my way around.
Dedicated Cthulhu Cultist since 4523 BC.
I am working on a book based on the programming curriculum at the North Carolina School of Science and Mathematics. It addresses programming from the LINUX viewpoint using Python then DrJava. The intended audience is a bright, creative person (especially a teen) who wants to learn how to program.
Of course I know, I belong to the ranks of highly opinionated male bodily fluids as well! :-)
Ezekiel 23:20
Set up a simple OpenGL/OSG/Direct3D/etc. framework for him and show him a few quick ways to modify it. If he's at all interested in programming, he'll figure the rest out on his own. The key thing is that he needs something that shows him the "fruits of his labors" quickly and easily. I started with Logo myself, but I think that current 3d APIs have become sufficiently sophisticated that the basics can be done with relatively little knowledge of programming or 3D graphics in general.
I'm surprised no one has mentioned Scratch yet. It gives quick results and teaches the basics of program flow.
See my Home Theater
Programming's days are numbered. Do you really think people are going to be hacking away at procedural code in 20 years? I don't. I have my thoughts about the direction things will take, as do others. But I am sure that we will rise out of this procedural "programming" rut.
A lot of people mentioned how they started off learning to program on old 8-bit machines. Why not just go to eBay and grab one of those? I have several Ti 99-4A computers, a Commodore and a couple of Tandys, with the odd Timex thrown in. My kids picked up the instruction manuals and started hacking. They are 7 and 8, by the way. Once I showed them sprites on the TI, they were off and running.
All that is necessary for the triumph of good is that evil men do nothing.
If the kid is interested they will start learning more.
The best thing you can do is help them get set up in whatever language: Show them how to get the editor running, write a simple program compile (or whatever) and show them how to run it. Hand them an introductory guide (one with some type-in examples would be a good start) and let them go at it for a while. Answer questions but also keep it simple till they get the hang of it.
If they get into it you will see the complexity level of questions jump (usually they thought of something that they want to write themselves), then you can work on getting better ideas and practices in their head.
"Enjoy what you're doing! If it becomes drudgery, you're doing it wrong!" - Jim Butterfield
As others have noted, finding a problem that he's interested in solving is pretty key. If he's interested in games, help him find a gaming project. Something else I'd consider, however, is some kind of basic robotics project. Get him a kit that he can hook up to his computer and use a BASIC-style language to control. It sounds like he's already inclined towards "geek" projects, and this gets him both some software and hardware experience in one go, and he can see three-dimensional results of his programming.
Especially if he's competitive topcoder may appeal to him.
It has alot of practice problems which are hard enough he would need to learn something, and he'll have a score as some feedback.
I had a TI-89 graphing calculator and tigcc ( tigcc.ticalc.org ). It's a great way to learn C. You can crash your calculator all day long at school (which is great debugging practice, it also provides motivation to go home and fix said bugs at night).
Lots of kids do games, or teach their calculator how to be a little better at math ;) Of course, I'd encourage making simple games, and maybe working up to a 3D rpg :)
It seems to me that the youth of our (US) society respond best to that which is instant. Instead of having him spend two hours trying to compile something that will return Hello world!, start him out with web languages, where he will be able to see the results, and modifications immediately. By learning some interface coding (HTML, JavaScript, PHP, etc) he will open doors that could lead to a number of places.
He may become fascinated with web infrastructure, or databases, or routing, or security, or more complex programming. Working the web would also allow him to persue other passions - for expamle, installing and configuring an OSS CMS, then tweaking the interface for a local skateboard park or chess club or whatever. Social networking web tools might be a fun place for a kid to start hacking.
The key is to keep it simple and instantly rewarding in the beginning. And what will give a kid more cred with his buddies - building an app that figures out phone charges across time zones (exercise 2, after Hello world! in my 101 class) in C++ or really pimping out his MySpace page? Had I started with C++ I would not have gone much further. But that's me. Some of y'all are crazy that way.
Have a look to hackerteen project: http://www.hackerteen.com/ What's hackerteen Project: "Hackerteen is an educational project that trains teenagers to work with computer security. With an innovative and fun methodology, young people learn how to protect companies - not to break into them - while reducing time spent on computer games, MSN and MySpace."
I'd also be especially interested in what younger people think, in particular those who are currently in college or high school.
Sex.
They think about sex all the time.
factor 966971: 966971
As lame (or awesome) as this sounds, get him to do some basic web programming. I know it is mostly just markup stuff, but to do anything complicated or cool, you have to get into the code behind or JavaScript or whatever.
The benefit is, that you instantly see what you just wrote. Sure it may be basic and not really do anything, but it is there on the screen and he can say, "I did that". After the initial learning curve, it is pretty easy to be able to churn out a blog, or a calendar / datebook, or photo repository. A simple program like that will introduce him to the basics of what programming is all about.
Hell, it beats copying 1000 lines from a BASIC book to create a text based game. Ahh, memories.
If he likes that stuff, it won't be a large leap to get into some of the more difficult languages like C++ or C# or Java or whatever. That's when the real fun can begin.
-Mark
Dovie'andi se tovya sagain.
i would find something that he likes, whether it be a game or something and encourage him to build something for it. for example: any online multiplayer game, try to find ways to manipulate data being sent to the sever etc. then build a client or something ( like a trainer, most "lower end" games are easy to manipulate ). this teaches alot of things at once while peaking an interest into the 'backend' of things. some people might say that's rather advanced but, would you rather risk the complexity of the challenge with something that they like or start with something they have no interest in. Quote SimHacker "PHP is a HORRIBLE first language" -> how? if you're learning the fundamentals: while loops, variables, if-then-else and the basic logic for functions, any language is good even, dare i say mIRC scripting. there's plenty of routes you could go, if you son has an online clan ( i don't believe his age was specified ), i would defiantly try to teach him php for his clans website or something. i mean, nothing is more rewarding to a kid then to have something to show for what they've done. as a programmer for 10years with a son on the way, i would try to do any/everything to build my son's confidence in himself and believe it or not, this is a very good way. you have to find something that he's interested in. you can go over a million c++ tutorials but, if they don't have a set scope for something that they are interested, there's nothing to inspire them to continue. - sean ( threeZ )
Pascal was intended to be a learning language and I consider it to be quite good at it. It enforces good programming practice while at the same time it "spells out" things, which makes it easier for kids to understand. For example BEGIN/END brackets are easier to grok for kids than {}, showing the principal of code blocks better.
Give him a game that's written in an easy scripting language and let him play it for a while. Then show him how to modify code in the game to cheat. Hey, it's how I started...
...near instant gratification for the first steps that he takes. Whether that means console programming, or working within another prebuilt environment - few folks at that age want to invest weeks and weeks of time without seeing an immediate (or near immediate) payoff.
Once he's hooked - on the control, on the ability to do whatever HE can do - let him take on the more advanced stuff that requires an investment of time or resources.
Finally, make sure the tools he uses and the environment he's working with are *preconfigured* for what he wants to do. Don't make him figure out what patches need to be applied, or what directories need to be in his path - make sure, again, that it's easy for him to begin.
(I guess my advice is to treat it like a drug. Make it REAL easy to get hooked, then make him work. ;))
My reality check bounced.
Recapitulate phylogeny and do for programming what the Rennaissance did for medicine: Institutionalize open source for anyone who can afford the education, drive the charlatans (including Microsoft certification) beyond the pale, and stop wearing funny bird masks in times of pestilence, plague and peril. Train a generation of mothers that "My son, the programmer" means something good.
``Tension, apprehension & dissension have begun!'' - Duffy Wyg&, in Alfred Bester's _The Demolished Man_
How I got into programming was probably the easiest and best way for a kid to do it. It started off with my favorite PC game called Duke Nukem 3D and there was a simple map editor. Although it resembled more among the lines of autocad; there were still objects with parameters that you set but it was all relatively simple and object oriented with minor event driven programming. It definitely would be a great start because it would allow him to start in an area where he enjoys it the most; and its not strictly text base coding like most people are suggesting; Kids won't want to do that. However, finding something similar to that now a days may also be a little more difficult; I'm sure if you look around you can find something similar. Have him start creating his own games or maps that he can play in (also try maybe making a flash based game with him) those are easy and won't take long. See if further down the line his school has a technology preparation course or special computer courses that he could attend if he feels he likes it. And keep in mind he's a kid and keep it fun!
What started perking my interest was creating a video game mod (Specifically Battlefield Vietnam). At first it was just maps, then I wanted to insert bots, then... My interest kept growing. If it wasn't for that first HTML book I might have gotten into some of the more advanced mods, but I swore that I would never go farther than changing .config files. When I got to college and I was forced to take a programming course, I really enjoyed it. In the end I graduated with a degree in Computer Engineering (Couldn't go full software, too boring :-). If it wasn't for BF:V, I probably would have been a music major (not a joke, I was seriously considering it).
If he wants to do something specific on the computer ("Hey dad, I want to make my own video game" or "Hey dad, do you know how to make the PC run faster?") then you can do some code. Learning code for the sole purpose of learning how to program is useless and counterproductive at this stage in life.
The moral of the story is this: Find an end result that He wants to do. It might be as simple as Forge on Halo 3, his own OS, or even a go-kart, but it has to be his idea.
if he enjoys music as well, you can do a small project (that I've been meaning to do, but never have). you make make a plug-in visualizer for your favorite music/mp3 player. from what I've seen, they can range from very simple, to very complex (open gl, etc).
PHP is a HORRIBLE first language, and a horrible second, third or forth language.
Even Forth is a horrible forth language
I would recommend processing: http://www.processing.org/ It's been described as "Java with training wheels" but I think its strength is that it demonstrates programming concepts in a visual way. A person can have a nifty animation up and running in no time. It's a very short hop from Processing to Java. I would also recommend ActionScript. It's finicky but it will give a newbie cool results quickly, and then they're hooked.
For every X lines of code he gets to watch Y minutes of porn. Be sure he has lots of pizza, Mountain Dew and kleenex.
"You'll get nothing, and you'll like it!"
Initially it was the idea of programming games that caught my eye back when I was in middle school/high school in the mid-late 90s. I started off making simple games in Basic which provided a great environment to learn the basic. I later graduated to C++ when programming became more of a fun puzzle/problem solving activity than just a means to create games. There are now several pseudo programming languages out there that are specifically geared towards learning programming concepts and creating games. Depending on the age of the child these may be appropriate or they may be too simple.
Most languages dont give much back quickly. You need something that will catch and hold their attention. 3D graphics and Robotics are cool to kids (and many of us geeks) and actually not that hard to break into. In fact both are used very effectively to introduce middle school and older students to programming - even high level stuff like AI (or autonomous behaviors). And the links below are Open Source!
Check out Alice.org
"Alice is an innovative 3D programming environment that makes it easy to create an animation for telling a story, playing an interactive game, or a video to share on the web. Alice is a teaching tool for introductory computing. It uses 3D graphics and a drag-and-drop interface to facilitate a more engaging, less frustrating first programming experience."
Or how about Robotics?
Myro and Institute for Robotics Education
or its pure python predecessor Pyro Robotics
I haven't read anyone state the obvious... at least for me.
My first contact with a computer was, fortunately, my first contact with a programming language. That is, LOGO.
I would strongly suggest you give a look at Starlogo TNG.
StarLogo TNG is real graphical programming in that you create programs by stacking boxes together (each box representing a different instruction like, if, then, while, etc). And the result is a 3D Turtle (yup, our beloved Logo turtle) moving in a 3D environment, which can also be modified.
Regards.
Ubuntu is an African word meaning 'I can't configure Debian'
I'm 22 years old now, entering grad school in computer science and I knew I was in love with computers since I was 8 years old. I started programming at age 7 or 8, in BASIC. My mom picked up a BASIC manual, learned the language herself and taught me what she learned (out of family rivalry really because at the time I was the only kid in the family who wasn't a self-proclaimed computer expert). Since then I've been enthralled with computers and algorithms and I'm doing very well in school as a result. About a dozen people in my class also started programming well before the age 10 as well, so it's a relatively common thing. If you can do basic arithmetic and reason about complex or abstract things at that age, you can program to some degree.
Since you said he is a young teenager, you might try the MIT Media Lab's Scratch project: http://scratch.mit.edu/
BTW, you can look at bugmenot.com for a username and password to avoid having to register.
Ubuntu is an African word meaning 'I can't configure Debian'
Might I suggest http://www.robotbattle.com/ or similar type game? You use the scripting language (very similar to C? I don't remember) in your text editor of choice to program robots to kill each other with energy missiles. It's a lot of fun and can be really addicting. It can help develop a solid interest in programming. Making your first robot and then starting up the game to watch it get slaughtered and not act as you planned is pretty interesting.
I bet a lot of slashdotters would enjoy it actually.
I taught programming at a design school for seven years, and I tried to turn web designers into web developers, as the pay and opportunities were better. The comments that suggested finding something that the young one wants to do really are on the right track. Game programming with Flash and cool web pages with PHP/MySQL will be the easiest way to get that going. But most of all, as a parent I say enjoy the time with your child, they are so precious. Until they stop being that, of course.
Maybe it's time to introduce him to alcohol and social drinking?
I think you should encourage him the same way my dad encouraged me. He left plenty of Basic books around and left me alone with the thing.
Eventually, when I was about to become an Eagle Scout, in 1991 or so, my father told me he wanted to get me a really special gift, but didn't know what to get me. I told him I wanted something more adult than Basic; was "Fortran good for making graphics?" My father did something that was incredible at the time; we didn't have much money, but we did have a 10 year old IBM PC. He bought me Borland C++. It had a compiler, profiler, debugger, an integrated IDE, all the bells and whistles. Only I wanted to use the compiler and nothing else. I learned an incredible amount from just following the book examples. My mother laughed every time she saw me in front of the television just reading the book that had the listing of the available commands. It felt like I was reading a catalog with someone else's credit card.
Give the boy the means and the time. Provide a few trips to the local used book store for some examples to just type in and make minor variations. In my experience, that's the best recipe to success for continued interest. Any more involvement and you'll end up with a football player or cheerleader.
The big thing that I know nothing about current GNU compilers, which is the only thing I'd expect a kernel hacker to provide, is that I don't know about graphics libraries. Motif, GTK and the like are far too much. Just something to draw a pixel or a line is what a growing boy needs.
How about writing Interactive Fiction? Download Inform and he can go through the manual coding alongside it. It's not a traditional programming language, but the concepts are there and easily accessible. Graham's writing really shines in the manual and he explains a lot of complex programming very nicely.
If your kid isn't so much into the writing (or the text only, which is understandable) then I'd start him off with Learn to Program.
Although your kid is probably too old for many of the exercises and activities, but Computer Science Unplugged is a fantastic resource.
Today's kids need and deserve the full package: multimedia.
You should change the Unix kernel hacker hat for the Squeak Smalltalk programmer hat.
http://www.squeak.org/
http://squeakbyexample.org/
Main difference between the BSD license and the GPL license: one is from California and the other is from Massachusetts
I would highly recommend having your child learn a high level language. One that I really enjoyed learning more on when I got started was AutoIt. Unfortunately it's only for Windows. Also web programming is a lot of fun and provides quick returns for minimal investment. If after they still are showing interest in programming, then they can then spend a bit more time and learn a few lower level languages.
If this thread can even touch on how to encourage a young teen to do anything, I'll be impressed and grateful. My current strategy is to let mine be and hope that when he screws up he doesn't die. If he can make it to the end of the adolescent years, with all limbs and senses, then he may be able to achieve something.
A positive attitude may not solve all your problems, but it will annoy enough people to make it worth the effort.
I've always thought POV-Ray would be a great way to teach programming--instant visual results, and initially grasping OOP is probably easier when you're used to describing and instancing primitives with Sphere(...) and such.
Get Lego Mindstorms and download Java for it, called leJos. That way his programs can start simple and still get real feedback.
Scheme or SmallTalk (using the Squeak environment). I think javascript/html has its merits for accessibility, but there's an awful lot of casting into and out of String representations, which is a big deal and a security issue. Since the programmer has to be involved with the whys and hows, it's my feeling that such domain-specific hacking, though impressive, is a distraction.
In the course of learning languages one learns to look not for the specific implementation details (does an expression end with a line break or a semi-colon or...) but the larger concept, i.e., how does the compiler or interpreter know that an expression is complete. We walk up to a new language with expectations, for instance, that there will be a way to do basic output and maybe, we hope, a way to make the output nice looking. Then we look for what the printf is called and how is it used.
So then, here's my real suggestion: pick a language you'd like to learn and and learn it together with your child. You'd see the language through experienced eyes and can call out things that are idiosyncratic and things that are fundamental and can demonstrate how much of the problem solving occurs before the coding starts. Plus, if you're lucky and your child is engaging with all their curiosity, you'll have to field a whole lot of "Why" questions and formulating the explanation will be recreational, in all senses of the word. I expect your explanations will be better if you, too, are navigating new seas.
Disclaimer of sorts: I studied Computer Science at university. I was turned off by programming as I found it boring (C, C++, java). The product that comes about, I always find interesting. I've moved to more overall functional and easier to learn/use language for my personal use. I won't mention langauge ... no flamewar. ;) I think getting a former programmer-in-training as opposed to a site loaded with professionals might help.
I'd say let your son learn a language. I started with BASIC on the C64. It was fun and I was 8 yrs old at the time. If your son knows HTML, I good place to start might be PHP or Ruby. I think syntatically (as a now-nonprogrammer) its probably the easiest to learn.
IMHO, after about a year of programming, assuming he's not completely turned off, have him do some much more complicated tasks (within "reason"). Have him do it in C or C++ (given time to learn it). I'm serious about this. If he wants to continue to post-secondary education, better to find out if he REALLY wants to do programming, or if he's doing it 'cause dad does it. You or he can save having to plunk down a couple grand (or more) for one semester or one year of tuition. My dad is a doctor. I wasn't pressured to do it either. I thought I would be really interested in it as well. I wasn't.
here is the information about it http://robocode.sourceforge.net/ http://www.ibm.com/developerworks/library/j-robocode/
I'm lazy - and I really got into programming by realizing "Hey, I can write code to automate repetitive tasks". I was running a BBS in grade 7 or so, and I had a habit of frequently switching software / re-designing my BBS from the ground up and having to re-import everything. After about the 100th time doing it, and getting sick of tedious tasks such as manually re-typing the description of text files - I started to write programs to automate this for me. My first tool that gave me a 'wow' factor, was a simple thing that would embed a file_id.diz into a text file, and pull it out when I re-uploaded it into the newest incarnation of my BBS. Sure, it's not as glitzy as game programming, but stuff like that is what got me excited about writing code. So, going along that lines - is your son really into say, organizing his MP3s? what about showing him how to write a program that can read ID3 tags, and organize his MP3 file structure accordingly. (Even with ID3 tags and modern media libraries, I have a bit of an OCD habit of having a logical file structure to organize my files also) Or, show him how to make a simple RSS reader for his favorite sites / etc. I geek out over utility/automation programming - and many of them can be very simple things that you can bust out in a few hours and get instant results.
... I didn't have a computer at the time (1982-ish) so I read the BASIC code and tried to figure out how the program worked, what the statements did, and how the program managed to put up the animation of a burning cigarette (yes, leave it to a teenage boy to be curious about smoking, among other things).
I'd say, find something that's likely to spark his interest and get him started with interpretive language. Instant gratification is important in early stages. I'd get him to try these:
Bash scripting, quick and dirty, use with sed / awk to get going quickly with text-based problems (ciphers, puzzles, etc.)
Logo for quick romp around with the turtle ... and recursion of course
BASIC for a little bit more control
Avoid the nitty-gritty details in the beginning. A lot of tools and practices today require a whole bunch of magic incantations at the beginning before you get to do anything fun at all ...
I think a good way to introduce a teenage kid to program is a cool platform. And the coolest platform for a teenage kid might be to program something for their iPod Touch or iPhone, because they will be able to show off their work to other kids and will really open his eyes to the potential of the device they usually just carry around to listen to music and talk on the phone.
Plus, they get to use a really cool development platform (XCode + Interface Builder) with a really nice programming language (Objective-C), learn about OOP, can do some stuff in C, there are some really good tutorials on the Apple Developer Connection site.
Even if he doesn't end up writing an app to put up on the iTunes store, he can just play around with stuff and load it onto his iPod or iPhone. I would have loved to have something like this when I was 13; instead of just writing stuff that only I could use, with no one around to see how cool it was, I would have been able to show it to my friends.
Go hug some trees.
Young teens need little encouragement, but old ones are notoriously stubborn.
The article asks, "What originally got you interested in programming." In my case I picked up x86 assembler so that I could crack copy protection. With regards to the son of the guy who asked the question, I think that the answer should present itself. The kid is obviously interested in computers and programming. There has to be something about programming that speaks to him. I personally hate programming. I think it is one the most tedious things in the world. I definitely enjoyed learning assembly though because to me, it represented the actual working of the computer in terms of directly manipulating what is in memory and being able to step through the lowest level of the code as it executes. That was cool for me. Actually writing a high level program doesn't interest me in the least.
Make sure he knows the basics of keyboard Input and console Output, then encourage him to write programs that do what he's currently being taught in his math classes. It sounds cheap, but I never understood a mathematical concept better than right after I wrote a program to do it for me. Bonus points if the program has to show intermediate steps!
Language is fairly irrelevant at this stage, it's just the basic interest that has to be fostered. I started programming like this in BASIC, but I've studied a wealth of languages since then. If you can, look for a specialized math/science/computer school that he can attend (some school districts call them "magnet" programs).
By the way, I'm a graduate of the University of Central Florida's Computer Science program and now "work" professionally as a Software Engineer.
Is that the reason he's interested in programming is because your a programmer. I'm sure he finds the topic interesting, not saying that. But if you were an auto-mechanic, an artist, an author, it's likely he'd find that interesting as well.
The best way to keep him interested and to foster improvement is to stay involved. Pull a good book of your shelf, tell him why you enjoyed it when you were learning, what you found useful about it. Encourage him to sit in the same room while you hack and not to hesitate to ask any questions he may have about the material, take the time to answer those questions. As he improves, work on projects with him and as soon as he's able to contribute to what your doing....work with him.
Share your enthusiasm, talk about the challenges you had during the day with him and the solutions you found. He may not understand it all at first, but he'll listen, absorb, and gradually start picking it up. And if he loses interest, still talk with him, encourage him to seek his own interests, and emphasize that the most important thing is not *what* he seeks, but that he finds something that inspires the same passion in him that you've found in programming.
I sat my daughters (10 & 8) down with me and said, "We're going to make a copy of this calculator on the computer."
They had a lot of fun drawing the buttons, coloring them and double-clicking them to make them put their number on the screen. When it got to the tedium of acutally handling the stack and making the operations work, they were a little less interested. But when they saw it working, they had a really good understanding of what it is that I do.
Will they be any good at programming or even want to do it? I don't know, and frankly, I don't care. I just want them to find a career doing something that they love, finding a good husband and having a nice family (I'm selfish, I want grandchildren, sue me).
Peter predicted that you would "deliberately forget" creation 2000 years ago...
Attempting to show him how to program, just for the sake of learning to program won't work. He'll get bored.
What he needs is something that he can 'DO' that requires him to program, then he will be motivated to learn the programming end of it.
My suggestions include:
* Game programming - You can use something like Garage Games' game builder suite. It's relatively inexpensive and it works on Linux if thats the way you want him to go, or you can use their XNA version and you son can make his own games for an XBOX 360.
* LEGOs - Get him a LEGO NXT set and help fund experiments into building robots. The NXT has it's own visual language, but there's also C, Java, C#, python, LUA and other alternative development environments for it.
* For web programming, look at his other hobbies and see if there's some kind of website that he could create to support or promote that hobby that he could use a LAMP system to develop
Carnegie Mellon has an interesting free project called Alice ( http://www.alice.org/ ) that is described as a "scripting and prototyping environment program for 3D object behavior." It is cross-platform and seems to be very easy to learn.
Getting slightly more adventurous, I'd suggest PHP, HTML, and CSS. They're fun, relatively straightforward, and more or less forgiving, while still being pretty powerful.
After that, the multitude of desktop programming languages (Java, C, etc.) might be a logical next step.
Being a C programmer, I'd naturally advise against Ruby, Python, etc., but in all seriousness, since your son is a beginning programmer, the nuances and reasons for the existence of those languages will be lost on him. Sure, they may be easy to learn and use, but if you want him to grow up with a natural love of *NIX, the "C and Perl" route is likely the best eventual course.
As far as textual material on the topics, Google is by far the best resource. I've taught myself much of what I know, and I've found that, while O'Reilly books make great references and SAMS books make great tutorials, nothing beats a good search engine and the knowledge (and sometimes outright stupidity) of the internet community.
Before you can get creative and derive actual pleasure from programming, you first need to be able to do more day-to-day stuff. "Hello world" is great to teach someone what the basic structure of things is like, but that sort of direction gets completely uninteresting within a couple of hours if you're not already academically inclined towards the subject at hand.
My suggestion is to teach him to Get Things Done. Like you said, people take computers to mean "point and click" today, so you first have to get rid of the mentality that what is superficially easy is, in fact, the easiest way to do things.
So start with the shell, show him how freaking powerful shell scripts are. Start with the basics, like "mv *.mp3 /to/some/place" rather than having to sort the files by type, select the mp3 files by hand, drag somewhere else. That shows him some basic pattern matching. Want to find out which of a dozen files contains a specific phrase? Show him the following snipet:
for $file in *; do echo === $file ===; grep file "phrase goes here";done; (check for errors, haven't used this stuff in a while and don't have a proper shell handy). Hooray for loops!
Once you have that sort of thing going, give him a "real" programming language. I'd say a scripting language is best. That'll steer him towards good algorithms over stupid "one less instruction" optimizations. Later on, if/when he starts showing some interest in the behind-the-scenes stuff, give him C.
At the point in time when you start showing him a "real" language, give him real problems. Does he like Monopoly? Everybody loves park avenue, or whatever the street immediately before "go" is called, because it's so freaking huge and expensive and stuff. But is it really *that* good? Show him how to use a random generator to simulate like ten thousand games with 500 rounds each, and aggregate which squares are the likeliest to land on. (IIRC, the best set is the orange, best odds*price value). Next step up, add some more complicated logics to the process. I heard that tennis essentially works as a high-precision instrument, where small differences in average odds to win a single point translates into very high odds of winning a match. So you can adapt your monopoly simulator for a tennis sim and check if that's true. That'll also teach him the value of code reuse, in particular the importance of writing easy to manage code.
At this point, just plop some documentation on top of him and let him hack away! Show interest, let him know your opinion on how it's looking, share your expertise if he asks for it.
(Depending on how visually-oriented he is, one thing that might also work is having him learn POV-Ray. Depending on how much *you* are into that sort of thing as well, and provided you haven't played with POV yourself, learning it together would probably be great fun)
It seems to me that the best way for you to help him would be helping him learn how to learn in the programming space. When he hits a problem, help him learn how to search for more information rather than giving him the answer. It might also be worthwhile for you to set up the development environment for whatever it is he wants to build. That way he can jump right in to the code.
His curiosity is the most important thing. He's your son and likely to learn similarly to the way you have, but it seems like you are both trying to make him you and encourage him peruse his own interests at the same time. Be there for him to answer his questions, loan him books, and set up development environments if he needs it. It's just as likely that he'll want to learn about what you are interested in as it is that he will end up learning about stuff you know very little about, so don't feel bad when suddenly he knows more about something than you do. As far as encouraging him, just ask him how he might solve a certain problem. Brain storm with him, even if it's not that difficult of a problem for you. Then occasionally sit down and write a test program or a helper program with him based on the brain storming. I'd avoid Big O problems directly for a while though. Let him get comfortable first. Also, C for Dummies was great to me, but it's slightly Dos/Windows biased, but I've moved on from that now.
If he can make it to the end of the adolescent years, with all limbs and senses, then he may be able to achieve something.
...declines obvious comments as to Stephen Hawking's contributions to science...
I find it interesting that many of the complaints listed here against PHP are not so much against PHP as they are against the various extensions people have written to PHP. I will admit that I much prefer PHP4 to PHP5, and the additions that PHP6 will include make me want to vomit.
Many of the features in the first list are descended more or less directly from Perl. Others of the features are complaints against PEAR, which I don't consider to be a part of PHP. One can use PHP without using PEAR and I do so all the time. I also refuse to use Smarty, as it is a horrific mess of PHP, HTML, and bloat.
If this thread can even touch on how to encourage a young teen to do anything, I'll be impressed and grateful.
Decide what it is you want him to do, then put a gun to the little bastard's head and make him.
The higher the technology, the sharper that two-edged sword.
I'm a 20 year old IT student, I'm also an intern and have a job offer already. I agree with many of the people who suggested Python, that is how I got my feet wet in programing, it is pretty easy to pick up and you can find a lot of small programs with walk-throughs online. Mainly the best way to learn is to find programs with some basic instructions and to learn by doing. As for the people who suggested C++, I wouldn't recommend starting here, I took C++ classes, I like it I see the functionality of it, but it isn't one of my favorite languages to program. If you want to get someone hooked on programing give him a Java book. Is about just as easy to learn as C++ and I think it is more fun to write. The various Java games you can write get you hooked. If you want him to get hooked just find him some fun program examples and give him the tools and help him if he asks.
Just because you are wrong and I called you out on it doesn't mean I am a Troll.
Hi,
So, I was a studying a science in college up until a month ago when I graduated. Mid-way through college, actual computer science started to interest me, as opposed to dinky Matlab simulations I would write for homework. So, I know what can help your son out.
There is a great, free, online book that I always go back to. It's called "How to Think Like a Computer Scientist." It covers all the basics and gives you a solid theoretical as well as practical framework to learn programming. I would reccommend the Python version to you, as that is the one I learned from.
Also, I taught a class to my fellow students at college extracurricularly as well as TA'd the intro computer science course (though I had not taken it :) ), so if you have questions, I would be happy to answer them. Just message me.
I had open access to an apple ]{ at school about 2 hours a week. The others did not know the computer existed (kind of).
So I learned basic from the documentation. It was rewarding to learn to master it with no outside help.
I programmed games (pacman, tennis, snake) all with less than 200 lines of basic code.
I programmed some math programs to plot functions
And then I programmed my own drawing code to generate bitmap images.
All this was great for my self esteem.
Now we are in the year 2008, so here is what I would suggest:
Coach him just a little bit, point him to the right tools, then let him learn by himself. Just congratulate him on the progress he makes.
One thing of course is to point him to something modern enough. I would suggest java inside Eclipse (part of linux distributions.
He can start by using just one object and not use anything object oriented, then he ca nlearn object oriented programming, graphics, network, etc ... ...
There are lots of java one page samples
Have fun,
Georges
This is for a teenager. Starlogo TNG looks like it's for eight-year-olds. Even if it's appropriate for an older audience, it doesn't look like it at first glance, so it's not appropriate.
I'd start off with something that gives a GUI designer. Get a GUI, then make it react in simple ways. It's pretty easy to get something that looks good using Gtk#, though maybe a dynamic language will be easier to work with at first.
... that you get the girls with leet assembly skills!
Good question, I have two sons, currently 12 and 17, and am going through the same process. Here are some of my experiences.
;)
We went through Lego Mindstorms a couple of years back and it was very helpful. Not "really" programming, I guess, but great fun and introduces some fairly sophisticated parallel event handling concepts without even trying. I mean, it's a robot, a bunch of stuff HAS to work in parallel, right? The kids, as usual, think it's obvious and go about their business of having fun:
Adult: "Wow! Nice LabView setup you've got there!"
Kid: "Can I have my toy back, please?"
So, first the 12yr-old. And the shameful parenting revelation part. At one point I paid him $10/chapter to work through "Java for Dummies", which he did with much delight. The main difficulty was keeping him from taking on the immediate cloning of WoW before actually understanding variables. He also did some of the C and C++ for Dummies books at other times, so yeah, he knows what a pointer is. So much for youthful innocence.
Not much happened after that, till he discovered the Warcraft level builder or whatever they call it. Now he's lecturing me on IF statements at the dinner table. Time to let nature take its course, I guess.
The 17yr-old has done everything from ARM assembler to PHP and Flash at this point. He has done interning at a couple of startups and absolutely gets the programming thing, though certainly with that occasional, and very annoying "I know everything even though I'm a clueless n00b" aura that teens seem to own.
This summer, he had a very manual, outdoors, sweat-all-day-in-the-heat kind of job. That gig ran out so now he is trying to land a job at an ice cream shop where you have to sing and dance if a customer gives you a nice tip. I think it's a great idea. Kind of a good balance too, if you think about it!
I don't know if either of my boys will ever use their programing skills in a professional capacity. I DO know that they consider programming to be one of many valuable life skills, and will never be taken aback when confronted with any C-like programming language.
However, no APL, Forth, or beer until they're 21! At least in my state. I hear tell the Forth age is lower in California
My Dad was into programming and I was into games. He tried a few times to get me into programming, but I just wasn't focused enough yet. He also introduced me to many scientific studies and side projects ranging from electrostatics, water purifying, model rocketry and solar power. This was back in the late 80s.
Today I'm into all of that stuff and am a senior developer and software architect as a profession, but I'm sure I seemed less than enthusiastic at the time. He was fairly patient with me and is surprised how much I still remember.
So, remember, you are doing the right thing, but you may not get immediate results.
Sierra Tango Foxtrot Uniform
The kid, from what I read is already showing interest, yet most posts I've seen here are about how to get the kid interested. What the submitter was asking is how to teach and possibly WHAT to teach.
I am a substitute teacher, and am slowly working towards my teacher license. The most important thing I can tell you, for teaching one-on-one is to find out how the kid learns.
Everybody learns best in different ways. If your son learns best by reading books and going with it, you are lucky, your job consists of buying the right books and letting him go at it. If he learns best by watching, you need to do some simple programming yourself, with EXTRA comments, then letting him tweak the source code. If he learns by doing, walk him through the steps of creating a program to do a simple but useful (I use the word loosely) task. (Converting metric to imperial or putting words into pig-latin make good starting projects.)
Find out how visual vrs conceptual he is. If he enjoys the visual start with a visual IDE. Sadly, I do not know of anything in *nix that is better for this than Windows-only visual studio. If he is more of a mix, go for console-based graphics programming, which requires more conceptual awareness, but still hits the visual areas as well. If he is a pure conceptual person, go for a pure functional console based start.
What language you use is fundamentally unimportant. Some may be slightly better than others, but he will use what he learns, then decide he dislikes that language and move on to something else. We all do.
Now, so far as finding out how he learns best, find out what subjects in school he likes most, and which ones he does best in.
If he loves math, and does well in it, you have a good case for going with abstract instruction. Explain the concepts of functional decompisition, object oriented programming, flow-charts etc.
If he is an English/Language person, start with the syntax of the language, or better yet, pseudocode. Make projects that manipulate strings, and focus on the language, instead of programming in general.
If he is an art person, start with graphical manipulation. Something simple, but fun. Fractals are good here.
If he is an layout/design/yearbook person, I cannot recomend anything better than Visual Studio as it will allow him to START with the layout, then do the work after-wards.
If he is a science person, dig deeper, does he prefer just knowing scientific "facts" or does he like the quest for empirical experimentation that SHOULD be the underpinning of science. If the former, focus on code snippets that perform specific tasks. I would highly recomend an OO language. If he prefers the experimental aspects, he will actualy probably be more intrested in a lower level language. You might even start with electronics theory, then expand to assembly.
If he is a music student, I have no clue, but you might want to consider things that deal with timing loops or counters.
If he is a Gym-jock.. erm uh, hmm.
Whatever the case, WATCH HIM LEARN. Find out where he is learning fast, and where he is learning slow. Make sure you keep adding more where he is learning fast, but don't cut the slow parts. Just don't add more to the areas he is doing slow in until he masters the previous step. You may well end up with a kid who knows esoteric compiler options before he understands bubble-sort, but he will be constantly learning SOMETHING. He will keep the interest he is already showing. Keep him challenged, without making it hard. That is the perfect level for teaching.
Do not focus on the language. Do not focus on the program. Do not focus on the computer. Focus on your son. Everything else doesn't matter.
Little Brother, watching the watchers
...to write games... after all, what else is there to do with computers? Game programming is how the commodore 64 generation got into computers, and it is still a powerful draw for game addicted kids.
Try this book to start:
http://www.amazon.com/Game-Makers-Apprentice-Development-Technology/dp/1590596153
There isn't any "programming" until the later chapters, but my 12 year old nephew loves the book! It gently guides them into the whole aspect of programming, which is great for those who are experienced using computers, but no.t much else (i.e. most of young America). After finishing this book, there are other books that can guide him into more advanced game programming.
I would start with web programming. Most agree that html is not a programming language but it contains many of the same elements.
There are lots of 'languages' to learn in the web world and they all work together. Hit HTML first, your child will be producing results that can be seen within 5 minutes. Next would come CSS, then maybe javascript. After that you could throw in PHP or Perl.
Web browsers represent a great graphical interface for cross platform compatibility. Every language I just mentioned is cross-platform compatible. More importantly, they are all technologies that teach programming principles and fundementals and yet provide quick rewards that keep you coming back. Of course during this time have him use something like Ubuntu.
Only then would I bring him back to system level programming. By then he will have a love of building and designing things and will appreciate the classic architecture used by those who built *nix. Time to learn C and C++. After mastering the basics of those languages I would recommend something like Linux From Scratch to give a solid system level understanding. Let him code on *nix type stuff for awhile before throwing him to the wolves with assembly.
That, or you could give him the idiots guide to vb.net.
There must be a reason why your son wants to start learning about *Nix. Find out what that is, and explore those options. Believe or not my impetus for computers started with scripting. Before then I just liked to play games. I had a computer job doing operations crap, nothing big. I would do some cool things with the work-flow and I used Access to manipulate the data in the Oracle DB but nothing really stood out for me until I started to learn how to script. Once I started to write scripts, I learned how to build, monitor and maintain things at a level I had never imagined. Call it "geek power", I could control a limited universe and I really liked it! That pretty much drove my career into Unix Administration, because you couldn't script on an NT box. I loved playing on computers, creating little programs that helped me do my job. There is a great feeling of accomplishment when someone asks you to do something, expects it to take all day, and you finish it in about 5 minutes. This still drives me in wanting to learn. Right now it's Ruby so I can do Rails. As time goes on, other things will pop up that will drive your son's career in directions you never thought.... in directions he can not even imagine. If I did what my father wanted me to do, I would be an unemployed Novel Netware Administrator.
Along those lines I would point out that Smalltalk was designed to be easy for children as well, so you might want to take a look at http://www.squeak.org/ It's never too early to pick up good programming habits.
For all the complaints about various PHP extensions, there are also many complaints about the PHP language design and implementation itself.
Take, for example, magic_quotes_gpc. That is the stupidest flaw ever, which should have never been in any rationally designed language in the first place, and it makes programming in PHP a LOT more obnoxious and error prone.
Don't blame Perl for PHP's mistakes. It was idiotic of the PHP designers to foolishly ape the mistakes of Perl (and later the mistakes of Java, when PHP5 tried to express PHP's dynamic interpreted language's OOP system in the SYNTAX of a Java's static complied language OOP system, resulting in a horrible impedance mismatch, and many subtle inconsistencies and gotchas). That is called "Cargo Cult Programming Language Design".
The REASON that most of the code in PEAR is crap, is because PHP encourages and supports crappy programming, which is precisely WHY it should not be taught as a first programming language.
-Don
Take a look and feel free: http://www.PieMenu.com
See David Brin's article "Why Johnny Can't Code" at http://www.salon.com/tech/feature/2006/09/14/basic/index.html Then see BASIC-256, nee KidBasic. Available from http://thedance.net/kidbasic. I taught 8 9-year-old-boys elementary programming in 3 one-hour sessions, and they ate it up.
Way, way back in the day--my dad came home with a TRS-80 Model 1 and a book filled with the source code to a bunch of simple games; Connect Four, Tick Tack Toe, Moon Lander, and I think big game in the book was Lemonade Stand.
Anyhow I sat down and start punching in the games, line by line. When I would finish there would be a myriad of typos to fix.
Little did I know I was coding and debugging. About the fourth program I typed, things started to dawn on me. IF THEN, FOR NEXT, GOTO, etc. all started to make sense.
It wasn't long before I was the one heading to Radio Shack looking for new books. Figured out PEEKs and POKEs next, and before you know it I had my own original game.
At fifteen I was working on mini's programming RPG3. By sixteen the IBM PC came out I was one of the youngest hires at IBM's Yorktown Research Center.
Of course the flip side is by 26/27 I was burnt out on coding... Hey but at least my career path was secure!
There are many practical, clean, simple and easy to learn programming languages, much better than PHP, that are great to learn as a first programming language.
Learning Lua will enable you to write your own World of Warcraft mods, and increase your chances of writing your own game or getting a job in the game industry, as well as enabling you to script all kinds of applications like Adobe Lightroom and WireShark. Lua is an extremely well designed and implemented, efficient and powerful programming language, which will open your mind in the same way Lisp does, instead of corrupting it like PHP and BASIC.
And of course Python is also extremely useful to learn as a first language, for all the same reasons as Lua, and also the fact that it has a huge library of mature, solid, powerful modules (unlike PHP's PEAR, a collection of buggy, poorly though out modules, hacked together by ametuers).
-Don
Take a look and feel free: http://www.PieMenu.com
Because you want to give the guy some bragging rights (to keep him motivated) and with as little effort as possible (so he doesn't go bored before seeing any results.)
Sure, if you're already a decent programmer and have at least some minimal graphics skills, by all means, go ahead and start a 6 months project. But if you want to motivate a 12 year old, 6 months before seeing a result is an eternity. It's 1/20 of his entire life so far, or even more if you discount the first years from which he has no memories. It's akin to starting a 2 year project at 40. It may work if it's already on the domain of your hobby, but not as a teaser to see if you like an entirely new domain.
(I don't know if perception really scales linearly that way, but some studies _do_ show that children perceive time as flowing a lot slower than adults perceive the same interval.)
If you want to get someone's attention, fast, you'll want to start with something like, "see, you click here and here, and type a bit here, and... taadaa... our automated patrolls in X2 The Threat will buy and use missiles. And, hmm, you know, maybe we could make them call the nearest destroyer to jump in the sector if they run into pirates." Stuff which you can finish in half an hour and upload on some mods site, and actually see a couple of guys saying, "thanks, that's just what I needed."
Heck, probably the smallest mod I've seen that apparently made a bunch of people happy, was IIRC a one line change in the Creatures 3 script. It's a special case, but it shows how little effort may be needed in some cases and still end up with something useful and a little bragging rights. That's the kind of thing you'll want, to get someone hooked.
IMHO.
A polar bear is a cartesian bear after a coordinate transform.
No, PHP is *NOT* a horrible language. It lacks some important object-oriented features (at least PHP 4) and allows horrible programming - which is very different.
Want a horrible language? Try Foxpro. It's limited, proprietary, ambiguous regarding variables and database fields... ugh.
But as a learning programming, I wouldn't recommend PHP either. There aren't many things that you can do in PHP other than web portals.
i always thought the best way to encourage anyone was to discourage them.... Sex is fun and great but YOU are not allowed to do this. NO No No...
That's how it all got started for me anyway. I built my empire because someone told me I wasn't allowed to.
The BSD's with their anti-GNU bias are missing a whole series of simple tools (i.e stunnel ).
If someone writes up BSD licensed software that is well written I am sure that their software
would be adopted and shipped. Nothing give more joy of programming that have others using
your work. Programming is a complex process the trick is to find simple but useful tasks
to start with.
http://www.alice.org/ Check this website for all the tools to get them started programming.
Me - I think I could only handle one relationship - otherwise I don't feel I would do justice to the other person. I don't want to just "keep her happy and feeling loved" I want her to be the most important person in my life. I worked hard on making sure she was the best for me, I'll be damned if I show her that she isn't.
Yeah, I know, totally OT, just struck a chord with me.
"Little is much when little you need."
I remember when I was had a Commodore 64. My dad used to buy the Compute! and RUN magazines - which included some games source code for you to type (included was the Automatic Proofreader (TM) to make sure you typed the lines correctly). That's how I learned programming.
WHy don't you get your kid a C++ / IDE combo (like Dev-C++, Codeblocks, or if you're on linux, kdevelop. Personally I prefer Codeblocks) and install the SDL library. Then buy him a game programming book (preferredly with included CD).
Start with simple things before the games: Loops, if/whiles, and then move to the graphics parts and reading joystick input. Then let him get curious with the book and game examples provided.
If that's too complicated, why not getting a copy of Adobe Flash and let your kid learn to write flash games. Sprite programming is a piece of cake in Flash.
If you learn programming:
+ You would be able to dominate the world (see wargame)
+ You will have a lot Money. A lot of money. Do you know Bill Gates?
Cons:
+ A lot of Shame on you.
Do you know windooze vista?
-- Giovanni Daitan Giorgi http://gioorgi.com http://www.siforge.org
I would go with python was well it is really easy to mess around with and has pretty good documentation online.
One cool thing that encourages even me to learn new aspects of a language is combine it with other things you enjoy. I did that with learning about xml and python so I could parse the World of Warcraft armory. http://jerdking.blogspot.com/
If he enjoys working with his hands and likes robotics. I would suggest the http://www.arduino.cc/ It is a little standardized open source hardware platform that has a neat IDE and uses a modified C++ language. I think it is cool to show kids that programming can cause real world actions not just something on your PC screen(not that there is anything wrong with that)
"If you like Battlestar Galactica, you're probably a huge nerd." -Stephen Colbert
I suggest you turn him on to the NeHe OpenGL tutorials. He'll get a series of tutorials on how to create basic opengl graphics, animation and the supporting infrastructure logic for making games. That is a great doorway to everything computer science and an endless ladder of geekdom. (Worked for me... [game making that is, I started long before NeHe was around.])
We tried that one too, and LOGO as well. I liked Squeak better actually, but my daughter preferred Scratch. Incidentally, Scratch runs well under WINE.
-1 Uncomfortable Truth
As a PHP programmer, I completely agree. I find it very flexible to do what I need, but I also know what to avoid and what I have to undo (like magic_quotes_gpc). But at the end of the day, if you make it easy for newbies to fire off SQL statements, it's inevitable that plenty of them don't know a damn thing about sanitizing user input. Various languages have done various things to attempt to deal with that, obviously with magic quotes being on the wrong end of the "monumental fuckups" scale.
It's also the reason I simply don't trust anyone else's code. There are so many newbies doing stupid things that I've no idea where it ended up or whether it could be present in code snippets other people have produced. More work for me, but I'd rather write my own forum knowing that there are no SQL injection holes, login security flaws, and all that junk than use someone else's.
I use it all the time and love it for what it is. But there's a reason I've always got a half-dozen tabs open on php.net when developing. Is it implode($glue, $pieces) or implode($pieces, $glue)? Oh, wait, either works... but "For consistency with explode(), however, it may be less confusing to use the documented order of arguments". Yes, I agree - that's absolutely retarded. Just like how half the functions are called as function_name() and the other half are functionname(), and on odd occasion, '2' is used instead of 'to' (nl2br, etc).
Do I wish that PHP6 would simply kill all existing naming and syntax inconsistencies (as well as other stupidities like magic quotes) and stick with one thing? Yes. Will they? For a couple things, but by and large, no.
However, you really can't beat its documentation and the number of guiding examples. Combine that with the number of prebuilt apps out there make it very easy to pick up. But of course, that also makes it very easy to pick up on bad practices - so I, too, would never recommend it as a first language.
How are sites slashdotted when nobody reads TFAs?
Before starting you project please note the below system requirements:
The Child must have one of the below libraries installed...
1. Wants to make video games
2. Wants to understand the magic box
3. Likes Problem Solving
NOTE: option 1 is precursive only. Options 2 or 3 must develop if Project is to succeed.
Several tutorials exist (see above) describing methods of working with option 1 and will not be discussed here.
To satisfy option 2: C is the best option. mmmm... pointers....
To satisfy option 3: import to project Ruby Quiz a library providing several logic challenges to challenge the mind (Good for you too).
To satisfy option 2 & 3 simultaneously: Work in C++ and implement data sets and algorithms. (I personally LOVED the challenge of AVL Trees and the Quick Sort.
and implement
I agree Ruby or Python are more fun to program in. but only after using Java/C/C++ so that they can appreciate how easy every thing becomes
I prefer NetLogo myself, but that's because I like to whip up little simple simulations of various systems, and netlogo excels at exactly that.
I fail to see how procreation without mean will make bugs squish themselves.
I started programming later than most, and it was because my music career was not going anywhere, and I was tired of being broke. The reason I chose programming is very much the same reason I chose music: because not a lot of people could do it.
That's right, it was an ego thing. And I think that a lot of people get into programming, or other sciences, because they are geeks and want to be able to do something "special". Vain, I know, but everyone wants their own skill that they are good at and to be able to impress people.
There is a downside to this, though. I suspect that many of the people who do it for ego purposes are the same to get into unethical hacking. "Because they can". The rush is addictive, and can lead to trouble. I was fortunate in that respect because I was older and wiser than many when they first start programming.
But with proper guidance, and if you've taught your kid the difference between right and wrong, stroking the ego goes a long way. And if he or she is an "outcast" it can really give them the boost they need in self esteem.
I learned best by buying books and looking online. The other thing that really helps me is to try developing an actual app (or game). I HATE when you're in classes and they have you make these programs that really do nothing. Give him a practical idea to work towards and see if he can achieve it. Say for example you want him to write a [web] app that catalogs your music collection (just an example). I have played with many different languages so far and am still trying to find my "favorite." I'm a junior in college and know quite a bit I think for my age.
What a title...
I started to program because I thought designing websites was sooo cool as a preteen and used to work on my blog layout so it would be better than my friend's :/ So I started doing the template in HTML and progressed to javascript and then PHP and went on from there.
Regardless, he needs to find something he really wants to do, whether it's to develop a mod for a game he likes to play or build a game, a website, etc. You can't make someone want to do something :) Like maybe you can help him learn how to make a character that looks like him in his favorite game or some kind of online quiz he can send to his friends or something fun without making him wade through all the boring stuff first. Teaching the basics first is nice but not interesting, so teach him what he needs to know and if he likes it he can always pick it up through other things.
While some people suggest you throw him in one language or another, I don't think that there's a benefit to it. A language is essentially just a syntax, a tool for him to communicate instructions to a computer. What you want him to do is, and I shamelessly quote my CS prof. Jeff Ely on this one, "You need to learn problem solving before anything else."
Jeff taught us that by using a very simplified C language, teaching only if statements and while loops, and throwing simple problems at us, that could be solved using those. Later he introduces arrays, but in CS1, that's all we ever used. His toolkit used only doubles, strings and character variables. And he got us going with that. Another statement I like from him is "The power is in the mind."
Do NOT, I repeat, do *NOT* start with syntax. It's boring and completely useless as far as educational purpose goes. It's not what computer science is about. Give him a problem like "write a program that, from a number of pennies, can tell me how many coins of each type I have", and let him figure out the language he wants. The fact that he's researching it will teach him TONS more than anything you could throw on his desk, because, and I speak from being in his shoes not so long ago, he's a teenager. He won't want to do everything you say, so dropping a Python, or C or other language book on his desk is only going to frustrate him. Give him a problem, point him to the appropriate section in the library, and step back until he comes at you with questions.
Just my $0.02 of information on the matter, as a fresh CS grad.
---- I am certain of only one thing : I know nothing else.
I thought Antoine de Saint-Exupery's books were a little wierd, but the reason my son learned to read was not to read for its own sake, but to get to the fantastic riches that lay within books.
If you can forget about the mechanics of programming and find some project that will engage your son and, co-incidentally, need programming to make it come about. I think you will have an eager programmer.
I suggest something cool and physical, like a rocket altimeter, or an electic field sensitive music synthesizer, or a camera trigger to photograph a glass jar smashing or a light display, or something that balances weirdly with one of those solid state gyroscopes. Something the Mythbusters would be proud to do and your son will enjoy.
And then find a suitable embedded system to implement them in. Perhaps from silabs.com. They have some good cheap systems that will easily sequence lights or measure bubbling potion fluid levels and are inexpensive enough to blow up from time to time ($20 or so).
Nullius in verba
is perfect - immediate gratification as well as using APIs.
"4) On the topic of programmer speak show him Slashdot or Digg or something like that. Programmers have started there own culture in these places that he might be interested in seeing."
I would say that percentage wise there are very few programmers on here. Way too many wanabes that think they know everything.
You are better off on programing mailing lists or language forums like the Java forum.
Too bad there isn't a mentors forum anywhere. I would love a forum where nobody ever said RTFM.
See my blog http://ilovecookes.blogspot.com/ for light hearted technical information.
I think the best way is by using a robotics kit such as LEGO Mindstorms. If the kid is son of a geek then he probably already know LEGO blocks. Now, IMHO, new coders need to see physical results of their labor to be hooked, if they code a little line following robot and the thing comes alive, BOOM, they will be hooked. They will move quickly from LABView thingy to NQC and soon they will be very good coders. When we were young and all we had was a text interface with the computer, it was way faster to learn and code useful stuff. These days of ubiquitous network, fancy 3D graphics and bad operating systems, it's no wonder kids don't code anymore, look at the learning curve!!!! now, if you make coding a small thing again, with a pleasant learning curve and results they can show to people in awe such as little robots, you have a recipe for success. my 2 cents
-- Por mais que eu ande no vale das trevas e da morte, meu PowerMac G4 Não Travará!!!
This is roughly how I went through learning to program starting at around the age of 14...
Start with HTML... it's very forgiving and is pretty straight forward. It's not exactly a "programming" language since it lacks logic among other things, but it's a good introduction and, lets face it, it's probably never going away.
Then some basic C programming for shell would be good... get him to build a basic text-based game... or some ASCII stuff. Play around with ANSI colors, get some exposure to how the language interacts with the OS and is presented to the user... You could also get him to make a C program that manipulates an HTML file in a few basic ways, like lower-casing, or applying a font style to loose text... etc...
Then quickly move onto Java or PHP before you get to any of the more complicated things like references and pointers... once the basics are all there with C's flow control and the basics of variables and functions. Perl is also not a bad place to play around briefly for the regular expressions and exposure to more exotic syntax.
Java and PHP are EXCELLENT proving grounds to learn just about all of the fundamentals of coding. PHP is a lot more forgiving than Java, but Java is the closest thing to C if he wishes to go back and take in all of the more complex practices in C. The thing about PHP is he'll need to learn pretty accurately how a browser and web server interact, and the stateless nature of HTTP.
Then learn SQL. MySQL will do to start with... then move onto PostgreSQL or MicrosoftSQL.
Then I'd say dive into C# .NET or build some GUI apps with GTK so he can experience an event-driven model and get introduced to GUI coding.
I suggest taking a "tour" of the programming world like this because then you know what you're up against and so much knowledge is transferable from one model or language to another. Jumping around lets you avoid biting off more than you can chew. At least, that worked for me.
If he gets this far, he should expect his first 4 years of college CSE major coursework to be a minimal distraction from his beer pong competitions.
Move all sig!
Teenager, eh? Tell him chicks dig computer programmers.
Actually, if he buys that, he's probably destined for janitorial service anyway.
"In a 32-bit world, you're a 2-bit user. You've got your own newsgroup, alt.total.loser." -Weird Al
Everyone else has already pointed out my personal favorites -- Shoes, TryRuby, Squeak, Alice, and so on -- so I'm going to give you a piece of general advice:
He needs his own computer. Maybe more than one, but at least one, entirely to himself. And you don't get root on it unless he needs help.
He needs the freedom to be able to make his own mistakes, without it affecting anyone else.
I would even go one step further -- set up some virtual machines. Yes, he still needs to own the real hardware -- if nothing else, there's a psychological component. But virtual machines means he can deliberately sabotage a system without consequences -- what impact does "sudo rm -rf /" really have on a running environment? Let's find out!
Oh, and be prepared for him to make entirely different choices than you. Hopefully, he'll at least go beyond C -- point is, you'll know you've done your job when he disagrees with you on something -- and he's right.
Don't thank God, thank a doctor!
Precious bodily fluids if I recall correctly!
Women uh... women sense my power and they seek the life essence. I, uh... I do not avoid women,
But I... I do deny them my essence.
I learned C in a 400-level computer graphics class in college. I knew that I wanted to learn C and that I wanted to learn more about graphics.
Have the kid pursue a goal that he's interested in and find a tool to solve the problem/reach the goal. It could be in Excel and VB (for learning purposes! Geesh). It could be Python scripting for Corel's Paint Shop Pro. There are all kinds of tools for all kinds of tasks. It could also be programming a STAMP or a PIC microcontroller kit from an electronics hobby shop. Or MindStorm. Have the programming be a TOOL for solving a cool problem.
To be quite honest, I am terribly wrong.
There, fixed that for you.
why do people always recommend PHP at just every fscking occasion, admitting that it's "somewhat ok" and "will be better soon"? heck, if there are other languages around that are better than "somewhat ok" and are so right now, why (the hell) should one pick PHP? And why do you consider a language which looks like C a good language to learn programming with? Not that it's particularly bad, but even nowadays babys don't pop out with a preinstalled sense for C-like syntax.
I would suggest starting with web programming, specifically html, css and php. This gives a wide skill set, php is based off C so it makes the skill set easy to transfer, he'll learn some basic server administration and it gives an instant gratification that you don't always get with other programming languages.
For some people, programming is picked up like a passion- for others, it is not. Don't get yourself to thinking that someone is somehow invalid or stupid if they want to live their life as say a business or english major. These are people who have just as much place in the world- do not let an engineering superiority complex tarnish your son's teen years. Not every boy needs to be doomed to the family coal mine.
I personally am an example of someone whose father, older siblings, etc. are all programmers and much of my family is somehow related to IT- but I'm interested in sociology. What this has done for me is given me a very in depth understanding of technology, but a much stronger understanding of the people who use it and why they use it. Is this really invalid? Maybe your son can take advantage of his experience with a father whose so technology-oriented and apply it in his life elsewhere?
If it's a question merely of which technology your child needs to learn, that's different. You're not going to like this- but I'd recommend starting him off in the well documented and supported world of Apple Cocoa or Microsoft .NET, where a little bit of code can become brilliantly powerful in good time. The unix world of development is much more discrete, so it's best to learn on a more contained environment before diving in- however, that doesn't necessarily discount Java or C#/Mono in linux as good starter languages. I am just not familiar.
Don't point your child at a language or a system or a technology. You'll just bore them.
Instead, ask them what they want to accomplish, or what problem they want to solve. Don't even frame this in a technological sense. It's not "Do you want to build a robot that sorts DVDs?", it's "Do you want to have your DVDs automatically organized?"
Then, once they have something they're really interested in accomplishing, let them ask questions, and point them in the right direction to figure out the answers. Don't answer the questions yourself, even if you know the answers. "Oh, you think you need to control a robot, huh? How do other people control robots? Have you looked that up?" Check in on their progress every day and reward their effort, not their accomplishments.
Yes, it will be more painful, but they'll learn far more valuable skills and become much more independant and focused. Then it won't matter if they picked C++ or Python or SNOBOL, they'll have picked the best solution for them to accomplish their goals, and they'll have learned a wide variety of valuable skills, not simply "programming".
I don't *blame* Perl, because I happen to like it as a language.
I also agree with you that PHP5's OOP was a mistake (actually, I believe that OOP itself is a mistake, but that's beside the point), that PEAR is crap because PHP makes is way too easy to program like crap (I enforce strict guidelines on how PHP in my projects is to be written), and that it should not be taught as a first language (I learned PHP after I learned C, so I had some structure and good programming practices drilled into me)
I have several complaints about PHP and especially with the direction the language is taking (which is why I intentionally ignored some of the comments you listed), so much so that I may even consider using Java and JSTL for web programming. (Ow! I still feel pain every time I say that.)
To directly address the Subject of this particular comment thread, PHP will only ruin your mind if you don't already have a solid grasp of what good programming is (and when you do, it might give you enough reason to NOT use PHP).
How to best teach a person to program depends a great deal on the person. I myself learned on a Commodore 64 by copying BASIC verbatum from books starting when I was 4, and moving on to experiment and teach myself more and more as I grew older until I went to university and got a computer science degree.
However I have some experience teaching others as the helpful kid in the class who knew more than the teacher in highschool and as a Teaching Assistant at the university. Not everyone is motivated enough to pick up the Java API or C++ STL Reference and learn the language. Different people find different things satisfying, and you can figure that out fairly quickly through trial and error. I would suggest starting with a console hello world! If they think it's cool than stick with the interpreted console environment, (Python is probably a good choice, I've started people on C with mixed results) and move on to something with variables, flow control, and user input like a number guessing game. If they look at you blankly and ask for graphics maybe a scripting language for a game like RPG Maker or Aurora (Neverwinter Nights) may be a better place to start.
In general I'd say the key is don't push them; be someone they can come to for questions and sit with them on and off to be a guinea pig. If you have any more specific questions, just ask.
There is a big difference between kernel hacking, ray-traced graphics, video game graphics, sound synthesis, AI, web 2.0 interaction, robotics, and creating his own programming language. Find a project that he thinks is interesting, and then help him create it. Start small.
When I started with computers, I didn't have anyone to learn from or even a good library of books. I thought computers were useful, but really didn't care that you could create a database of 10 million entries with one, as no one explained the interesting data structures that could make it faster. Then, someone showed me how to create simple graphics with the Apple ][e. It's been fun ever since.
I have kids around the same age, and got them into the Alice environment for a while. It fell out of favor after a bit, but some of the concepts seemed to help later on when my son got a Lego Mindstorm set. My son is currently digging showing off pics of his lego creations on the lego community kids portal. He keeps bugging me for a "real" digital camera, as he has one of those cheap $15 deals from Wal Mart. I've been toying with getting him a better camera, registering a domain name for him, then teach him the basics of HTML and see what he does with it.
Method of processing duck feet
Reason being, you can teach the person writing it, how files are parsed, which gives some groundwork in basic I/O down the line.
Further, if your teenager is into blogging, etc... You can have them feed off that aspect... This webpage is your blog. It is the ultimate in customization. Unfortunately you need to write it yourself. Add CSS when they get bored of plain HTML layout stuff.
Of course, when he gets sick of editing raw HTML to add posts, you can guide them into PHP/Perl/Ruby/.NET or whatever your fancy is. I'd stick to something more basic, like using PHP, and start off simple, like includes for bringing text files in.
Once they get bored of that, work your way into databases. get them to make an administration page so they can type in things directly into the browser, and have it appear on the page. Basically, it's a place where you can start REALLY SIMPLE, get immediate gratification with the results, and build off projects to infinite degrees.
I've never been one to coddle kids, especially teenagers. Let them have a blog. Just make sure you teach them how to be safe about it. Explain your rules for privacy, and why they're important. Don't just shelter them from all things evil... They will have to learn how to deal when you're not around. Think of giving them this blog space as learning how to cross the street. Likewise, give them something interesting to do, that will challenge them, to push their limits. Not too challenging as you don't want to scare them away. Male it challenging enough to make learning worthwhile for them...
Really, the language they learn isn't that important, if it lets them achieve results. I started sphagetti-coding BASIC on a Tandy CoCo. In High school we used a language called Turing. I made a hangman game and a Connect 4 game in my grade 12 year. Last I heard, people still play that connect 4 game at my high school - almost 10 years later. I spent hours on it, and the more people that tried it out, and enjoyed it, the more I worked on it. That led to College, and learning C/C++... As long as you work up to it, keep challenging them at a reasonable rate, you'll give your teen a good grasp on programming. When your teen comes up to you for help and hands you a pile of unformatted code, tell them that you can't read it, and show them how to format to make it easier to read. Get them working first, however you can, then show them how to do it right.
I'm a 19 year old comp sci major going into my sophomore year in college. I took 3 years of computer courses at my high school that really helped me develop programming skills. I learned C++ first, then Java; I thought Java was easier to program on, but you might want to expose C++ to him first. Here is the syllabus for my C++ high school class: http://teacher.uscsd.k12.pa.us/ollendyke//ProgLang1.html [k12.pa.us] And my Java: http://teacher.uscsd.k12.pa.us/ollendyke//ProgLang2.html [k12.pa.us] Each section explains the topic pretty well, then gives 3-5 medium difficulty programs to write. This taught me up to OOP and got me very well prepared for college. As far as sparking his interest and getting him to want to program, I did it for the career choice. Everyone needs programmers and I want to see the dollar signs. You can also spark his hacker interest by hacking a cell phone, ipod, or xbox if he has one. Install linux on it, mod it, etc. Hope this helped.
And do you think the loose typing and automatic typecasting is a plus or a negative, in terms of first languages to learn?
I don't think that matters at all. I think what matters most in a fist language is immediacy of results and power of expression, which Javascript in a browser has in spades over a "real" language or writing a desktop app. Plus he can put it up on the web to show off to friends.
Given the whole Power thing I'd also start him off with one of the better Javascript UI frameworks so he can have cooler looking stuff quicker. probably any would do.
If he takes to Javascript desktop development could follow.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
I'd suggest web programming. That's what got me into it, I know that it has all been done before, but what is your kid interested into? For me at the time, I liked GTA, so I made a fan site. Made a news system, expanded it so that people could post comments, expanded it so it had a simple user system, user privileges, admin panel etc. It just grew as my knowledge did. While it had been done before, there were other bigger GTA fan sites, there were news systems and downloads systems I could have used, I found it more fun to make my own. Why are you asking us what your kid is interested in? Ask him :p
You know what I currently consider to be the best starting development area for a kid? The iPhone (or Touch). Seriously, nothing else will get you such impressive looking stuff you can show off so quickly, with things that kids like such as easy access to animation and a good GUI builder. The language is easy to learn to start, and the frameworks for the phone/Touch are paired down a bit from the Mac frmaeworks and really well thought out but not so daunting is scope. It's even a great way to ease into 3D development with a lightweight OpenGL.
Being a developer is only $99 and that's a cheap price to pay to get someone hooked on programming.
My second choice would be Javascript along with some kind of GUI framework, for similar reasons - really easy to get into, and write powerful cool looking stuff that he/she could show off to friends. The iPhone/Touch would be more portable though.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Don't, really, just don't.
You yourself should know that coding is an aptitude - if your kid wants to learn how to code then they will despite you, if they don't then no amount 'encouragement' will produce anything other than resentment.
Make sure your motive isn't 'I want to encourage my kid to code so they can appreciate what a clever and cool guy I am'. Your keenness to show off your kernal hacking skillz suggest there might be just a whisper of this in there. Be honest with yourself and your motives first.
Right, that said there's no reason why if your kid does have aptitude then you shouldn't facilitate things. Myself I have two kids of mid to late teen years. Both are completely computer user literate and virtually live on the net with IM, Social Networking, Gaming etc. Both have unrestricted access to their own PCs (in the home office tho - don't believe in PCs in kids bedrooms). For both of them I've dangled the interesting stuff where they can see it so they can pick it if they want too - interesting stuff is access to coding software, graphics software, game moding software, their own domain with complete access, pointers to interesting sites - slashdot and others, pointers to articles good articles and videos about tech, gadgets and coding etc. Nothing heavyhanded, I just dangle it for the picking.
The result is that my son just isn't interested. Sure he knows it's there but he's heading off to uni to study Earth Sciences and tech to him is a tool. My daughter otoh has the apptitude - she likes seeing how things work, likes taking stuff apart and tweaking it, and when I dangle stuff picks it up and runs with the bits she likes. It's unclear at the moment where her actual interests really lie - she does graphics to skin her social networking sites, writes bits of code to tweak toys and widgets, and likes modelling 3D objects a lot, but I figure what she does is up to her. If she wants to write more serious code then I'll help her and make the best tools for what she wants to do available, or more serious graphics then I'll make sure she has the software and knows where to go, but she's in the driving seat.
Oh and interesting bonus is my daughter has decided being a Geekgirl is cool and a great way to be an individual at school. Oestregen earrings for christmas from Fractalspin were an absolute hit!
Yeah, let him tinker with a high-level language. I would think a younger person would get bored with something low-level because they couldn't do anything "useful" with it. I know it became interesting for me when I reached the point where I realized I could write something that I found useful. That was VB6 then, I'd guess some sort of web technology would be the better counterpart these days.
If I was going to encourage someone to start programming today I'd probably show them Processing:
http://processing.org/
From their site: "Processing is an open source programming language and environment for people who want to program images, animation, and interactions. It is used by students, artists, designers, researchers, and hobbyists for learning, prototyping, and production. It is created to teach fundamentals of computer programming within a visual context and to serve as a software sketchbook and professional production tool. Processing is an alternative to proprietary software tools in the same domain."
The other nice thing is that Processing is basically just a Java library so it is simple to move beyond simple visualizations, etc and do more serious Java programming.
I've been having great fun with it, I'm able to do professional work with it (using Eclipse as an IDE, etc) and there is a growing and quite vibrant community of artists and coders developing around it.
Some other possibilities:
- Python-based text adventure as a first (big) program.
- Python and PyGame based game/app for the OLPC
Complexity Happens
There are so many programming languages used for so many purposes that choosing a particular language and forcing it down the throat of the guy may not be a good idea. Nobody would want them to be forced onto doing something they are not interested in. The best way to make him learn programming would be maybe ask him to take few computer courses in schools, get him interested/motivated in computer programs, help him identify what he would like to do with his computer and hope that whatever language he programs in it would be for open source.
As a followup to my last post, I thought of an ever better way to get the ball rolling - have him develop for the simulator first. It's free to download the dev kit with simulator. Then say, if he can make something that impresses you enough you'll buy a Touch (or iPhone) and a license to develop. Then he has some motivation to really explore programming in depth enough to really learn something.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
I started programming in BASIC when I was after my dad taught me
1 CLS
10 PRINT "My brother smells",
20 GOTO 10
I later improved after getting AOL in elementary school and picking apart Pong Kombat, a Pong-Mortal Kombat hybrid. I learned the fatalities by reading the source.
I am actually in the same boat, however, my son is only 10! He want's to program because it's a big part of what I do.. but, while building stored procedure to traverse billions of records in a database is fun and challenging for me, it's going to bore him to tears.
I've thought about C, but, I think that's a bit to complex for a 10 year old. I'm really excited about Vala, but again, maybe thats a bit much for him still? (again, I want to KEEP him interested) Perl, eh.. easier, but I still fear it wont be interesting enough.
Soo.. my thought. Unreal Tournament. Once you understand program flow, most other languages will become easier to understand. Maybe he gets good at building new weapons, new game types, whatever.. and later says to himself, man, I really wish I had a tool that did this or that. Someone without any background, might not even go there.. but with even a little background he may say, how tough can it be?
anyway.. just my $.02
+1 on both Scratch and Alice.
They're both a lot of fun for adults to play with, too, even those of us who already know how to program.
Tell him that he'd better not ever do it, and that if you catch him doing it, he's grounded for a year.
Downmodding is the refuge of the weak. Don't downmod, make a better argument!
I disagree! I learned $crusty_old_language back when computers had six bits and were lucky to get 'em, and I see no reason why anyone else should benefit from the research and development that's taken place in the last forty years. A pox on all these $trendy_new_language advocates who want to replace my ancient $crusty_old_language-based systems with something that's actually readable and maintainable! I say, force the kids to start with $crusty_old_language like I did, and hopefully most of them will be discouraged from entering the field and competing with my out-of-date skills, and the few that actually manage to persevere will be so traumatized by the pain of learning $crusty_old_language that they'll be completely insane and will want to help me maintain my stale, fragile, unreadable pride-and-joy. Now, where'd I put that deck of punch cards?...
I'm going into 12th grade, so I'll inject my opinion and help:
First off, to everyone else- the zillions of comments are helpful to me as well.
Now, I started with a 5th grade teacher who taught us HTML, so I got lucky in that sense, and all the adults around me are computer nerds (my godfather works for LSI). I got into computers early, and now I'm trying to learn to program.
I started with the "Teach Yourself in 24 Hours" books (I tried both Visual Basic and C). No. They are dull and cannot capture attention. Few books are useful for me, the "C++ for Dummies" I'm trying now isn't too bad, but it is hard to get motivated learning from a dull book for teens (even those of us who like to read).
Long have I wished for SOMEONE to teach me, not someTHING. Now, if you find a good book, that's one thing, but it's also very rare. So I recomend teaching him one-on-one. Even if you teach out of a book, you can make it more interesting, and you can change the book's teaching to fit his likes and styles.
The point is, the best way for today's teens to learn something abstract like languages is from another person. Everybody learns differently, and a book cannot compensate. Nor can it answer specific questions ("so, what does this '#include' thing actually do?").
I just thought you'd like an opinion from somebody who understands the situation.
I got my first computer when I was about 5 years old (a Dell XPS D333, I actually still have it somewhere). I loved it, I would play those educational games on it, then I started using the Internet. As I got older (around 9-10 years old), I wanted to know how this fascinating machine worked. So I started reading about computers, how they worked, the operating system manuals, etc.
Around this time, when I was about 12, my grandmother, being a huge packrat who can't throw anything out, had been given 2 very old IBM PS/2 PCs that her office was about to throw out. These computers ran Windows for Workgroups 3.11. We would go to my grandmother's house every weekend, so I spent a lot of time on this old computer. Then I found a very interesting program, qbasic.exe, QuickBASIC, as I would later learn. I had no idea what it did, so I pressed the HELP button and read the entire help menu. So I started playing with it, entering commands and codes that I learned in the HELP Menu.
Soon I had made dozens of programs, including a program that played music, a program that had a paint-like drawing board, and dozens of separate misc programs. Then I thought "how can I do this on my home PC?". So I talked my mom into buying me some programming books, which included a few BASIC-based programming environments, and learned even more.
Now I'm 16, I know how to program in BASIC, Visual Basic, C++, PHP, LUA, and some C, and use Linux.
Could be worse - my first programming language was APL (yes, THAT APL). Believe it or not, that was the programming language that my high school tought back in 1979.
Maybe it sounds cheesy to us, but between my own kids and my nieces and nephews, I find they're totally infatuated with my Atari 130XE. BASIC obviously has its flaws, but BASIC serves its purpose well: BEGINNERS all purpose.... IMHO, your teenager could learn the fundamentals of programming and logic. Learn a little history, gain an appreciation for the difference between 128K and 4GB, etc. And if you can structure code well in BASIC, you're set for life! :)
As a side benefit, you could also have fun playing some vintage games when you're not hacking away...
Well, I'm not a programmer, or a *nix kernel hacker, just a front-end web developer and designer. I got into computers from an early age because my dad showed me video games on them... then, when I was 11, I wanted to create a website for a StarCraft gaming clan (lollums). It was really cool creating something like that, and I enjoyed the challenge.
I messed around with that for a while, but I really started to get into it when I was 16 and couldn't find a job. I thought that maybe I should try doing freelance web design.
Now at 19 I'm pretty much financially self sufficient, I work at an ad agency and freelance on the side, and am also in school. Tell your son that he could be making $50/hr freelancing during college. It's rewarding and challenging, and it will sure beat his friends' restaurant jobs.
Freelance Web Designer - Portfolio
Someone please mod parent up - Robocode was designed specifically to get younger people into coding.
I work at a University, and we often get classes of 14-16 yo's in to "sample the University experience". We sit them down to do a little coding, using Robocode. A quick tutorial on the basics of coding in Java (Robocode's set up to provide the basic commands of Logo, but with the ability to do much more complex coding as well - some of the Robot AI out there is very impressive.
It's graphical, it's robots killing each other, and it's teaching the fundamentals of programming and OO.
The Robocode class always gets high marks from the youngsters for the fun value.
"I'm in a bit of a bind. My young teenage son is starting to get curious about ____, and in particular, ____.
Only on /. would those blanks be filled in with the words "computers" and "programming".
It's not just about readability. Take a look at this.
It is quite readable, logical, easy to follow. It is still an abominable example of really bad/broken code. Especially since it is presented as an example of good code.
Good judgement comes from experience, and experience comes from bad judgement.
- W. Wriston, former Citibank CEO
I have no idea how your son is, but for me, the jump was when I figured that I might be able to make something I was interested in by coding. Actually, I think this happened to me several times, first with logo when I was about 6, then text games in basic, hacking bbs'es, and later on OO, higher level languages to produce games, lower level languages to write drivers, etc.
Agewise, I'm a little in-between with regards to your post: I'm in university, but old enough to have used a bbs. Sometimes I wonder how I would have gotten interested in many aspects of development, seeing as there's a lot more layers of abstraction to dig down through than there used to be. Its not like you can just drop some inline assembly into your c program and start writing graphics drivers anymore. In many coding applications, learning curve to producing something 'professional' looking is considerably longer than it used to be, and I'd imagine that this would be the biggest challenge to motivation.
One immediate upside I can think of, though, is that a lot of games now come with development toolkits, and working with these can involve playing with fairly advanced scripting languages. Try Neverwinter Nights, perhaps. This might be a place to start if your son is into games.
Or maybe he's into websites, or maybe he's into business concepts, or maybe he's into visual effects, or math, or whatever. The point is that he'll start teaching himself if he thinks coding can help him accomplish something he's interested in.
We fetishize coding & languages because we want to solve problems & work efficiently, but coding will probably always be a means to an ends... So far as I know there are no art galleries hanging up beautiful segments of code on the walls. So if you start geeking out on the advantages of linux, shell scripts, OO, GOF patterns, pointers, automatic garbage collection, this language vs. that, etc., there's a good shot you'll lose him.
If he thinks coding will help him create something cool, he'll learn to code. Once he starts this process, then he'll come to you for information when he needs it, and you'll have a lot to offer. At that point you should give him only enough information so that he doesn't get stuck, and generally figures things out by himself.
It's purpose is that. Teach a kid how to use a computer and eventually do some programming, it's there right on the website:
You may have to relocate in a bario outside of Rio to get one though. :)
I like the idea of giving the child the incentive that if they learn well enough, they can work for you instead of at fast food ;)
As for programming languages, I can see two potential routes for the OP's son to start out.
1) Javascript. I assume he has a website of some kind or another, no? Basic Javascript could be a neat way to impress his friends -- buttons that run away from the cursor, interactive animation, etc. The payback period would be pretty quick. You could then help transition him to other languages via CGI.
2) C/C++, but fast track it to OpenGL. Graphics is where a lot of the "fun" is for young programmers, and where they can impress their peers the easiest. Depending on his interests, you could help him out from there -- if he's more interested in how the engines work, help him learn to write his own 3d engine. If he just wants to write games, point him to Ogre or something of the sort. Might want to hook him up with Blender if he's going to be spending a lot of time working in 3D.
Back in the day, I got my start in QBasic in middle school. I was really driven on by friendly competition with my friends. One would write a program that would make it "snow" one pixel snowflake at the time, my version would make it snow many flakes, and by the time the back and forth was done, there was a veritable blizzard of flakes blowing in the wind and accumulating into drifts at the bottom of the screen. Fractals, simple artificial life simulations, wireframe 3d and crude raycasting (the best we could pull off in QBasic ;) ), and so on -- we tried to outdo each other on it all. Also, using hex editors to tweak video games was kinda fun ;) With modern OSS games, you can do a heck of a lot more than just a hex editor!
The only thing that could have helped accelerate my learning is if either my parents had gotten me more books or if we had had net access back then. For example, for my first couple 3d engines, I didn't know how to rotate a point in 3d. I did, however, know middle school-level geometry ;). So, I figured out that I could determine the angle to each point with arctangents, then I'd rotate that angle, and then I'd use sines and cosines to convert it back to 3d. Very slow, but it worked ;) Also, my parents were hesitant about letting me mess with hardware, which slowed down my learning of that aspect.
Why must all aquatic villains play the organ?
You might try working through an OpenSocial plugin. It would be something that he and his peers would understand. It's fairly simple, broken up into bite-sized pieces, and it teaches the basics of asynchronous/event driven programming, javascript, and the DOM. While it's certainly not hard-core programming, I think it lives somewhat nicely in between useless toy programming and the real world.
Word of warning. I'd steer clear of the Facebook API. It has a flow that could really frustrate and turn off someone trying to do something simple.
The best way to encourage programming is be excited about it yourself. I'll warn you against trying to push your children into it though. They will resist and hate it. Instead, I assume your already excited about programming. Share your excitement with them. Look for cool stuff to program /*little self promotion -- http://bee-eee.com/ */ Tell them about your successes. Show them the stuff your think is cool.
When they show interest I'd set them up with C# Express as I think it's the quickest way for them to do something beyond printing "Hello World" on the screen.
Have fun, and don't require them but inspire them. Trust me if your excited about it they will in time show interest.
Modding games is probably the easiest way to get into programming, and it has a very quick level of gratification which keeps kids interested. It starts out as modeling/skinning, and can extend to AI and complete modding, which can involve quite a bit of typing.
It's tempting to want to expose kids to "real programming" right off, but quite frankly, anything they could quickly do on their own isn't that interesting--and it's debatable if it's even that wise of a prospective career choice nowadays.
If they have the desire, then Java is free and a literal layout manager is easy to understand.... -but when I was in school, I remember most people reacting most positively to Visual Basic classes, I think because of the drag & drop environment--it was easiest to turn out a program that did something that they could actually imagine being useful. ASM courses (with their file-copying-program and file-batch renaming-program assignments) did not seem to get the same level of enthusiasm.
And I dare say,,,, more people got jobs doing something closer to Visual Basic than they did doing ASM.......
~
I would advise you to give him interesting or rewarding problems to solve. If it's programming, once he learns the basic syntax, have him tackle classic logic puzzles like Towers of Hanoi or something similar.
There was a problem I remember from my computer science class a couple of years ago (I took all of the CS courses my high school had to offer my freshman and sophomore years) where you started in one corner of a grid and had to reach the opposite corner. In between were obstacles and bonus squares of different numeric values called "cookies". The assignment was to write the code to create the grid and then navigate it (the GUI code was taken care of, thankfully). That was one of my favorite assignments.
For general technical knowledge, you could always do what my dad did to me: he offered me a broken laptop. I didn't have a laptop at the time (and I don't have one anymore since that one really broke recently), and he offered me an old ThinkPad T22 (Pentium III class, this was in 2005). What was wrong with it? The BIOS had something wrong with it that messed with the power management features. The result is that Windows locked up whenever you unplugged it from the AC adapter. So he threw Xandros at me and let me have it. After that, it wasn't long before I started downloading every distribution I could get my hands on.
I think you're on the right track teaching him C (absolutely not C++, because it's so anally retentive that he will decide programming is the most boring thing in the world). You know C, and it has all the features a programming language needs—and no more. C also resembles many newer programming languages enough so that once he learns C, he shouldn't have any trouble picking up languages like Python, Perl, Java or C++. I would say that guidance is absolutely necessary—teach him to write unobfuscated code (e.g., do not be impressed when he tries to show you how much he can do in a single line of code), and encourage him to comment abundantly. I'd stay away from pointers—stick to the high level aspects of C; low-level programming is for a few specialists nowadays, and chances are he will never have any practical need to use such techniques. (If he does, he will learn.)
Another possibility is to teach him HTML and Javascript. I'd do this after laying down the fundamentals with some C programming—but the gratification of seeing the effects of his code immediately on the screen might be a powerful motivator—especially if he's visually oriented.
Great men are almost always bad men--Lord Acton's Corollary
FreeBasic is a project that started just a few years ago and it is now more than mature. You can compile win32 programs from the command line (not interpreted or bytecode), use c dll's and the windows api and just about anything you can imagine (you can even program OO techniques if you want). The freebasic compiler is written in freebasic.
Of course its still BASIC, so the program above (minus the line numbers and with the comma gone from the end of the print statement) will compile and run just as well as it did 30 years ago.
In addition, there is not only a lot of example code with the distribution, but a community that is available to share with and learn from.
http://www.freebasic.net/forum/
I'd expect this crap from a former high school football star or something...but seriously, this is pathetic.
If your kid LIKES computers, he'll be interested in them. Your attempt to poke, prod, force him into liking your particular brand of fun is...well...pathetic.
Don't do anything. He'll either learn it or he won't. If he's interested, he knows he can ask you for help.
C++ primer plus by stephen prata.
I don't usually write flaming posts, but C++ as a teaching language ?!?
I agree with both of these points. C++ is not that great as a teaching language, but I've found C Primer Plus and C++ Primer Plus to be excellently written, beautifully expositional books. The way I describe it to people is
With so many books out there, picking one good book that will reliably educate a variety of novices is a minefield. You could commit to a book, really sacrifice your time and attention to the material, and find out only a week later that it wasn't worth the effort. These two books are the only two I've come across that properly reward that sacrifice for the novice, with mastery of what it sets out to teach. Learning C or even C++ from these books provide a strong foundation in expressing concepts in a programming language, and with the complete command of those concepts in that language, it becomes possible to make the bridge over to new languages -- where you'll invariably have to rely on less well-written books.
And when you do, you can take the poorly-conveyed concepts in those, whack them against your solid foundation in C and C++, and watch what parts of them fall apart as poor or wrong description of the new language's features; and which hold together as something to learn and internalize. Without that solid foundation, whacking both bodies of knowledge against each other will make them both fall apart in your head.
The only thing these books are not good for is preparing the novice for the general quality of instructional books out there. But then I'll recommend the poster gently break Sturgeon's Law to his son.
Comment removed based on user account deletion
I don't think typing in BASIC games (or pages and pages of hex dumps) from a magazine works for kids today
Well, there's no reason it couldn't, but there's also better stuff out there.
In particular, Scratch (http://scratch.mit.edu ) shows a lot of thought and promise.
And if that's too simple, a kid may as well be doing work in Flash or something nice a media friendly....
Libertarianism is rich wolves and poor sheep playing gambler's ruin for dinner.
Several ground rules:
;-)
1) Keep the class fun.
2) Keep it competitive - let the students challenge each other.
3) Keep it challenging.
4) Allow the students to reuse code from each other - as long as it is not central to that particular assignment.
Note on #4: I.e. if the program is suppose to accomplish a specific task, so what if the students re-use each other's code for generating a mouse cursor, button, etc? What really matters is that they wrote the code/logic that achieves that particular task, can demonstrate it, and explain it. Let the periphery be just that.
Honestly, a lot of the above is what got me into programming. I had a great teacher who let us go at the assignments. As long as we got the assignments done, and wrote the core code ourselves it didn't matter. We shared code for buttons, mouse/keyboard drivers, video drivers, etc; but we still wrote the central functionality ourselves. It ended up becoming a challenge to see who could outdo who, at least among the top of the class (and everyone else got to enjoy the show too!).
Let them write games, and other things as well; and challenge them to come up with new solutions. Teach the real heart of education - how to learn - as well as the core material - the actual programming language.
The kids will enjoy it; and their own sociological structures will keep feeding it as well. And best of all - you won't get bored teaching it since the kids will always come up with something new.
Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
Suggest he learn Lua and make a World of Warcraft plugin.
Again this isn't to say I don't love my dad, or appreciate time spent with him, but I would much rather go sailing, skiing, talk about investing, or just about anything else besides work on math problems with him. It seems this could be a similar situation, a veteran kernel hacker with poor teaching skills could really turn off someone to programming because their insights, ability to see through problems and solve them without needing to express what their brain is actually doing can be extremely detrimental to the learning process and therefore ongoing interest in a subject.
I wish I had modpoints -- argh. This paragraph really beautifully states what a dad's relationship is with his son, and what a teacher's relationship is with a pupil. Being able to teach has something to do with being able to externalize and communicate the thought process between both parties, and for the teacher to be able to temporarily (if not a professional instructor) unlearn enough to be at the student's level.
I think it's both a rare talent and a valuable gift to provide a child. My dad either had the talent or stretched himself to do it -- and I recognize that as an incredibly precious thing both to give and receive.
I won't need to, the machines will do it for me!
Invaders must die
I wouldn't necessarily say it would have to be reflective of real-world problems. Of the classes I had in high school, the books for the 3 different languages overlapped in the problem sets quite a bit, and they were nearly never real-world associated - a lot of things were like:
1) For Loop based Fibonacci generator
2) While Loop based Fibonacci generator
3) Do Loop based Fibonacci generator
4) Recursive Fibonacci generator
Or other similar kinds of things (factorials, lowest common denominators, etc.). A lot of math related stuff, some in other areas - like draw a snowman (Qbasic), draw a series of cars driving across the screen (C++), or do something else.
Ultimately there was a lot of different tasks, but each built on something; the primary thing was that we could achieve the task our own way - for example, when I had to do a calendar I used a button class I had created to build a quick interface; I reused that class again later when creating my own version of the game MasterMind. Creative is key.
Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
If you're not familiar, Second Life is a virtual world you can log into and play around with, for free. In this world, you can create things, such as virtual houses, cars, spaceships, whatever you can imagine. The key thing is that it has its own embedded toy programming language called LSL.
I recently taught an undergrad course, targetted at non-comp sci students, to teach them programming.
http://www.francischang.com/professional/games/
Our thinking was that a lot of us got interested in computers, and then programming, is because we liked video games. We're trying to motivate learning by having people go through the basics of Second Life content creation. I think it's a bit more rewarding when you can say "Hey mom, look I made this game" as opposed to learning the formalities of typing and writing maintainable code. These things can come later.
It scales out a little bit too - you can make a few dollars in Second Life in various ways, one is by selling and creating new content. Possibly your teen can earn a bit of a summer income from what they learn in SL - a great way to develop their entrepreneurship skills.
And hey, if you're not familiar with Second Life, maybe you and your son can explore and learn it together. Of course, there are drawbacks to letting them explore - For instance you will no doubt encounter objectionable/pornographic content eventually.
On a completely different note, another fun way to learn the basics might be to play around with Flash or Phrogram.
--
#include <malloc.h>
free(your.mind);
Give him a Windows machine and let him experience all the painful experience with spyware, drivers, and the friendly BSoD. Then show him Linux and how easily things can be done from a powerful shell. In no time he will love to write shell scripts to get things done quickly. The next thing you know is he picking up python by himself. Eventually he realized the performance issue with scripting language and move on to something like C++.
At least that's how I ended up getting into programming.
This is the wrong time to pick Python for teaching. Python 3.0 is coming out in months. It's going to be incompatible with all the 2.x versions. There's going to be major changes that effect everything all the way down to "Hello World."
That sounds like a big confusing mess to deal with explaining to a student.
Link to python 3.0 info...
http://www.python.org/download/releases/3.0/
Coding should be taught as a means to an end, not as an end unto itself. That end being the expression of abstract ideas. Get the kid excited about an idea that requires coding in order to express, or test out.
When I was in high school, there were two side projects I worked on that really piqued my interest. One was a "contest" of sorts I got into with another kid, where we tried to see who could develop the fastest sorting algorithm. At the time, neither of us realized that this wasn't a particularly fruitful area of investigation. I extended my coding ability not for its own sake, but because it was necessary to express (and optimize) the algorithms I was coming up with.
The other project was a tool for designing autos in Steve Jackson's "Car Wars" table-top game. So there was a problem, and I was attempting to leverage the computer to create a solution. I didn't learn to code because coding is inherently satisfying; I learned to code because creating elegant solutions to interesting problems is inherently satisfying.
I was in fifth grade (twenty years ago, wow!), and I was given a book about computers, which had in it an example BASIC program which was something like this (pseudocode, I never properly learned BASIC):
print "What is my name?"
read name
print "What color am I?"
read color
print "How tall am I?"
read height
print "Hello, I am " name "."
print "I am a " color " color."
print "I am " height " feet tall."
I brought this to my Dad and asked if I could get our computer to do this. He said that we could, but we would do it in a different language (we did not have BASIC on our Mac). He coded it up in a Pascal interpreter. One great feature that it had was auto pretty printing and error highlighting, so proper formatting was indeligably imprinted on my mind, and errors were easily found.
After playing with the program for a while and enjoying it thoroughly, I was told that I could do programming instead of math for school (I was home schooled at the time). I jumped at the chance. My Dad would simply give me new tools to play with (loops, arrays) and puzzles to solve (add n numbers where n is specified at runtime, print ASCII graphics, play shoot the wumpus).
Eventually, I got to the point where I had learned the basics, and he introduced me to the Mac drawing primitives. I then drew faces and such, with ears, ears, hair, etc. Then I switched to a real compiler and went on to create a whole application, with menus and options dialogs to choose how you wanted your face drawn, and all the basic stuff for an application. I remember one of the final things to do was to have an option for glasses, and an option for curly hair (a series of circles; my Dad told me about sine and cosine to do that nicely) -- this was to mimic my Dad, who had glasses and curly hair.
At this point, it was the end of the year, and I was then allowed to run loose and do whatever I wanted, and I learned to use the documentation to find out what I needed. I never looked back.
There are basically two ways to approach things: from the hardware side, or from the math side. The spectrum of languages is something like: machine code -> assembly -> C/Fortran -> C++/Java -> Python/Ruby -> Lisp/Smalltalk -> lambda calculus.
If your son is interested in abstract math, you'd be hard-pressed to find a better teaching language than Scheme (with SICP, of course).
If he's more into concrete, hands-on stuff, why not assembly? It isn't all that hard, and will teach him a lot about how computers work.
Of course, you could pick a language somewhere in between those extremes; but I think sticking to one end of the spectrum or the other is better for teaching and learning, since there are fewer distractions.
Tell him he's not allowed to program.
None of them can see the clouds; The polished wings don't care.
I created a small project that uses Ruby Tk. Is not Quake Arena, but you get the point.
http://winlearnseries.sourceforge.net/
I don't agree with the idea of dumb-down development.
Programming is about rules, lots of rules.
Programming is like comedy, either you dig it or you don't.
My litmus test is the rubik cube. Give a teenager a rubik cube.
If she/he toys w/ it for a while and then tosses it. Don't waste your time.
If she/he tries for a while and then asks for directions. Good news, she/he is ready to learn programming.
If she/he tries, fails and then returns tomorrow with the cube solved, you have in your hands a kernel developer.
If she/he already knows how to solve it and you have not bought her/him a laptop yet you are wasting precious time.
If you don't know how to solve the Rubik cube, you clicked the wrong link, this is Slashdot, not Digg.
- these are not the droids you are looking for -
when she's ready for her first job, we will give her part time work instead of her having to get a job in some fast food joint or convenience store
"Back in the day" I started working for a fast food restaurant when i was old enough... If that wasn't sufficient motivation to obtain a quality education, I don't know what else in my life could have been.
;-) As Oscar Wilde put it, "Experience is simply the name we give our mistakes."
Give the kid the chance to find out what she "doesn't" want to do and programming might appear as a more attractive option
No words of wisedom here.
When I was a wee lad, I came across and read "Peter Norton Programmer's Guide to the IBM-PC". That book hooked me on all things PC.
It detailed the intricate workings of the PC and the "revolutionary" concept of BIOS interrupts.
Years later, when interviewing candidates for programming positions, I would ask them "When you press the letter 'A' on the keyboard, what happens ?". Their answer would usually be along the lines of "An 'A' shows up on the screen". I would then ask "Why?". If they were able to articulate anything better than "because", they would usually get the job.
I'm now an old person, and I know my views of what programmers should and shouldn't be are probably dated, but I think the worst part about his latest crop of programmers is the total disregard for what actually happens at the machine level. This is what contributes to the crappy, inefficient and unintelligible code that we see being produced today.
Imbue in your son the basics about what a computer is and how it does what it does, and you will be doing him a great favor if this is the profession he chooses to pursue.
I am not advocating that every programmer needs to know how to write a BIOS and put it on an EPROM and replace the one they have in their computer, but at least know what the BIOS is and why it is so important in the grand scheme of things. Nowadays, people learn VB.NET and think they are gurus because they can make a form pop up on the screen. I'd like to see them dive into Microsoft DOS technical documentation and make heads or tails out of Microsoft's "List of Lists" to be able to recover data from an accidentally formatted hard drive.
I'm ranting... just my two cents...
If i was ever going to learn to program besides a rough understanding of BASIC etc.. although thats where most people would start initially, then i would definitely go for the Apple SDK. Everything is there provided you have a mac which seems to be the trend amongst teenagers these days anyway. For free you get the SDK, a simulator to test it on and all the hardcore optimization programs. It is in objective C, which is harder to program but the market seems to be coming up pretty big these days for that because of Apple so if you are a newstarter with a fresh mind would it be that much more difficult? I mean for even a (relatively)simple project you could perhaps make some money or at least get a free app on the iTunes Apps page, now how cool would that be for a teen amongst his/her pals. I reckon this would be a winner. Some apps so far are extremely simple but popular. The hold button was in the top twenty at least which is basically hold the button for as long as you can without letting go, ala get a high score. Simply put a start stop timer button recording the highest variable. Now thats an easy program but on the iPhone/iPod Touch very very cool and fun!! p.s. i haven't found a way to cheat on it yet either gggrrrr.......
My dad always told me, "Women are like martinis for lunch. One is never enough, but two is just too goddamned many."
Java was my first computer language therefore I recommend it; "A First Book of Java" by Gary J. Bronson, contains great info to get you started with Java. The two languages they teach at my school are C++ & Java...
Well I'm 14, and I never got into programming, but I've always wanted a website. My brother is a programmer and he told me to pick a language to use and learn it, he said I had to learn on my own. I picked up on PHP very quickly and I'm on my way to obtaining my own blog. Progress is slow, and it takes time, but the urge to want the final completed project is what keeps me going. www.smuckingfart.com is the product of how far I've gotten.
I first learned to program on a TI-83 calculator. Start with simple programs like "Press 2 to win" and move on to creating moving objects. Or, if your kid likes Legos, then get him a Lego Mindstorms kit.
teach him Processing; it is a programming environment build upon Java; specially developped for visual artists. I use this environment for my students of an art school (16-18 years old) and they love it ! They are not specially "programming minded" but they like the simpleness of it and the beautiful images you can create with simple code !
What to teach? Video games and graphics.
In a nutshell: Point him to,
Gamedev.net (The forums are the best I've found anywhere.)
cprogramming.com (Going through the C tutorials is a great, grea way to get started with the language.
Also give him one (or both) of these:
1 - A pointer to the framebuffer.
2 - Nice OpenGL initialization code.
In fact, I'd say that there is almost nothing as rewarding as starting with just a "putpixel(x, y, color)" function and finishing with a 3d cube spinning around. Programming graphics teaches so much: Math [motivation to learn linear algebra! A concrete way to understand parametric functions... and calculus (If you start coding before you take Calc I, you will reinvent Euler integration yourself)... and functions... and recursion/induction... and... well, everything...], abstraction (putpixel is inside drawscanline which is inside drawtriangle which is inside drawmodel which is inside drawbadguys which is inside...), etc, etc, etc. And since it requires speed (you want to run at interactive framerates), it'll motivate efficient algorithms, too.
And -- I should really emphasize this -- people are visual. Nothing taught me math like watching it draw pictures. Concepts that confused my classmates came intuitively to me (me! The kid who couldn't memorize his times tables in third grade! The kid who kept making sign errors! The kid who everyone thought was bad at math! The kid who's now a PhD student in Control Theory!) -- because I'd seen them draw pictures. The visual cortex is a huge part of our brains, and harnessing it does incredible things. So teaching graphics programming is bigger than just teaching graphics programming: It's making connections so that your son can visualize math. And that is huge.
Graphics and games. Give your son a pointer to the framebuffer. The rest will follow.
I know, I know, it's not a programming language. But he could learn HTML/CSS, preferably the standards-compliant kind, not the IE, tagsoupy FrontPage-generated garbage. I feel it could help a programmer(-to-be) in various ways.
In my middle school years I started dabbling with web design and learned HTML and CSS. However, I soon wanted to be able to create dynamic sites, so I picked up PHP. This was the first real (albeit a bad) programming language that I learned. I don't think it caused me brain damage or whatever, but it prevented me from transitioning to other languages for a bit. When I got into high school I picked up a few books on Lisp, decided it was much better than PHP, and did some stuff with it. However, I hadn't learned much actual programming yet. What really got me into programming was the USA Computing Olypmiad (http://usaco.org). This is a programming contest for high school students that forces you to write efficient programs to solve some very difficult problems (just about all programs have to run in under one second). The contest makers have also created an excellent training site that has plenty of problems and lectures to learn from. When I started the training pages, I could barely program in C, but after about 40 problems or so I can program almost anything in it or in C++. Since then I've also learned Ruby and Python, the two being a breath of fresh air after C/C++ and PHP. Because of this, I was able to take the AP Computer Science AB (which should be called AP Java :/) exam and got a 5 in freshman year, without ever having taken a computer science course in my life.
You just need to challenge your son with problems like those in the USACO, and if he's ever be interested in programming, he'll learn on his own in order to solve them.
I managed to get my closest friend's kid into computing because I started when he was 3 years old by introducing him to games, and teaching him to type his name. Subsequently, I supplied him with new computers as he grew, bought him a Logo package and book, and showed him how to draw simple geometrical shapes and/or pretty patterns. He's now a geek, and he wants to do Computing with Physics at Uni. He's better at maths than I am.
I interested my nephew and nieces in computing by showing them how to world build for Quake 3 and Unreal Tournament in 3D editing packages, and wound some programming into the mix via UnrealScript, a Java-like language included with all of the Unreal engines. This was cool for them because they could build the world, and then *play* it. Obviously I pWned them most cruelly (they are teh suX0rs - they can get their revenge when my teeth are in a jar). My nephew's the only one who showed any ongoing interest, but they all enjoyed the activities.
I think the key thing is to find something that they can *play* with. This is how I got into programming.
I can see the point of didactic learning under some circumstances, but IMHO (speaking as a consumer) too many teachers (particularly maths teachers) heavily overuse this style of teaching. IANAT, btw.
Offer to pay him for programming work he does.
Find something not too difficult but that will actually require some effort and learning to accomplish. Then offer him a modest one off increase to his pocket money or some new toy or gadget he wants, on the condition that he complete a task. The key is to pick a task that a beginner can handle but that will take him time and have him learning. It may sound frivolous, or like bad parenting, but a lot of good programmers only do it because they're paid. The beauty is he'll learn on his own if motivated. Once he's seen how complex it is, he'll either take it up as an interest himself, or decide it ain't worth the money. This is also a good way to teach him not to rely on being spoon fed by teachers etc.
Btw can I have some help with kernel hacking. Looking at kernels for the first time in about 12 years, and it took me a lot longer to get a kernel compiled than I remember it taking me when I was last looking a Linux seriously. When did it become so damn hard to install the tool chain?
These posts express my own personal views, not those of my employer
The best way to make programming interesting is to make it relevant. Everyone uses dynamic websites so I suggest teaching him to program for the web. There's no better teaching tool for how web-apps work, than AppJet.com IMO. You don't have to install anything to get started coding, not even a text-editor. Javascript is the only language he'll need to learn to use it. No SQL, no HTML, no Apache configs, just Javascript, a C based language with agile loose typing, and great OO capabilities. The AppJet developers have built a very minimalistic but stil powerful framework that covers all the fundamentals of web development; HTTP request/response handling, persistent storage, and sending emails, among many others. The forum has a friendly community of amateur developers to help him learn. He'll be writing web-apps that he can show his friends in no time! Give it a shot; http://appjet.com/ and check out something I built with it at http://juxtafier.com/
I highly recommend the book Learn to Program. http://pragprog.com/titles/fr_ltp/learn-to-program My teenage brother started with this book and loved it because it was clear and easy to understand and wasn't boring. Even my dad started to get into it.
I haven't seen many posts by youngish people, so I thought I would throw my $0.02 in. I am 22, and learned how to program in 10th grade, after a few earlier false starts.
In my case, I tried basic in elementary school and visual basic in middle school. In both cases I never really connected, I don't know whether it was the simplistic languages or just my lack of maturity.
When I actually succeeded in getting started I got "Learn to Program using Python" by Alan Gould and worked through a bit of that, and then moved up to "C++ programming for scientists Engineers and Mathematicians" by D. M. Capper (I am science inclined, currently starting a Ph.D. in physics). I learned mostly from these books. If he has the desire to work through a book, it is a good way to learn, they are good teachers even if you are not.
The other thing that helped me was that I did this as an independent study for school which forced me to spend 10 hours a week on it for a semester. It was a little painful, but being forced to just keep slogging got me to the point where I knew enough to be able to write programs that were complex enough to be interesting to me. I don't know if there is a way to replicate that effect (I wouldn't suggest forcing him to do it unless he wants to, but maybe come to an agreement that if he does x hours a week for n months you get him his own computer or something else he wants).
I would also second the suggestions of games. If he is programming something he thinks is cool it will be a lot more fun for him.
I remember when I first became interested in programming in early high school/late middle school. It was when someone showed me their IT-83 calculator that had a program on it to compute the quadratic formula by just giving it the variables. Some of you may regard this as encouraging cheating, but besides using it on a test if you were to spend the time to make a program to perform some equation you should have a better than average understanding of the equation itself. The reason this is such a good place to start is that it shows how useful programming can be and it gives someone real problems to work on it that seem easy, but pose their own problems that the programmer will need to figure out. (Dont have to program these on a calculator, you could use your favorite "easier" to learn language)
If your son is a fan of computer games then Game Maker is a great place to start.
It combines a gentle introduction to programming logic with a high reward component from creating his own graphic computer games - games that can look and play as good as anything on the casual game market.
An interested teen with this Game Maker book, The Game Maker's Apprentice, and help from a programming mentor can get a solid introduction to a complete development process, including aspects like weaving sound and graphic assets together to create a complete software package - aspects of development that often aren't covered at an introductory level.
The Game Maker's Apprentice is structured as a series of projects, starting with the most basic and gradually increasing in complexity to cover rudimentary AI concepts by the end. The projects are fun, with clear direction and plenty of opportunity to play and explore beyond the specified project.
The "series of projects" structure can also help you out as you teach too. You'll have the insight to see what's new with each project, what ideas to help emphasize, and they'll serve as guideposts to give an idea what level of concepts are being taught at each point along the way.
Average salary for programmer - $60k/yr. Avereage salary for city bus driver - $100k/yr. I'm not sure I would encourage anyone to go into programming.
My bread and butter is also PHP, and I would never recommend it as a teaching language for all the reasons you mentioned. One thing that was implicit in your post, but I think is worth noting, is that the large quantity of class-A screwups rampant in PHP libraries and applications are another strike against it as a first language. The first language I got serious about was perl, and love it or hate it, there is a community there that's very quality oriented. (Yes, you need to dig through the usual chaff.) One thing that was critical to my learning was being able to read large quantities of well written, well documented code.
The background I gained from other languages made it possible for me to see PHP's flaws and work around them. I shudder to think what would have become of my programming practices if it was where I started.
(For the record, I also write almost all my own framework code for PHP as a result. Some of the more recent stuff that's come out might very well be decent, but a) the tolerance for terrible APIs that PHP itself engenders leaks into much of it, b) I've been bitten by PEAR one too many times, and c) out of necessity, I've written enough of the basics that I don't have a compelling need for them anymore. I sometimes question the NIHness of this, so it's nice to know I'm not the only one ;)
This is the voice of World Control. I bring you Peace.
My 16 year old son just asked me to show him how to program, with an eye towards getting a good paying job when he enters the job market.
I'm starting him off on SQL, then once he's got that down, on to something like Java (the basics, not J2EE).
Not sure if that is the best way to go, but I figured he can't go wrong learning SQL first. Plus no matter what programming language he uses in his career, he'll always need SQL, and its a good introduction to a programming "mind set".
"The future can only affect the present if there is room to write its influence off as a mistake." - Yakir Aharonov
You're all going to hate me for posting this, but this sounds like what VB was made for.
That's how I got started. My dad left his Borland Delphi III disk lying on his desk with a copy of "Teach yourself Delphi III in 28 days", so I took it and installed it on my computer. Eventually I got bored just drawing pretty windows, so I ask my dad how to "do stuff", and he introduced me to pointers, linked lists, stacks, and all sorts of wonderful data structures. The rest, as they say, is history.
Try teaching something that will instantly set off the endorphin rewards. You certainly know a whole lot more about what makes him tick than anyone on Slashdot, but most teenagers, myself included (though I'm 20 now...) play games. Get him started on Python and PyOpenGL, that way he can easily get some 3D graphics on screen.
For some reading on education in general, in case you're curious, Dimensions of Learning is a good place to start. It's a relatively current teaching model. I have the textbook on it, but you can find general outlines of it everywhere; though, curiously, it doesn't have it's own Wikipedia page. I might need to do something about that, unless it's in another article.
Admit it. You post strawman arguments as AC so you get modded Insightful for refuting them, rather than Troll
By that, I mean that I learned on my own because I wanted to learn. He has to want to learn. Maybe he likes something else. Are you afraid that he'll want to be a fire fighter, lawyer, or some other profession you might not like?
What does he like to do? Try encouraging that. But don't discourage.
Of course, there is the readability-issue with Perl, but when you come from PHP it is always an improvement. But if you don't like Perl, there is also mod_python and some other alternatives.
(*) Just kidding
Try Castlemouse:http://www.castlemouse.com/
Engineering is the art of compromise.
I got my start programming the TI-85 (and later TI-92) calculators we used in our math classes. It's easy to learn, lets you automate some of the calculations in science classes, and if you make games you can share them with your friends. :-)
Then you can move on to programming more complicated things, like cell phones or computers.
This book is often criticized, and it should not be confused with the C++ Primer by Stanley Lippman, a real C++ expert. I found two reviews on ACCU:
http://accu.org/index.php/book_reviews?url=view.xqy?review=cp003131
http://accu.org/index.php/book_reviews?url=view.xqy?review=cp001702
Neither review recommends this book. Francis Glassborow even said "there is nothing in this book that is appropriate to the needs of someone learning C++ in the twenty-first century". Brian Bramer was kinder, and said "this a very readable book with clear up-to-date explanations ... Suitable for beginner self- teaching who finds the more academic books hard to read", but he also mentioned it was heavily C-based, and did not talk enough about STL. In fact, the author also wrote C Primer Plus, and that may explain something.
my current motivation for learning programming is to make money. as you may or may not know, the financial markets are dominated by automated trading machines. so i figure, "hmm.. it can't be too hard to write a profitable system." ha. it is very hard, but a great project. i'm currently using ninjatrader to write basic strategies in c# to trade futures. oil, the s&p 500, wheat, corn, hogs.. its all tradable if you notice patterns that occur over and over again. the systems can be as simple or as hard as you make it. of course, the more simple ones aren't as profitable, so as the desire to make money increases, so does the complexity of the program. in short, i'm writing strategies in c# for ninjatrader to make money. give your son a go at this and he'll learn it all himself. and who knows.. maybe he'll come up with some novel concept and make himself more money than he knows what to do with.
I would start a newbie with Python. Python is Open Source, multi-platform, and object oriented. There are many, many extension packages. Lots of tutorials too...
Hey! I'm the web designer for the Yearning For Zion ranch, you insensitive clod!
Nothing for 6-digit uids?
My own encouragement came from curiousity about how computers and programs worked, but as far as encouraging someone either they will be interested in learning or they will not. As a programmer for the last 23 years I'd have to say teaching the importance of RTFM'ing is a good place to start. C is an ideal language to start with, it will show them many valuable programming concepts. Also, shell scripting shouldmake them comfortable with the commandline along with those all important 'programming concepts'. Unix/Linux/BSD is the best place to learn the art of coding (in my opinion)...Manpages are there to RTFM. One last thing, make sure their first IDE is VI, GCC and Make. ;-)
Kids want to do something that is cool. IMHO Silverlight is the fastest and best way to do it. Yeah it's not UNIX but who cares. I'm pretty happy that I grew out of my UNIX phase. I make a lot more money with dot net. Mainly because it boosts development performance and efficiency. Why force him into UNIX because of some lingering ideals peddled by your college instructors.
Quite simply: Game Maker. This is how I got into programming at age 12.
What Game Maker does is
1) It makes programming fun and gratifying. You see your results instantly. With a few commands you can see exactly what you caused your game to do, and because of the nature of some of the functions (for instance, functions that calculate trigonometry and other more complicated math formulas) you don't need a huge understanding of math.
In addition, it takes out the "Yay, I spent three days on this, now I can draw images on the screen!" For instance, in three days I had coded movement, some netcode, and made maps for an MMORPG I was making. In another language you would simply not be nearly this far. So basically, you don't get bored by "stupid stuff." If you have a game idea, you can get that into a program in a few hours, instead of worrying about really low-level things.
2) Perfect for beginners. It's even being taught in schools. You can start with a simple drag-and-drop interface and slowly work into code. It's all object-oriented, and it's very scalable. You can make a simple maze game or have an MMORPG that reads binary files and has super advanced graphic scripts.
3) Like I said earlier, he'll learn OOP and not even know it, since the entire GUI is based around objects. You can't put anything into your game without it being an object.
4) It's free. And it's a small program. It has a huge community (I am a huge tutorial contributor and mentor) with tons of tutorials, and plenty of people to get help from.
5) Its syntactically average and lenient. Code you write in it looks like code you write in Java, for instance. It's lenient: You don't have to declare variable types.
6) Debugging an error is not as frustrating as other languages. The debugger tells you exactly where the error is. Still can't figure it out? Run the game in debug mode and monitor every variable, object, etc.
7) Reward. Think up and code a really good game and you can be admired by tons of GM community members! Wouldn't you want to work for that?
You are now manually breathing.
About 2 years ago, I picked up a book on HTML/CSS (HTML, mind you, I would come to hate it for disrespecting XHTML) and read through it one weekend, making an example webpage for each lesson. The natural step after that was JavaScript which I learned with glee. Of course, then I needed some server side-scripting, so I grabbed PHP. I have come to dislike now and wouldn't touch it with a 20 meter pole, but at that time it was a great gateway to other parts of computing.
Since then, I've learned Python and I love it. In fact, I'm a Python core developer (yes, with commit privs), and Google is paying me to work on it over the summer. I hope this is evidence that 15 year olds can make a difference!
I'll take your point on books and run with it.
I remember when I was first interested in computers, I was happy just to have old BASIC programming manuals and such. Magazines, articles in New Scientist. Kids have a lot of energy. Let him harness some of that energy reading.
If I could have seeded myself with some books, I would have left copies of SICP, K&R, a Turbo Pascal or Turbo C manual... What I did have was a copy of the DEC 2020 BASIC manual, Personal Computer World magazine, and Byte when I could afford it.
Anyway, don't underestimate books as a vehicle for getting kids going down the right path with computers. I guess this extends to programming blogs too, but that's another post.
-- "It's not stalking if you're married!" My Wife.
To keep a youngster interested and motivated, try Scratch or Alice. These make it really easy to generate some flashy graphics, and do teach real programming concepts. My 10 yo son has done quite a bit of Scratch programming, mostly self-taught.
Alternatively, get him doing Lego robotics. This is a bit more expensive, but loads of fun.
Once they're hooked on programming and computers, that's when they'll have the patience to do "real" programming languages like C++ etc, like we cut our teeth on (actually mine was Pascal, but that just shows how long my teeth are). But not everyone will get to that stage. In the meantime, the experience with Scratch (or Alice) will always be useful, provided they don't develop unrealistic expectations on how easy programming is.
What's the best way to encourage his curiosity and enable him to learn?
If you really want to reach him, buy a Mac (I know you prefered Unix or Linux, please keep reading), download the developer tools and start Quartz Composer. Man I wish I had this when I was a kid. I'm dead serious and I'm not a Mac fanatic. I was raised between computers and I've used PCs most part of my life. I'm about 30 years old now.
If you haven't heard from it: http://en.wikipedia.org/wiki/Quartz_composer
Here you can see just the tip of the iceberg of what you can do with it: http://vimeo.com/videos/search:quartz
And you don't want to miss these: http://www.zugakousaku.com/index.php?ref=study-quartz-jp
Now, it's way more than a cutie program to make visuals.
You start by dragging patches and connecting points with instant ultra cool results. That's good, you don't want your kid to get frustrated by pointers and such (yet)
Back to QC, once you've tried every possible patch, you'll want to apply some kind of logic to the compositions so you need to know what operators are, structures, etc (Learning has already begun).
The most basic example of a Quartz composition I can think of: Drag a video input patch and a billboard patch, connect the output image from the video to the billboard and you can make the composition take the input from the webcam and display it onscreen. That was 2 drag-n-drops and connecting 2 dots. Try beating that. After that you can apply tons of filters to the image. This would be the hello world in Quartz Composer. Much simpler than a C hello world and way much more rewarding.
Other things you can easily do:
So, to answer your question, IMHO, this would be the BEST way to encourage his couriosity and enable him to learn a programming language. Think of it as today's logo (My apologies to anyone involved in Quartz or QC development, I'm trying to make a point)
Hope you and your kid find this as interesting as I did.
Cheers
Hmm... First, Easy to say as AC...
Second, No she's not like that. Little bit of a partier and a happy soul, but still a geek. She had a few long term relationships, and things didn't work out. Decided that the long term goal was a family and decided she didn't need a reason to put it off anymore. So not really f*'d up, just realistic about age, etc... You've gotta realize that after a certain age, things are higher % for defects, etc...
Anyways, this is more or less a post note so that I feel I've defended her in some sense.
--- Relax, that mass muderer is just trying to reduce our carbon footprint, one fetus at a time...
As if those were your first programs!
...
I still remember my ZX81 code that hooked me on programming, burnt onto my retinas:
10 DATA "Anne", "Barbara", "Caroline"...
20 DATA "lingerie", "a nurse outfit", "nothing but perspiration"...
30 DATA "touches", "licks", "kisses"...
40 DATA
100 PRINT G$(RND * G); " in "; C$(RND * C); " "; A$(RND * A); " my "; P$(RND * P)
120 GOTO 120 - 20 * (INKEY$ = "Y") + 10 * (INKEY$ = "N")
130 CLS
He'll be able to edit that into shape in no time - but may prefer to work on it alone.
Are you doing this because he wants to learn how to program, or are you imposing your own interests on top of his? The worst thing you could do when attempting to encourage someone to do something is to force it on them. I can't begin to tell you how many activities I truly hate now simply because someone thought it would be "good for me to try them" using scare tactics and coercion as a means of getting the desired result.
(Needless to say, I'm not a fan of religion either...)
8==8 Bones 8==8
I can spend enjoyable time on projects that seem like they'll be good tools when they're done. I have a lot harder time staying interested when the end goal is something else somebody else made up and told me to put together.
so I'd say the answer is: what's your son interested in? web technology? kernel development? game? help him find the starting point for whatever, and encourage him to think up achievable first projects. From there, it sucks 'em in.
One of the things that sucked me into programming was realizing that I could play with concepts. I got my eyes opened when I first learnt about finite state machines. This simple concept is so beautiful and yet so powerful. That was 25 years ago, but it sure hasn't chaged a bit.
I would take hands off from games -- it takes too much, too long until you have something that makes you proud. You want to make sure the road to satisfaction is right: short at the beginning, building up later.
This is the wrong time to pick Python for teaching. Python 3.0 is coming out in months. It's going to be incompatible with all the 2.x versions. There's going to be major changes that effect everything all the way down to "Hello World."
That sounds like a big confusing mess to deal with explaining to a student.
Link to python 3.0 info... http://www.python.org/download/releases/3.0/
Python 3.0 will change far less than most libraries' APIs do between major version releases. If this is really such a deal breaker for you, trust me, noone in the Python community will miss you.
Hell, noone in the wider programming community will etc.
This isn't pointless change just to give the Python-detractors something to crow about. (God knows there are times I'd wish Python 3.0 had kept print as a keyword just so people like you would STFU about it.) When did improvement become so damn anathematic to people in the IT industry?
It's change or die.
This means that the beginner's language must be very simple, have a very clearly defined instruction set, and it must be able to keep the would-be programmer's interest for a long enough time for the lessons to sink in. It is entirely OK if the language isn't the current fad, useful in real life, general-purpose, or even Turing complete, as long as it is simple enough, and the output is something else than just boring plain text.
I haven't tried programming Lego Mindstorms myself, so I'll have to stick to recommending Logo. (which, for a young teen, is not at all too childish.)
The programmer will tell you when it is time to get to more "useful" languages.
I suggest to let him exploit one of those stupid and inhumane webgames that are out there in dozens. There is much fun in doing it and he will learn really a bunch of useful things about his system and programming also.
For example:
Take a look at a game like space4k.(com|de)
Show him a bit of java programming, show him how to use a library to web-datamining/testing like httpunit and how to do some simple things with that. Also do some funny stuff with java and sql based on mysql or the like.
Then go and try to build a working bot on that sort of game. Grinding-games like this one do not deserve that humans spoil their time on stupid clicking. But there is a great use for this sort of game: learning. And he will also will find out, that being smart is not always without problems, cause people really *hate* scripters in those kind of games.
He will have fun, he will have a live response to what he is doing (very life, I promise!) and he will have all up and downs that come with such a job.
By the way: programming in java and mining data, responding to web-forms is a really great sort of knowledge for the near and far future. Data is something like gold in our information society and to mine it with a bot is something like mining '49. It's just a game so nothing can happen, nobody is hurt (who counts).
java, sql, httpunit
Basetechnology with fun. And I promise if he even manages the captacha in the game he will be a smartass in programming and will lick blood.
with best regards -
most hated "player" of space4k.de
-by the way- i just see a captcha down here in slashdot. It would be fun to crack that one, too...
I got into programming through (then Macromedia) Flash. The nice thing about Flash is that you can get immediate, visible results with very little programming; there are various ways to perform many common activities, with varying degrees of programming knowledge required.
For example, you can 'tween' motion by setting keyframes and controlling the easing in the IDE, or you can script the motion using event callbacks and 2D transformations. Once you become comfortable with the IDE approach, you begin to find its limitations, and to understand the utility of a programmatic approach.
ActionScript also has the advantage of having a lot in common with JavaScript, which offers easy entry into another domain where you can achieve a the satisfaction of getting visible, substantial results with just a little effort.
My ActionScript started out crude but grew increasingly ambitious, until I left it in search of greener pastures - and found a range of more powerful languages. These days most of my code is server-side, and a substantial amount of it runs without any visible result (or user interaction) at all - but it was valuable (and encouraging) to me at that early stage to encounter such an expressive, sensory environment to learn in.
---- death to all fanatics
I don't look at programming as a primary skill. What I think we should be doing is teaching algorithms. Then, in the teaching of algorithms, we ask the student to use a specific language or method to program the algorithm. In my view, the algorithm's implementation in the target language will drive the student to excel. The student will be learning something useful. Just to teach programming and doing a simple read/write to a file, or simple task will not develop the proper skills and in the latter case the student will not receive the challenge to master the language. A "for loop" in any language is still a "for loop", the student needs more challenges.
Leslie Satenstein Montreal Quebec Canada
Drop *nix and get a computer with Windows. Its what they will get in school and most other environments. Get a book on programming games for teens. Something that has a good framework so it is easy to get things started. It should be all about having fun. The techinical stuff will come later - if he has an interest.
I'm 21, and no one in my family is a programmer or anything similar, so I discovered programming through school. I'm not by any means qualified, although I do plan to be, so I'm coming from a totally 'lay' perspective. So, firstly, I learnt in Java, and despite the complete stupidity of the syllabus I was taught I absolutely fell in love with programming and have subsequently read more, improved, fixed the mistakes I was given and dabbled in Python and peeked at some others. My point here (though it isn't readily apparent) is that I think Java is a great language to start with, because it's relatively intuitive and predictable once you understand the basic structures, and there aren't tricky little words and symbols that make sense if you're advanced but not if you're 16, and it's clear, and especially because it has great documentation, that makes it easy to explore on your own. However, far more important then the language, is the love of the process. In my limited experience, when it comes to programming, it seems that love and aptitude go together - those who love problem solving and tinkering are good at it. And for me, there's not much that compares to the joy of creating a problem and solving it elegantly (by my own standards). So, (long story short) when I had the opportunity to tell a couple 16 year olds 'what programming is', I started by giving a problem: how would you draw a square using very simple commands? (one of them had played with Logo many years ago, as had I). When one came up with the simple answer, he was in ecstasy and rapture! And since then, I've corresponded with him, giving him little tidbits and hints that I've gleaned in my self-teaching and practice since school, to supplement his silly syllabus, and he's loving it and doing well. I've also realised that my simple example problem is easily extenable. Seeing as there are only two commands repeated four times, you could introduce the concept of looping - but guide him to the idea before you teach him the implementation in any language. Then what if you want to be able to draw any shape? That leads to variables, and so on. But essentially what I'm saying is guide him to the principles first, then show him how to implement them, and let him make his own problems (I mean bugs, not a project he can do) along the way. Start him off with text applications, using command line and text editor, because that's actually more fun! (I started with a horrible little IDE and unnecessary boilerplates). Such problems as a half-pyramid of asterisks is wildly invigorating the first time you do it. And file IO and interactivity, and pretty GUIs are the kinds of things that keep it fun and interesting. (And if he can make a simple game - hangman, for example - that's perfect). Game modding and kernel hacking and writing in machine code may be fun for experts and geniuses, but for an average boy of 16 (or even 21) that is daunting and something just to be skimmed and envied - the prospect excites me, but I wouldn't want to start there. Also, as I said, I picked it up at about 16 in school, almost by accident (I wasn't very good at accounting, and that was pretty much the only other option my little school was able to offer), and that served me fine. There are things I had to relearn and unlearn, but that's just made me better at it. So encourage him to take it up at school, and let the professionals do most of the work, while you can help him and guide him from the side. No shame in that! That said, if he doesn't have the natural love of it that you and I do, there's not really any point in encouraging him (same way there's no point encouraging me to take up professional golf). It's something that people either fall in love with at first sight, or just don't really care for, and if he isn't in love with it, he won't get the pleasure you do from it. Just my long and meandering 2 cents worth. I hope it helps, and I think it will.
I remember that my favorite TRS-80 Color Computer projects were the ones that had some sensor or link to the real world. I would use CDS cells to tell if anyone was walking up to the front door, and then have it play some spooky sound...
Today, I'd try to work a Wii remote and a webcam into a project, and have it do something that your son will have to show all his friends... PyGame lets me do things like play sounds when my son jumps on a DDR mat... (He's three, and I use his voice for the sounds.) Projects like this hopefully contrast nicely with that impersonal plastic feeling that you get in a toy store these days.
Python would be my choice of language... although Flex would be fun too. At some point, expose him to some assembler and C just so that he starts to develop a model of what is really happening inside the box when he programs it.
Celebrate Excellence!
Programming is something I dabbled in since I was 11, copying BASIC programs out of the back of Boy's Life magazine, I think. But I didn't really understand it, and I didn't really think I could succeed at it, until I learned how to use a debugger.
I think one thing that really prevented me from understanding programming was that I couldn't see what was going on underneath. I would code a program, run it, it would die with the message "Segmentation Fault," and I would have to go over the program again with only a small idea of where it had failed. Using a debugger to go through it line-by-line, and look at all of the current values for the variables, was a tremendous boost for me, not only in ability, but also in confidence.
Unfortunately, no one really showed me how to use a debugger, especially early on. It was something I had to find accidentally at age 22 or so; I think it is taken for granted sometimes. The closest I came to seeing a debugger in a class was a 10-minute overview of Eclipse in a 300-level Software Engineering class, and that was after I'd taken at least six programming classes.
The best thing you can do after you have a good project picked out is help set up the environment and show him the tools a programmer has at their disposal.
If you love your son, encourage him to NOT study programming.
Even if he gets straight "A's, his competition for a job in technology won't come from around the neighborhood, it'll come from around the world. Why hire a Bachelor's degree graduate for 60K when you can get a PHD for 30K in India, China or the Phillipines?
Tell your son to study air conditioner repair, auto repair, plumbing or carpentry. These jobs, although similarly subject to salary deflation due to cheaper offshore workers coming into this country, can still be viable income sources for enterprising and competent young adults.
Longer term, the salary deflation present in technology isn't likely to improve. R&D spending by the big tech companies isn't likely to improve anytime soon and start ups are hard to get one's foot into. You must encourage your son to pursue economically viable professions.
Best,
BT
Boys like to break stuff. Show him how to crash a machine remotely on your home network. Explain how to analyze a system to compromise it. Show him the movies Sneakers and Hackers.
As a parent you are also in a good position to teach him the ethics of white hat hacking.
This should give him motivation to learn how to program and develop a deep understanding of how systems work.
It worked for me.
Oh man, brings back memories. My first programming exposure was QBASIC with help from my dad and a book called QBASIC for kids (or something like that, it was actually targeted for children programmers! How many books like that are there today?) But I didn't return to programming until middle school with... yes... the TI-83. (Not +, which came out the very next year to my chagrin).
I started with simple number counting programs, progressed to moving things around the screen with getkey and output, eventually made a little racer-type program.
I continued to improve, however, and you'd be amazed what you can do with the very limited BASIC language. By high school graduation I had made small rpgs (never finished them sadly, but it was fun to battle and level up), a minesweeper clone, and my personal favorite Gravitation, a connect-four style game for two players of my own creation. I long since abandoned GOTOs, even to the point of coming up with my own graph-screen based menu system to replace the built in one that is hard-coded to GOTOs.
There are a lot of handy little tricks you can do in TI-BASIC, for instance, if you start a line with " you can make it a comment (it is a string, but it is ignored if it isn't assigned to a var). The most recent piece of data is always automatically stored in the ANS temporary variable, so you can use it to pass arguments between subprograms. While variables are global and limited to the alphabet (and theta), you could define your own lists and use those instead (or use them as arrays). I even mimicked recursion in my minesweeper clone by using a list as a stack. (I had to use two programs, however, since I don't think you can have a program call itself). For graphics, it helped to set the window size to values between (0,0) and (64,-92) [I think those were the pixel counts, but correct me if I am wrong] so that to match up pixel position with other graph functions (such as line) all you had to do was reverse the order of the X and Y coordinates, and make the Y value negative. Once I figured out that trick, graphical programs were a breeze.
The constraints in TI-BASIC also really force you to think outside the box as a programmer. Space is incredibly limited, so you learn to make every byte count, and optimize code as much as possible. Additionally, the processor is slow, so you learn ways to improve your algorithms for speed.
Sure, you could program ASM programs. But for me, the weaknesses of BASIC were all part of the challenge. (Plus there was the advantage of being able to code it directly on the calculator, especially when bored in class). Others liked wasting time playing games on their calculators. I always had more fun making them myself, and it was around that time that I realized I wanted to make programming into a career.
I'm still tempted to pick up a TI-84+ silver to replace my crummy TI-83 with-no-archive-memory. I miss programming the thing.
I installed Linux on a car, but it crashed due to bad drivers...
This is my first post here. To get your son interested in programming is not the question; he already is. The task is to get him to actually program! I feel that the best way is to pick a language (I like C++), get him SIMPLE books (I like the "For Dummies" books myself), and then set him tasks that you applaud when accomplished. The applauding is VERY important! I suggest graphics oriented tasks such as: Make a word move on the screen. Make a ball move up and down. Draw a square with corrected aspect ratio. Make a ball that bounces around the screen. I suggest Text oriented tasks such as: Make a quiz using Data statements. Make a math quiz with random questions. Make a "Mad-Libs" game with user inputs. Make a scrolling "Times Square" sign. Limit his access to libraries of functions for now. Show and encourage him to to create his own library. Remember: Your son may not actually "take" to programming. He may not be as fascinated with the feeling of power we get from controlling a machine as the rest of us are.
I would recommend a class. For myself, and probably others, it really helped to have a teacher who know which bad habits to discourage, and who be able to set up the details (compiler, header files, etc) so that all you need to worry about is writing your program. I tried to learn things by "reading a book", but that never worked.
I felt like Java was a good place to start. I was a TA for some summer school Java at the U of Minnesota, and we had several middle school age kids. Java is nice because you can do all the regular learning-to-program stuff, but it also has a lot of simple graphics capabilities, which was the only thing the kids were really interested in. The goal was not to teach the language, but to provide a constructive play environment. Like Legos.
Anyway, I would investigate your local universities and community colleges to see what kinds of summer programs they have.
I have the same situation; a 14 year old son and he wants to learn to program. I am teaching him to program using Python and Pygame to create a simple 2D game. It is working great; he is excited to learn new concepts so that he can add new features to his game. I am glad I didn't start him on PERL or C; I can see now that Python is a quick way to learn to program. He can learn other more specialized languages when he needs them. Pygame provides libraries that allow him easy access to what he wants to do.
The simple programs that everyone thinks of writing ... have already been written. Most of them are on SourceForge.
Googling an idea and seeing ten free programs that already do that is a great way to drain the excitement, I can tell you.
there is no god but truth, and reality is its prophet
Do things like the old power cartridge for the commodore 64 still exist ? I remember watching all those demo's with their funky interrupt calls who were like able to use more than one colour at once in the outer border of the screen ... the plasmascreens (omg!!!) and much more ... i wanted to know HOW they did that, an the power cartridge, with its ability to freeze the computer at the exact moment where it put something on the screen was like the best tool i ever had, it got me onto assembler cos basic was (and in fact still is) way too slow to get anything useful done (and isnt all that good in helping you understand how the machine itself works, which is, imo , basic to decent coding)...
no ?
i must have been 10 or 11 at the time so if i can do it ... i'm sure anyone can :=)
Free speech was meant to be free for all... how can anyone grow up in a nanny state ?
My Dad was/is a programmer, and I always wanted to make games. I started trying when I was 11, trying to use engines and toolkits like rpgtoolkit , 'Custom' and a few others. There's a big list here: http://www.ambrosine.com/resource.html
The problem was, they couldn't do exactly what I wanted, so I was always trying to use their little scripting languages for things they were never intended for. I always thought programming would be too hard though, and maybe it would have been at that time. I don't know. But when I was 13 or 14, I did learn C++, my first language. Basically, I just learned it from a big book my dad has. First I went part of the way through 'Instant C++ Programming' by Ian Wilks, and then I sopped learning for a while, and came back using 'The Waite Group's C++ Primer Plus' by Paul Snaith. C++ Primer Plus is a much better book, because it's newer, and teaches OOP better and stuff, but Instant C++ Programming might have been better for starting. For example, the C++ Primer Plus didn't even teach about if statements until the 5th chapter! So I was using 'while' loops, not to loop through stuff, but in place of if statements, because I wanted to use conditional stuff. But anyway, that's how I learned - just using the book, and trying to make games. I wanted (want) to make a big RPG. So, I started off with a VERY simple text based game, where if you pressed 'm' then 'Enter', it attacked in melee, 'M' and 'Enter' attacked with magic, and 'b' and 'Enter' attacked with a bow. You got experience for using each of those, and different stats went up or down depending on which you used most. I was /very/ ready for graphics by this time, even though I didn't even know about C++ classes yet, so I started using allegro. I began by simply using it to output text in a full screen environment, and enjoying being able to do stuff with single key presses. I then drew my own font to use for tiles, and then dropped that and began work on a space shooter game with my older brother. He still does most of the graphics and planning for our games, while I do all of the programming. We actually almost completed the engine for that game, but before we did, we moved back to what we /really/ wanted to make - a role playing game. I was able to start it knowing much more about both C++ and allegro because of the previous things. And that's where I am now. So far I've written about 13,000 lines of code on it. Unfortunately, now all my time is spent doing web development with my other older brother. All the C++ definitely helps me to learn anything new. I think it's definitely still my favorite though. ...and I'm only eighteen...
I guess in short, I was inspired to program because I wanted to make games, and I didn't want to be limited by using toolkits.
Introduce him to competitive programming contests like TopCoder and other programming contest archives such as UVa and spoj.pl
there are some books like c# for sharp kids. it is little but encouraging. it shows the programming concepts like simple everyday things. worth a try
OK - here's where I recommend J (jsoftware.com) as a first language, you all flame me, I call you all a bunch of clueless boobies, and it goes downhill from there.
Ready to get started?
Anyway, since we've already had a number of posts like this, it would be interesting to have some follow-up: what did people end up doing and how were the results?
Personally, I've had no luck getting my daughter interested in programming but she is very much into music composition, so I guess that's something. She did show some interest in an "Eggbert" game when she was little - it lets you design Eggbert video game landscapes/obstacles/rewards that were pretty cool. She was also interested a little bit in some of the J to do some math that could be represented graphically, like pictures of Pascal's triangle modulus some constant - see http://www.jsoftware.com/jwiki/NYCJUG/Projects/Pascal .
You are absolutely wrong about Smarty, which is a horribly conceived and implemented disaster. Don't be such a yapping apologist, just because you managed to throw together your home page in PHP without knowing any other languages.
I am speaking from experience, having had to use PHP and Smarty, and having read the source code to Smarty in an vain attempt to figure out how it worked and why it was so difficult to get it to do even the simplest things correctly. I've been much happier using other better designed templating systems, which I will describe below.
You should read Wolf's Rants about PHP: Truth about short open tags and Smarty.
I use Drupal for my home page, so I know first hand that it sucks, and why. My dislike for PHP comes from hands on experience, writing and reading PHP code, not just reading web pages about it. PHP is not my only programming language, so I don't lack the perspective to compare it to other alternatives.
Python has a wide range of templating systems, some of which are much better than Smarty, and a few of which are almost as bad (but none are worse).
Zope uses DTML, which is unstructured and messy but gets the job done. It also has TAL and METAL, which are cleaner and more powerful, but an incredible pain in the ass to use, and extremely verbose and clumsy. I've written a lot of DTML, TAL and METAL, and I don't want to ever use them again, because I've found much better Python based templating systems since then.
TurboGears uses Kid, which is a very nicely designed an implemented templating system that provides a thin XML veneer on top of Python, and doesn't try to reinvent its own p
Take a look and feel free: http://www.PieMenu.com
Get him Revolution Media or PythonCard. He'll move on in his own time from either.
I have been experimenting with javascript and SVG to make animations for the browser.
Look at this game: http://bighead.poli.usp.br/~juca/code/svg/minigame/minigame.svg
I am now considering to use this to help my teenager cousin. He wants to lear programming and my parents asked me to provide some help.
I agree that it would be great to provide immediate visual gratification. Then, that is why I suggest SVG+javascript instead of the usual HTML+javascript. Because it is much more interesting to draw an SVG in Inkscape, open it in a text editor and attach a script tag than it would be to explain to the boy all those crazy, non-intuitive CSS stuff.
Also, it is a field that provides good oportunities for teaching various concepts, such as XML, (let the boy see the SVG both in an editor such as Inkscape and also in a text editor), DOM handling (getElementById, setAttribute), and even AJAX (when the kid wants something more advanced)!
The benefits:
1) the kid will be learning reusable concepts. All he/she learns can be used also in html. Learning these in an intuitive and friendly environment first makes the html/css stuff less frightening I guess.
2) it will be based on web standards
3) after a quick class about hosting files on a server, the kid will be glad to show his work instantaneously to his friends online. Before that he/she can perfectly work offline editing local files.
Alright, well you asked for the input of a high schooler... Okay so I'm a Senior in high school. I started programming with BASIC and HTML.. Python might be a good start but depending upon the age might be a little complex.. I'm also wondering why your steering him towards *NIX. Thats a mistake right there, I've been forced to use a single OS since I was little, playing games on the lap of my grandfather (an original IBM geek), back on DOS, then on Windows until recently when I bought my own iMac. *NIX is great but forcing him in one direction will limit him. A true programmer should be able to compile code an any OS hes thrown at. Which means if the code is a different dialect, he should be able to convert it, now I know that no one can ever hope to know all the dialects and all the programming languages, for there are far too many. But don't just sit him in front of lenny and have him code exclusivly on one OS. What I think you should do is just see if he shows enough interest in programming to actually sit down and learn the stuff. If you throw it at him, he might loose interest, or it could flourish, who knows. If you really want to peak his interest, just *tell* him about AJAX and go to Facebook or another popular site that heavily utilizes it, show him what AJAX does compared to HTML alone, or simple PHP. That would have caught my interest a long time ago, should it have existed. Leave a editor or IDE window open and blank, and a programming book next to it (go out and buy one even). Tell him your leaving to go do errands (and actually do it) if hes interested you might come home to a new program being created, or a second Hello World, the point is if he decided to do it when he was alone, he'll be interested enough to pursue it as a hobby. Thats my two cents.
Late to the discussion, I would've modded the parent up, but it's already at +5.
Actionscript 3 is strongly typed and OOP, so it won't teach the bad habits of some introductory languages.
For the artistically/animationly inclined, Flash gives you tons of power there. For the more programmatically inclined, Flex is an awesome programming environment that gives you all the application power of Flash Player using MXML, an XML layout language. Both are Actionscript 3. And I agree that there's tons of community. Being web based, it's trivial to share with lots of people.
But most importantly, the investment to build an interactive GUI application in, say, Flex is, in my opinion, as low as it can be and still be a full featured programming language. I'm sure you can build a non-interactive application just as easily in a lot of languages, but applications now, even trivial ones, should be able to let you show things on a screen and click on buttons. I think this is really key. You can DO something, something modest but still cool, and grow what you know by learning to do one more thing at a time. So without teaching you tons of bad practice, you can learn fairly incrementally. (Obviously you should grow up and learn more structure at some point... but that's later.)
If it wasn't clear I think whoever else in the chain said that it's better to start a kid by making them bash their brains against some really initially unrewarding stuff for the big payoff later - where the payoff is big BECAUSE it was hard - is basically crazy. I mean, if the kid WANTS to, they can go ahead. But if the goal is to encourage the programming itself, that's pretty crazy. The goal of that unrewarding stuff would be to make them set and work for long term goals... an admirable skill to learn, but one that's learned by extending what the kid WANTS to work on... you can't both move them into something they don't care about AND set the goals far ahead. It's fun to remember that I wrote stuff in assembly, but only a few people would've kept with programming if that's where they started.
Looking for freelance Actionscript (Flash/Flex) or ColdFusion work and/or freelance developers. Email me, put Slashdot
I'm late, but someone else posted and I replied about Actionscript elsewhere in the thread. I basically think you're completely on target about the goalset of being able to quickly leverage GUI power. But I believe Actionscript (Flex, Flash) is a much better first-choice.
Actionscript is much more consistent than browser JS, which makes it less frustrating to develop in. (I'm not trying to say this is a philosophical problem in JS, and indeed Actionscript is also an ECMAScript language, so they're very close. This is basically just browser divergence, and the political causes of that are beyond the scope of this post.)
In Flex (compared to a browser) the layout language is MXML instead of HTML. MXML has powerful features that expect to interact with Actionscript. And HTML is less consistent, and CSS is browsers is less consistent, for the same reasons listed above.
MXML makes it trivial to add considerably more complex GUI elements, like a tiled list of images or a pretty chart. (Trivial as long as your data is in a convenient format, XML setup the way it expects. If your schema is different it's still easy, but it's more than 3 lines of code.)
Looking for freelance Actionscript (Flash/Flex) or ColdFusion work and/or freelance developers. Email me, put Slashdot
I'm 20 right now and I study computer science at a n university. About ten years ago I started being interested in programming. My dad thought it was great(he's and engenieer and no programmer, but still) so he asked some folks for advice and I ended with a huge book about visual basic 6.0. It was new, it was easy, it was trendy... and I hated it. So I returned to playing starcraft/diablo/whatever. A couple of years later it just happened to pass that I got my hands on a book about C by H.Schildt and it was love from first sight if you know what I mean.. Now I'm pretty much aware that I've inherited some pretty bad habbits from his books, but I don't care that much about it, I'm trying to improve every day as it is :)
So my advice is - don't make any choices for your kid. Show him as much as you can and let him decide. He might love Python, and he might not. He might love graphics, and yet again - he might not.
Comment removed based on user account deletion
The above over-reaction is a perfect example of why right now is a bad time to use Python to teach a new young programmer. Wait at least a year until all the Pythonistas aren't as oversensitive to questions about Python 3.0.
Imagine some poor kids who dared to asked about why the print statement is different than it was last month on a python message board or mailing list getting this kinda crap?
"If you don't understand the new print staement, LEAVE. Trust me, noone in the Python community will miss you! Hell, noone in the wider programming community will etc."
"Shut up. Just learn to like that new print statement. It's CHANGE OR DIE."
And God have mercy on the poor kid who asks the Pythonistas about why they are going to the trouble of breaking python, but not addressing the it's huge concurrency problems while it's being broken.
You really are a dopey little fucker, aren't you? I'm not entirely sure how your uppercasing my words makes me the one screaming...
Wait at least a year until all the Pythonistas aren't as oversensitive to questions about Python 3.0.
You didn't ask any questions, you made unsubstantiated claims that weren't supported by anything, not even the link you posted to. What the Python community is 'oversensitive' to is lies and bigoted rhetoric. What I did was highlight your bias and inaccuracy, the audacity of which has clearly shaken you.
Did Python murder your parents before your eyes at a young age or something?
not addressing the it's huge concurrency problems while it's being broken
And out comes another tired old trope. You clearly don't know about the multiprocessing module that's being released with 3.0. But again, don't let the facts get in the way of your bullshit posturing.
The only "concurrency problems" Python seems to have at the moment is the lack of a 'make this run in parallel without me having to do any thinking' switch. Good luck with waiting for that.
idlemachine" "You really are a dopey little fucker, aren't you? I'm not entirely sure how your uppercasing my words makes me the one screaming"
Please demonstrate to us all how there is a "calm voiced and rational" manner in which you said...
"You really are a dopey little fucker, aren't you?"
"Did Python murder your parents before your eyes at a young age or something?"
"If this is really such a deal breaker for you, trust me, noone in the Python community will miss you.
Hell, noone in the wider programming community will"
"God knows there are times I'd wish Python 3.0 had kept print as a keyword just so people like you would shut the fuck up about it."
"When did improvement become so damn anathematic to people in the IT industry? It's change or die."
Someone posts batshit crazy statements like those... it's a given they're screaming rants.
And as I've said in two posts and you have proven for me, idlemachine... the reason one should not teach Python to a young programmer isn't the language, it the changes that are a couple of months away that are going to make all the current tutorials and learning resources wrong, as well as the furor and instability surrounding the Python community] right now. True believer Pythonistas, as idlemachine demonstrated, are very, very oversentitive about the topic of Python 3.0 changes and detonate at slightest suggestion that everything now and in the future perfect in Pythonland. It's just not the place for a young learner to be right now.
Good luck with that.
Here's a little hint before I go: try actually backing up your claims with some external evidence, you might come off less as a whiny little cuntsmear that way.
Might.
Look at the title of the thread, dumbass.
"How To Encourage a Young Teen To Learn Programming?"
I am the one who's been on point and in proper context the whole discussion... what is or isn't a good language for young programmers to learn right now. The subject these various aspect of the Python language you keep on trying to change the subject to, and it never was. It's whether or not the upheaval surrounding a language (Python) that has chosen to make itself obsolete in a couple of months is an appropriate choice to learn right now.
You, on the other hand, are exactly the type of hypersensitive Pythonista fanbois who prove part of my argument that Python is not a good language for young learners. Nobody is going to learn anything from hypersensitive argumentative assholes like idlemachine. The only thing a pythonista fanboi like idlemachine is going to do to a young programming student is make them quit programming before they even get started.
Anyone that dares try to raise a question about the one true faith of the Pythonista gets treated just like I have here... with a level of outrage normal human beings only display when they find out one of their siblings have been murdered or their mother was gang-raped.
I'm sorry, I meant to say hyperbolic little cuntsmear.
My mistake :)
idlemachine, who a few posts before this said...
"Did Python murder your parents before your eyes at a young age or something?" ...dares to call someone else "hyperbolic?"
LMAO!
So you claim in the middle of the night, you claim you are some other anonymous individual who just happened to find and start reading a 2 week old 1000 post thread and further you read this many posts into idlemachines ranting, too, huh?
Damn idlemachine, that's sinks to a new low around here. Someone has to be just sick with desperation to try to create fake agreement posts.
Really fucking desperate. Hillariosly so! ROFLMAO!