Get the latest Education e-news
 

Go Back   Game Career Guide Forums > Programming
Forum Home Register Members List Mark Forums Read

Reply
 
Thread Tools Display Modes
Old 05-29-2009, 03:03 PM   #1
UndueUndo
Junior Member

Activity Longevity
0/20 15/20
Today Posts
0/11 ssssssss2
Unhappy New CS grad, crossroads, panic

tl;dr: I have a CS degree and not much else, I'm interested in breaking into games or at a minimum I'd like to do software, and I've been lazy, and I'm ready to repent for that. Which way should I go from here, FIEA (grad school for game programming), non-software work and programming in my spare time, or devoting all my time to programming and looking for coding jobs whilst being unemployed? Or something else?

Much more elaborate:
So I took 5 years to get my 4 year BS in CS, the first couple years were devoted to dropping classes and playing Warcrack while the last 3 were me changing my major to CS and swearing off Warcrack and spending all my time devoted to getting my necessary credits. Maybe I'm weak, but I seemed to have to devote most of my time to studying in order to come out with good grades in the full course load I was taking in the school year and summers (I seemed to have an easier time with classes than the other students, but they had stuff like real jobs and projects and networks and such). Unfortunately I made no time for internships or personal projects, and now I'm trying to figure out what to do with myself.

I want to get into the game industry as a programmer, but all I have is a decent GPA and a couple console applications in C and C++ from school. Getting a job as a programmer, not even in the game industry, looks bleak for me. I've been getting ignored/rejected where I've been applying over the last month. I don't have the experience or the skill set, for the most part.

Further, on offering to review my resume on the way out, one of my professors yelled at me for not having a job or being on my way to grad school out the door. According to him if I don't find something to explain my new period of unemployment quickly, I'll be labeled as unemployable in the future. I'm not sure how true that is but I'm feeling more anxious day by day.

So, what I've been doing with my time (aside from packing and applying for jobs and some days sleeping in because I'm kind of depressed right now) is teaching myself C# and .NET, not so much for getting a job in the game industry but it seems like that stuff is in demand right now in general. I plan on making a multiplayer browser game using the Silverlight API once I get learned on this stuff. That'll be good to have in a portfolio to get a job either in game or web development, I believe.

I don't live far from UCF, and I see they have that FIEA program. I know you're basically paying to work, but they're supposed to have a high placement rate (according to their website). If I get cracking I can get a code portfolio together, take the GRE, and start looking for housing and a loan, and possibly get in the Fall 2009 class. Does anyone know if that program is worth pursuing or is it a joke like Fullsail?

Or, I have a family member that can get me work at a computer repair place back at my hometown. I can spend a year or two working on that browser game and learning a game engine that uses C++ and making a few projects in that. Or maybe make some projects using XNA. Or maybe pick some open-source projects to contribute to. Also I could try getting work through Rent A Coder or Craigslist or the like. Anything to build a real portfolio and experience while I'm keeping myself from having employment gaps. And honestly, I really just want to get back to working, it helps me get out of bed in the morning.

Or, I can try and hold off from grabbing a job immediately and work on projects like above and keep applying for programming work. I don't know which is worse, being a job hopper or being unemployed for extended periods, but I personally don't like getting hired somewhere if I'm not going to commit at least a year to the employer.
UndueUndo is offline   Reply With Quote
Old 05-30-2009, 05:46 AM   #2
yaustar
Administrator
 
yaustar's Avatar

Activity Longevity
2/20 19/20
Today Posts
0/11 sssss2270
Location: UK
Default

Before advice, I am going to need a better idea of your ability, can you do this quick test?
Quote:
* What is the difference between between a const global variable and a #define? Where would you use one over the other?

* Difference between:
const int * const foo
const int * foo
int * const foo

* What is the difference between a recursive function and loops? Give an example of each.

* Write a bubble sort function
void BubbleSort (int * IntArray, const unsigned int ArraySize)
{
...
}

* What errors would occur in the following code and why?

class Blah
{
private:
int Foo;

public:
Blah() { Foo = 10; }
~Blah() {}
MyFunction ( int &Mobor)
{
Mobor += 10;
}
};

int main( int argc, char **argv)
{
Blah * ptr = 0;
ptr->MyFunction(10);
return 0;
}

* What does a static variable do in a function?

* What is a ring buffer and how does a it differ from a standard queue?

* What does "in place" mean (regarding algorithms)? Give an example.

* What are the differences between an Octree, Quadtree and a BSP? What can they be used for?

* Optimise this function:
const int Sum (const int * LotsOfNumbers, const unsigned int Size )
{
int Sum = 0;

for(int i = 0; i < Size; ++i)
{
Sum += LotsOfNumbers[i];
}

return Sum;
}

* The difference between ++i and i++;

