programming

Questions on how we spend our money and our time - consumer goods and services, home and vehicle, leisure and recreational activities
steve88
Posts: 198
Joined: Thu Jul 26, 2007 9:42 am

programming

Post by steve88 » Tue Jun 16, 2009 8:19 am

Does anyone have a recommendation for a 14 year old who is interested in programming? Can you recommend on where to start?

billb
Posts: 263
Joined: Fri Jun 12, 2009 10:46 am
Location: Kennesaw, GA

Post by billb » Tue Jun 16, 2009 8:35 am

For tools, one could get started with C# (my language of choice). Microsoft's Visual Studio Express Editions are free (link below). To get started learning, I would search Amazon or another book type site for reviews on beginner books. If the child learns better through the classroom or one on one training, I don't have any recommendations.

The best way I've found to learn and become proficient is to start writing a program that interests you. Even if you never think you'll finish it, start trying. You're going to encounter a million real world problems to solve. For this exercise the journey is all that counts.

Oops, looks like I'm a new member and can't post links yet :x, but just do a search for Visual Studio 2008 Express Editions.

User avatar
Gary
Posts: 146
Joined: Tue Feb 20, 2007 8:54 am
Location: Jacksonville FL

Post by Gary » Tue Jun 16, 2009 8:42 am

Some of the old timers around here might recommend aquiring a punch card reader and installing an IBM 360 in your basement, but if your 14 year old has a windows machine, I would recommend downloading Microsoft's Visual Studio Express software. This is absolutely free.

http://www.microsoft.com/exPress

For a beginner, I would recommend the "Visual Basic" edition. There are several tutorials online.

--Gary

HockeyMike35
Posts: 216
Joined: Tue Feb 20, 2007 12:02 am

Post by HockeyMike35 » Tue Jun 16, 2009 8:47 am

Try the link below. It consist of some free tutorials for ages 13+ to learn Java.

http://java.sun.com/developer/technical ... ning_path/

An easier and maybe a little more likely way to hold someones attention might be to focus on HTML. This is mostly presentation stuff but you can see results quickly and it is less complicated.

This is a site with some information about HTML.
http://www.htmlgoodies.com/

You can create a simple web page in a few steps.

1) Copy the snippet below into a text editor such as notepad or textpad. (Do not use word as it adds some formatting that will mess things up.)
2) Save the file as test.html .
3) Open the new file and you will see a basic web page in your browser. You should be able to click view source in the browser toolbar to see the source code.

<html>
<title>HTML RULES!</title>
<body>
<h1>I am learning HTML</h1>
<h2>I can do colors</h2>
</body>
</html>

livesoft
Posts: 62855
Joined: Thu Mar 01, 2007 8:00 pm

Post by livesoft » Tue Jun 16, 2009 8:49 am

Take a class at the local community college.

Our high school offers computer programming I and II as one year courses. They use Java. After the 1st year, students are expected to pass the AP exam (get a 4 or 5). I've hired HS students from this program to work in the summers and also part time. They have done very well for us. We actually ship to customers world-wide a Java program written entirely by HS students under my supervision.

Of course, one can also learn it on their own. I would stick with major lanquages like C++ and Java. Sure one can learn other languages and toolkits (e.g. Python), but they will be trivial once C++ or Java is learned.

steve88
Posts: 198
Joined: Thu Jul 26, 2007 9:42 am

Post by steve88 » Tue Jun 16, 2009 9:17 am

Any websites or good textbook for c++?

TheEternalVortex
Posts: 2548
Joined: Tue Feb 27, 2007 9:17 pm
Location: San Jose, CA

Post by TheEternalVortex » Tue Jun 16, 2009 10:00 am

Accelerated C++ is by far the best introduction to programming in C++.

It doesn't assume prior programming experience, but it maybe more difficult to learn C++ than a "nicer" language like Python. That doesn't mean you can't do it, though.

User avatar
modal
Posts: 1243
Joined: Tue Feb 20, 2007 3:57 pm
Location: USA

Post by modal » Tue Jun 16, 2009 10:04 am

Classic C
K&R C Programming

C++
I'd suggest getting both the Oreilly's Practical C++ and Deitel's C++ How to Program.

Introductory Java Route
Deitel's Java How to Program (Not Free)
Introduction to Programming Using Java (FREE! :) )

Cheap and broader with a short section on programming in Java
Schmaun's Intro to Computer Science
Last edited by modal on Tue Jun 16, 2009 10:04 am, edited 1 time in total.

mksanjay
Posts: 161
Joined: Wed Jul 09, 2008 10:55 am

