# Seek recommendations for a beginning programmer



## redptc (Dec 30, 2003)

My 11-year old son wants to learn computer programming.  I am looking for recommendations for a good beginning language (BASIC???) to get him started.

I want to keep it simple so he has some early successes and will be encouraged to continue to learn more languages.

So far I have downloaded TNT Basic but he hasn't started using it yet.  Is this a good choice?  I tried to download RealBasic but the file was corrupted and I haven't had time to seek out another source.  (Note: I'm NOT set on starting him off with BASIC, it's just that that is all I know of for tools right now.)

Thanks in advance for any suggestions and guidance you can offer!

p.s. I'd also be interested in recommendations for programming books for beginners.  Thanks!


----------



## mdnky (Dec 30, 2003)

Basic would be an excellent starting point, but there may be some issues with it just do to his age.  The big thing is will he understand what he's trying to do, and how the things are working or supposed to.  Maybe a crash course in Algerba first would help him, I dunno.  It all depends on him really.

I started out that early on a Commadore 64 using their form of basic, and I had a rough time at first.  After that I tried PERL/Python and C, then finally got tired of it and went to web only with an occasional venture back.

Maybe introducing him to XTML/CSS first would be a way to go, that way he's learning the 'fundamentals' so to speak, and it's a very easy language.  Not to mention he'd be able to get results relatively quickly, which will make him dig deeper into it.  Trust me, if he gets frustrated he'll give up and then start to hate that stuff quickly.



The 'xxxxx for dummies' series would be a great starting point.  These are wrote in plain, simple English (as simple as it can get for the topic at least).

Intro to Programming (concepts, fundamentals, etc.)
http://www.dummies.com/WileyCDA/DummiesTitle/productCd-0764508350.html

List of Advanced Computer-Programming books:
http://www.dummies.com/WileyCDA/Section/id-100121.html


----------



## Arden (Dec 30, 2003)

I second the HTML route.  Get him HTML For Dummies and Cascading Style Sheets for Dummies, and when he's mastered HTML he can move on to Javascript.  From there it's a natural extension to go into something like PHP, which is a lot like C/C++, so he can branch out after learning Javascript.


----------



## naodx (Dec 30, 2003)

Ok, this is just my opinion here, but I believe that if you son is interested in learning programming that you start him off with either C or C++.

I know that some people may disagree with that, but you can learn all the basics in C/C++ before delving into the more complex topics that can be dealt with using these languages.

The basics like control structures, data types, input and output (both screen and file)....if you start off small and work your way up, he will be ahead of the game if he is serious about programming.

Now please don't take this as a knock against basic, I learned how to program using basic back in the early 80's on a vic 20 and an apple II. Looking back, if I would have had access to C, I would be a much better programmer today. You can do some powerful stuff in realBasic, and it would be a great tool for learning basic, but with languages like C and C++ you can learn the foundations for building some very powerful programs. (Most on unix is written in C).

Deitel makes a great book(s) for learning C and C++, each chapter is organized in a fairly concise manner, and with a little thought and effort a lot of information can be learned.

The other bonus would be, that if you have OS 10 installed (any version really) and the developer tools, you have everything you need to get started in ALOT of different languages..C, C++, Java, Objective C/C++, perl, php, cgi....just to name a few.

Good luck to you and your son, and happy programming.


----------



## naodx (Dec 30, 2003)

Arden,

Not to try and chastise you or start an argument, but PHP is not a lot like C/C++. PHP is a great language for server side internet programming, and is powerful in it's own right. But languages like C/C++ are powerful for developing just about anything that will run on your computer. The unix underpinnings are (mostly) written in C, C is a compiled language, PHP isn't (it is interpreted). I'd hate to see an OS written in PHP execute, I think that most people would be pulling their hair out just trying to do some daily basic functions on an PHP OS.

I guess to ad to my earlier post, you should find out what it is your son is most interested in learning as far as what type of programming road you should take him down.