* Describe a use of a function pointer and suggest other methods to produce the same effect.

* What is a template class? What an example that stores an object with a function that squares itself returning the object as a const. Give an example why this would not work with all objects.

* What is the difference between an Interface class and an Abstract class?

* What is wrong with the following piece of code and how would you fix it? What would be the result of the error and why?

class A
{
private:
int *AInt;
public:
A() { AInt = new int(0); }
~A() { delete AInt; }
};

class B : public A
{
private:
int *BInt;
public:
B() { BInt = new int(0); }
~B() { delete BInt; }
};
yaustar is offline   Reply With Quote
Old 05-30-2009, 06:29 AM   #3
Gshonk
Moderator

Activity Longevity
0/20 20/20
Today Posts
0/11 ssssss831
Location: Philadelphia, PA
Default

Quote:
Originally Posted by UndueUndo View Post
Does anyone know if that program is worth pursuing or is it a joke like Fullsail?
I take offense to this.
__________________
Grant Shonkwiler()
"I would love to fix the world if someone would just give me the source code"
Website Industry blog LinkedIn
Gshonk is offline   Reply With Quote
Old 05-30-2009, 09:22 AM   #4
UndueUndo
Junior Member

Activity Longevity
0/20 15/20
Today Posts
0/11 ssssssss2
Default

Alright, I guess I should be honest and not look any of this up...

* What is the difference between between a const global variable and a #define? Where would you use one over the other?

A const global variable is an actual variable in memory at runtime, while a #define sees the compiler run through and switch out each instance of the define with a literal. Other than stylistic choice... well globals can be accessed via namespace instead of having to include a header. Not really sure when you should use either, I always use defines because inline numbers are faster.

* Difference between:
const int * const foo
const int * foo
int * const foo

const int * const foo is a non-changeable reference to a non-changeable integer, const int * foo is a changeable reference to a non-changeable integer, and int * const foo is a non-changeable reference to a changeable integer.

* What is the difference between a recursive function and loops? Give an example of each.

A recursive function calls itself until it reaches a condition, a loop is a block of code that is run until a condition is met.

int FibRec(int n)
{
if (n <= 1)
return n;

return (FibRec(n-1) + FibRec(n-2));
}

int FibLoop(int n)
{
if (n <= 1)
return n;

int j = 0, k = 1, temp, retval = 0;
for (int i = 2; i <= n; i++)
{
temp = k;
k = j + k;
j = temp;
retval = k;
}
return retval;
}

I had to pull out scratch paper and make sure I had this right, if it matters.

* Write a bubble sort function
void BubbleSort (int * IntArray, const unsigned int ArraySize)
{
...
}

void BubbleSort (int * IntArray, const unsigned int ArraySize)
{
for (int i = 0; i < ArraySize; i++)
{
for (int j = ArraySize-1; j > i; j--)
{
if (IntArray[j] < IntArray[j-1])
swap(IntArray[j], IntArray[j-1]);
}
}
}

void Swap (int * i, int * j)
{
int temp;
temp = *i;
*i = *j;
*j = temp;
}

* What errors would occur in the following code and why?

class Blah
{
private:
int Foo;

public:
Blah() { Foo = 10; }
~Blah() {}
MyFunction ( int &Mobor)
{
Mobor += 10;
}
};

int main( int argc, char **argv)
{
Blah * ptr = 0;
ptr->MyFunction(10);
return 0;
}

When you call MyFunction, you're not going to change the passed integer as it's passed by value. MyFunction gets it's own copy of the integer in memory, that gets incremented, and then is lost when the function returns.

The first line of main creates a pointer to a Blah object addressed at 0. It doesn't create a Blah object there, and you'll get a runtime error when trying to access it.

* What does a static variable do in a function?

A static variable maintains its state between function calls. So if you wanted to know how many times a function has been called, for instance, you'd make a static integer initialized to 0 and increment it once in the function.

* What is a ring buffer and how does a it differ from a standard queue?

A ring buffer has no beginning and end, when it grows past the end of the buffer, new values are written at the beginning. A standard queue doesn't loop back on itself like that, it's a list. Ring buffers should be used with arrays because a standard queue implemented with an array means after each delete operation the remaining items need to be shifted one position. Standard queues are fine with linked lists.

* What does "in place" mean (regarding algorithms)? Give an example.

An algorithm does all the work on top of the variables instead of copying them around. I can't think of a non-trivial example right now...

Square (x)
x : x * x.

* What are the differences between an Octree, Quadtree and a BSP? What can they be used for?

