Hey guys.
possibly you technical artist types may know the answer here as well
.
one of my Co-Workers wants to make the switch from what he is doing now,to videogame programming. I said id ask around at polycount which goes as far as making a post
.
The basic question is what should he be learning? and what should he produce/show to a possible videogame based employer to get an interview/job?.
He has exsperience in a huge range programming languages from simple html,xml etc to C and C++. Though this exspecrience is largily self-taught and done for friends or himself rather than an employer. The job he has with us is is first programming job and is largily flash based action-script and .xml coding which he has had enough of and in the opinion of the rest of us (though oviously I don't know how good he acturally is since im an artist) is way below his actural abilitites.
Right now he is infact learning C-Sharp in his spare time and is creating his own game engine and world builder from the ground up using DX9 and Shader 2 Tech.We hope to create a small game out of it with myself doing the art.He is also learning 3dSmax with my help so he can make basic .fx shaders and placeholders so he can test stuff himself. but is this the best way for him to demostrate his programming creditials to an employer?
His only other game based programming exsperince is creating mini-mods that him and his friends played over LAN for the Quake and UT series. but again these where never made public.
In an ideal world he would like to do shader programming "because I like the maths involved" (crazy man
) or editor building.
Any Advise would be much appreciated.
Cheers
John
Replies
When applying for a game-programming job, the most important thing is to show a game that you've coded yourself. It's the best way to learn, and the best way to prove your skills to an employer.
Well I'd say he is wasting his time learning C#. It is basically Microsoft's version of Java. If he is looking to do game programming, stick to learning advanced C, C++, and DirectX (or OpenGL).
[/ QUOTE ]
Yes, because no one uses that XNA junk
I wouldn't be so quick to write off C#, there's a lot more to it than "microsoft's Java".
ill pass it on
John
At any rate, specific language skills are overrated; It just isn't very hard to pick up a new language when you need to.
Familiarity with a 3D API is very helpful. It doesn't really matter which one. They're all basically the same.
A polished game demo will be impressive no matter what languages & APIs it's built with. A good demo is the single most important thing for a programming candidate to have. It needn't be big. It can be very simple. Just make sure it feels fun & polished.
I also think that C# is a good pick, especially when it comes to tool coding or any other non-extreme speed critical tasks, which normally are most tasks
Certainly C++ will be in many ways a lot "harder" to achieve things, thats the whole point of high level languages... after all C replaced ASM for good reason as well. And the same will happen again with the high-level languages.
C++ is what pretty much every coder I know from everywhere I've ever worked uses.
At any rate, specific language skills are overrated; It just isn't very hard to pick up a new language when you need to.
Familiarity with a 3D API is very helpful. It doesn't really matter which one. They're all basically the same.
A polished game demo will be impressive no matter what languages & APIs it's built with. A good demo is the single most important thing for a programming candidate to have. It needn't be big. It can be very simple. Just make sure it feels fun & polished.
[/ QUOTE ]
Are you an artist or a programmer?
Specific language skills are NOT overrated. If a studio uses only C/C++ for its engine and you only know C#, you will not be hired.
3D APIs are NOT just all the same. DirectX is a complete graphics/audio/interface API that relies on the hardware while OpenGL is just a 3D renderer that can be hardware accelerated.
Like Rick said, you should pick an area of game programming. Maybe not as specific as animation or lighting, but at least decide whether or not you will be programming tools or if you will be programming engines. This will allow you to choose the best programming language to learn. C++ is very powerful and is definitely the harder of the two to learn, but it is easier to learn C++ first and move to C# than it is to do the opposite.
Crazybutcher: he said he wants to be a game programmer and you're telling him to pick the language that you yourself say isn't good for speed critical tasks. And it is not harder to use C++, it is harder to learn. You can often write algorithms in C++ that will be smaller and more efficient than any other language out there.
kidding aside, i wouldn't be so quick to write off C# as only a tools language. it has its value too in game prototyping, especially combined with XNA.
C++ is very powerful and is definitely the harder of the two to learn, but it is easier to learn C++ first and move to C# than it is to do the opposite.
[/ QUOTE ]
Actually, I would submit that the opposite is true. C# is very Object-Oriented with a C-like syntax. If you learn C# first it will pretty much force you to learn OO programming from the start, and since the syntax is similar, the transition to C++ is pretty painless... at least, that's been my experience. He said the guy already knows C/C++ anyway, so it doesn't really matter. Don't discount C# so easily, it's a great high level language that's very versatile.
That said of course if you are working on "super awesome title II" with billions of characters and so on, you might pick faster stuff here as well.
I think way too many people overrate the "speed hit" of certain languages, its not the best to use the fastest language possible, which might still be assembly. There is a difference between writing fast code, and writing code fast. If the latter gets the job (as in time until the code is ready to use) done quicker, and job itself is not of high importance, you effectively get more features going on. And actually you could replace the stuff later with fast code, in case it really becomes a bottleneck.
and I agree with Ryan about the language itself being secondary. Yes he will need to know c++ (which he does) for most jobs, but what is more important is the algorithms and code structure itself, the way to organize data / functions and so on. Which is the actual main brainwork!
And if he can do a polished demo, that is finished, as Ryan suggested, he proves himself capable of such "bigger" tasks that involved many different tasks (controls, logic, effects..). Compared to picking a language like c++ which simply requires more work to just write stuff down, and that time eats away from doing "more".
So say you have a guy who coded a c++ demo of some nice render effect, very fast and efficient. Yet it is rather one specific effect. And then another guy who has done a full little game, yes in theory it doesnt run as fast as the demo renderer, but it is a full product.
interesting read about languages by Tim Sweeny
http://www.st.cs.uni-sb.de/edu/seminare/2005/advanced-fp/docs/sweeny.pdf
or a java based quake2 engine as speed comparison between C (which might arguably be even faster than c++) and java (which is basically the same thing as c#)
http://bytonic.de/html/benchmarks.html
sonic, are you a coder or artist or both ?
if you were a coder, who doesnt rely on a single langauge for the rest of his life, I would suspect you are aware of how generational changes were made in history of programming. The same C vs ASM discussion was done before, with the same "oh its not as fast" arguments, yet we dont code in ASM anymore...
about dx featuring more than opengl, yes of course, but dx has a software renderer just like opengl could use one. However the important bits the actual rendering. Creating vertexbuffers, setting shaders and so on, is similar, as the hardware is the same... For Direct3D you might need to know a bit more about what slows down the api there, cause dx uses more cpu than opengl which has a much more direct interface to the hardware.
I think I might have to flick rubber bands at him on Monday until he registers here . But he is following this thread closly.
Rick:- He wants to work on Shaders and/or world builders,so making things similar to what crytek seem to be doing and the programming to make Unreal ED work for example.
As said he does know C++,but just hasn't had the need to use it over the last couple of years so is abit rusty with it,but if you were to put some C++ code in front of him he wouldn't be totally lost with it and would pick it up quickly again.
also we have decided to go with the idea of an arcady motorcross game in the essence of say "motorcross madness" for several reasons.
*Its pretty simple yet theres room to do some neat things with it.
*Simplier physics than a car game,physics and animations are his weakest areas in programming.
*with the various surfaces and terrains in motorcross he can show off what his world builder and editor can do.
*doesn't take a stupid amount of work to produce something that looks OK and workable...so not to ambitious. (i.e no MMORPGS here )
again thanks for the advise.
John
Specific language skills are NOT overrated. If a studio uses only C/C++ for its engine and you only know C#, you will not be hired.
[/ QUOTE ]
Not true. This guy is familiar with C++ and that absolutely could be enough.
Oh, and C? Really?
You are hatin' a bit too much on C#. It's a great language for tools programming. This guy might not be trying to be the next Carmack and be a low-level engine coder. If his 'folio' consisted of an awesome tool (like CrazyBump), but written entirely in C# , that is a great thing. Familiarity with C++ is a necessity, but he has that. It's also completely possible to write good game demos entirely in C# these days with XNA. It's arguable that C# might be the BEST choice for writing a quick gameplay prototype (it depends on what you're prototype is focused on).
My recommendation, as mentioned by others, would be to specialize in a specific aspect of game programming (AI, Physics, Artist Tools, Networking, UI, Graphics, etc). From there, just program something relevant to game companies, and make it hot.
CrazyButcher: speed critical is questionable? Which game company goes, "You know what, we're not worried about speed or how well this runs, who cares what language it is in?" when there are plenty of C++ developers? And Java isn't even really compiled. It is converted to bytecode which is interpreted by the JVM. Have you ever actually programmed in Java or C#? The speed hit is not overrated. I definitely agree with you that understanding OO, algorithms, etc is the most important part. But what about C++ makes it "requires more work to just write stuff down?" Can you give me an actual example? I've seen that speed comparison between the C version of Quake2 and the Java version. It is not a fair comparison, because the original Quake2 was written with a deadline a long ass time ago when programming knowledge was nothing like it is today. The Java version took the base C version and modified it and tweaked it over and over and over. Give the C version to an expert programmer and tell him to optimize it in C and you will get a speed boost as well. And although I am an artist, I am about to finish my Computer Science degree. There is a huge difference between C and assembly, but there isn't enough of a difference between C# and C++ to switch over yet. And you are wrong that OpenGL has a more direct interface to the hardware.
I don't get what everyone is trying to argue here. C++ is clearly faster, more powerful, and is harder to learn. If you learn C++ it is easier to move to C# if necessary. If he wants to make only tools, then yes C# will suffice. If you want to be more versatile, learn C++.
The relative merits of C++ aren't in question. It's the lingua franca, and a professional game programmer absolutely needs to be comfortable using it.
What's in question is whether Bronco's friend who already knows C++, is "wasting his time" picking up another language.
That sentiment was just silly. Learning a new language is never a waste of time. Languages are fun to learn and the mental exercise is nice even if you seldom end up using it.
I don't know whether I'd recommend C#. For mental gymnastics I'd probably recommend Lisp instead... but it's hardly fair to say he's wasting his time. At any rate what he learns will be more about the project than the language.
(And seriously, the difference between 3D APIs is minor syntactic sugar; you learn one and then you can use them all.)
I also didn't catch on that he wanted to program tools, so in the end C# may be his best option.
And I'm sorry if I came across as an ass. It's not often that I see threads like this so I usually get riled up when I get to shove my opinion in others faces . You are obviously a talented programmer who has done some great work for the industry and the scene. This is honestly the first time I've been in "Technical Talk" in forever because people used to just talk about art techniques and modeling programs back when I used to use it
and about opengl driver being faster/direct access, have a look at this http://www.beyond3d.com/content/articles/55/1 it shows how d3d10 was modelled after the same way of opengl support already in w2k/wxp. Exactly for the performance reasons.
The technical arguments are almost beside the point because studios already have large bases of C++ code and teams working on it. Inability to maintain that code would be a real disadvantage.
His demo won't be any less impressive for being written in C#... but if he can't hack C++ then, yeah, he'd better learn to.
As far as my aim in the industry, I've thought alot about this the last few days and I can safely say I'm more into making the editor tools and shaders than actually creating the 3D pipeline. I tend to start testing some concepts for an engine and end up making a tool to edit things to test in it. Ive done this for pretty much every thing I've worked on as a personal project way back to my C64 days hehe. And as Bronco says with shaders I just love the math involved.
But thanks again for your input much appreciated.