View Full Version : Starting computer programing degree, advice?
Soon I'll start computer programing degree at a local college. I know various 3d modeling and compositing packages, but I don't know much of C#, Java, etc. though I have done a few tutorials.
Anyway, I was just curious if while taking my normal classes, what can I practice on? For example, can one guy, once he learns enough programming, make a simplisting 3d rendering engine? I'm not saying Unreal Engine 3 or anything like that, but what can I do as practice on the site to gear what I learn toward programming for Direct3D or OpenGL.
Advice for this newbie? :)
Building a game is a *really* good excercise as there is lots to learn and apply as you progress through school. I'd suggest starting with ultra simple GL/D3D coding until you get more comfortable with programming in general. NeHe has good GL tutorials and there are several good engines you can start with like Ogre. As you progress through your studies, your algorithms and datastructures will get better, as you take more math a deeper understanding of rendering will come. Past that, apply your physics classes, take an into AI class and build simple bots for your game. Basically, view building a game as one long, interesting project that will slowly get better. Pick the type of game you really want to end up with in the end that you can still enjoy before it's complete.
Daniel Horn from Stanford started VegaStrike I believe while many year ago and worked on it through his undergrad career and still pokes at it quite often it seems while he is doing his PhD.
As mhouston said having some kind of project in mind is definatly a good thing, as it directs your learning and keeps you intersted. I would suggest that if aren't already familiar with basic fundamentals of data structures and algorithms that you find a good book and work through it first, as most of the graphics tutorials will be concentrating on the graphics side of things, and you will need to have a basic grasp of programming constructs to progress with things.
Things like linked lists, search algorithms, sorting algorithms are normally the first types of things covered by a good programming course, as well as being very important in their own right they help you understand iteration, recursion and pointers etc.
OpenGL and Direct 3D are both primarily aimed at C/C++, so if these aren't covered on your course then you will probably want to look into them. It can be quite beneficial to compare different languages, you will generally find that once you look past the syntax the actual languages are not as different as you think.
A couple of things worth bearing in mind when writing programs.
1) Use comments, they are not just there to tell other people what you are doing. If you do plan (as mhouston suggests) making this a long term project, you may find yourself looking at code you wrote 3 years earlier, and you will be glad of a well placed comment.
2) Adopt a consistent coding style. Chances are your lecturer will suggest a particular style. Use that and stick with it, it will make your code easier to read and therfore understand.
3) Plan the app to be reasonably modular. It will make it easier to 'upgrade' sections when you get new ideas and learn new techniques. You could easily make it work under both OpenGL and D3D if you get the design right.
4) Back up your work. Nothing would be more distressing than working on something for a long time and then losing it because your HD died. Look into using a source control system (if you plan to get into the software development industry you will probably have to use one in your working life), sub-version is supposed to be very good. Use it, and take periodic backups of the repository.
I never was good at math in highschool, so I guess that's something else I need to work on as well. :lol: I can be quite studious if I'm interested in it, so I should be able to improve the math skills.
Regarding C/C++, all the tutorials I was using were in C++ mostly, but I wasn't sure if I should just learn C#. However, I'll stick to C++ I guess :)
I saw that dreaded word: "engine". Don't. Just do not.
If you're just using it as the appropriate buzzword then fine. Go for making a 'product' not a middleware layer.
Writing a game or individual samples will give you a lot more freedom to explore new techniques. It gets you to the meat quicker - there is so much fluff and plumbing needed to get a 1/2 decent engine written that you'll spend 90% of your time working on stuff that isn't really interesting and you'd have to be very motivated not to give up!
I'd also go so far as to say that if you haven't written a lot of games/samples *without* engines then you don't really know enough to design or write an engine anyway.
Meh, anyway... :)
An excellent resource if you're developing a game is http://www.gamedev.net.
(BTW, aren't you a moderator there, JHoxley?)
(BTW, aren't you a moderator there, JHoxley?)Maybe... the true identities of the Powers That Be is a closely guarded secret (so closely guarded I put my real name in my signature which would indeed match up with the alias I use here :cool:)
vBulletin® v3.8.6, Copyright ©2000-2013, Jelsoft Enterprises Ltd.