An Octree is a tree structure where each node has either 8 branches or is a leaf itself. A Quadtree is the same except it uses 4 or no branches per node. An octree is used to represent a three-dimensional space, while a Quadtree represents a 2d space. With a binary image, a quadtree can be used so that a node can be either filled with no children (region is black), empty with no children (that region is white), or can have 4 children (reconstruct region from children). You need a key to go along with such a tree so you know which nodes go to which quadrants, usually they're numbered counter-/clockwise. With a 3d space, the octree can represent which areas are empty and which contain obstacles. Not sure what BSP is.

* Optimise this function:
const int Sum (const int * LotsOfNumbers, const unsigned int Size )
{
int Sum = 0;

for(int i = 0; i < Size; ++i)
{
Sum += LotsOfNumbers[i];
}

return Sum;
}

I'm not sure if bitwise addition would really make a difference here but it's all I can think of.

const int Sum (const int * LotsOfNumbers, const unsigned int Size )
{
int Sum = 0;

for(int i = 0; i < Size; ++i)
{
Sum ^= LotsOfNumbers[i];
}

return Sum;
}

* The difference between ++i and i++;

i++ returns the value of i, then increments it in memory. ++i increments the value of i in memory then returns that value.

* Describe a use of a function pointer and suggest other methods to produce the same effect.

Function pointers are one of the things I haven't used much. Yeah I would need to look that up. I know you'd use them when you want to call functions based on conditions to be determined at runtime. A switch statement with standard function calls can do the same thing.

* What is a template class? What an example that stores an object with a function that squares itself returning the object as a const. Give an example why this would not work with all objects.

Templates I'm weak on too. I know it has to do with generic programming, that it would preform operations based on the data types fed to it. The syntax I'm not even sure of.

* What is the difference between an Interface class and an Abstract class?

An abstract class cannot be instantiated itself, it must be used as a base class. The class that inherits it must define each of the abstract functions.

An interface class defines method signatures that any class which supports it must implement.

The difference is that abstract classes can be used to create polymorphism among classes belonging to the same hierarchy, while interface classes can create polymorphism among otherwise unrelated classes and it can create a further polymorphic set among a subset of classes in the same hierarchy.

* What is wrong with the following piece of code and how would you fix it? What would be the result of the error and why?

class A
{
private:
int *AInt;
public:
A() { AInt = new int(0); }
~A() { delete AInt; }
};

class B : public A
{
private:
int *BInt;
public:
B() { BInt = new int(0); }
~B() { delete BInt; }
};

Okay, I know one of the destructors won't get called in some scenario... I'd have to Google inherited destructors. Off the top of my head I'd call A's destructor explicitly in B's destructor. Probably not the right syntax.

class B : public A
{
private:
int *BInt;
public:
B() { BInt = new int(0); }
~B()
{
~A();
delete BInt;
}
};

Quote:
I take offense to this.
Uhh sorry Gshonk... but I've read tons of articles about how schools like that don't really carry any weight with employers. That's all I meant, I'm sure you do learn practical skills there.
UndueUndo is offline   Reply With Quote
Old 05-30-2009, 12:18 PM   #5
yaustar
Administrator
 
yaustar's Avatar

Activity Longevity
2/20 19/20
Today Posts
0/11 sssss2270
Location: UK
Default

You didn't get all the questions right but that's expected. You knowledge level is what is expected from a CS graduate. (Heck, its better then what I knew when I graduated from my BSc).

In your position, I would consider the following paths:

1. Go to your relative's computer shop while building up your portfolio and some extra self learning. I did something similar and worked at my cousin's workplace for a year while I sorted out what I really wanted to do.

2. Attempt to get a standard programming job to build up experience and still work on the portfolio.

Either way, I recommend reading up on the C++ Standard Library and the books Effective C++ and Code Complete. C++ for Game Programmers is also worth a read.

Edit: Forgot to mention, start looking at making contacts in the industry. See if you can find a local IGDA chapter to go to.

Last edited by yaustar : 05-30-2009 at 12:43 PM.
yaustar is offline   Reply With Quote
Old 05-30-2009, 02:21 PM   #6
Gshonk
Moderator

Activity Longevity
0/20 20/20
Today Posts
0/11 ssssss831
Location: Philadelphia, PA
Default

Quote:
Originally Posted by UndueUndo View Post
Uhh sorry Gshonk... but I've read tons of articles about how schools like that don't really carry any weight with employers. That's all I meant, I'm sure you do learn practical skills there.
Its ok, just know that isn't really true of Full Sail, I know of companies that hire exclusively from FS. While a lot of similar degrees are crap I don't believe FS is. This is based off of my own experience and the ridiculous number of FS Alumni I have met in the industry. And like any school it is really about how much work you put in.
__________________
Grant Shonkwiler()
"I would love to fix the world if someone would just give me the source code"
Website Industry blog LinkedIn
Gshonk is offline   Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Powered by vBulletin® Version 3.6.9
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
All times are GMT -8. The time now is 12:49 AM.






UBM Tech