Post by mksanjay » Tue Jun 16, 2009 10:04 am

steve88 wrote:Any websites or good textbook for c++?
If your 14 year old is looking to make a career in programming, then I would recommend first starting out with the C programming language. Follow it up with C++, then JAVA. Each one makes you appreciate the basic concepts in the next one.

For C, I would recommend

The C Programming Language - By Kerningham and Ritchie

http://en.wikipedia.org/wiki/The_C_Prog ... age_(book) This is probably the most comprehensive book and it would not only teach him C but some basic concepts in programming.

For C++
======
Bruce Eckels Thinking in C++ is a very good book. http://www.mindview.net/Books/TICPP/Thi ... CPP2e.html

For the advanced, I would recommend - The C++ programming language by Bjarne Stroustup. He is the orginal implementor of the C++ compiler while he was working in the research department at AT&T, but the book tends to get a little bit abstract. I wouldn't read it unless you are very interested and curious about some of the implementations in C++.

For JAVA
=====
For a book, I would recommend Sun Certified JAVA Developer. It is a very good book that perpares you for JAVA certification, so it takes you from the ground up.
http://www.amazon.com/Certified-Program ... 0072226846

The JAVA community is very well planned and huge, so I would recommend
http://java.sun.com/docs/books/tutorial ... index.html

If you go and browse the website www.javasoft.com there are tons of tutorials for various levels and you can pretty much get away by not buying a book.

I have nothing against Visual Basic and other Rapid Application Development(RAD) languages, but the problem is you will never get to learn the basic concepts of programming, which are very important if you want to have a career in programming.

Hope this helps.

Sanjay.

User avatar
Raybo
Posts: 1686
Joined: Tue Feb 20, 2007 11:02 am
Location: San Francisco
Contact:

Post by Raybo » Tue Jun 16, 2009 10:04 am

Don't expect someone to start with C++. It is too hard, obscure, and syntax heavy.

If this is truly the first time someone has programmed, the place to start might be Javascript. It works in any browser (so it free), is interactive, can be object oriented, and is fun. There are lots of on-line tutorials and help available for it and the results are satisfying.

Once the person has some experience and still wants to do more, the obvious question is what kind of things do they want to do. If they want to create websites, then something like Ruby or PHP might be appropriate. If they want to create standalone programs, then Java or C# might be the way to go.

Eventually, he/she will come across Unix/Linux where the shell offers another opportunity for simple programming.

Ray
No matter how long the hill, if you keep pedaling you'll eventually get up to the top.

User avatar
wmcclain
Posts: 91
Joined: Mon Dec 10, 2007 4:49 pm

Post by wmcclain » Tue Jun 16, 2009 10:05 am

I have been programming for about 35 years and worked with a variety of languages. Python is what I was looking for: http://www.python.org/.

It's free and available for a variety of platforms. Should be links to tutorials if you hunt around on the site.

I like C++ but it is a difficult language to use well.

-Bill

User avatar
modal
Posts: 1243
Joined: Tue Feb 20, 2007 3:57 pm
Location: USA

Post by modal » Tue Jun 16, 2009 10:09 am

Schaum's Outline of Principles of Computer Science is the book I was meaning to post up. The text is more of a survey of what would be covered in a Computer Science curriculum.

Table of Contents
1. Introduction
2. Algorithms
3. Computer Organization
4. Software
5. Programming in Java
6. Operating Systems
7. Networking
8. Database
9. Social Issues

User avatar
modal
Posts: 1243
Joined: Tue Feb 20, 2007 3:57 pm
Location: USA

Post by modal » Tue Jun 16, 2009 10:13 am

What kind of interests does your child have?

mksanjay
Posts: 161
Joined: Wed Jul 09, 2008 10:55 am

Post by mksanjay » Tue Jun 16, 2009 10:18 am

wmcclain wrote:I have been programming for about 35 years and worked with a variety of languages. Python is what I was looking for: http://www.python.org/.


-Bill
People who know the language seem to love it and adore it. I didn't get a chance to use the language so, I can't say much about the language. Apparently, the core Google Search Engine is written in Python!

Sanjay.

User avatar
Christine_NM
Posts: 2636
Joined: Tue Feb 20, 2007 1:13 am
Location: New Mexico

Post by Christine_NM » Tue Jun 16, 2009 10:28 am

Retired programmer here. It will go much better if the 14-year-old (or anyone of any age) starts learning a language in a classroom environment. Trying to teach yourself from scratch is not fun or productive. You need the help of a teacher and the stimulation of fellow students.

After someone knows 2-3 different languages, s/he can pick up new ones fairly easily with self-teaching from a few books. Learning new stuff by yourself is 50% of programming, but only after the classroom experience.