In my opinion and experience(s) the last couple of years, I believe that C/C++ is a great way to learn the basics of programming. The first language that I learned in college was C++, which for the early stages of the class was basically an intro to C. I learned a lot more in these classes than I did in my early stages of (self taught) basic. Again, I'm not basing basic, you can learn all the basics in a language like basic, and it does have the potential. To me that is seemed that learning the basics of C/C++ made it a lot easier to learn java, perl, cgi, and php, but they always say that learning a second and third language is easier after learning the first.


----------



## Raptur (Dec 30, 2003)

I personally learned HTML first, and my first introduction to a programming language was javascript. It is good for introducing the ideas of flow and implementing algorithms, and avoids the frustration nearly inevitable with a typified language such as C/C++. It also takes most of the details of GUI out of the learner's hands while still treating html/css elements as objects (although it by no means introduces the learner to object-oriented programming). I would recommend starting out on javascript to guarantee early success and fundamental learning.

-=-raptur-=-


----------



## slur (Dec 31, 2003)

I believe Logo is available for Mac OS X. That's fun for new programmers. AppleScript Studio applications can be fun to create. Shell scripting languages are kinda fun, but you can't make exploding flying saucers. The only reason I took up programming when I was 11 (in 1978, youch!) was so I could make games. BASIC was a great way to learn programming, but it's not like it used to be. Still, I think REALbasic is the best option for a kid who wants to make programs quickly and learn the ropes of writing and debugging stuff. Plus he can make exploding flying saucers after a surprisingly short amount of time. I wouldn't throw XTools at him just yet.

For a good intro to simple code, get Konfabulator and download some widgets. All widgets are open source, so he can examine the code and make his own tweaks. "Show Package Contents" is the key to editing widgets.

Books / articles on computer architecture are helpful, so he understands how these machines are put together. Algebra is keen and all, but programming isn't algebra. Variables are easy enough to understand without introducing quadrilaterals and equations. Algorithms are important eventually, and then algebra will come in handy.


----------



## powermac (Dec 31, 2003)

I mirror many of the views here. I learned basic around his age. Applescript or Real Basic may be a good start, and later c++. C++ can be abstract, and some of the global concepts may be difficult for an 11 year old to grasp. He may run into a wall, and lose interest. The only problem is if he learned basic or other procedural languages, making the shift to OOP later may be difficult. This is my opinion as a amateur programmer, and professional child psychologist. The people here no more about programming than I.


----------



## powermac (Dec 31, 2003)

powermac said:
			
		

> I mirror many of the views here. I learned basic around his age. Applescript or Real Basic may be a good start, and later c++. C++ can be abstract, and some of the global concepts may be difficult for an 11 year old to grasp. He may run into a wall, and lose interest. The only problem is if he learned basic or other procedural languages, making the shift to OOP later may be difficult. This is my opinion as a amateur programmer, and professional child psychologist. The people here know more about programming than I.


----------



## mdnky (Dec 31, 2003)

I think the problem with C or C++ will be the age here.  I'll agree with what some said about the basics for starting with it, but I don't think it's right for him yet.  

He needs to get though higher level math before trying to mess with that kind of stuff.  There's a reason high schools require Algebra 1 & 2 before taking that kind of programming afterall, if they even offer it.  Colleges also have math requirements.  Sure people can and have done it before without Algebra or Trig, but it's not the math as much as the 'thought process' learned by doing those maths that is beneficial.


----------



## madscientist (Jan 1, 2004)

id just like to jump in and say that for learning to write gamesTNTbasic is awesome. once you have learnt some basic programing it lets you do quite complicated 2d sprite stuff very easy.

whether it would be better to start with something smaller and then move on i dont know....

plus its only £20


----------



## redptc (Jan 1, 2004)

