Hi, I'm going to lay some hate on you at first, but I don't hate you, and the interesting part of my message is the bottom half. This post might seem mildly disagreeable, and that's because I'm going to tell you that what you want (assembly or C++) is the wrong thing to want (right now). Based on some of the sentences you've written, I think I have a better idea of what you might find interesting in starting programming.
I, a 13 year old 'geek', am interested in programming. My initial question is whether or not should I start with C++ or Assembly?
The question to ask is, should you start with Scheme or Python?I know I probably will end up using Assembly (as I want to be able to control everything that happens with it, and I don't want to rely upon others to code) for my applications, but I think it would be quite difficult, especially as a first language.
You are incorrect, unless it turns out that your future self is an idiot. You will not use assembly. You do not get any more 'control' by using assembly, unless you actually care about the exact instructions your computer uses to do things, and if you learned assembly, you'd know better than to care about that. (After all, machine code is not even the language processors use internally -- they have their own translation steps that map things to an internal machine code.) One major downside to using assembly is that you can only develop for one set of architectures. Learning assembly is fun anyway, so who cares, but you'll learn it a lot faster if you become familiar with higher-level programming techniques (and I'm not talking about the primitive things you find in C++). Learning one assembly languageis worthwhile, as AD said.
I would be open to other languages (except Ruby. I hate Ruby, because the way the syntax works, and it's proprietary-'ness'.
No, you hate Ruby for no reason whatsoever. You said you're just starting in programming, so how would you know whether you like it or not? Your dislike of the language on the part of its syntax is a problemyou have, with an inflexible brain (seemingly), not a problem with the language Ruby. There are ways its syntax could be improved (that do not involve moving in the direction of C++), but that is not a reason to 'hate' the language. What do you mean by "proprietary-'ness'"? That makes no sense at all, what such aspect does Ruby have?
Additionally, I want to avoid archaic languages such as Pascal, Cobol, FORTRAN, and BASIC.
You mean you want to avoid languages that suck :-)I absolutely want to stay away from web development (Desktop-only, please). (sorry for the long hate list) My goal is to learn how to program, not to memorize syntax.
Then why is C++ on your short list?If you recommend a specific language, which one would it be?
My favorite languages are Haskell, Scheme, and C. If you're just starting to learn how to program, I think Scheme is a good language to start with -- one person that happened by this forum reported enjoying learning Haskell, but she had an instructor, and I don't know if there are any stellar learning materials via Haskell for beginning autodidactic programmers.
My recommendation is based on your statement,My goal is to learn how to program, not to memorize syntax. If that's true, then go to http://htdp.org/ and start there, using the programming language Scheme. You will be making useful applications much more quickly with the Dr.Scheme environment than you would if you started with C++ or with some assembly language. Scheme is a more powerful language than C++ or assembly, you see. You will be able to learn C++ faster too. There exist some values, X and Y, such that if you started with X months of Scheme and Y months of C++, you'd be a better C++ programmer than if you just spent X+Y months on C++.
The nice thing about http://htdp.org/ is that since Scheme doesn't have any real syntax to speak of, it spends its time on ways of thinking and how to look at things.
Of course, just because you start with Scheme doesn't mean you can't learn assembly on the side, at the same time.
Once I come to a decision, I will post a following topic in the appropriate category and ask what reference materials you would recommend (i.e. books, articles, tutorials, etc.)
Sorry, too late :PBut for now, just start with c++ and in a couple years when you have learned it well you can think about expanding into other languages.
A couple years?? That is way too long. See http://en.wikipedia.org/wiki/Foot_binding for details as to why. Not that I'm an expert on education or anything. But 2 years is one half of high school!
Okay Ryan Leaf, since you are young and impressionable, here is a list of languages worth learning. And you don't want to learn them all at once, and some of them, you won't want to learn in great detail. They're not in any particular order:
Scheme -- learn to program instead of learning syntax. Start with this
Factor -- The documentation on this is so sparse, it's a shame. But it's a really neat language, and has a vibrant community around it. It combines the fun of assembly language with some of the nerditude of Scheme. And it will grow your idea of what a practically-minded language can look like.
Assembly (maybe not on a PC, maybe on a graphing calculator) -- You'll want to do it once, and you won't want to do it twice.
C -- It is portable assembly language.
C++ -- Useful for (a) winning programming contests with cash prizes, and (b) giving tools of abstraction built on the foundation provided by C. It is a painful language though. Painful.
C# 3.5 -- given a choice between C# and Java, learn C# 3.5 first, since Java sucks. (And "Java sucks" is an objective fact, not an opinion. See the picture linked below for details.) There exists Mono if you dislike getting the ever-so-proprietary Visual C# 2008 Express. Anyway, this language is a good introduction to the world of statically typed, object oriented languages, with features like generics. These languages are just so prevalent now, with the trifecta of Java, C#, and C++ (and C++ is a vicious outlier). If you trace the evolution of C# from version 1 to version 3.5, you'll see an epic effort to improve what was originally a pretty mediocre language.
Haskell -- The following image includes a naked blow-up doll, so it might be non-work-safe, but it is a very accurate metaphor: clickme . Haskell is notoriously hard to learn, and it's notoriously easy to use. It's hard to learn because you're literally learning how to think about programs all over again. The reason for this is that most people are used to thinking about what their programs do, but not about what their programs are. You don't want to learn this language first, because then you will have nowhere to go but down. Haskell has the best type system, the best syntax, the best core libraries, the best build system, the best community, and the worst record-syntax of any practical language available today.
Scala -- Scala is a useful practical language that compiles to the JVM and lets you use Java libraries. It's much better than Java.
What's not on the list:
Ruby/Python/Perl/Boo/Groovy -- You don't have to learn these to become good at programming, but you will learn a few anyway. There is no way to avoid learning at least one of these languages. Ruby is better than Perl, but I like Perl more anyway.