bradshaw1965
Posts: 718
Joined: Tue Jul 31, 2007 9:36 pm

Post by bradshaw1965 » Tue Jun 16, 2009 10:36 am

billb wrote:
The best way I've found to learn and become proficient is to start writing a program that interests you. Even if you never think you'll finish it, start trying. You're going to encounter a million real world problems to solve. For this exercise the journey is all that counts.
I'd second this even more then any language or development environment. I never had any success working through exercises or study until I found an "itch" of my own to scratch, then I learned a ton and started to have many mini successes that built upon each other.

billb
Posts: 263
Joined: Fri Jun 12, 2009 10:46 am
Location: Kennesaw, GA

Post by billb » Tue Jun 16, 2009 10:46 am

Raybo wrote:Don't expect someone to start with C++. It is too hard, obscure, and syntax heavy.
Strongly agree with this. Started learning C (before C++ compilers were prevalent) around 14-15, got very frustrated. Went to an easier language (Turbo Pascal). Got my head around programming concepts and moved on to C around 18 and picked it up fast.

I think C and C++ are great languages to know, but their use is in decline. When I was learning C, everyone said learn assembler to truly understand what's going on under the covers. That was pretty lousy advice, looking back. With C/C++ on the decline and C# on the rise, I think the choice is pretty clear.

But watch how quickly this thread can become a language war. :o

Valuethinker
Posts: 36628
Joined: Fri May 11, 2007 11:07 am

Re: programming

Post by Valuethinker » Tue Jun 16, 2009 10:51 am

steve88 wrote:Does anyone have a recommendation for a 14 year old who is interested in programming? Can you recommend on where to start?
A friend of mine teaches Computer Science at a top-ranked Canadian university.

His view is every year the kids arrive, knowing more about computers, and are harder to teach to be good computer programmers.

Unlearning bad habits is much harder than learning good ones from the start.

So the question is to find a good computer language that teaches organized and logical thinking.

What you don't want is for your child to become a 'hack' rather than an organized writer of good code.

I don't know enough, but I suspect the Schaum's guide is a good place to start.

But which language? Which teaches a nice clean view of Object Orientation, say?

http://www.amazon.com/Beginning-Program ... 0764508350

I have no idea if QBasic is the right language to start with, though.
I throw that one open to the Forum.

User avatar
ElJay
Posts: 685
Joined: Tue Jun 12, 2007 6:08 pm

Post by ElJay » Tue Jun 16, 2009 11:17 am

I started by teaching myself QBasic... Are there still interpreters around for that which run on a modern OS? :)

Jacobkg
Posts: 700
Joined: Sat May 23, 2009 7:32 pm

Post by Jacobkg » Tue Jun 16, 2009 11:29 am

I started learning to program on a TI-83 graphing calculator. They are relatively inexpensive (maybe $100?) and your son/daughter will likely need one for school in a few years anyways. It has simple but powerful BASIC-like programming language that can be used to write a host of math programs and even better, games (I remember writing 'hangman', 'blackjack', etc).

For computer programming, 'Python' is an excellent language to start out with. I highly recommend the book 'Python Programming: An Introduction to Computer Science' by John Zelle. Not only will it teach someone to program, but a lot about how computers work and how to write well-constructed code.

User avatar
aainvestor
Posts: 512
Joined: Fri Mar 02, 2007 2:12 pm
Location: Northern Virginia

Re: programming

Post by aainvestor » Tue Jun 16, 2009 11:31 am

Valuethinker wrote:A friend of mine teaches Computer Science at a top-ranked Canadian university.

His view is every year the kids arrive, knowing more about computers, and are harder to teach to be good computer programmers.

Unlearning bad habits is much harder than learning good ones from the start.

So the question is to find a good computer language that teaches organized and logical thinking.

What you don't want is for your child to become a 'hack' rather than an organized writer of good code.
I agree with this. I would have said Java because of his age, but I hate Java as a first language. When I get home I will find a very good paper that discusses first languages and why Java is bad for that.

I would probably recommend C as its simple to get the concepts of programming down using C, then you can graduate to C++. You wont be able to write pretty graphical programs in the first week like with Java or Javascript but you will learn about statements and how they relate to what the computer is actually doing.

Another suggestion (a wild one) is download Turbo Pascal 5.5 from the Borland website. Its got a nice IDE (character based) but Pascal was designed as a learning language. He can get the concepts down and move on to anywhere from there. It even has pointers so moving to C/C++ won't be as daunting as it would be from Java (no pointers). It even has Objects so that they can learn the basics of dealing with them.

