Advertisement

Student of Theoretical Physics asking for Advice

Started by October 06, 2016 09:10 AM
10 comments, last by Kylotan 8 years, 1 month ago

Hej everyone,

So I am feeling quite lost right now. I will finish a master in theoretical physics within a few months and I'd like to enter the games industry.

The problem is though, that I have next to no experience. I started programming quite a while ago, but just last year I created my first work in the direction of games. I have experience modding games from before but I'm uncertain how much that is relevant, speaking here about Lua, Pyhton, TES and all that jazz.

Last year I started to create a 2D Engine in C++ with SDL and OpenGL. It's at the point where I can comfortably make games with it and not touch its source code anymore. The features which I thought are notable are a:

  • an Archiver that uses zlib to compress all files in the game directory, into multple archives if one wishes to
  • a 2D Light Engine, which uses textures for shadow casters, so it supports any complexity that fits with the chosen resolution
  • a 2D Smoke Engine, which is GPU accelerated and thus is quite fast. That one has a lot of room for improvement, mainly feature wise but not necessarily system wise

I used that engine to create one game, a top-down shooter, using both the smoke and light engines, and I am quite satisfied with it. But in the end it's just one game and it is not hugely impressive (I think).

I am also working on a second game, a Puzzle game integrating Box2D, featuring a fully destructible environment and a dynamic fluid. I find that actually more impressive than my other game, mainly because I know what work sits behind it, but it is anyways not done. Especially the artwork is not existent, it's in (what I think is called) the programmer-art stage. So probably nothing that I can show off.

I did some projects during my master, mainly accurate simulations like an argon liquid at low temperatures, Quantum Monte Carlo simulations, solving Schrödinger equations, etc. How relevant is that? I did all those in C++, so they show that I worked with it and I can create results.This monday I started to write a portfolio on a Google Site, and carrying together these things makes me a bit paranoid that I will never find a job. So how big are these problems?

  1. I have no experience with Mobile
  2. I have no experience with 3D
  3. I have created just one game
  4. I started working with games just about a year ago
  5. I have no professional experience in the field

