Hi all, first post here [8D]
I'm 14 and I'm really interested in computers, more specifically, writing games to work on them. I was wondering what kind of things I should be looking at now to ensure that once I'm old enough to be considering full time work, I've got the (excuse me, but I can't resist) sk1llz and t3knk33kz to get employed in a good job. As previously mentioned, game programming is what I'm interested in, programming as a whole I really enjoy, but writing a good game is kind of a goal in my life that I'd like to try and turn into some form of sustainable employment.
All suggestions appreciated.[8]
If you would like to e-mail me with anything (I've got no idea why you would, but anyways) zoolig_3001@hotmail.com should get a response from me pretty quick.
Thanks in advance [B)] (coolest emoticons)
Welcome!
If you want to be a good programmer, then you're going to need some formal training, whether that's uni/tafe or somewhere else, there are things that you just can't learn on your own. Above and beyond that though, the ability to complete a project is huge. Lots of people (myself included) start projects that fall by the wayside. Having even a single game or mod complete and finished will look really good.
Focus on maths for skills, focus on english for stories and art, focus on the subjects you enjoy. What you learn in History might make a great RTS game. In Geography a great Sims game. In home economics the greatest cooking game never yet written. Oh, and the next time you learn something in Maths that you think is too hard and you'll never use again - the answer to "where will we use this" is "in writing computer games" [:)]
Otherwise, start to think about why you play the games you play. Try a new one you've heard about but wouldn't think about buying norally. Odds are you'll work on at least one game in your career that you'd never buy as a gamer. Maybe you're into FPS - try a turn-based masterpiece like Civ4. Maybe you're into MMOs, try console party games, sports sims, DS platformers etc. The more you think about why a game works and why it doesn't the more you'll be able to understand how games are made and make your own.
And good luck! Remember that making games is actually hard work - but most of us wouldn't want to be doing anything else.
i'm not a programer so i cant offer any advice other than:
never say "sk1llz and t3knk33kz" again
...i dont even know what that says! l33t speak is something 14 year olds do to annoy people on the internet and when playing couter-strike, but since you're 14 you're forgiven. when you're older you'll realise know one likes it[:D]
The 1337 is just a joke to kinda poke fun at people who think by slaughtering the english language it shows they have some kind of mastery of cracking or whatnot (go figure). Getting caught up because I use one or two words makes you look single minded (not trying to be offensive, but that's like not listening to someone because thay have an accent) but anyways, thanks for the suggestions.
As for maths, some of that stuff my teacher says is applied only in architechture, but hey, I'm still getting like 90%+ so it's all good (I've always found maths easy) english makes me feel stupid, but such is life.
So yeh, thanks for the suggestions, keep 'em coming and try to get over the 1337 (101 0011 1001 for the binary number and 0011 0001 0011 0011 0011 0011 0011 0111 for the ascii code, don't ask why I bothered to find that out, but you're now enlightened a little more)
That the t3kn33kz thing was directly from a bsb thing on asm and among friends of mine has become a kind of in-joke, so now you know a little bit more of why we 14 year olds speak like some kind of monkey dancing on the keyboard.
I was also wondering if my continuation of learning the C++ programming language is a good idea, or if I should swap to c, asm or that kinda thing. . .
quote:Originally posted by Zoolig
Getting caught up because I use one or two words makes you look single minded (not trying to be offensive, but that's like not listening to someone because thay have an accent)[/br]
You're right of course, but if you're a tourist in Guatamala trying to buy a kilo of plantain, it's up to the tourist to make as much effort as possible to be understood. That said, I think you were fine in the first place since you did very politely excuse yourself [:)]. You will find that people don't really read posts though, so if they see 1337speek they'll immediately make an assumption about you, valid or otherwise.
So, obOnTopic - stick to C++ as your prime focus, but build up a wide understanding of other languages. A lot of games use lua, or python, or various other scripting languages on top of C++. For example, anything on the Unreal3 engine (next gen sweetiness) will use unrealscript.
[edit - typos]
I have been doing some work with python because I'm doing that next year with school and the bigger heads up means I can use the resources (teacher) for more then asking how to print 'Hello, World!'.
I'm also learning perl and a bit of asm, perl because I've had it suggested alot and asm for incase I decide to write a really speed-needing game.
Thanks for all your help once again and the more suggestions the better.
Edit: Just thought about this, what areas of C++ should I try to focus my main attention on and would anyone be willing to be my 'mentor' (sorry for use of such an over-used buzzword) I think question-bitch would be more appropriate, hehe. I just often find books don't know enough of the answers. heh. Thanks again for your help but don't stop yet (I'm sorry if I say thank you alot, I believe due respect is necassery and teaching is probably one of the most self-less acts)
Hey good on ya for having a go at asm...
You'll almost certainly encounter people who will tell you that it takes too long, is too hard to debug, processors these days are so complex, compilers produce better code than you ever could, software is too large and complex to code in asm, blah blah...
So let me just say that those people are full of crap. Most of what they say is just dogma that they picked up during formal training. Sometimes its just the conclusion they reach because they're not very good coders and find that compilers produce better code than they do.
Even if you end up coding mostly in C++ you're still basically producing asm by instructing a compiler what code you want generated. C++ can produce masses of very slow code from a single line of source. If you want to code well you need to understand what you're asking the compiler to do and the first step is learning asm. In other words, learning asm will make you a much better C/C++ programmer.
Now you certainly don't need to learn it, in fact very few coders in the games industry have much experience in asm, many have none - probably one of the reasons so many of them complained about coding the PS2 vector units. But that just makes the skill all the more valuable.
I'll go as far as to say that in my opinion you simply cannot write fast arse kicking code without knowing asm. In some cases you can beat compiler generated code (even when the source uses intrinsics) by as much as 4x. In other cases you'll simple write better C++. Either way, I highly recommend it.
pb
For questions you have, try them on the [url="http://www.sumea.com.au/forum/forum.asp?FORUM_ID=26"]Sumea Programmer's Forum[/url]. don't forget to read [url="http://www.catb.org/~esr/faqs/smart-questions.html"]this[/url] first though...
My advice is learn and absorb anything and everything that you can get your hands on, it will all give you experience and knowledge of one form or another.
* Learn assembly, the 80x86 instruction set is a dog's breakfast but you'll be better off knowing it (ARM is also nice if you're doing embedded development).
* Learn C and C++, they are different langauges each with their subtleties, but they share a lot of common structure and heritage.
* Learn a scripting language such as Lua, or Ruby, or Python even since you'll want to do some form of rapid prototyping or shell-like scripting with it.
* Learn something that uses a runtime like Java or C#, so you can use it to build any editor-like applications rapidly, or use that knowledge to modify existing development tools.
* Also learn languages such as Lisp/Scheme, Prolog and others just to see that there are different programming paradigms and different ways of solving complex problems. (Avoid COBOL like the plague though!)
Then don't forget to learn all of the algorithms and techniques of development, such as learning regular expressions, lexing and parsing which are handy for more than compiler development, sorting, search algorithms etc. Mathematics is worthy of a special mention too, and just because you don't see an immediate application to the advanced maths that you're learning (or will learn) that doesn't meant that there won't be one in the near future.
The point I'm trying to get across is that just learn and absorb everything that you can that is even remotely close to programming and development. If it isn't of any use now it probably will be at some point in time.
Good Luck! :-)
quote:Originally posted by Daemin
* Learn assembly, the 80x86 instruction set is a dog's breakfast but you'll be better off knowing it (ARM is also nice if you're doing embedded development).
* Learn C and C++, they are different langauges each with their subtleties, but they share a lot of common structure and heritage.
PowerPC is now totally dominating the consoles so its worth learning too. IBM have released a lot of info on their Cell processor and more will almost certainly be forthcoming.
And I very much agree that learning C in addition to C++ is worth doing, especially now that C has been able to evolve in its own direction. New features such as restricted pointers let you produce much faster code in C than you could ever produce in C++ (although GCC supports restricted pointers/references in C++ as an extention).
pb
Ok, thanks for all your suggestions.
In relevance to the "absorb all the information you can" I've gone from trying to learn how to succesfully install RAM into my computer to these forums asking these questions, trust me, I'm trying to be the ultimate sponge (I'm 14, I'm allowed to be a socio-economic sponge aswell).
Thanks for all the help, don't stop yet though:P
Edit: Decided to put it here. Anyways, with asm, I'm currently going around in circles, I'm just having too much trouble trying to make sense of it, but I'm re-reading the tutorials a billion and one times with a different approach everytime till it makes sense. I need things logically explained to me, like I didn't understand abstraction till a friend described it was "What Can It Do" not "How Can It Do It" so if anyone can offer that kind of help (the kind of mentoring I need normally) it would be beyond words the appreciation I would feel.
Oh and that "how to ask questions the smart way" page, I've already read it several times in my online-adventures:P but may aswell go over it once more.
I'd still like to find someone who I can kinda have as a mentor, prefferably with similair tastes in games ect. . . I'm the kinda person who works at their peak with partner and a team behind and infront of them. Thanks once again for all your help and keep it coming.
Mate, you're at a heck of a place in the middle of high school since you're already programming, don't stress yourself about what you need to know (you've got a couple of years yet of formal training before landing any sort of decent games job). Try asking your favourite teacher about the annual programming competitions held 'round the world for high school students. They're like the maths comps and science comps. [url="http://www.acm.inf.ethz.ch/ProblemSetArchive.html"]here's a link to heaps of examples[/url].
I really suggest you don't think of a 'mentor' per-se unless you can find someone you can talk to face-to-face. A forum or group of people is a much better option since people's schedules (especially in this industry) do change.
So, anyway, assembly language only makes sense if you understand that it's just an easier-to-read-and-write version of machine code***, the sequence of numbers that control the CPU. Therefore assembly only makes sense if you understand [url="http://www.howstuffworks.com/microprocessor.htm"]how a CPU works[/url] (I mean *really* works)[url="http://www.herts.ac.uk/ltdu/projects/mm5/index.html"]Try the "little man computer"[/url] for a nice animated intro to [url="http://www.herts.ac.uk/ltdu/projects/mm5/instructions/components.html"]how a CPU works[/url]. Don't be put off, this is a useful and accurate way to learn it.
Everyon'e right, learning assembly may not be easy or something you use every day, but I learnt assembly on a nice, simple CPU called the [url="http://en.wikipedia.org/wiki/6502"]6502[/url] which ran at a princely 1.024MHz (not GHz) and had a grand total of three (useful) registers (A,X,Y) plus the Address pointer (AP) and the status (S) register. I used 8086 assembly at uni, and I don't even know how many the 80286, 80386, P4 etc have. However, the concepts are exactly the same and I last used my assembler knowledge to track down a very complex synchronisation bug which was occurring on a Sun UltraSparc-IV unix server with 24 CPUs. I know next to nothing about the Ultrasparc-IV, but since the concepts are the same I could understand what the chunk of code was trying to do.
If you want some insight into how deep the rabbit hole goes (not to scare you, but to whet your appetite!), take a look (but not too deeply) at the [url="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/i…"]MIT Open Courseware[/url] section. These are true MIT undergrad lecture notes. This stuff is not easy but by gum it's fun.
***yes, this is a lie, but a special kind of true-enough-designed-not-to-confuse-the-issue lie
Mcdrewski is right, to learn assembly you have to know what the computer is doing, and how it is doing it, which most likely means grabbing a book on Computer Architecture (see if you can get some university-level adult, preferably a student there) to get you such a book.
You have to know basically these things:
- How a CPU works (Instruction stages, pipelining, registers etc)
- How the memory system works (caches, main memory, buses, and most importantly addressing)
- Little & Big Endian
- And then the instruction set that the particular architecture uses.
quote:Originally posted by Daemin
Mcdrewski is right, to learn assembly you have to know what the computer is doing, and how it is doing it, which most likely means grabbing a book on Computer Architecture (see if you can get some university-level adult, preferably a student there) to get you such a book.
You have to know basically these things:
- How a CPU works (Instruction stages, pipelining, registers etc)
- How the memory system works (caches, main memory, buses, and most importantly addressing)
- Little & Big Endian
- And then the instruction set that the particular architecture uses.
I disagree - you don't *have* to learn in any particular prescribed way.
Different people learn things differently its entirely possible that you'll find it easier the other way around - learn how the processor works by learning asm first.
For example, you first think of loads and stores in a naive way - they just move between registers and memory. Then when you understand this its much easier to learn how a data cache works.
Similarly, its much easier to understand pipelining once you have an intuitive grasp of opcodes.
The point is, the words "have to" and "only" are almost always untrue. If learning something one way doesn't work, try another. Its OK to be "put off" by explanations that don't work for you.
pb
I think I may have come across as saying that you have to learn those things first, however that's not the case. I would like to clarify by saying that you should learn those things in parallel to learning assembly. Learn load/store and memory architecture, jumping/adressing and pipelining, etc at about the same time.
I would however encourage to learn the low level architecture and assembly programming before going to the higher level languages. I think its a mistake trying to teach Java as an introductory language no matter how nice it makes programming seem to be. I believe Joel Spolsky says something along those lines in his "Law of Leaky Abstractions" article.
Once again, thanks for your help. Out of all the resources I've been looking through and forums, this has been the most helpfull in choosing a direction. I've not yet done much with java, nor do I really plan to, I know it's a disgusting bias, but when I think java, I think runescape, when I think C++ I think World of Warcraft, so yeh, it automatically makes me go back to mr. borland.
As for the asm, I'm trying to learn it as much as I can, but man it's complex stuff! I kinda understand how machine code works, but I make a point of always trying to understand things further and further.
I've got nothing else I can really ask at the moment, everything I wanted to know has been answered, but if you feel there's more that needs to be added, by golly gosh, add it! (I don't get to say by golly gosh often and my teacher said today, so I decided I would aswell)
I checked and I believe my school teaches VC++ in their programming classes, so I'm going to be doing that, but hopefully a bit ahead of everyone.
And with ASM, I'm having trouble finding a tutorial that assumes null prior knowledge of a computer system and that seems to be slowing the process, all help welcome.
I really must say, this site has a fantastic community, I've never found anywhere where people are so willing to help, share an opinion ect... and be civil at the same time, must say something about game developers I guess :P.
Someone also said something about how I'm worrying about getting a job ect... Reason being, I don't want to waste time pretty much, life's such a short thing, wasting it should be a crime punishable by death (I'm aware of the irony, but if you don't use it, do you deserve it?)
Kinda harsh, maybe, but I seriously find how people can waste their lives to be the most annoying thing, therefore, I try my hardest to not do that.
I kinda wish we did asm or something that's really tricky, C++ I find I just have to keep kinda hacking through the dense vines in the jungle of problems, even though I'm still on the basics. asm on the other hand, i find myself feeling like some kind of idiot, so yeh :P
Still, it's probably alot better then what most other people get at 15, so I can't complain ey?
With Assembler you might want to try developing for an embedded system, it's a bit trickier, and debugging is ever so much more fun*. Perhaps take a look at the "reduced instruction set" arm chips as found on a game boy advanced. I haven't checked in a while but I would imagine that the GBA development communities would have some reasonable articles on ARM assembler.
Also a small tip for learning assembler, do small blocks of inline asm within C or C++ code, also you can write some C (preferred) or C++ code, and get the compiler to spit out the assembly that it generates. You can get it to spit out a nice listing file containg the assembler code, source code in comments, and even machine byte code. Then you can at least tell roughly what its doing and it will give you a bit of a push.
* about twice as much banging head against desk and/or wall.
Lose the dude speak for starters, its a barrier to someone reading your post to begin with. Next you should start modding, pick an engine,and then play around with it. When you have mastered that, then join a mod group and start producing good mods.