F-
Last edited by aainvestor on Tue Jun 16, 2009 12:04 pm, edited 1 time in total.

Elemental
Posts: 151
Joined: Fri Feb 06, 2009 5:08 pm

Post by Elemental » Tue Jun 16, 2009 11:44 am

Here are some fun ways to learn Java:

Robocode (program robot tanks, etc) http://robocode.sourceforge.net/
Greenfoot (program robots, ants, etc) http://www.greenfoot.org/about/screenshots.html
Alice (program 3D environments) http://www.alice.org/

A good IDE developed specifically for learning Java:

BlueJ http://www.bluej.org/

(edit: all free and/or open source)

steve88
Posts: 198
Joined: Thu Jul 26, 2007 9:42 am

Post by steve88 » Tue Jun 16, 2009 12:16 pm

modal wrote:What kind of interests does your child have?
He is good in math and science. We had a conversation on computer 4 months ago about the workings. I told him whats behind windows and the programs that he plays with and he got interested in wanting to learn how to program. I told him if he is interested that he can focus on it during summer. Right now he just messes with batch files.

freebeer
Posts: 1997
Joined: Wed May 02, 2007 8:30 am
Location: Seattle area USA

Post by freebeer » Tue Jun 16, 2009 12:58 pm

I work at a software company although I'm no longer programming per se.

FWIW I'd recommend avoiding very complicated languages to start with (e.g. C++, C#, Java).

I also recommend avoiding unstructured languages that can lead to "hacker" coding and fail to build software architecture & design skills: Perl, PHP, browser JavaScript.

I would recommend someone in your kid's position consider learning Flex and its underlying language ActionScript 3. It has evolved to be very much like Java "minus" - object-oriented and strongly-typed, but minus much of the complexity, minus multiple threads, and with a simplified class library. You can download FlexBuilder free and the results run across platform in any browser w/ Flash and on desktops w/ AIR. Because the typical usage is for interactive apps there's lots of scope for creating interesting/entertaining results. Stepping up from Flex to Java, C++, or C# would be easy. Kind of like the modern-day equivalent of Pascal, wrt pedagogic effectiveness IMO. However, it is not yet widely used in schools.

At the moment Flex developers are in very high demand, often for short-term consulting projects to create browser "widgets" so this could even lead to some rather immediate employability.

Python and Ruby are other possibilities but these are very idiosyncratic and will not be natural stepping stones to Java or C++ or C#. ANd, more focused at back-end server stuff than front-end "engaging experiences.".

User avatar
Gary
Posts: 146
Joined: Tue Feb 20, 2007 8:54 am
Location: Jacksonville FL

Post by Gary » Tue Jun 16, 2009 1:15 pm

billb wrote:
Raybo wrote:Don't expect someone to start with C++. It is too hard, obscure, and syntax heavy.
Strongly agree with this.


I agree. The motion has been seconded, and thirded. The resolution has passed.

Seriously, in my opinion, C++ is too difficult for a beginner. For windows programming in particular, C# is easier to use.