Preferably I would love to find a job creating engines (2D, 3D doesn't matter) or creating features in engines such as physics simulations. But I would also like getting a job as a standard gameplay programmer, mobile or not, or a tools programmer.

What do you think?

Thanks for you read! I appreciate any feedback you can give me.

I have experience modding games from before but I'm uncertain how much that is relevant


It's very relevant if you want to be a designer. It's not so relevant (in employment terms) if you want to be a programmer, because scripting languages are a bonus rather than a core skill. That's where the rest of your work comes in.

(EDIT: Removed my implication that modding was 'irrelevant'.)

it's in (what I think is called) the programmer-art stage. So probably nothing that I can show off

You'd be interviewed by programmers, all of whom are familiar with the concept of programmer art. Ideally you'd have a video that shows it in action and you would be able to supply source code for them to look at. But nobody hires coders based on the quality of the art assets they use.

simulations like an argon liquid at low temperatures, Quantum Monte Carlo simulations, solving Schrödinger equations, etc. How relevant is that?


Unlikely to be relevant at all (except as a footnote in your CV), since you already have some C++ game code to show.

So how big are these problems?
  • I have no experience with Mobile - if you apply for a mobile company, massive. If you apply for a traditional company, not at all.
  • I have no experience with 3D - significant. Pick up a copy of Unreal and make something basic in there.
  • I have created just one game - average. Some places would like to see more variety. Others will understand you didn't do a course that allowed you to create a big gamedev portfolio. Quality beats quantity, providing quantity passes the minimal threshold required to demonstrate your competence.
  • I started working with games just about a year ago - not a problem at all - everyone started somewhere. However, you'd only be eligible for junior positions.
  • I have no professional experience in the field - same as (4). You start at the bottom, same as pretty much everyone else.

"Preferably I would love to find a job creating engines (2D, 3D doesn't matter)" - that's very rare these days, and almost certainly not going to be offered to a junior

"or creating features in engines such as physics simulations" - that's a possibility given your background, but again it's very rare, since there are off-the-shelf solutions available.

"But I would also like getting a job as a standard gameplay programmer, mobile or not, or a tools programmer." - These are certainly attainable goals.

Advertisement

Thanks a lot for your comprehensive reply!

It's very relevant if you want to be a designer. It's not relevant (in employment terms) if you want to be a programmer. That's where the rest of your work comes in.

Say for example I modded a game that has a very rich API, take Don't Starve, and wrote hundreds of lines of code, in the case of Don't Starve in Lua. Is that still not relevant for a programmer? I would have thought it is.

You'd be interviewed by programmers, all of whom are familiar with the concept of programmer art. Ideally you'd have a video that shows it in action and you would be able to supply source code for them to look at. But nobody hires coders based on the quality of the art assets they use.

This is making me feel much better at least. But I am still very irritated by the concept of "showing source code". I always feel like a couple of lines of code say almost nothing. For example talking about my smoke engine:

  • I could either show the usage my game where it ends up with a couple of lines (init, update, draw, changeParams, etc.) which looks absolutely unimpressive to me.
  • Or I could show the class that I wrote, which is a couple hundred lines, plus the shaders which are another hundred lines. I wouldn't expect anyone looking at this in a portfolio or during an interview to have much of an opinion about that much code.

  • I have no experience with Mobile - if you apply for a mobile company, massive. If you apply for a traditional company, not at all.
  • I have no experience with 3D - significant. Pick up a copy of Unreal and make something basic in there.
  • I have created just one game - average. Some places would like to see more variety. Others will understand you didn't do a course that allowed you to create a big gamedev portfolio. Quality beats quantity, providing quantity passes the minimal threshold required to demonstrate your competence.
  • I started working with games just about a year ago - not a problem at all - everyone started somewhere. However, you'd only be eligible for junior positions.
  • I have no professional experience in the field - same as (4). You start at the bottom, same as pretty much everyone else.

"Preferably I would love to find a job creating engines (2D, 3D doesn't matter)" - that's very rare these days, and almost certainly not going to be offered to a junior

"or creating features in engines such as physics simulations" - that's a possibility given your background, but again it's very rare, since there are off-the-shelf solutions available.

"But I would also like getting a job as a standard gameplay programmer, mobile or not, or a tools programmer." - These are certainly attainable goals.

Thank you for giving me hope with that :)
I understand that striving for an engine developer is probably a lot. I just saw already four postings in the city I live, specifically for engine development, so I thought I might as well give those a try.

And as soon as I finish my portfolio for attempting my first applications I will start to work on some 3D stuff. Not making my own engine though :D

Speaking of Portfolio, how welcome are those postings here? Is it fine if I post my Portfolio so some one can tell me all the bad things about it?

Thanks again a lot for your help!

Say for example I modded a game that has a very rich API, take Don't Starve, and wrote hundreds of lines of code, in the case of Don't Starve in Lua. Is that still not relevant for a programmer? I would have thought it is.


Scripting for games in Lua is very forgiving. You don't have to think much about object types, performance, ownership, architecture, pointers, memory, etc. The experience will be a benefit to you and could possibly be a positive factor for a company that uses Lua internally - but your capability with the language that they use for day to day code tasks is paramount.

But I am still very irritated by the concept of "showing source code". I always feel like a couple of lines of code say almost nothing. For example talking about my smoke engine: I could either show the usage my game where it ends up with a couple of lines (init, update, draw, changeParams, etc.) which looks absolutely unimpressive to me. Or I could show the class that I wrote, which is a couple hundred lines, plus the shaders which are another hundred lines. I wouldn't expect anyone looking at this in a portfolio or during an interview to have much of an opinion about that much code.


If you don't want people to see your code then don't apply for a job as a programmer. I can judge a lot about a coder from just a page of code:

  • do they stick to formatting and naming conventions?
  • do they pick good names for variables and functions?
  • how often do they comment, and are those comments worthwhile?
  • are there spelling errors or other signs of a lack of attention to detail?
  • do they use idioms imported from other languages rather than learning the native ones?
  • are they using obviously suboptimal approaches that suggest a lack of domain or library knowledge?
  • are they referencing globals and singletons?

Generally I would want to see more than just a single class - ideally a candidate would send the entire source code for what they think is their best program. That allows me to additionally assess:

  • ability to structure a project
  • appreciation for modularity and encapsulation
  • choice of file naming conventions
  • appreciation of how file structure affects the build process

