What should I do at my current level of programming.

Started by
7 comments, last by DanX2002 14 years, 1 month ago
Hey I'm new here, sorry if this is in the wrong section but I think it is. Basically I'm definitely not new to game programming, I've made games with game maker programs my whole life and got to the point where I felt they were doing too much for me and I moved onto game engines. Now I use Torque Game Builder, have experimented with Lua-based engines and OpenGL and other things, but now I'm thinking that the main engine I use which is Torque Game Builder, does too much for me. I think that if I'm to improve at game programming I need to stop using it and move onto something of a higher level. Well I came here to basically ask, what, as an intermediate (or what ever level I'm at) game programmer, should I learn next?
Advertisement
If by higher level you mean lower level (a few levels of abstraction closer to the machine), I suppose you could try writing some rendering library which utilizes OpenGL or DirectX on your own. Then investigate something like OpenAL for audio. When you've done that look into game input handling which SDL does. At this point you're probably developing a library of common tools which will basically do the work of torque's engine except that all the code is built off of libraries which simply interface with the hardware. It's one level down from where you are.

Or check out Ogre3D which is itself a rendering engine, but it does not provide an all-in-one package like Torque does (as far as I know at least, I am only tangentially familiar with Torque.)
_______________________"You're using a screwdriver to nail some glue to a ming vase. " -ToohrVyk
Moving to For Beginners.

-- Tom Sloper -- sloperama.com

Well since you are already somewhat familiar with programming since you used Lua. Not to mention torque still requires some programming as well. I would think a good step for you would be to learn C# and check out XNA Game Studio by microsoft.

It will hold your hand just enough that you can see the progress you make keeping you motivated. Not to mention gives you potential to see your game run on the XBox 360.

The advantage this would give you is getting you more comfortable on a lower level scale and give you some momentum to move even lower level if you wish with C#/SlimDX or maybe at some point C++/DirectX.
@Mt2M - thanks for that breakdown of higher and lower, that actually clears the definition up for me :-)

@OP - You say you have looked at OpenGL but do you understand how it works? Why not try and make your own software renderer? This was one of the most challenging things I done in university but also one of the most rewarding. Limit yourself to setting up a window and only using the draw pixel function.

Doing this will teach you many things:
- Improve your maths. Creating lines, triangles and circles
- Teach you the graphics pipeline
- You could implement lighting algorithms

Due to this project being a graphics project you will be able to see your progress. Very rewarding in many different ways.
Quote:Original post by Mocuto
Well I came here to basically ask, what, as an intermediate (or what ever level I'm at) game programmer, should I learn next?

That's nice that you've learned how to write code, but what about your other skills?


Look at your professional software development skills:

Can you debug the HARD problems? Even in spaghetti code that you didn't write? Can you break down huge multi-month features into small tasks that take 2-8 hours to complete? How are your personal management skills? How are your skills at sub-dividing work into independent tasks that can be done concurrently (by two or more humans)?

There is an old, excellent article on the subjects.


Look at your computer science topic knowledge:

Do you really know your algorithm theory? Are you knowledgeable enough in algorithm theory that you can reduce the problems to their simplest well-known forms, and how to generalize many problems with a single algorithm? Can you explain the TSP? SAT and 3SAT? KNAPSACK? Can you explain the halting problem? Can you implement and switch between depth-first and breadth-first algorithms? Can you identify when an algorithm is either intractable or unsolvable?

Do you understand at least the fundamentals of computing theory? Can you describe and implement the major automata, including FSM, PDA, and Turing machine? Can you use context-free grammars and regular grammars? Can you normalize a grammar, parse it, and convert it to automata?

Do you understand at least the fundamentals of compilers and computer processing? Can you write a toy CPU, that accepts Turing-complete input and executes it? Can you write a toy compiler for that system with your own toy assembly language? Do you understand the major types of optimization, and implement them in your toy compiler?

Do you really understand your data structures, including containers? Can you implement a dynamic vector, linked list, binary tree, balanced binary tree of any type (such as AVL, RB tree, or B-tree), trie, and heap? Can you implement both a quicksort and heapsort? Can you implement a generic binary search?

Do you understand the basics of the CPU, such as instruction pipeline and cache effects? Can you explain why locality of reference is important? Can you explain the pros and cons of long pipelines? Can you explain register coloring? Can you explain an out-of-order core? Can you explain the effects of data stride on cache-lines? Can you explain the i-cache and d-cache? Can you explain the relative costs of L1, L2, L3, and paged-out cache misses? Can you explain the different costs of various bus transfers?


Hopefully you will see a few areas that you can develop your skills.
Wow, thanks a lot for the advice. Your posts really helped, especially frob's.
Quote:Original post by Mocuto
Wow, thanks a lot for the advice. Your posts really helped, especially frob's.

Just so you know, all of those items come from the basics of a CS bachelor's degree curriculum.

Although every school is different, all CS programs should cover each of those in detail. They will also cover the necessary prerequisites for those topics. Schools with research programs and graduate studies will offer additional, more advanced courses on those topics.

Really those are basic things. Any CS grad ought to know them. Sadly there are many who don't ... which means they are much less likely to pass my hiring questions. If you have no work experience, I expect you to have stellar academic experience.
frob,

I'm a professional software developer and I can tell you that 80% of the things you unnecessarily listed are totally irrelevant to game development. Why on earth would he need to implement his own Turing machine or cfg to create a game? I can ask you one more question to add to your own list:

Do you understand how to use the right tool for the right job?

This topic is closed to new replies.

Advertisement