For some reason, which I have never quite understood, beginning programmers flock to Basic and its derivitives over the C family (C, C++, C#), hence my earlier recommendation.
But watch how quickly this thread can become a language war. :o
If anyone dissents from the opinions expressed herein, then off with there heads.

--Gary

User avatar
modal
Posts: 1243
Joined: Tue Feb 20, 2007 3:57 pm
Location: USA

Post by modal » Tue Jun 16, 2009 1:17 pm

Music? Drawing/Painting? Games? Sports? Physics?

livesoft
Posts: 62855
Joined: Thu Mar 01, 2007 8:00 pm

Post by livesoft » Tue Jun 16, 2009 7:59 pm

I think learning how to program should be separate from which language you choose. I don't find C++ difficult at all and love what you get for free with the language, but since y'all want to chop my head off, I guess I can back up to just plain ol' C. But as my head lies in the guillotine basket, I'd like to say that young folks under age 18 should have no problems with an object-oriented language. You don't need to use overloading, inheritance, and polymorphism when learning programming, but they are there when you get more advanced.

But once again, the local community college would be a great place for the 14-year-old to learn programming with whatever language they use in the intro courses there.

And how come nobody has mentioned Knuth on this thread yet? :)
( http://en.wikipedia.org/wiki/The_Art_of ... rogramming )

User avatar
craigr
Posts: 2696
Joined: Tue Mar 13, 2007 6:54 pm

Re: programming

Post by craigr » Tue Jun 16, 2009 8:10 pm

steve88 wrote:Does anyone have a recommendation for a 14 year old who is interested in programming? Can you recommend on where to start?
BASIC can teach the concepts of programming such as input/output, program flow controls (IF/THEN, FOR/WHILE loops, etc), variables, subroutines, etc. It is also very forgiving for a beginner.

C is more complicated but can be a bridge between high level functions and low level computer and networking programming. It expands on the concepts of BASIC and introduces concepts like functions, typed variables, pointers, arrays and code libraries. It also teaches the concepts of code structure and formatting and puts a more rigid framework around how a program should be written.

Python is a wonderful language in that it teaches object oriented concepts very easily. It is also clean to use, encourages a readable coding style, has extensive libraries and can function across most platforms with little or no modifications. I've found that Python can do just about anything required of it with more than enough speed on today's processors.

Once you learn those three languages and the concepts they express you can use any language just by memorizing the new syntax.

User avatar
robot
Posts: 278
Joined: Tue Sep 18, 2007 6:26 pm

Post by robot » Tue Jun 16, 2009 8:26 pm

Those suggesting C or Java are right, but for university students taking a structured programming class.

For a 14 year old hacking around, I'd suggest javascript/html. He will see immediate results, can test in a browser and impress his friends.

[edited to remove religious remarks about programming languages]

atomiclightbulb
Posts: 406
Joined: Wed Dec 26, 2007 7:45 pm

Post by atomiclightbulb » Tue Jun 16, 2009 8:45 pm

I recommend C# and VB.NET because they are relatively clean languages, and it seems like the developers learned from the mistakes of those who created C++ and Java.

C++ is powerful, but it can be confusing and it is somewhat cobbled together IMO.

I don't recommend HTML or Javascript. Someone mentioned "cool" and fast results, but this is not good in the long run. Hack websites and scripts generally do not teach good skills and practices.

Learning to create specifications, design systems, and think ahead (upgrades, extensions, etc) are more important skills than the actual language itself.

User avatar
Imperabo
Posts: 1109
Joined: Fri Aug 29, 2008 1:00 am

Post by Imperabo » Tue Jun 16, 2009 8:54 pm

I plan to use Lego Mindstorms to teach my son programming someday. He's only 2, so by the time he's ready I'm sure they'll have hover modules and death rays.

User avatar
wde
Posts: 285
Joined: Sat Jul 21, 2007 7:14 pm

Post by wde » Tue Jun 16, 2009 9:09 pm

axtec wrote:Here are some fun ways to learn Java:

Robocode (program robot tanks, etc) http://robocode.sourceforge.net/
Greenfoot (program robots, ants, etc) http://www.greenfoot.org/about/screenshots.html
Alice (program 3D environments) http://www.alice.org/

(edit: all free and/or open source)
I second these suggestions. I wouldn't want to be 14 and learning C "just for fun". As someone mentioned before, at this stage, learning the basic ideas behind programming is far more important than syntax. You'll learn syntax for the rest of your (programming) life. That's why they make reference manuals.

And I don't think anyone's mentioned them, put the O'Reilly book series is great. Just about any of their "Learning [fill in the blank]" books are a great way to start out.
"Next to knowing when to seize an opportunity, the most important thing in life is to know when to forgo an advantage." -Benjamin Disraeli

User avatar
jpsfranks
Posts: 911
Joined: Sun Aug 26, 2007 11:45 pm

Post by jpsfranks » Tue Jun 16, 2009 9:37 pm

I think Squeak is a great environment for kids to start programming in. Two real advantages:
  1. I'm not a Smalltalk diehard (in fact I haven't used it in years), but there's something to be said about language purity when first learning to program. If you want to start object-oriented, Smalltalk is a natural choice.
  2. Squeak's graphical environment can keep kids' interest in ways that console based hello world programs never do.

jimmit
Posts: 47
Joined: Sun Sep 30, 2007 4:41 pm

Post by jimmit » Tue Jun 16, 2009 9:55 pm

I learned programming by myself as a kid. I started with QBasic. I don't think teaching yourself will make you a bad programmer. In fact, I think being able to teach yourself is a critical skill.

I think learning procedural programming in C is very valuable. Especially if the kid is interested in hardware/robotics.

I love Python. Probably tied for my favorite language with C. It's great, but I don't think I'd start there.

If he does java, the site http://www.javabat.com is fun. It has problems with test cases and you can program right in the browser.

As far as basic languages go, there is a language called free basic. I've never used it, but it's got OpenGL support which is cool. http://www.freebasic.net/

Matlab may also be an option. Matlab would definitely come in handy if he goes into Engineering, Math, or Science in college.