Is it fine if I post my Portfolio so some one can tell me all the bad things about it?

I don't see why not.

If you don't want people to see your code then don't apply for a job as a programmer.

It's not so much about not wanting to show my code and more about not having understood the point of it. I see your point, but I still can't really understand how someone will want all that code. My best project I would say is my Engine, but that's almost 100 files, my game is about 40 files. Would you wanna see that much?

Also, when looking at your list I have to admit that you would probably not judge me as a perfect programmer. I am very consistent in my formatting, naming conventions etc. But having no formal education and being mostly self-taught I assume I am not always using the best algorithms or idioms. For example, I have a singleton in my engine and on top of that I don't even see why that's a problem.

My best project I would say is my Engine, but that's almost 100 files, my game is about 40 files. Would you wanna see that much?

Not necessarily, but it'll zip up to almost nothing. I'd open up the archive and look at as many files as I needed in order to get the measure of you as a coder. When submitting that many files it would be very useful to include a note saying where the most important or interesting code is, so I can go straight there.

The fact is, why would anyone want to hire a coder without seeing their code? A shiny final product doesn't tell us anything about how awful the code is, and it's code quality that dictates how good an employee you'll be.

But having no formal education and being mostly self-taught I assume I am not always using the best algorithms or idioms.

So, now's the time get learning. It's hard to know what you need to improve when you're self-taught, but there are various things you should probably pay attention to:

  • any open-access university courses about programming
  • forum threads and blog posts about code quality
  • sites that deal with subjective code issues (e.g. the Programmer and Code Review StackExchanges)
  • books, papers, or resources about algorithms and data structures
  • books/papers/resources about structuring engines or other software

I have a singleton in my engine and on top of that I don't even see why that's a problem.

Singletons are an anti-pattern that dress up global variables in a veneer of 'proper' object-orientation. If you know why globals are bad, you should be able to see why singletons are bad. If you don't know why globals are bad, that's a first thing to research.

Advertisement

So, now's the time get learning.

Indeed it is. I knew before that I need to use less naked pointers, but I don't know what other practices I have that are bad. So maybe I will take some time to improve my code quality and learn as much as I can in the process.

Thanks again!

I disagree with Kylotan about modding not counting as not relevant. It does count, my friend managed to impress his potential employer by modding pac-man into their RTS game. Gameplay programmers often end up doing similar work to modders, using scripting languages. It also helps to show you like to use a breadth of languages.

Agree with everything else, the lack of 3d and mobile, depends on the company. I'd make sure you know your 3d math basics (Cross product, dot product, 3d intersection tests), and having a 3d project that demonstrates 3d math usage helps as well.

You might also want to ensure you know the more modern aspects of C++. constexpr and whatnot.

I disagree with Kylotan about modding not counting as not relevant. It does count, my friend managed to impress his potential employer by modding pac-man into their RTS game. Gameplay programmers often end up doing similar work to modders, using scripting languages. It also helps to show you like to use a breadth of languages.

Agree with everything else, the lack of 3d and mobile, depends on the company. I'd make sure you know your 3d math basics (Cross product, dot product, 3d intersection tests), and having a 3d project that demonstrates 3d math usage helps as well.

You might also want to ensure you know the more modern aspects of C++. constexpr and whatnot.

I have the languages I used in my CV, along with a short naming of projects I used them for. But probably I will not put them in my portfolio.

And as far as mathematics are concerned. I hope that every prospective employer will assume I know far more than just the basic math usage in computer sience, considering I will have an above average degree in theoretical physics. At the same time I myself am not worried about any mathematical issues when coding and so far I also never ran into problems with that.

But in any case, I assume you're right in that it will be helpful to show that I can work with 3D.

At the same time I myself am not worried about any mathematical issues when coding and so far I also never ran into problems with that. But in any case, I assume you're right in that it will be helpful to show that I can work with 3D.

If you got a decent grade in linear algebra, you'll do fine with 3D graphics programming.

The math and physics background you have already should serve you for a lifetime in game development. You just need to get those coding skills up to par.

Norm Barrows

Rockland Software Productions

"Building PC games since 1989"

rocklandsoftware.net

PLAY CAVEMAN NOW!

http://rocklandsoftware.net/beta.php

This topic is closed to new replies.

Advertisement