I am home schooling a 15-year-old and would like to teach him programming. Our home computers are all running Ubuntu. What are some good options? So far I am leaning toward Scratch, but I also recently found out there is a free Basic project in the Ubuntu repo geared toward teaching, although I haven't checked it out yet. I also have thought of jumping straight to Mobile development, since he has an Android phone and that would be a pretty impressive conversation starter if he could learn to develop his own apps. I'm very open minded on this... sky's the limit!
|
closed as not constructive by MichaelT, Jalayn, gnat, GlenH7, Dynamic May 11 at 0:24
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or specific expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, see the FAQ for guidance.
|
Python is a pretty good choice, and can run on linux. you might want to look into Pygame, a framework for building your own games. There's also a lot of games whose source is available, so you could look at it and manipulate to see how it affects it. Possible Books to use (based on comments):
|
|||||||||||||||
|
|
Are you teaching him as a general learning experience or is this something he wants to do as a career? If this is a learning experience, something like R is probably the most useful thing. It will teach him problem-solving skills as well as the ability to load and analyze data files, which is also very useful. If this is a career thing, C is the appropriate starting point. Believe me, I taught myself QBASIC when I was 13 and C++ when I was 15. He's not too young at all. C will provide appropriate rigour and the least amount of magic. Python or other sloppy dynamic languages are quite inappropriate. They have way too much magic and hidden weirdnesses. I don't hold that making something "fun" by dumbing it down makes the learning experience better. It instead damages the student for bigger things and introduces bad habits. I had to unlearn aspects of QBASIC and then relearn how a computer really works. That's a waste of time and a frustration. editorializing based on my experience as a self-taught programmer who was homeschooled then went to college for a BSCS. Fun is in the mind of the person. There is no reason to select fun as a driving component for non-elective education. The goal is to select that which will raise the student to a higher plane of education. Quick fulfillment through "easy programming" will not induce the satisfaction that comes from deep understanding or deep struggles to learn. Most good hackers learn to program in their teens through self-determination of their course. As the parent/instructor, you have a unique opportunity to either be the driving hand or the guiding hand. I would suggest you start with K&R's classic C book and explain that with that knowledge he can then move to Android development, kernel hacking, GUI work, etc. Fundamentals are absolutely essential to have; once you have them, you can go anywhere. Let him choose where to go after he understands the basics of C. There is no royal road to geometry or programming . It will be tedious, frustrating, and a lot of work, regardless of your pick of platform or language. If the end of the road - the working program - is fulfilling to him, then he will pursue it further and the fun will be extracted from the the activity and the results. edit: Mason suggest Pascal/Delphi. Pascal is also great. It's not as popular as C, and is slightly 'outdated', but it still works at the memory level of the real computer. I liked Delphi a lot but the doc/tool support just wasn't available for at the time (or I couldn't find it). |
|||||
|
|
I saw Scratch demoed the other day by one of its designers, and I am pretty certain that even for a 15-year old it is great to get the basics straight. It even runs the blocks in parallel so that can be introduced right away. When he is comfortable with that - you can do some quite nice things, and show them off to your friends - you can start with all the boring Hello World things, but frankly I think that the instant gratification in Scratch holds a lot longer than most people think. |
|||
|
|
|
Any scripting language (Python, Ruby, Perl) will IMO teach bad practices. Start off with something with more structure and less help. C++ or Java. Higher level scripting languages come with conveniences that are not found at other levels of programming. Callback functions, Start off dumb. Working in something like C++ or Java that forces you to choose a type for your variable and offers excellent language structure enhances your ability to think like a programmer. Then moving on to "smarter" languages will be easier. If you were training a cook would you buy pre-seasoned food? Or would you give him the tools to create it? |
|||||||||||||||||||||
|
|
I started programming when I was 15 using Basic/Pascal and writing text adventures. I remember each room was a But no one was teaching me so I started from what I liked most (i.e. games). My suggestion is to start with a simple language (Basic (not Visual) is still good for a very young one, or you could go with Python) and to avoid GUI stuff (too much boring generated code). To enjoy programming when you are a child you need to "enjoy" it, even if you are using wrong tools (i.e. I don't think I would have become a programmer now if I had started with C++ or C :) |
|||||
|
|
Bash scripting would be good as I find the more I get into linux the more I want to script things and automate stuff. If you want to teach programming, I would suggest something that is easy to grasp and easy to produce something. That something could be anything, but aside from specific languages I would suggest teaching some of the basics of specifications. In this regard, teach him/her an understanding that usually before you just start "cowboy coding" you want to look at the problem you have and come up with a reasonable solution (pseudo-algorithm if you will) for how to approach it. This design fundamentals will be crucial to him/her not becoming frustrated with spaghetti code and learning to design before typing. Python, perl, php, javascript are all good candidates to get up and running. If they take an interest to programming, maybe ask them what they want to tell the computer to do which will steer the course from there. Best luck! |
|||
|
|
|
Since he is so young. I would start with OO programming language like Java or Python. Teach him good practices, and so he doesn't later on begin with bad habits. Also being able to get around in a bash terminal doesn't hurt either trust me. Since I didn't till I started work. Here is a link to a programming book free online for kids to start learning programming geared towards 11th and 12th graders, but again being ahead of the curve isn't bad. How To Think Like a Computer Scientist series is amazing for beginners. |
|||||||
|
|
Josh K is on the right track. Starting out with a scripting language that abstracts away the actual computer he's programming won't teach him anything about computer programming; it'll teach him how to be a script kiddie who can't accomplish anything useful without copying and pasting other people's code. But anything C based will mangle his brain with horrible syntax and hidden gotchas. It's not appropriate for kids. Heck, it's not appropriate for adults! If you want a way to teach someone to program, try a language that was designed to teach people about programming, like Pascal. Take a look at the Free Pascal project, which is available on several platforms, including Linux. It's an easy language to learn, and it's designed as an open-source implementation of Delphi, which is in wide use today in all sorts of important applications, so your student will actually be learning relevant skills too. :) |
|||||||||||
|
|
I would suggest something like Python to get started. There are a number of basics that can be taught in any language such as flow control, functions and variables, and for that purpose an interactive language like Python is a great tool. |
|||
|
|
|
Based on the other answers, Android may be a great choice. Android is Java and XML. My only reservation is how Android is mixed with XML. This could be confusing to a beginner. |
||||
|
|
|
I originally wrote this as if I was talking directly to the 15-year old who was learning programming...heh...I guess I'll have to read the question better next time. As a homeschooler, and now a professional software engineer, I'd say it comes down to a few major things: 1) Find something that interests you and start a project in it. Back in the day I started with text based adventure games. Then I moved to a Star Trek themed "SpaceWar!" clone, from there I just continued to try new languages, and new projects. As a teenager, I mostly did game programming. 2) Find a good language...some here mentioned Python and PyGame...those are good places to start. From there I'd start reading up on the more functional languages (I'm a major fan of Clojure), as those seem to be all the rave these days. 3) Find your weaknesses and turn them into strengths. There was one time where I didn't know a IP address from a netmask. I decided..."I'm going to learn whatever I can about networking until I understand it enough to be able to write my own servers and clients". About a year later, I was doing just that. As a general rule, try to exploit what I see as one of the biggest benefits of being home schooled: you have way more free time than "normal" kids do. When I was in high-school, I would get up at 8am (or earlier) put in a solid 6 hours of schoolwork and be done by 2:30. Then I would sit down and code for several hours. You're going to have to teach yourself, but that's a good thing. Most employers these days are more worried about experience than formal training. So if you can get experience in either working on your own projects, or on Open Source projects, that will look good on a resume. Once you hit 18, look for a good intern job, and once you get your foot in that door, there'll be no stopping you. |
||||
|
|
I am surprised that no one mentioned Processing. It has easy-to-use hooks for graphics, audio and other I/O. Lots of people are using it for education. |
|||
|
|
|
I started programming pretty young, and have since taught it. I absolutely agree with those who have warned not to start with a scripting language that abstracts too much of what is going on. Many such languages are useful to learn, but not as a first language. A good first language is:
Finally, there is a lot of discussion about whether a procedural language or an object-oriented language should come first. I see this question as a matter of taste, though I lean toward object-oriented languages because an OO language can be used to write either OO or strictly procedural code if desired: the same is not true of procedural languages. Languages I will not recommend as first languages:
I prefer to teach C or C++ as a first language. For those who say your child is too young: I was a 13yo living on a hog farm without much exposure to the outside world, except by internet, when I learned it. |
|||||||
|
|
Wikipedia has a decent list of educational programming languages. If you were running windows or could set up a windows VM with windows on it, I would recommend looking into GLBasic. It combines the BASIC programming language, the OpenGL graphics library, and an IDE into one simple to use package. The premium version supports inline c/c++ (academic pricing available). Its also set up well for developing for mobile devices. |
|||
|
|