So far we have tried TNT basic but it keeps giving errors about the program (TNT Basic) not running. (I don't remember the exact error message right now.)   I even tried to cut/paste an example program into TNT Basic and it gave the same error. 

I haven't had time to try downloading a working copy of RealBasic yet.  The copy I had downloaded earlier was corrupted.

I like the idea about the Apple Developer Tools CD - I had totally forgotten about it.  I think I will look at that next.

The HTML ideas were good too - he has already done some HTML as one of his class's webmasters.

I'm not sure about the Java route since I don't know anything about it so I won't be able to give him much assistance.  Actually I haven't done much programming for over 10 years so I'm a bit rusty too.  

Keep the ideas coming - I REALLY appreciate them all.  I hope to hit the bookstore this weekend to check out their selection of programming books.


----------



## Arden (Jan 2, 2004)

Java is a good goal to reach for, but he should start with something simpler.  A natural progression from HTML is Javascript, which is a simplified form of Java that runs in web pages.  For application development, Apple Script is a good start, since it's relatively powerful yet high-level enough to understand easily.

Naodx, you're right: it's more like PHP is the C/C++ of web programming.  Both are open source and free, and both are very powerful for their area, but PHP is not a lot like C/C++ beyond (some of) the basics.


----------



## The Grimace (Jan 8, 2004)

I would suggest that you start him off on either REALbasic or Java, because both can be used to create immediate results, and this is important for someone as young as your son.

The problem I find with REALbasic (and I'm actually going to try to write a book/manual on this subject within the next year) is that it tries to be object-oriented but doesn't quite make it.  It's too easy to tie ones app to the default 'Window' object.  Therefore, if you go this route, I would suggest that first thing you do after launching the app (which automatically opens a blank project) is close the 'Tools' window and the 'Window1' window.  Make him work only with the 'App' object for starters.  Make new classes within the App object, and don't let him touch 'Window1' or the tools until it's time to write an interface for his app.  Don't let the interface itself become the app.

Ok, let me explain this a little better.  First off, he needs to learn what is meant by 'object-oriented programming', or OOP.  Between Java and REALbasic, Java is more naturally OOP (IMO), since everything is automatically an object.  But whats important here isn't language specifics, its gneralities and ideas encompassed by the OOP philosophy.  So find him a good book on OOP, and put it in his hands.  Unfortunately, I can't really recommend a good one since I learned about OOP in the context of specific languages (C++, Java, REALbasic).  Perhaps others in this forum can offer some good suggestions.

Once he has a good book on OOP, then get him something on the actual language he is going to be using.  If REALbasic, then I would suggest Matt Neuburg's REALbasic: The Definitive Guide.  If he goes with Java, then perhaps Java - How to program by Deitel.

Now he's ready to learn.  Again, I'll come back to the app/interface separation.  I can't stress this enough.  He must learn to keep these two things separate.  The app does the work, the interface displays the results.  Period.  The interface should do nothing else.  This helps with both debugging and portability, amongst other things.  Once your son learns his language, it will be a far simpler matter to port his apps to a new language, like C++.  Interface writing in C/C++ can be a pain, even with the Mac Toolbox or the MFC, but interface writing in basic (or Java for that matter) is much easier.  And there are ways to use C/C++ methods and classes in REALbasic (and Java as well, AFAIK).

Once he has a handle on basic/Java, then get him started on C/C++.  I would recommend 2 titles - C++ Primer Plus by the Waite Group, and C++ in Plain English by Brian Overland.  The C++ Primer Plus is a vertiable tome, coming in at over 1000 pages, but it covers most of the ANSI/ISO standard for C++.  C++ in Plain English is much smaller, but is a good read, and perhaps most importantly, contains a reference to most all of the C++ standard library.  VERY handy indeed.

Anyways, hope this makes sense.  In a nutshell, get a book on OOP, make sure he understands the basics, and encourage separation between the interface and the engine.

(tig)

"We do not inherit the land from our ancestors"
"We borrow it from our children"


----------



## Viro (Jan 8, 2004)

Java is a great language to learn and because of the numerous libraries built in, you'll get results very quickly. Quite frankly, its a lot more fun to create a graphical application, than say a text based one.

However, Java is probably a bad choice as an introductory language. I'm saying this because of its OO nature. Many university students have problems with getting the 'right' mindset, and there are a lot of things that aren't too simple in Java. For example, file input/output (especially from the keyboard) is a pain. Its simple enough if you've got some psychotic perseverence, but otherwise you'll give up very quickly.

BASIC is probably the way to go. I'm not familiar with BASIC on the mac, but if there is something like VB or QuickBASIC, go for that.


----------



## The Grimace (Jan 8, 2004)

Viro said:
			
		

> JBASIC is probably the way to go. I'm not familiar with BASIC on the mac, but if there is something like VB or QuickBASIC, go for that.



REALbasic.  And you can build your app as a OS 8/9 app, a Carbon app (OS 8/9 or X) or as a Windows app.  And Linux support is forthcoming as well.  All in all, a very flexible solution.  Check out the REALbasic website for more details.

(tig)

"We do not inherit the land from our ancestors"
"We borrow it from our children"


----------



## wiz (Jan 9, 2004)

well u see, Java is the way to go no doubt. It's the best. But learning the concepts.. hmm that might not be so easy to comprehend as a first time programmer. it might even get confusing. I'd recommend basic. then immediately move to java


----------



## retrotron (Feb 6, 2004)

Well, I say the best starter language, especially for kids, is Flash Actionscript. 

First: you can do basic stuff like declare variables, if statements, loops, and arrays without having to start with a class and main() method (something that's way too advanced for someone just starting). 

Second: you can actually see the results without having to know a lot about how to use widgets and/or 2D and 3D classes. It's just nice to be able to get immediate visual results with very simple code.

Third: the syntax is very simple, but it's ECMA compliant (for the most part), and that way you can learn simple stuff without overly-complex syntax and gradually move into more complex stuff. And, of course, stepping into Javascript or Java is very natural after Actionscript.

Fourth: object oriented programming is much easier to learn in Actionscript than in other languages, simply because in Actionscript you worry about creating classes and objects rather than pointers and private/public/static and so forth. It's nice to start with just the bare concept, and then 'add on' more technical things like private/public/static, which can easily be done in Actionscript because you can code really simple OOP or fairly complex OOP.

Fifth: Actionscript 2.0 is now very much like Java, and so once he learns AS 1.0 and can do good OOP programming with that, there's not a big jump to AS 2.0, and once he's got AS 2.0, he'll feel very much at home in Java.

Some will probably say its best to enforce good OOP technique early on, but hey, he's 11 years old, think about the _process_ of learning rather than the _end_ result. I think it's very cool that we've got a dad willing to help his son work on programming, that's wonderful.


----------



## michaelsanford (Feb 17, 2004)

Good question! I'll tell you my experience learning when I was younger. I'm 21 now, and started programming when I was about 9, when I first edited my autoexec.bat to do something. After that I moved to BASIC, and then to Pascal which was worlds more complicated for me because of the un-natural syntax, but I got it relatively quickly. Then on to C and PHP and HTML and so forth.

So to give you a more contemporary suggestion, I'd say start with AppleScript! Unless your kid is a prodigy in abstraction and can understand the syntax behind things like C-style for loops, you'll want to start simple. AS is indeed a child-like programming language that lets you do all sorts of cool things. I would suggest of course you make him his own user account so when he makes his first Finder-icon-bouncing script it doesn't wreck your whole desktop  It will also afford him the chance to see the results of his actions quickly and simply, and without too much code (like including io headers and stuff).

If however he seems to get that easily, I'd suggest moving on to something like C++ (the regular linear kind, not objective-c) since it's a pretty standard syntax format. I would also suggest sticking with a linear language to start out with (AppleScript, BASIC, Pascal, etc) and not an object-oriented language (Objective-C, Java, etc) since those can be hard to grasp at first with encapsulation and messaging and stuff. But hey, you never know...


----------