I think my vote would be for Java though. I think javabat.com would be an easy way to get started, the java tools are free, it is very common, you can program on cool things like your cell phone later on, and the AP computer science classes use Java. I recommend taking the AP class, especially if he gets this head start.

linuxizer
Posts: 1553
Joined: Wed Jan 02, 2008 7:55 am

Post by linuxizer » Tue Jun 16, 2009 9:57 pm

The language is not as important as having something exciting to do with it. Have your kid think up a project, then pick whatever language makes sense to accomplish the goal. You're trying to teach concepts, not syntax. For instance, if it's a statistic/data analysis project, go with R; if it's a web project, try JavaScript; if it's a project that needs to be close to the way a computer actually thinks, try C (just stay away from assembler!).

jimmit
Posts: 47
Joined: Sun Sep 30, 2007 4:41 pm

Post by jimmit » Tue Jun 16, 2009 10:00 pm

I also enjoyed programming my TI-85 and TI-89 when I was in school. http://www.ticalc.org has a lot of resources and you'd be surprised what you can do on those things.

Paladin

Post by Paladin » Tue Jun 16, 2009 11:32 pm

jpsfranks wrote:I think Squeak is a great environment for kids to start programming in. Two real advantages:
  1. I'm not a Smalltalk diehard (in fact I haven't used it in years), but there's something to be said about language purity when first learning to program. If you want to start object-oriented, Smalltalk is a natural choice.
  2. Squeak's graphical environment can keep kids' interest in ways that console based hello world programs never do.
++ :lol:

I am a Smalltalk diehard and Squeak is a wonderful environment for exploratory programming.

Or Lua. Excellent tutorials, interpreted and a solid introduction to Computer Science.

If your son plays WoW he could build WoW add-ons in Lua!

http://www.amazon.com/World-Warcraft-Pr ... 966&sr=1-6

Or Scheme.

http://www.amazon.com/Structure-Interpr ... 808&sr=8-1

The full text is available on the web from MIT.

http://mitpress.mit.edu/sicp/full-text/book/book.html

As are the videos of the lectures by the authors.

http://groups.csail.mit.edu/mac/classes ... -lectures/

CodeMaster
Posts: 653
Joined: Sun Mar 18, 2007 3:03 pm

Post by CodeMaster » Wed Jun 17, 2009 12:31 am

Forget C, windows software is a lot to learn and getting out dated. learn web languages like html / css / javscript / php / my sql.

its easier to pickup, he can make his own website, and if he becomes good, he can even work as a web developer . esp as more and more applications become web based in the new century.

paulsiu
Posts: 1457
Joined: Sun Nov 16, 2008 7:46 pm

Post by paulsiu » Wed Jun 17, 2009 12:45 am

By the time your kid is older, the languages you know may be obsolete. In any case, I would try for a more modern language like Ruby.

Once a person learn a programming language, they can easily learn another.

Valuethinker
Posts: 36628
Joined: Fri May 11, 2007 11:07 am

Post by Valuethinker » Wed Jun 17, 2009 3:00 am

jpsfranks wrote:I think Squeak is a great environment for kids to start programming in. Two real advantages:
  1. I'm not a Smalltalk diehard (in fact I haven't used it in years), but there's something to be said about language purity when first learning to program. If you want to start object-oriented, Smalltalk is a natural choice.
  2. Squeak's graphical environment can keep kids' interest in ways that console based hello world programs never do.
This is the key.

Get the right 'style' of programming (logically structured) and it's like learning Latin, it gives you ability to absorb the 'grammar' of any other language, after that.

If you learn as a hack, you'll stay as a hack-- bad habits are very hard to unlearn.

Any Smalltalk-related language is therefore a great start. Encourages thinking abstractly about data types and structures.

User avatar
MaddHatta
Posts: 126
Joined: Tue Mar 17, 2009 1:37 pm
Location: New Haven
Contact:

Code

Post by MaddHatta » Wed Jun 17, 2009 6:27 am

My vote: Ruby (ruby on rails down the road)

A 14 year old needs something that is going to hold his interest. Get him started on html and css and the move on to a modern language like ruby. That way he can see his work and show it off in school. Ruby is easy enough and there are plenty of screencast, podcasts, and a 24/7 irc chat at his disposal for help.

I learned C++ in high school and have been learning ruby while in college. I wish I would have started with ruby...

User avatar
Gary
Posts: 146
Joined: Tue Feb 20, 2007 8:54 am
Location: Jacksonville FL

Post by Gary » Wed Jun 17, 2009 7:20 am

