Well, I haven't posted anything lately because I've been really busy and quite productive at work. I've been trying to work on some demos and study up on game development to get a position. Which leads me to the next topic. I had sent Firaxis my resume with references and a link to my portfolio. I have the portfolio hooked up to a StatCounter so I can track who is viewing it and see how many hits per day I get from jobs. A handy tool I might add. With no word back from Day1Studios, I decided to give Laura from Day1 a call. I pretty much blew it. My material didn't cut it and I'm pretty sure all I did was annoy her, so there's no chance for me there. A few days later I got an e-mail from Firaxis!
Like... no way... Firaxis is considering me for a Generalist position? I was psyched! Couldn't believe it really, since they were hiring for a Software Engineer 3 position with 3 - 7 years experience and 1 shipped title (which I had none of). Bart Muzzin, a graphics programmer from Firaxis e-mailed me to set up a phone interview to discuss my qualifications better. I took a late lunch break and worked from home the rest of the afternoon to make it fit and man was I ever nervous before he called. Once he called, we got the ball rolling with a series of interview topics:
Answer: A static function of a class is one that can be executed without creating an instance of the class! Duh! I knew that! (after I interviewed of course...stupid memory...).
Then he asked me what a static variable was. Well, I kinda had to backtrack and say that uh... what I just described was a static variable? kinda? Then he asked, when are static variables created? I said when the line of code is executed.
Answer: When the program starts, existing the entire lifetime of the application.
Difference between STL vector and list
Bart's next questions had to do with the STL. I said I understand and have used a lot of it before, and mentioned vectors and lists, etc. So he asked me what the difference between a vector and list were. I answered with a few "uhh..."s, a couple "hrm.."s, and finally said that vectors are singly linked and lists are doubly linked. Wow... what a stupid answer. Vectors aren't freakin linked... they're not lists at all!
Answer: Vectors are stored like arrays, allowing you to randomly access data from any element in the array at any given time, with the difference that you can easily add new elements ( a dynamicly sized array ). A List is doubly linked and does NOT allow random access, you must follow the data sequentially, which makes complete sense.
I was then asked to define a Virtual Destructor. I went on for another 5 minutes about virtual methods and said that a virtual destructor allows you to define base functionality for the destructor and make it overridable. No quite...
Answer: You need to use virtual destructors when you are going to use "delete" on a derived class object that is referenced by a base class pointer. If you do not use a virtual destructor, only the base classes's destructor gets called which can result in a memory leak, leaving the derived class's destructor unexecuted. If you make the destructor in the base class virtual, the dervied class's destructor will be run first and then the base class, which is the correct way to delete the object.
Graphics
Diffuse Lighting Calculation
Cross Product
...
Oh! glBegin()! Silly me. And he said "... and after that?" Oh, glEnd(). Yeah, I got that, I think I was more confused on the question then anything else.
Like... no way... Firaxis is considering me for a Generalist position? I was psyched! Couldn't believe it really, since they were hiring for a Software Engineer 3 position with 3 - 7 years experience and 1 shipped title (which I had none of). Bart Muzzin, a graphics programmer from Firaxis e-mailed me to set up a phone interview to discuss my qualifications better. I took a late lunch break and worked from home the rest of the afternoon to make it fit and man was I ever nervous before he called. Once he called, we got the ball rolling with a series of interview topics:
Firaxis Phone Interview Topics
C++
Static functions and variables
Answer: A static function of a class is one that can be executed without creating an instance of the class! Duh! I knew that! (after I interviewed of course...stupid memory...).
Josh 0/1
Then he asked me what a static variable was. Well, I kinda had to backtrack and say that uh... what I just described was a static variable? kinda? Then he asked, when are static variables created? I said when the line of code is executed.
Answer: When the program starts, existing the entire lifetime of the application.
Josh 0/2
Difference between STL vector and list
Bart's next questions had to do with the STL. I said I understand and have used a lot of it before, and mentioned vectors and lists, etc. So he asked me what the difference between a vector and list were. I answered with a few "uhh..."s, a couple "hrm.."s, and finally said that vectors are singly linked and lists are doubly linked. Wow... what a stupid answer. Vectors aren't freakin linked... they're not lists at all!
Answer: Vectors are stored like arrays, allowing you to randomly access data from any element in the array at any given time, with the difference that you can easily add new elements ( a dynamicly sized array ). A List is doubly linked and does NOT allow random access, you must follow the data sequentially, which makes complete sense.
Josh 0/3
Inheritance memory concerns
Wasn't really sure about this one either... the question was something like, what are some memory concerns when using inheritance? I didn't really give a solid answer for this question... it was more of a rambling about inheritance and base classes and using a base "world object" class to define the functionality that all derived classes should have or need to implement.
Answer: I think the answer they were looking for is that when you derive a class from a base class, the base class must first be created for each derived class that you create an instance of. What this means is that as the base class grows, the memory consumed is increased linearly with how many objects you have created. If all of the derived classes need to use all of this information, the situation is ok, but if you are using a large base class and only using a small amount of its funcitonality, you're probably wasting memory.
Josh 0/4
Virtual Inheritance / Multiple Inheritance
Yep, never did much with virtual or multiple inheritance before. So well I bluntly shot myself in the foot on this one. "Nope, don't know about em". It was somewhat fortunate for me that Bart never uses it and didn't consider it too important either.
Josh 0/5
Virtual Destructors
I was then asked to define a Virtual Destructor. I went on for another 5 minutes about virtual methods and said that a virtual destructor allows you to define base functionality for the destructor and make it overridable. No quite...
Answer: You need to use virtual destructors when you are going to use "delete" on a derived class object that is referenced by a base class pointer. If you do not use a virtual destructor, only the base classes's destructor gets called which can result in a memory leak, leaving the derived class's destructor unexecuted. If you make the destructor in the base class virtual, the dervied class's destructor will be run first and then the base class, which is the correct way to delete the object.
Josh 0/6
Graphics
Diffuse Lighting Calculation
In the graphics section he started by asking me what the calculation for diffuse lighting is. Since I can't remember formulas, I had no idea what the answer to this one was... But either way I knew it had something to do with the normal of the surface and the angle that the light was entering from. Woo! Got one close enough that I consider it right!
Answer: D = MaterialColorDiffuse * LightColorDiffuse * max(L • N, 0)
Josh 1/7
Cross Product
Next he asked me what the result of a vector cross product is. Man did I nail this one. Response: The result of a vector cross product is a vector perpendicular to the plane formed by the two original vectors.
Josh 2/8
OpenGL basics
Given that I have a scene set up, the camera is set up, everything is prepared, what is the OpenGL code used to render the image? Well I wasn't too sure what he wanted me to say and I haven't touched OpenGL in a few months, so it was kinda fuzzy to me, but I finally spat out glVertex3f, then realized you have to set the color which is glColor3f. His response was, yea, that's what I was looking for, but what comes before that?...
Oh! glBegin()! Silly me. And he said "... and after that?" Oh, glEnd(). Yeah, I got that, I think I was more confused on the question then anything else.
Josh 3/9
DirectX basics
He asked me what the same call for this in DirectX was. Considering I have DirextX on my resume and that I'm applying for a game development job, I should probably know the basics of Direct3D. Unfortunately I had to take a mulligan on this one and say that I haven't worked with DirectX since DX7 using DirectDraw.
Answer: Device->BeginScene(), Device->DrawPrimitive(), Device->EndScene()
Josh 3/10
Shader languages
Well, after I said that I haven't worked with DirectX since DX7, he pretty much said, well then you don't know much about Shaders do you? Uh... nope!
Josh 3/11
He proceeded to ask me a lot about the Duck Hunt project that I worked on for senior design. I think those questions went well, but I hope I didn't come across as arrogant by saying that I did most of the work for the project. He talked a lot about team management and how well I work with others, but maybe I made it seem like I can't work well with others... which isn't the case at all. He also asked me what games I am currently playing and I mentioned WoW, we had a small friendly chat about that, War3, Civ4, and that's really about it right now.
I then had the opportunity to ask him some questions. I asked a lot of corporate and company questions trying to figure out if the company is the one for me. After those questions, I was positive that Firaxis is where I wanted to work. No contract work, straight to full-time, a casual and laid back development environment, and stability for years to come I'm sure. As Bart said "Sid's name sells games."
The Aftermath
Well, after the interview, I just stayed at home and tried to do some work, but I was so distracted and pre-occupied that I couldn't. I called April and talked to her for a while, and told her that I felt positive about it, as I always do after interviews.. having high hopes. Just as I'm about to go make dinner in preperation for April's arrival I got an e-mail from Susan Meier, Sid's wife and head of HR at Firaxis with the words "We appreciate the effort..." in the preview.
Crap. I knew right then and there, that 2 hours after an interview if you get an e-mail that says that anywhere, you're out of luck. Sure enough, I was declined. The news was surely disheartening, but I'm trying to stay as positive as possible about it and move on. It was a long shot anyway and considering that I scored roughly 25% on the technical questions, I don't think I would hire myself for a job if I didn't know me.
I think my success in a lot of other interviews comes from the fact that they're not looking for someone who can write the best code in the world, but someone that can interface with the team really well, and grow into a position. In game development, you have exactly the opposite. Sure they need to be able to interface with teams, but more importantly, they need to write damn good code, from memory. Unfortunately, I don't think this is something that I will ever be able to do. I need resources, references, and people to interact with to solve problems.
Maybe I will become a teacher in the long run after all...