I, a 13 year old 'geek', am interested in programming. My initial question is whether or not should I start with C++ or Assembly? 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. I would be open to other languages (except Ruby. I hate Ruby, because the way the syntax works, and it's proprietary-'ness'. I also dislike C# and VB because they also are proprietary. Additionally, I want to avoid archaic languages such as Pascal, Cobol, FORTRAN, and BASIC. 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.

If you recommend a specific language, which one would it be? Also, I am a Mac OS X user and prefer learning a language on OS X as that will be my main platform. However, I will still might occasionally do some coding in Linux or Windows.

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.)

I understand that I won't be an expert over a weekend, but I want to learn, for hobby and later possibly for profit.

I have some prior knowledge with web design, and am fluent in HTML and CSS, but those aren't programming languages.

[EDIT]: I don't want to learn game design. I have no interest in video games, and don't even frankly get any entertainment from them.

Thank you very much and sorry for the long post,
Ryan Leaf

Learn C++ first.

>>My goal is to learn how to program, not to memorize syntax.
Sorry to burst your bubble but at first that is exactly what you will be doing.

>>I am a Mac OS X user and prefer learning a language on OS X
Nothing wrong with that -- that means you won't be able to learn VB and C# anyway because IFAIK those languages are only supported in MS-Windows.

>>I understand that I won't be an expert over a weekend, but I want to learn, for hobby and later possibly for profit.
If that is your goal then you will want to eventually learn many different languages, especially web development. But 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.

Don't think for one minute that there will ever be a time when you can say "I have learned all there is to know about C++". That day will never arrive. Computer programming is a life-long learning experience and there will always be something new for you to learn and new challenges.

I know it's a little swaying off of the main topic, but do you think it's worthwhile to learn Assembly at a later point? I know Steve Gibson (www.grc.com) (security expert; coder; and the person who coined the term 'spyware') codes everything in Assembly and his programs are rock=solid and small.

>>do you think it's worthwhile to learn Assembly at a later point?
Absolutely yes because it gives you a better insite into what's going on in the background with the C++ code.

But would it be worthwhile to actually develop programs using it?

Large business applications -- no because it would take too long and too difficult to maintain the programs. There are a few occasions in systems-level programs that might require assembly but any program that requires user interface is not feasible to be coded in assembly.

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 language is 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 problem you 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 :P

But 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.

>My initial question is whether or not should I start with C++ or Assembly?
Given only those two options, you'd probably get more out of C++ and have an easier time picking up many of the concepts of modern programming.

>I know I probably will end up using Assembly
I doubt it, at least not for long.

>as I want to be able to control everything that happens with it
In practice, this doesn't matter anymore. Unless you're riding the metal to bootstrap an operating system or for those rare extreme performance purposes, absolute control is more tedious than helpful.

>and I don't want to rely upon others to code
I've got news for you slick, you will be relying on others even with assembly. This rationalization is silly, as you still need an OS, you still need an assembler, you still need a linker, and you're likely going to take advantage of APIs and libraries written by other people if you want to do anything remotely non-trivial. A beginner who doesn't rely on others isn't going to get very far.

>but I think it would be quite difficult, especially as a first language.
Assembly is notoriously simple, actually. There are only a few rules concerning the language itself, and it's very straightforward. The real difficulty with assembly is putting it all together, because the pieces are about as small as it gets.

>I hate Ruby
Only a fool forms a strong opinion about something he doesn't understand. When you're an expert in Ruby, then I'll respect your opinion. Until then, I'll write it off as the ramblings of someone who doesn't know what he's talking about.

>I want to avoid archaic languages such as Pascal, Cobol, FORTRAN, and BASIC.
Some programmers make a fortune programming in "archaic" languages because nobody else wants to.

>My goal is to learn how to program, not to memorize syntax.
You have to learn syntax, there's no getting around that. But it's best to pick a forgiving language because then you'll have less trouble with the syntax.

>If you recommend a specific language, which one would it be?
Probably Python.

>what reference materials you would recommend (i.e. books, articles, tutorials, etc.)
Yes, I recommend books, articles, and tutorials.

Scheme -- learn to program instead of learning syntax. Start with this

Is there a compiler for Mac OS X? Or is it a language that is supported in Xcode?

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.
.

My problem with C# is not that MS owns it, but rather MS owns it; meaning this: Since I'm a Mac user I can't use C#. Additionally, you are limited to Microsoft's software, without the ability to use alternative IDE / compilers.

Furthermore, the reason why I want to learn Assembly and use it (albeit occasionally) is because I want to create low-level software, such as drivers for Linux and possibly OS X. Also, some of the software I want to write might be on embedded platforms (i.e. iPod, Nintendo Wii, etc.)

>Since I'm a Mac user I can't use C#.
So you assume. C# is an internationally standardized language, which means Microsoft doesn't "own" it in that anyone can write a compiler. In fact, if you do research on the Mono project, you'll find that people have done just that with .NET (including C#). Mono is available for Mac OS X, so the limitations you've stated exist only in your mind.

>I want to create low-level software, such as drivers for Linux and possibly OS X.
Drivers these days tend to be written not in assembly, but in C or C++.

>some of the software I want to write might be on embedded platforms
Embedded software tends to be written in C, C++, or Java.

While I'm entirely unsurprised that you're already starting to close your mind to viable alternatives, it's best to avoid that practice if you want to be a good programmer.

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!

But two years is only Freshman and Sophmore years of college, hardly what I would consider becomming an expert at anything other than booze and women :)

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.