livesoft wrote: And how come nobody has mentioned Knuth on this thread yet? :)
( http://en.wikipedia.org/wiki/The_Art_of ... rogramming )
My "Art of Computer Programming" Knuth books are on my desk within arms reach as I'm typing this.

Anyone wanna recommend MIX as a language to start out with? Anyone? Bueller?

--Gary

User avatar
Materials Guy
Posts: 37
Joined: Wed Nov 19, 2008 4:40 pm
Location: Pittsburgh

Python

Post by Materials Guy » Wed Jun 17, 2009 9:51 am

I faced this dilemma with my 12 year old, who is very precocious in Math and is entirely comfortable with computers. He started off with C++ but I found it was not engaging him.

A friend, a computer scientist in Silicon Valley, then recommended Python. He has started working his way through it and seems to enjoy it. His summer vacation has started and he will have more time to do this. But my initial impressions are that Python appears to be a good first programming language at least in his case.

I am glad to see that the thread running through this discussion is that Python appears to be a favorite for several people.

User avatar
Sunny Sarkar
Posts: 2417
Joined: Fri Mar 02, 2007 1:02 am
Location: Flower Mound, TX
Contact:

Post by Sunny Sarkar » Wed Jun 17, 2009 10:15 am

I learned programing at 13, so I can provide hindsight. In my opinion, it is all about having fun and getting hooked before getting serious. I started with BASIC - didn't have any other choice, but now that I look back, I feel that it was a great language to start with because it was easy to code fun little programs involving elementary graphics (text-based) and sound - and that's what got me hooked. I still remember my fun little projects fondly: I plotted a rocket by arranging text/characters on the screen, and when I pressed the enter key, it ran empty print statements in a loop, and the rocket went swooosh into the sky :-) Then there was this program which would make a sound every time a key was pressed , a different frequency depending on the key. This turned the keyboard into a musical instrument with a robotic sound. We could play songs on the keyboard. He's a jolly good fellow was the biggest hit. Programing was so much fun then, and it also taught me the basic programing concepts like loops, structuring repeated code into subroutines, why goto was bad, etc. I would never advice a young newbie to start with something as complex as C or C++, or even Java. Have some fun first. Get some instant gratification.

User avatar
modal
Posts: 1243
Joined: Tue Feb 20, 2007 3:57 pm
Location: USA

Post by modal » Wed Jun 17, 2009 11:03 am

Oreilly Head First books might be something else you want to take a look at http://headfirstlabs.com/.

http://headfirstlabs.com/books/hfjava/

They have some sample PDF chapters there.

User avatar
dratkinson
Posts: 4378
Joined: Thu Jul 26, 2007 6:23 pm
Location: Centennial CO

Re: programming

Post by dratkinson » Wed Jun 17, 2009 11:20 am

steve88 wrote:Does anyone have a recommendation for a 14 year old who is interested in programming? Can you recommend on where to start?
Just my 2 cents. Learn structured design = Top-down design + Bottom-up implementation.

Building good software has a lot in common with building a home. (1) design completely---first, (2) then build---from the basement up, (3) use the proper tools and materials.

So my vote is that your student learn the methods of software "structured design" at the same time he is learning his first language. Structured design is not a software language, it is a way of logically thinking about a software problem to make the program design as simple as possible. Simple designs are very easy to implement (code, test, and put into use).

A lot of languages have been suggested, but all languages and their features are only tools and materials. And all tools and materials are useless unless you know how to properly use them. Example: at HD you can buy cement and shingles. The cement correctly goes into building the foundation of a home. The shingles correctly go into building the roof of a home. These materials don't work as well when used the other way around.

The methods of structured design will teach your student how to correctly design his software, and use the language tools and materials to build it.

