First programming language for high school students?
-
I don't want to start a religious war here or have to wade through a history of computer languages. I would have posted on /. for that! My 15 year old son (ninth grade) wants me to teach him programming. I don't want to traumatize him with assembler -- dealing with me should be sufficient. What would be a good first language to use? We both think a barebones implementation of Life (John Conway's ...) could be a good first project. Source code should be available in virtually every language for every possible platform. He's looked at Scratch and MindStorms. He thinks they are too simplistic and wants something that is deeper. (I know MindStorms has C++, etc., but the Lego platform isn't inspiring him.). And, I don't even know if either Scratch or MindStorms is up to the task of Life. Next up might be Micropolis (SimCity) although that could be a bit daunting. Development platforms can be XP or OS X. Thanks all, David
When I was in college the first thing we learned was OOD using Pascal, then moved on the C++. If you want to tie him down to Microsoft platforms then teach him VB or C#, if he truly wants to become a programmer start him with C or C++. That way he can learn to properly manage memory usage. If you start him in .Net he will end up like all these other fresh programmers coming out of school that have no idea how to properly manage memory or a thorough understanding of how a computer works. Just my 2 cents. Anthony
-
I don't want to start a religious war here or have to wade through a history of computer languages. I would have posted on /. for that! My 15 year old son (ninth grade) wants me to teach him programming. I don't want to traumatize him with assembler -- dealing with me should be sufficient. What would be a good first language to use? We both think a barebones implementation of Life (John Conway's ...) could be a good first project. Source code should be available in virtually every language for every possible platform. He's looked at Scratch and MindStorms. He thinks they are too simplistic and wants something that is deeper. (I know MindStorms has C++, etc., but the Lego platform isn't inspiring him.). And, I don't even know if either Scratch or MindStorms is up to the task of Life. Next up might be Micropolis (SimCity) although that could be a bit daunting. Development platforms can be XP or OS X. Thanks all, David
I can't do that Dave. wrote:
I don't want to traumatize him with assembler
And why not? a) you'll know if he takes a shine to that he can tackle just about any other language :-D b) that's how a lot of the older crowd here got started in the first place OTOH I do understand where you're coming from...but I'm not sure I'd appreciate my job today as much had I started with today's high-level languages...
-
I don't want to start a religious war here or have to wade through a history of computer languages. I would have posted on /. for that! My 15 year old son (ninth grade) wants me to teach him programming. I don't want to traumatize him with assembler -- dealing with me should be sufficient. What would be a good first language to use? We both think a barebones implementation of Life (John Conway's ...) could be a good first project. Source code should be available in virtually every language for every possible platform. He's looked at Scratch and MindStorms. He thinks they are too simplistic and wants something that is deeper. (I know MindStorms has C++, etc., but the Lego platform isn't inspiring him.). And, I don't even know if either Scratch or MindStorms is up to the task of Life. Next up might be Micropolis (SimCity) although that could be a bit daunting. Development platforms can be XP or OS X. Thanks all, David
I started programming when I was 12 (6th grade). I am now 15 (Turning 16 in November) I think I started with BASIC. I just got the grip of how programs work (Source, compile, etc) and then I found out about Visual Basic (VB.NET). That and Microsoft's "Absolute Beginner's" Video tutorial series really hooked me on. Absolute Beginner's video guide is like a step-by-step video tutorial that really helped me learn. Not only it goes through projects but teach essential topics and theories. It also brushes up on Object-Oriented programming with the usual "Car" object with mileage, mpg, model, year, maker, etc. By the time I could consult the MSDN documentations and write a task-manager equivalent app by myself, I knew I was growing out of the language. Then I tried to move on to C# but I found the transition a little difficult. I didn't give it enough time and patience for it to bloom... Then I found Flash. Actionscript goodiness. This is where I spent a good solid 2+ years on. I can't generate life-like trees, but I can make a full website full with transitions and dynamic data loading and video playing and mp3 play list and all the goodness. Actionscript is really easy to get in to. Its basically Javascript modified by Apple to fit Flash's needs. Then now, I'm moving on to desktop. I'm learning Cocoa and Objective-C. So far I've found it the best language to learn (that is most usable in the real world). Visual Basic's nice, but when I see Objective-C code and Visual Basic, I see so much needless junk in VB.NET it just makes me cringe. Now as for where your son starts, it is really up to you. Where did you start? Also, patience, patience, patience is the most important thing, and this is a good opportunity to teach your son lots and lots of patience. Tell him that instant gratification does not come without years of hard work. Scratch, even though it seems simple, can teach a lot about computer science. The goal of scratch is not memorizing syntax and methods, but learning how computers and programs function. The "theories" should be taught in Scratch where you don't have to emphasize with syntax and all the "confusing" things. Then perhaps should move on to Visual Basic, and after almost mastering that, perhaps he should start on Objective-C/Cocoa (About Senior by then?) And if his computer isn't a mac (his primary usage computer) then he should get started on C/C++. Good luck to your son and his journey, and feel free to have him email me anytime. I'd love to talk with him, after all, I'm
-
Concerning the typing I merely suggested that neglecting something the kid already has learned (hopefully) within something new that he wants to learn is not a useful argument. I didn't say I want to teach him typing in addition to programming, just that the property of a language not to take care of proper typing is not sth that should be an argument in favor of it! Concerning the complexity of what someone might learn, we're not talking about a 3-year-old playing with colored bricks, but an intelligent, curious teenager who wants to learn something new. If he really wants to learn something, give him a challenge, not something he gets bored about after 5 minutes. Taking myself as an example, when I was 15, I was able to spend days and weeks on given problem, such as solving the workings of a Rubik's Cube. I even worked to improve my findings much later. OTOH other 'puzzles' that I could work out within a day I all but forgot about, knowing that I would be able to relearn it on a whim. I don't know what your preferred style of learning is, but in my experience, I learned least from easy successes, but most from hard earned failures! In the end it was the latter that drove me to learn even more and try to do better in the future, try to anticipate all those nasty little bugs that are the daily bread of any programmer. I know, some people prefer the easy way, and with powerful frameworks like VB.net you can get a long way. But it is exactly those people who have the most difficulty when they are forced to switch to other, more restrictive, programming paradigms. I know that, I've worked with them. Maybe my conclusion was a bit unclear. To be more concise: If you think your kid really wants to learn how to proper program and has the mind to grasp the concepts, do him a favor and start with a language that offers some insight into proper design and programming paradigms. If you're unsure of the longevity of your kid's interest, start out with something more accessible such as VB. My advice however is, if you do that, closely watch your kid and reconsider your decision on a regular basis. Don't hesitate to jump to sth more challenging if you believe your kid can cope with it!
-
I don't want to start a religious war here or have to wade through a history of computer languages. I would have posted on /. for that! My 15 year old son (ninth grade) wants me to teach him programming. I don't want to traumatize him with assembler -- dealing with me should be sufficient. What would be a good first language to use? We both think a barebones implementation of Life (John Conway's ...) could be a good first project. Source code should be available in virtually every language for every possible platform. He's looked at Scratch and MindStorms. He thinks they are too simplistic and wants something that is deeper. (I know MindStorms has C++, etc., but the Lego platform isn't inspiring him.). And, I don't even know if either Scratch or MindStorms is up to the task of Life. Next up might be Micropolis (SimCity) although that could be a bit daunting. Development platforms can be XP or OS X. Thanks all, David
I asked the same question for my 11 year old... albeit on another forum. I think the best bet is to evaluate what interests him, and try to work around that. I had tried scratch, but it didn't quite catch my sons interest, though I thought it was good. He's interested in writing his own comics/animations, so I'm looking for something that would enable him to create animations from a somewhat programming point of view. I'd recommend also, as did others, something gui oriented.. so make it catch his interest/be in his interest area, and make it gui oriented. Finally, if he has the patience to put up with brackets, case sensitivity, etc, then don't worry about c++ being too hard, but if those are too much, try some form of basic, or maybe if you can get more graphical, delphi/cbuilder sorts of ide's. good luck Jeff
-
Sorry, I've at least had the decency to point out both my opinion and personal experience that lead to this opinion. If you feel that's bullshit, fine. If you could provide arguments as to why this is bullshit, all the better. I might consider it worthwhile, I'm not perfect after all. But please stop flaming, thank you.
-
I don't want to start a religious war here or have to wade through a history of computer languages. I would have posted on /. for that! My 15 year old son (ninth grade) wants me to teach him programming. I don't want to traumatize him with assembler -- dealing with me should be sufficient. What would be a good first language to use? We both think a barebones implementation of Life (John Conway's ...) could be a good first project. Source code should be available in virtually every language for every possible platform. He's looked at Scratch and MindStorms. He thinks they are too simplistic and wants something that is deeper. (I know MindStorms has C++, etc., but the Lego platform isn't inspiring him.). And, I don't even know if either Scratch or MindStorms is up to the task of Life. Next up might be Micropolis (SimCity) although that could be a bit daunting. Development platforms can be XP or OS X. Thanks all, David
-
It's tricky. VB vs C#, I am a Basic refugee myself and I must say after learning C# I found it much easier to learn other languages.
He who asks a question is a fool for five minutes. He who does not ask a question remains a fool forever. [Chineese Proverb] Jonathan C Dickinson (C# Software Engineer)
I actually find C# syntax much simpler than VB because it uses symbols rather than words. Symbols help the visualization and picturalization(?) of the code... that is, you can SEE it better.
“Time and space can be a bitch.” –Gushie, Quantum Leap {o,o}.oO( Looking for a great RSS reader? Try FeedBeast! ) |)””’) Built with home-grown CodeProject components! -”-”-
-
I can't do that Dave. wrote:
My 15 year old son (ninth grade) wants me to teach him programming.
If you are doing the teaching, I would choose a language that you know back-to-front - nothing worse at that sort of age than a teacher learning along with the student. Also, instant gratification is good at that age (!) so something GUI has the appeal of getting something visual up and running quickly. I taught basic VB .Net to students of this age at school - and those with at least 1/2 a logical brain picked it up pretty well - but they really needed to see something happening quickly. If I were you, I'd write a simple game of Life in whatever lanbguage first, so you have something to show - then you can take him through the development step by step. I personally think that this is not too young an age to introduce OO concepts too - so teaching OO development can make more sense if it is introduced early. If you produce the basic model, with appropriate classes - then when he gives it a go, there's always something to compare his results to, and to help out if he's stuck.
Take a chill pill, Daddy-o .\\axxx (That's an 'M')
maxxx# wrote:
I can't do that Dave. wrote: My 15 year old son (ninth grade) wants me to teach him programming. If you are doing the teaching, I would choose a language that you know back-to-front
I definitely agree with that.
maxxx# wrote:
I personally think that this is not too young an age to introduce OO concepts to
Object oriented concepts are popular because they are easy and natural. I would certainly start with OO and then if he's really hardcore get into more mathematical things like functional programming, but definitely don't start with functional programming unless he's a math genius.
“Time and space can be a bitch.” –Gushie, Quantum Leap {o,o}.oO( Looking for a great RSS reader? Try FeedBeast! ) |)””’) Built with home-grown CodeProject components! -”-”-
-
I wish I had started with assembler. Nothing teaches you to write good code better then knowing what that code is actually representing. However the instant gratification aspect is important to helping him stick with programming. C# and winforms would be a good start in my opinion (as long as you're familiar with it) I think C# opens up the world of other languages like C++ or php a lot easier then VB.
Start with a console app--it's gratifying enough to get the basics and once he understands the sequential stuff, move onto more thread-based event-driven stuff like winforms. But I vote for C#, it's much cooler and he'll probably appreciate being taught a real language. :)
“Time and space can be a bitch.” –Gushie, Quantum Leap {o,o}.oO( Looking for a great RSS reader? Try FeedBeast! ) |)””’) Built with home-grown CodeProject components! -”-”-
-
I don't want to start a religious war here or have to wade through a history of computer languages. I would have posted on /. for that! My 15 year old son (ninth grade) wants me to teach him programming. I don't want to traumatize him with assembler -- dealing with me should be sufficient. What would be a good first language to use? We both think a barebones implementation of Life (John Conway's ...) could be a good first project. Source code should be available in virtually every language for every possible platform. He's looked at Scratch and MindStorms. He thinks they are too simplistic and wants something that is deeper. (I know MindStorms has C++, etc., but the Lego platform isn't inspiring him.). And, I don't even know if either Scratch or MindStorms is up to the task of Life. Next up might be Micropolis (SimCity) although that could be a bit daunting. Development platforms can be XP or OS X. Thanks all, David
How about Java? Its available everywhere (all os's), and is quite common and useful in the outside world. My 9th grader had a mini introductory class and seemed to pass it. He didn't want me peering at him much... My intro in high school was Fortran. I don't recommend that.
-
i would vote VB or Object Pascal for a first syntax to learn, i learnt to code with Delphi a long time ago was a useful begining.
killabyte wrote:
or Object Pascal for a first syntax to learn
Why on earth would you teach somebody just learning programming a dead language? Pascal hasn't been used in years. That's like teaching a baby Latin! Personally I don't even agree with teaching so-called "educational" languages like Turing. I honestly don't understand why people claim such languages are easier or better to learn. Why not just start with the latest language and tools? C# and VS2008. That's what I would do. I mean if he has trouble grasping it or it is too much of an overload maybe you could simplify things by breaking it down and focusing on a very simple language. I'll admit the initial overhead of C# (i.e. setting up classes, a static Main method, etc.) could be intimidating but you could always just say "ignore this for now and I'll explain it later". :) Just my 2 cents.
“Time and space can be a bitch.” –Gushie, Quantum Leap {o,o}.oO( Looking for a great RSS reader? Try FeedBeast! ) |)””’) Built with home-grown CodeProject components! -”-”-
-
If not assembler, which would have forced him to know what a computer really is, then Java with clean object orientated code.
Rosenne wrote:
If not assembler, which would have forced him to know what a computer really is
A computer really is a series of abstractions layered on top of one another for the purpose of making complex things much simpler to do. Teaching him assembly would just scare the bejeezus out of him and accomplish nothing.
“Time and space can be a bitch.” –Gushie, Quantum Leap {o,o}.oO( Looking for a great RSS reader? Try FeedBeast! ) |)””’) Built with home-grown CodeProject components! -”-”-
-
I tend to think that it's better to learn from the bottom up, but it probably varies from individual to individual. I’m not suggesting you get carried away with this and start with assembler (when I started I didn’t even use an assembler but rather a monitor) but I do think that some understanding of the low level details makes you a better programmer, even when you’re using high-level languages. I’d probably go with C or C++. If C++ is used remember that you don’t have to learn the whole thing in one go; you can skip things like templates for example.
Steve
When your father taught you to drive, did he start with the chemical reactions of gasoline molecules involved in combustion? Chances are he didn't even bother with the principles of internal combustion. Point being, you can learn this stuff afterward--and in fact if it turns out he really is interested I would fully recommend learning the nitty gritty details of computers--but how it works is not how to use it, and laying this stuff on him will accomplish nothing but tax his memory. And now for a random psychological thought: the human mind needs order and structure to learn. If you start laying a bunch of lower principles on him, without having a logical place (i.e. understanding) to store that information, he will just have to try to remember it all without understanding its purpose (remember cramming for exams?). On the other hand, if you start with the purpose, the reasoning and the big picture, he can start to build that tree up in his mind and put the branches where they belong--and this time because it's (forgive the pun) rooted, they'll stay there.
“Time and space can be a bitch.” –Gushie, Quantum Leap {o,o}.oO( Looking for a great RSS reader? Try FeedBeast! ) |)””’) Built with home-grown CodeProject components! -”-”-
-
I'd have to go with C# as it leads in to C++ very easily and I supect he wants to write games. There is nothing better than C# for getting into game development with XNA. They have a whole series of videos for free from MS on game dev with XNA.
I agree. However, I suggest considering VB.NET. Don't be afraid of VB.NET. BASIC is syntactically more sensibly written than C derivatives, and starts one off with a more common sense attitude towards language syntax. Start him off with VB.NET, suggesting that he may move to C# when he feels like dealing with the C syntax wackiness, as it's closer to C++ and Java. Better yet, show him hunks of code from both C# & VB.NET, tell him the benefits of both, and let him choose which to start with. He can try both, as switching between the two is not a big deal. M$ is concerned with ease of use, and .NET is their pinnacle. He'll naturally learn object orientation and event driven programming with it, and it's easy to get started with. Java is also a good choice, with the NetBeans IDE (it's now the best free IDE). It's got that open source vibe, and multiple OS'es, including J2ME games on phones. But he'll be more productive initially with .NET. Flash is also a viable choice, although it is much more daunting to get anything done in the Flash programming environment, and then you're stuck with knowing only Flash. In summary: VB.NET, C# .NET, Java, maybe eventually C++. Show him Visual Studio 2008 (free edition) with VB & C# code, and NetBeans with Java code. See if he has a preference, and go from there. Then coach him about the logic basics like if/then, switch statements, etc.
-
If not assembler, which would have forced him to know what a computer really is, then Java with clean object orientated code.
Rosenne wrote:
Java with clean object orientated code.
Java clean? :~ Smalltalk maybe, but not Java.
-
I don't want to start a religious war here or have to wade through a history of computer languages. I would have posted on /. for that! My 15 year old son (ninth grade) wants me to teach him programming. I don't want to traumatize him with assembler -- dealing with me should be sufficient. What would be a good first language to use? We both think a barebones implementation of Life (John Conway's ...) could be a good first project. Source code should be available in virtually every language for every possible platform. He's looked at Scratch and MindStorms. He thinks they are too simplistic and wants something that is deeper. (I know MindStorms has C++, etc., but the Lego platform isn't inspiring him.). And, I don't even know if either Scratch or MindStorms is up to the task of Life. Next up might be Micropolis (SimCity) although that could be a bit daunting. Development platforms can be XP or OS X. Thanks all, David
Ultimately it depends on why your son wants to learn programming. What is his interest? Games? Websites? User applications? Server apps? I would choose a language that would lend itself well to his interest and is not overly cryptic in syntax and semmantics. Even if you don't know the language, you could both learn it together. Just start with the basics like variable declarations/assignment and flow control with plenty of application. Don't rush the learning process. From there it will all depend on if he wants to be a software engineer, a software developer or something else. C#, C++, Java, and VB.NET are all good introductory languages. If it were my son, I'd choose C++ and teach him to clean up after himself. ;) It would make him a better programmer in the long run.
Justin
-
I don't want to start a religious war here or have to wade through a history of computer languages. I would have posted on /. for that! My 15 year old son (ninth grade) wants me to teach him programming. I don't want to traumatize him with assembler -- dealing with me should be sufficient. What would be a good first language to use? We both think a barebones implementation of Life (John Conway's ...) could be a good first project. Source code should be available in virtually every language for every possible platform. He's looked at Scratch and MindStorms. He thinks they are too simplistic and wants something that is deeper. (I know MindStorms has C++, etc., but the Lego platform isn't inspiring him.). And, I don't even know if either Scratch or MindStorms is up to the task of Life. Next up might be Micropolis (SimCity) although that could be a bit daunting. Development platforms can be XP or OS X. Thanks all, David
I agree that a well-rounded, quick results language is an excellent starting point, but I prefer to point people to the web. There are so many places to post a free web-page or small web-site complete with ASP, CSS, PHP, Python, etc. I found I could actually teach my (nearly) elderly father to think more like I do by having him write in HTML. The turn-around results are essentially instant. Expanding from that (which is something we have all had to do) to PHP 3 was really easy once I got him to understand that the directives were essential. My programming education was in the order of BASIC -> Pascal -> Java -> C++ -> PHP. Honestly, being dumped from Pascal to Java nearly drove me out of programming. I still can't do Java to save my life. It wasn't until I got to PHP that I got fired up again.
--Taf P.E.B.C.A.K. (Problem Exists Between Chair And Keyboard)
-
I don't want to start a religious war here or have to wade through a history of computer languages. I would have posted on /. for that! My 15 year old son (ninth grade) wants me to teach him programming. I don't want to traumatize him with assembler -- dealing with me should be sufficient. What would be a good first language to use? We both think a barebones implementation of Life (John Conway's ...) could be a good first project. Source code should be available in virtually every language for every possible platform. He's looked at Scratch and MindStorms. He thinks they are too simplistic and wants something that is deeper. (I know MindStorms has C++, etc., but the Lego platform isn't inspiring him.). And, I don't even know if either Scratch or MindStorms is up to the task of Life. Next up might be Micropolis (SimCity) although that could be a bit daunting. Development platforms can be XP or OS X. Thanks all, David
IronPython, using the .NET framework and NotePad++ for editing. Then move to VB.NET with VS Express. Then to C# Then F# Then look at the IL0 to learn (a bit) about assembly ... then grab the MMIX simulator for hard core fun. Then move out to C or C++ Then Lisp Then Squeak (smalltalk) Note, I'm suggesting that one is better than another. However, python is a dynamic language (you can type on the command line an watch things happen). Using NotePad++ you get color highlighing without intellisense (it's good when you are just starting to look things up, you learn more about the classes that way). The exact languages or order after that isn't so important, but it's useful (if he remains interested) to learn how different languages approach similar problems. If he likes programming you might consider getting him involved in one or two of the many coding contests, they can be valuable learning experiences ... and fun :-) Good luck to you and your son
-
Wow! Consider this response my alternative to a 1 vote: Just how out of touch are you with the concept of a kid learning something new for the first time? By your logic instead of giving children coloured blocks with letters on them we should be teaching them grammar instead. People have to get an *interest* in something to learn it, hitting them over the head with a lot of fussy details is exactly the right way to get someone to *not* be interested in learning to program. Typing skills? Who cares? If they are bitten by the bug and interested enough then you don't even need a teacher at that point, they'll learn everything they need to know on their own. I didn't even have a computer when I first learned to program, I found a good book on the topic, got interested and wrote many programs in a notebook by hand until I got my hand on a computer for the first time many months later.
"It's so simple to be wise. Just think of something stupid to say and then don't say it." -Sam Levenson
+1, go with something you know well enough to help avoid too many dead ends. But that said, learning to overcome roadblocks is part of the process. Don't help too much. If the kid has a lot of drive, get something installed since installation these days can be a barrier to success (VS2008? Some other framework / IDE?), then give them a *few* pointers (not necessarily the C kind yet) and step out of the way. Wait to be asked. When walking, some tumbles are part of the process. You can't do that for them, and with out it they can't really learn. Have fun, both of you! P.S. I've heard that after Python, nothing is the same.