Languages to learn

Discussion in 'I wanna be a Game Programmer' started by Suiken, Apr 16, 2007.

  1. parm

    parm Just barely adequate One Of Us

    A raytracer is a good exercise (and got me my first job). A simple one with pointlights, spheres, shadows and basic reflection should be enough to show you've got a good grasp of 3D. And if you can introduce things like texture and normal maps, it'll put in place a lot of things you need to know for writing shaders.
     
  2. Suiken

    Suiken Lurker Not From Round Here

    I actually have very little. I'm taking courses right now though. I'm only in my first year of college, and there weren't any programming courses at my high school, so that should explain why I'm at where I am.

    I do plan on sticking with Computer Science and getting through to the end (degree and whatnot).

    Oh, to add another question to this thread:
    What kinds of mathematics are used from day to day? I've recently found (and come to terms with) types of math that I'm just not good at. At least, not yet.
     
  3. ilian

    ilian Gaming God One Of Us

    go get half-life 2 or unreal tournament or Torque or whatever, and start making shit.

    This will get you good experience and eventually a job.
     
  4. Unsurprised Jack

    Unsurprised Jack Industry God One Of Us

    You can't know enough mathematics really; there are many surprising applications in all areas of game development for those with a really strong and broad math background. (ie not most of us).

    Mostly though, you can get by knowing all the basic 3d stuff, such as vectors, rotating and translating them, getting normals to surfaces, getting the angles between vectors. Even that stuff, if you're working with an established engine you may not need to know it all backwards, although it helps.

    Being comfortable with numbers, statistics and probablity is all handy. And in particular, number representation in computers. Floats vs Ints. Accuracy issues, all that kind of stuff, you need a good understanding of.

    If you want to be a physics programmer you're going to need a lot more; familiarity with calculus and numerical solutions to integration problems; also collision algorithms and spatial representations.

    Graphics programming you will need more than the passing familiarity with 3d vector ops above. You'll need to be the kind of person that thinks about pixels on the way to work, and will be overjoyed when a new graphics card comes out and you have to program it all in binary.
     
    • Thank Thank x 1
  5. Tempus

    Tempus Lurker Not From Round Here

    Obviously C++ as everyone has said.

    I'd also say that learning UnrealScript will massively improve your marketability in the next 2-5 yrs.
     
  6. shyndarkly

    shyndarkly Lurker One Of Us

    *peeks out from unwashed, unwanted lurkerdome*

    Follow the words of the wizened one. Do it 2d turn based to begin with, nice and simple. You've got the basic thing that you can extend in whatever area you want to play with:

    - If your interests lie in AI, try to make it play well against you, but not so well that it beats you every time (not as easy as you might think at first glance). Then make it play against itself and not play the same way each time.

    - If your interests lie in graphics, give it the whole 3D treatment, experiment with cameras, do post-move flybys, make some pieces reflective, add shadows, tons of fun without the need to get sidetracked making art assets for months.

    - If your interests lie in multiplayer, add some networking to it, either by rolling your own or try using one of the public middleware packages like Enet or Raknet.

    Once you're done with that, grab an engine, anything you can get your hands on: Ogre, Freespace, Torque; and try to implement the same simple game using those.

    Dont fall into the typical pitfall of aiming too high and wasting huge amounts of time making assets. Keep it simple, and grow it :)

    *slides back into the swamp of the unwashed*
     
  7. Grunge

    Grunge Super Moderator Staff Member Moderator

    I always tend towards writing a partical system and a copy of Space invaders whenever moving over as they can easily be set up in code therefore you don't have to worry about importing levels or making tools before you can get your demo off the ground.
     
  8. FlameBoy

    FlameBoy Industry God One Of Us

    Something to avoid is learning languages that are too obscure.

    eg. When I was at university, they taught us using Pop11, which is used in two universities, one military establishment and nowhere else.

    eg. I spent five years as a gameplay programmer at one company, got five games released and a total of around 5 million units shipped, but I was using their in-house scripting language. Once that job ended my CV was harder to sell than it could have been.

    I'd personally recommend C++ because it's been used in multiple roles everywhere I've worked, including tools, engine, gameplay, etc. But the main reason is because it's a good, solid language to have on your CV if you decide the games industry isn't for you.

    Having said that, I still think it's a good idea to also learn a widely used scripting language, such as Lua or Python. These are used in the real world, and they're fun to learn and use.

    As a project, I'd suggest writing a scrabble game. You could do it in C++ and just draw the board to the console. You could write AI routines to play against or build in networking. Alternatively, you could look at something like wxPython, which is a user interface library for python (actually, wxWidgests is multi-language, so you can use it with C++ too). It has some really handy demo tools that could get you up and running fairly easily.

    Finally, don't worry when people say certain things should be easy, but you find them really hard. It's easy to forget how confusing programming can be to get into, once you've been doing it for a few years.

    Good luck and have fun,
    Flameboy
     
  9. inpHilltr8r

    inpHilltr8r Guest

    I reccomend Perl, because once you've learned all of it, you've pretty much covered every other language in the process.

    You'll also either be a complete gibbering lunatic, or have achieved some form of transcendental enlightenment.
     
  10. Unsurprised Jack

    Unsurprised Jack Industry God One Of Us

    For what it's worth I learned Pop11 at Uni as well.

    Thing is, at computer science degree level you shouldn't really be learning a language just to use it in the field, you should be building the basic theory and building blocks in your knowledge so that you understand the limitations and strengths of every new language you come across.
     
  11. parm

    parm Just barely adequate One Of Us

    There's been a few people touched on it, but I reckon it's really useful to learn a functional language (ie, Haskell, SML, Lisp, Prolog [to some extent] -something like that) alongside an imperative one. You won't necessarily use it day to day (although Lisp is not uncommon) but it gives you a useful way of looking at problems that imperative programming won't necessarily teach you. Also, it forces you to deal with recursion from the off, which Is Important.
     
  12. anonnymoose

    anonnymoose Industry God One Of Us

    I learned originally in Pascal - hardly anyone uses it anymore which is a shame as its an excellent teaching language (and indeed dev language in its own right depending on the project). It teaches a lot of the basics as well as helping you write your code in a readable manner - I can usually spot people who have learned to code in C/C++/VB as a first language as their code can be a lot harder to read - especially if self taught! Remember kiddies: other people need to be able to read your code too, if you want to be a pro coder!
     
  13. inpHilltr8r

    inpHilltr8r Guest

    #define BEGIN {
    #define END }
     
  14. Unsurprised Jack

    Unsurprised Jack Industry God One Of Us

    I asked a programmer to explain recursion. He went to the next cube to ask someone else. After a couple of hours a programmer I've never seen before came to see me and said "Stack overflow".

    I get it now.
     
    • Thank Thank x 4
  15. redBastard

    redBastard I am not a number... One Of Us

    Suiken, don't despair too much. While learning a language is important, the the language is secondary to the ability to break down problems and solve them. A good software engineer should be capable of applying his/her problem solving skills to a variety of problems regardless of the language. Mastering the language(s) will come quicker than you think through experience.

    My recommendation is focus on algorithms and problem solving more so than the languages. For example - reading a car's owner manual doesn't always teach you the best way to drive it in traffic.
     
    • Thank Thank x 2
  16. Mathematix

    Mathematix Banned

    Awesome advice that a lot of people appear to omit, leading the novice programmer into thinking that learning a language == a good programmer. Not the case!
     
  17. anonnymoose

    anonnymoose Industry God One Of Us

    No, I don't think thats what we are saying - just that choosing a "good" language to start with is more likely to lead a new coder in the right direction than choosing a "bad" language.

    Insert your own definitions of "good" and "bad" as you see fit.

    Learning good software engineering (theres a title you don't come across much in the games industry!:neutral:) is of course the most important. But this requires a lot of self-discipline from the "bedroom coders" *or* a good teacher. I was taught good software engineering from what I regard as bad teachers. That is my excuse and I'm sticking to it........:D
     
  18. Madcat

    Madcat Gaming God One Of Us

    If you are going to learn The Language, that would be C++. It's a mine field, and you've got to navigate it. End of story. Almost...

    A general language survey is a great way to learn programming concepts that you probably aren't going to accidentally discover in C++, even though they are possible to utilize to some degree. The goal here isn't to be a master of the language, but to see how languages cater towards certain programming styles, so that you can incorporate those ideas into your repertoire. It's also fun just to see what's out there.

    Some examples:

    Eiffel (Design-by-contract)
    Erlang (Concurrency)
    OCaml (Functional, fast, practical -- would be a great do-it-all games programming language)
    Forth (Minimalist, super-high-performance, funky, Postscript!)
    Lua (Minmalist, modern, elegant)
    COBOL, FORTRAN, APL (History, study of pain)
    etc...
     
  19. Unsurprised Jack

    Unsurprised Jack Industry God One Of Us

    <Common Lisp Evangelism Mode>

    Learning Common Lisp and it's object oriented extensions (CLOS) is well worth while. Common Lisp has a bunch of stuff to teach:

    Functional programming: You can use it to learn functional programming by writing in a pure functional style. Functional language research is hot right now, and a lot of it is bleeding into the latest imperative languages.

    Object Oriented Programming: CLOS is an extremely flexible Object system that makes C++ look like the road accident it is. It enables you to write multiple dispatch methods, which means you can write, for example, a collide method that works for multiple pairs of object types instead of writing a collide method for each object and it's collision with every other object. It also lets you write methods that get called before, after, or 'around' parent objects.

    Dynamic programming: Common Lisp is a dynamic environment, ultimately what we all want for game development. You can write and execute functions, modify them, even change classes at runtime, without recompiling.

    Meta language/ Domain specific languages: You write Common Lisp directly into what is basically an Abstract Syntax Tree. This means you can write code that writes code, at compile or runtime. It's an ideal language to explore domain specific languages and to write and learn about compilers and interpreters.

    Closures and First class function objects: You can also learn about these in Javascript. Being able to create functions, pass them around, and call them from a stored environment, provides a new way to solve some problems.

    </Common Lisp Evangelism Mode>
     
  20. Madcat

    Madcat Gaming God One Of Us

    Lisp is also the best language to use if you want to create a never-ending flame war.