"Structured design" is a 50-cent word/phrase to describe a simple concept---break any software problem (simple or complex) first into simple parts, and then those parts into simpler parts. All of these small parts become software modules/routines calling other, lower-level modules/routines. At some point in the refinement of the design, the program will almost write itself. :-) (Yea, I know, I didn't believe it either. I was wrong.)

By definition, if you don't design software using the methods of structured design, then it will become unstructured (spaghetti code).

Structured code (the result of structured design) is easy to write, test, understand, and modify.

Unstructured/spaghetti code (the result of an unstructured design) is hard to write, test, understand, and modify.

All languages can be forced into a structured design---some more easily than others. You do this by not using some language features---example: never use the GOTO statement.



Other phrases used when talking about structured design: (1) top-down design, (2) bottom-up implementation.

Top-down design is the same idea of breaking the problem into smaller and smaller parts (which become software modules/routines calling lower-level modules/routines).

Bottom-up implementation is the idea of coding and testing the software beginning from the simplest/earliest/lowest-level modules/routines, and working your way up to the top module---the main program. Once you reach the top module and it is tested, the program is done.



Just my 2 cents. Your student should learn the methods of software structured design while (or before) learning his first language.

Example: Once you know how to design and build a house, it doesn't make much difference what tools and material you use---no or partial or full basement, brick or stucco exterior, slate or metal or asphalt shingle roof.

Example: Once you know how to design and build software, it doesn't make much difference what language (tools and materials) you use.

/r
David



P.S I was exposed to many languages in college (70s), but I never learned to properly design software until I was trained by the Air Force (81). The difference between the quality of my work in college and in the AF was the difference between night and day.

I can not overstate the importance of learning to properly design software before one goes off and just starts slinging code. No language can save a poor design. One might be able to get by with a poor design in a small program (like the ones required in a college assignment), but a poor design in a large program is a recipe for failure.

tibbitts
Posts: 8101
Joined: Tue Feb 27, 2007 6:50 pm

different era

Post by tibbitts » Wed Jun 17, 2009 11:43 am

Sunny wrote:I learned programing at 13, so I can provide hindsight. In my opinion, it is all about having fun and getting hooked before getting serious. I started with BASIC - didn't have any other choice, but now that I look back, I feel that it was a great language to start with because it was easy to code fun little programs involving elementary graphics (text-based) and sound - and that's what got me hooked. I still remember my fun little projects fondly: I plotted a rocket by arranging text/characters on the screen, and when I pressed the enter key, it ran empty print statements in a loop, and the rocket went swooosh into the sky :-) Then there was this program which would make a sound every time a key was pressed , a different frequency depending on the key. This turned the keyboard into a musical instrument with a robotic sound. We could play songs on the keyboard. He's a jolly good fellow was the biggest hit. Programing was so much fun then, and it also taught me the basic programing concepts like loops, structuring repeated code into subroutines, why goto was bad, etc. I would never advice a young newbie to start with something as complex as C or C++, or even Java. Have some fun first. Get some instant gratification.
I think the difference between the old days and today is that back then, someone starting out could get instant gratification and write something relatively useful, with a very small amount of code. Today, because of the sophisticated software they're exposed to every day, I expect kids would be disappointed by almost anything they could create to start out. It's the same problem with web pages. It would take tens of thousands of lines of code to make a website that they'd be excited about.

I'm not really sure what the "solution" to that is, or even if it's a problem, but I expect the programs we wrote in dozens or even hundreds of lines back then wouldn't satisfy kids today.

Paul

Valuethinker
Posts: 36628
Joined: Fri May 11, 2007 11:07 am

Re: Python

Post by Valuethinker » Wed Jun 17, 2009 11:48 am

Materials Guy wrote:I faced this dilemma with my 12 year old, who is very precocious in Math and is entirely comfortable with computers. He started off with C++ but I found it was not engaging him.

A friend, a computer scientist in Silicon Valley, then recommended Python. He has started working his way through it and seems to enjoy it. His summer vacation has started and he will have more time to do this. But my initial impressions are that Python appears to be a good first programming language at least in his case.

I am glad to see that the thread running through this discussion is that Python appears to be a favorite for several people.
I checked with my undergraduate university and it appears they teach Python to first years before moving on to Java.

They are very het up about good software engineering, so that is a good sign re the language.

So that seems to be a good choice.


User avatar
craigr
Posts: 2696
Joined: Tue Mar 13, 2007 6:54 pm

Re: different era

Post by craigr » Wed Jun 17, 2009 11:56 am

I have another idea for your child: Microprocessor Programming.

Sounds complicated, but you can order a BASIC Stamp development system from www.parallax.com. It includes a prototyping breadboard, MCU, programming cable (USB), a bag of electronic components, and a very complete and easy to understand book that walks you through the process of using BASIC on the MCU to control lights, LEDs, switches, volume controls, servos, etc. Inside of a week your child will be able to make some neat projects. Or perhaps some really aggravating projects like a wailing piezo speaker. :)

The programs are simple yet they can perform functions that can be applied to robotics and other electronic projects quickly. Flashing lights. Speakers. Motor controls. Distance sensors. Serial and wireless communications. GPS and compass navigation, Etc.

BASIC for this task is fine. But if he wants something more flexible he can move up to Arduino MCU programming. It's the same deal as the BASIC stamp with prototype boards, etc. Plus it's cheaper, uses a C-Like syntax and has more functions. (www.arduino.cc).

But your child may really enjoy the BASIC stamp system. It can meld together programming with interesting projects.

Post Reply