The Talemonger's Emporium
spacer
Gameweavers
Q and A
Weird!
Gametalk
Cool Links
News
Site Info
Home
spacer
spacer Answer Archive
And the Question is...

"I'm halfway through a degree in Physics/Astrophysics (for some reason I can't remember). The C/C++ courses have naturally been centered around the basics of the language and physics applications. From this point, what is the best way to expand on it to get to a high standard?"

Submitted by: Paul McIntyre

Answered by: "Doc" Jeff Pobst (programmer, Sierra On-Line)

"I had that same problem once, too. Hi, I'm Jeff Pobst and I'm a programmer at Sierra On-Line. In a 'prior life' I earned my Ph.D. in Aerospace Engineering conducting research with optical diagnostics on the plumes of electric spacecraft thrusters. This included performing the first multiphoton (3 photon steps) laser-induced fluorescence of ground state hydrogen atoms in the plume of a 1.4 kilowatt Hydrogen arcjet.

"After grad school (and also partially during) I worked as a civilian contractor for the Air Force, conducting electric propulsion research and managing spacecraft payload projects for in-flight experiments. I left the Air Force to work for a company who manufactured and sold these types of special thrusters to commercial spacecraft manufacturers, and helped design and integrate flight propulsion systems for use on next-generation communication satellites.

"Now, in my own mind, how I got, from there (point A), to here at Sierra (point B), was probably more of a fortuitous occurrence (someone was watching over me...) than a textbook way to switch careers. What I may be able to offer you is what types of things in my background made the switch possible and what types of things I feel that a game company might be looking for in a programmer who hasn't previously worked in formal programming.

"The best way to become a better programmer is to have real reasons to write programs and write them in conjunction with other people. I have been fortunate to have been around programmers and programming since the sixth grade. How good a programmer I was during my early education didn't really matter much, I don't think, but what I do think was important was that I spent a lot of time solving many different logic problems. The more practice in looking at the available tools and using them to solve a problem at hand, the more confident I become as I added new software "tools" to my repertoire.

"I think that you may be asking - what advanced "tools" do I need to know in order to program games? Before we talk about some areas of software to focus on, I want to emphasize that the other things you are doing - solving physics problems, figuring out how to get from known facts to structured hypotheses, how to prove or disprove those hypotheses, are also extremely valuable towards a future programming career.

"Most important, however, is that for algorithm programming, you are now in a position to be a true "user" of software. In the sciences you may need to do several things with computers that in solving these problems can strengthen your programming skills. For example, as a scientist I did the following types of programming:

"1. Computational simulations: I learned how to write Direct Simulation Monte Carlo codes to model rarefied hypersonic flowfields and then investigated non-phenomenological approaches to rotational energy-addition/subtraction from collisions between diatomic molecules.

"2. Equipment control: I wrote software to control my experiments that I conducted, so that the pulse generator and digital oscilloscope would be triggered via a GPIB interface at the same time the gated photomultiplier tube would send data to the gated boxcar averager where data would be collected with an analog i/o board, while the laser was scanning over the correct wavelengths (as instructed over a RS232 port), while the stepper motors were moving the thruster to the correct location (using a proprietary control board). That was my first C++ program, since all of the control libraries for the different hardware elements had C or C++ methods. Also, I needed to respond to messages and issue messages non-linearly, and I assumed that being object oriented was the only way to do that (it turned out that it wasn't, but it was still a fine approach).

"3. Data analysis: I would take the data collected from the above experiments and do exponential curve fits, or perhaps Levenberg-Marquardt least squares fits (using C or Fortran Numerical Recipes) of two non-periodic similar waveforms. I might average and integrate recorded signal waveforms or do a variety of other post-processing computing.

"4. Marketing: You may think I'm joking, but researchers always have to get funding, and if you are in a technology field where it is difficult to accurately quantify the benefits of your technology, you need a way to communicate your story accurately to those people who dole out the funding (and may not be as technologically inclined as yourself). Consequently I wrote a little windows applet (EPMove - do a search in Yahoo if you'd like, it's out there on a couple of sites) that allowed you to move a satellite over different parts of the globe and it would tell you how much fuel would be required for repositioning that satellite using different technologies. It included a large help file that explained the technologies and how to find out more about them. This program gave me my first taste of Borland's Object Windows Library (which was once better than Microsoft's Foundation Classes, but I don't know anymore, I'm sure an emotional debate continues...). The government gives this program out free and its been used as a mini-advanced propulsion calculator, an explanation of orbit repositioning, and even a supplement for propulsion classes at a couple of Universities.

"Anyway, my point with all of this, is that there are a tremendous number of software writing opportunities in the field you are already in. One problem that several software developers have, is that they themselves are never the 'user' of their code. Being the developer and the user can give you great insight into how a program should behave and how you want to write your next one.

"Ok, you've programmed all the scientific programming you can take, and written enough side projects for your own interests to make you feel like you want to switch over. Whether that is in a year, two, or several, it is always hard to know what the hot programming topics are going to be in the gaming industry.

"One thing that games are, though, and likely always will be, are giant databases. They may be databases of polygons, of monsters, of objects that characters interact with, of walls, of visible sets, etc., but the point is that database structures and search algorithms are very important in gaming. See if you can add a data structures course or two to your class list.

"Right now, databases of polygon information are an important thing to know how to manipulate, whether it is in your own software or via a hardware accelerator card. Try to add a three dimensional graphics class or project onto your slate. See if you can't play around with Direct3D or OpenGL to write some simple sample apps.

"Matrix math is hugely important in 3d gaming and your background in 3d vector physics and math are strong points to remember when you consider switching over. Pay extra attention in your matrix math and dynamics classes they will have significant application in game programming (don't forget to mention this to any future employers, too).

"Just the nature of you being a physicist is significant. A hot trend right now is 'true physics' in games. While no one really wants to accurately model everything in a game (it would get too slow), the increase in speed of computers combined with pseudo-physical cheats allow many more realistic-appearing actions to take place in today's games. Remember, base your approach in reality, but cheat for speed wherever possible -- no one is going to build a space station based on the behavior of your game.

"Other hot topics include robotics and kinematics for better modeled 3d characters and greater computer control of their motion. Perhaps your curriculum may include study in this area. It may not seem like it applies directly to C++, but game developers are paying a lot of attention to algorithms that take advantage of better understanding of kinematics.

"Artificial intelligence approaches (and how to make simple algorithms appear to do complex things) are also hot in the gaming industry right now, as are pathing (how do I go from here to there - what if someone gets in my way).

"Anyway, my hope with this unforgivably longwinded response to your question was to stress that 1. It is possible to switch from the sciences to games (someone in the same boat did it), 2. Your training may be better than you expected, and 3. Opportunities to flex your programming muscles and grow stronger in programming are prevalent in the sciences. After that it just becomes a task of trying to overlap areas of your education towards those that are important to both the technologies you work on and the games that you'd like to work on in the future.

"Cindy has told me that she'll finish up this response with some further words about getting a job in England or here as a non-citizen. I can tell you that I would expect that it is a lot easier to work as a non-citizen for a U.S. game company (if that is what you wanted to do) than it would be to work for the U.S. government. I hope that the path you take serves you well."

Read more questions and answers! spacer

spacer
see LEGAL page for copyright information