Answering as most people have been answering: I only started to code in high-school, so at about 16, in high-level languages like PHP and Lingo. The classes were so bad I had to "invent" matrices by myself since we weren't taught anything like that, and I didn't know they existed. From there I spent a year in Hereford, UK as an apprentice blacksmith
![Kiss](https://forums.tigsource.com/Smileys/derek/kiss.gif)
, and learnt python in my free time through
www.diveintopython.org. The range of exercises and technologies really helps settle programming logic
![Smiley](https://forums.tigsource.com/Smileys/derek/smiley.gif)
Then, CS studies from basic programming courses to interpretation and compilation, artificial intelligence, logic programming, distributed systems, graphics programming, and other usual CS stuff. This is what really opened my eyes for what's out there, and the sheer immensity of what is "programming" or more generally, "computer science"
![Smiley](https://forums.tigsource.com/Smileys/derek/smiley.gif)
So, everyone is sharing how they learned how to program, but not how they think it is best to learn how to program in this day and age. So I have a suggestion... why don't we all work together and try to come up with what we think is a good timeline (or set of probably sequential tasks) that would give programming newbies good grasp on what programming is all about, with focus on game development?
There are few issues we'd have to discuss regarding this, like:
1) What paradigm?We can probably rule out all but procedural and OOP, since these are the two most used. I was against teaching OOP as a first experience, but now I am for it. If properly introduced, it can make programming and software architecture a
lot more intuitive. It is really important to establish as many analogies to the real world as possible, and purely procedural languages don't achieve that by nature.
I would personally go for an OOP language.
2) What language?What follows from the first question is: what language is appropriate for a newbie. I would go for pretty high level languages. I started out with PHP and Lingo (from Macromedia Director). No type declarations, typical software constructs, but nothing too elaborate. Amazing features for regular programmers might only serve to obfuscate a newbie.
As far as I'm concerned, Python is pretty mainstream by now, and has bindings for a series of graphical libraries. It's efficient enough to power simple games, which is really all that should be needed at this level.
3) Graphical Feedback?Should the language provide graphical feedback? Console output isn't the most exciting thing. Graphics are really important so that you have direct feedback - otherwise, you're either going to have to learn to debug, or you're going to have to liberally salt your program with print's, and you won't be able to see immediate results for what you are doing.
Both the languages I learnt with, in the context I learnt them, were graphical. PHP for websites, and Lingo in an authoring environment. However graphics libraries can really make things more complicated than they really are...
In my personal opinion, even if it's not native, some sort of graphical output should be easily integrated. Python has PyGame and bindings for the SFML library, for example. Java has Swing and others, etc. C and C++ are a little more complicated to get up & running.
4) Starting exercisesAside from a list of helpful tutorials dedicated at total beginners (as opposed to people with prior programming experience in other languages), there should be simple exercises to try out. I'm thinking entry-level CS programming courses... some really basic stuff, and some stuff that makes you think on your own.
This, found at Cymon's games looks like a very good start. Simple, simple "games".
5) Going furtherWhat else? After seriously tackling some more complicated problems, and probably doing a tetris clone or whatever with the newly acquired skills, there need to be suggestions on how to continue. You can either move on to a more low-level, faster language, or you can start learning more abstract concepts.
For example... I thought I knew how to code when I was in highschool. Then I went into first year at uni. When I finished the first programming course, I thought I knew how to program. Then I got into my second programming course. When I finished, I thought I knew how to program... well, you get the idea. My point is, people who have been through a degree know how much there is to learn: it basically goes as deep and as far as you want to go.
At some point, you realize programming is just a tool by itself, through which you can realize some amazing concepts like simulating the brain or species evolution in order to accomplish ellaborate tasks. These, in turn, can be used to make applications, games or implementations of novel ideas in a more efficient or interesting manner.
Besides advanced concepts, stuff as simple as understanding data structures can really impact speed on some games, and is good to know even if they don't. More experience, more knowledge, more comfort with the languages your using: better understanding.
So in this section, we should probably provide links to things like:
- Explanations of common datastructures and what they are good for
- Sites with articles about gamedev
- Specific articles about the architecture of computer programs (just the other day I learnt more about the Model-View-Controller architecture here)
- Design patterns
- AI
- Common optimizations
Agreements, disagreements, suggestions, public displays of violence?
Also, I admit, salade's approach is pretty awesome too
![Smiley](https://forums.tigsource.com/Smileys/derek/smiley.gif)