<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">

<channel>
	<title>Christopher McArthur</title>
	
	<link>http://christophermcarthur.com</link>
	<description>video game development</description>
	<lastBuildDate>Fri, 09 Dec 2011 19:44:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/christophermcarthur" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="christophermcarthur" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>From Struggle To Redemption</title>
		<link>http://christophermcarthur.com/gdco2011/</link>
		<comments>http://christophermcarthur.com/gdco2011/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 01:57:49 +0000</pubDate>
		<dc:creator>Christopher McArthur</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://christophermcarthur.com/?p=188</guid>
		<description><![CDATA[edit: Slides Posted! Powerpoint here. Please install the font included in the zip first or the presentation will look super funky! PDF here &#8211; some of the slides are mangled, and there are no notes, but it works without powerpoint. &#160; This post is meant as an accompionment to my GDC Lecture: From Struggle To [...]<p><a href="http://christophermcarthur.com/gdco2011/">From Struggle To Redemption</a> is a post from: <a href="http://christophermcarthur.com">Christopher McArthur</a></p>
]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop --><!-- End Shareaholic LikeButtonSetTop --><p><em>edit: Slides Posted!</em></p>
<p><a title="From Struggle to Redemption Powerpoint" href="http://christophermcarthur.com/wp-content/uploads/2011/10/lol_chat_service_public_share.zip">Powerpoint here</a><em>. Please install the font included in the zip first or the presentation will look super funky!</em></p>
<p><a title="PDF of From Struggle To Redemption" href="http://christophermcarthur.com/wp-content/uploads/2011/10/lol_chat_service_public_share.pdf">PDF here </a><em>&#8211; some of the slides are mangled, and there are no notes, but it works without powerpoint.</em></p>
<p>&nbsp;</p>
<p>This post is meant as an accompionment to my <a href="http://schedule.gdconline.com/session/5964/Building_the_Chat_Service_for_League_of_Legends%3A_From_Struggle_to_Redemption" target="_blank">GDC Lecture</a>: <em>From Struggle To Redemption: Building the Chat Service for League of Legends. </em>I reference a ton of different things in my lecture that I didn&#8217;t have time to dwell on, on, so they are listed in more detail here. Also I will edit this post and add the slides as soon as GDC allows it!</p>
<p><img title="From Struggle to Redemption: Building the Chat Service for League of Legends" src="http://christophermcarthur.com/wp-content/uploads/2011/10/TitlePage.png" alt="GDC Online Title Page" width="449" height="335" /></p>
<p><strong>Chat Service Backend</strong></p>
<p><a title="XMPP" href="http://xmpp.org/" target="_blank">XMPP </a>&#8211; Open Standard Chat Protocol</p>
<p><a title="EjabberD" href="http://www.ejabberd.im/" target="_blank">EjabberD</a> &#8212; Open Source Chat Implementation</p>
<p><a title="Erlang" href="http://www.erlang.org/" target="_blank">Erlang </a>&#8211; Language EjabberD is implemented in</p>
<p><a href="http://www.mysql.com/" target="_blank">MySQL</a> &#8212; Open Source Database</p>
<p>&nbsp;</p>
<p><strong>Chat Frontend</strong></p>
<p><a title="Adobe AIR" href="http://www.adobe.com/products/air.html" target="_blank">Adobe Air</a> &#8211;  Standalone flash runtime</p>
<p><a title="Flex" href="http://www.adobe.com/products/flex.html" target="_blank">Adobe Flex</a> &#8211; Open source flash application framework</p>
<p><a href="http://www.adobe.com/products/livecycle/dataservices/" target="_blank">Adobe LCDS </a>- LiveCycle Data Services &#8211; for communicating with the backend.</p>
<p><a title="XIFF" href="http://www.igniterealtime.org/projects/xiff/" target="_blank">XIFF</a> - open-source xmpp actionscript implementation</p>
<p><a title="MVC" href="http://www.enode.com/x/markup/tutorial/mvc.html" target="_blank">MVC </a>- Model View Controller design pattern used in UI</p>
<p>&nbsp;</p>
<p><strong>Load Test Harness</strong></p>
<p><a title="Smack" href="http://www.igniterealtime.org/projects/smack/ " target="_blank">Smack</a> &#8211; XMPP client library in Java</p>
<p><a title="Ec2" href="http://aws.amazon.com/ec2/ " target="_blank">Ec2 </a>- Amazon&#8217;s Elastic Compute Cloud</p>
<p>&nbsp;</p>
<p><strong>Data Gathering</strong></p>
<p><a title="SNMP" href="http://sourceforge.net/projects/snapp/" target="_blank">SNMP </a>- Open Source Data Collection and Visualization</p>
<p><a title="Cacti" href="http://www.cacti.net/" target="_blank">Cacti </a>- Data Visualization tool</p>
<p>&nbsp;</p>
<p><strong>References</strong></p>
<p><a title="Tech Debt" href="http://martinfowler.com/bliki/TechnicalDebt.html" target="_blank">Technical Debt</a> &#8211; Martin Fowler discusses the concept of technical debt.</p>
<p><a title="Erlang" href="http://www.erlang-factory.com/upload/presentations/31/EugeneLetuchy-ErlangatFacebook.pdf" target="_blank">Facebook And Erlang</a> &#8211; Lecture about Facebook&#8217;s chat service.</p>
<p><a href="http://christophermcarthur.com/gdco2011/">From Struggle To Redemption</a> is a post from: <a href="http://christophermcarthur.com">Christopher McArthur</a></p>
<div class="shr-publisher-188"></div><!-- Start Shareaholic LikeButtonSetBottom --><!-- End Shareaholic LikeButtonSetBottom --><div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=From+Struggle+To+Redemption+http%3A%2F%2Fis.gd%2F390OsK" title="Post to Twitter"><img class="nothumb" src="http://christophermcarthur.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro4.png" alt="Post to Twitter" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://christophermcarthur.com/gdco2011/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Speaking at GDC Online!</title>
		<link>http://christophermcarthur.com/speaking-at-gdc-online/</link>
		<comments>http://christophermcarthur.com/speaking-at-gdc-online/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 23:02:41 +0000</pubDate>
		<dc:creator>Christopher McArthur</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://christophermcarthur.com/?p=166</guid>
		<description><![CDATA[Headed to GDC Online in Austin, TX next week to give a talk about the chat service for League of Legends! I will be speaking there Thursday afternoon at 2:30 come check it out! My talk is a history of the problems we had launching and scaling our chat service and about how we overcame [...]<p><a href="http://christophermcarthur.com/speaking-at-gdc-online/">Speaking at GDC Online!</a> is a post from: <a href="http://christophermcarthur.com">Christopher McArthur</a></p>
]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop --><!-- End Shareaholic LikeButtonSetTop --><p>Headed to<a title="GDC Online" href="http://http://www.gdconline.com/" target="_blank"> GDC Online</a> in Austin, TX next week to give a talk about the chat service for League of Legends! I will be speaking there Thursday afternoon at 2:30 come check it out!</p>
<p><img class="alignnone" title="From Struggle to Redemption: Building the Chat Service for League of Legends" src="http://christophermcarthur.com/wp-content/uploads/2011/10/TitlePage.png" alt="GDC Online Title Page" width="449" height="335" /></p>
<p>My talk is a history of the problems we had launching and scaling our chat service and about how we overcame them. Many of the lessons we learned here ended being things that we could apply throughout the development of League of Legends. I also talk about the surprising ways in which UI design made a significant impact on the stability of our service.</p>
<p>A brief description is found on the <a title="GDC: Online Website" href="http://schedule.gdconline.com/session/5964/Building_the_Chat_Service_for_League_of_Legends%3A_From_Struggle_to_Redemption" target="_blank">GDC Online website</a>:</p>
<blockquote><p><strong>DESCRIPTION:</strong></p>
<p>Communication between players is one of the most important pieces of a social game. Yet, the nuanced relationship between a fully-featured chat service and the rest of a game are often overlooked.</p>
<p>In this lecture you&#8217;ll hear the story of how the chat in League of Legends&#8217; PvP.Net was launched and how it evolved over time. We had three expectations for our chat service: that it would be scaleable, not impact stability, and the UI would meet the player&#8217;s needs.</p>
<p>We initially failed on all three fronts. But that&#8217;s not the end of the story.</p>
<p>We were able to turn around to achieve and surpass all three of our initial expectations. This talk will cover the surprising emergent issues and mistakes that caused these problems, and will detail the specific solutions that were implemented in order to solve them during a live product.<br />
<strong>TAKEAWAY: </strong>Attendees will come away with an understanding of the pitfalls and challenges of building a scalable, user-friendly chat service. Attendees will gain an understanding of how significantly UX design and user behavior can impact scale issue. They will also gain insight into how to structure their UI code to leverage rapid-iteration on a live product. In addition, attendees will learn from case studies on specific chat UI features that worked well, and those that did not.<br />
<strong>INTENDED AUDIENCE: </strong>No prerequisite knowledge is needed and there will be takeaways for all disciplines during the lecture. However, the lecture will be especially useful for programmers interested in scalability, UI programmers, and UI/UX Designers.</p></blockquote>
<p>Also, it seems like Riot is totally taking over this conference! We have a total of 6 different talks we are doing there! Check &#8216;em out:</p>
<p><a title="&quot;Cloud Gaming: Present and Future&quot; with Brandon &quot;Ryze&quot; Beck" href="http://schedule.gdconline.com/session/6134/Cloud_Gaming%3A_Present_and_Future" target="_blank">&#8220;Cloud Gaming: Present and Future&#8221; </a> with Brandon &#8220;Ryze&#8221; Beck</p>
<p><a href="http://schedule.gdconline.com/session/5931/Letting_Go%3A_Creating_Self-Managed%2C_Self-Directed_Teams">Letting Go: Creating Self-Managed, Self-Directed Teams</a> by Travis &#8220;Volibar&#8221; George</p>
<p><a href="http://schedule.gdconline.com/session/5911/Designers_are_Human_Too_-_Causes_of_Poor_Design_Decisions">Designers are Human Too &#8211; Causes of Poor Design Decisions</a> by Tom &#8220;Zileas&#8221; Cadwell</p>
<p><a href="http://schedule.gdconline.com/session/5930/League_of_Legends%3A_What_it_Means_to_Be_Player-Focused">League of Legends: What it Means to Be Player-Focused</a> by Steve &#8220;Pendragon&#8221; Mescon</p>
<p>and <a href="http://schedule.gdconline.com/session/5934/Putting_the_Plane_Together_Midair">Putting the Plane Together Midair</a> by Andrew Woo</p>
<p>&nbsp;</p>
<p>This talk is special for me because, as I said in a previous post, I absolutely love GDC, and it has always been a career goal of mine to speak there! I was ecstatic when I found out my talk had been accepted. But, I did not know what I was in for!! Preparing for an hour long technical GDC talk is a <strong>ton of work. </strong>I really was not prepared for how much time I needed to put into this in order to make sure it was a truly quality presentation. During this time I found my friend Glenn Fielder&#8217;s blog post <a href="http://gafferongames.com/2009/02/15/how-to-prepare-a-talk-for-gdc/">How to Prepare a talk for GDC</a> an awesome read, and extremely helpful. Thank you Glen!</p>
<p>The subject matter is not really exactly what I&#8217;ve always envisioned doing at GDC. I&#8217;m not giving a highly detailed technical talk about a cool system that I built. Instead, I&#8217;m telling a more broad story about a rather large system, outside my specialty, that a whole team built. So I had to do a lot of work researching, and interviewing members of my team in order to get a deep enough understanding to be able to talk at least somewhat intelligently about it.</p>
<p>Furthermore, this was a talk about the <strong>problems</strong> we had and the <strong>mistakes </strong>that we made. It&#8217;s one thing to be humble and talk about your own mistakes, its a much different thing to have to talk publicly about the mistakes your teammates, whom you have a lot of respect for, might have made. I needed to be truthful, and share enough of our problems so that others could learn from them, but also respectful and fair to those who came before and did the really tough work of getting this system up and running under not the best of circumstances.</p>
<p>Overall, I think that the presentation has come together quite well and I look forward to giving it next week! An internal rehearsal at Riot was thankfully well received, and I was much more nervous about the internal presentation than the actual GDC one. But, I&#8217;m not sure I&#8217;m gong to jump at the opportunity to do another lecture like this anytime soon! (But, I hear they do get easier to prepare for!)</p>
<p>I will post my slides and notes up here shortly after GDC (as soon as they let me!)</p>
<p><a href="http://christophermcarthur.com/speaking-at-gdc-online/">Speaking at GDC Online!</a> is a post from: <a href="http://christophermcarthur.com">Christopher McArthur</a></p>
<div class="shr-publisher-166"></div><!-- Start Shareaholic LikeButtonSetBottom --><!-- End Shareaholic LikeButtonSetBottom --><div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=Speaking+at+GDC+Online%21+http%3A%2F%2Fis.gd%2FlPmDB5" title="Post to Twitter"><img class="nothumb" src="http://christophermcarthur.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro4.png" alt="Post to Twitter" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://christophermcarthur.com/speaking-at-gdc-online/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Programmer Religious War – C vs C++ Style Casts.</title>
		<link>http://christophermcarthur.com/programmer-religious-war-c-vs-c-style-casts/</link>
		<comments>http://christophermcarthur.com/programmer-religious-war-c-vs-c-style-casts/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 19:49:40 +0000</pubDate>
		<dc:creator>Christopher McArthur</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://christophermcarthur.com/?p=143</guid>
		<description><![CDATA[There are many issues in the programming world that seem to divide people down religious lines. These issues seem to cause endless internet flame wars and programmer rants without ever coming to a consensus. photo credit: Philippe Put One of these issues I&#8217;ve been seeing a lot lately is about whether to use the old school [...]<p><a href="http://christophermcarthur.com/programmer-religious-war-c-vs-c-style-casts/">Programmer Religious War &#8211; C vs C++ Style Casts.</a> is a post from: <a href="http://christophermcarthur.com">Christopher McArthur</a></p>
]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop --><!-- End Shareaholic LikeButtonSetTop --><p>There are many issues in the programming world that seem to divide people down religious lines. These issues seem to cause endless internet flame wars and programmer rants without ever coming to a consensus.</p>
<p><a title="Fight" href="http://www.flickr.com/photos/34547181@N00/5653340435/" target="_blank"><img src="http://farm6.static.flickr.com/5065/5653340435_e5b7118536_m.jpg" border="0" alt="Fight" /></a></p>
<p><a title="Attribution License" href="http://creativecommons.org/licenses/by/2.0/" target="_blank"><img src="http://christophermcarthur.com/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a><span style="font-size: x-small;"> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a title="Philippe Put" href="http://www.flickr.com/photos/34547181@N00/5653340435/" target="_blank">Philippe Put</a></span></p>
<p>One of these issues I&#8217;ve been seeing a lot lately is about whether to use the old school C style casting, or use the specific C++ style casts.</p>
<p>Here at Riot C++ style casts are part of our coding standard and the use of C style casts is generally discouraged in our codebase. This is a pretty common standard, as seen even in the <a title="Google Style Guide" href="http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Casting" target="_blank">Google Style Guide</a>.  But, conversely you have several major game studios with the inverse standard, who ban any use of C++ style casts and allow only C style casts. I&#8217;ve spoken with excellent programmers at places like Blizzard and Insomniac who say they will personally <strong>never</strong> use C++ style casting in their game code.</p>
<p>Isn&#8217;t it quite strange that multiple AAA studios can have completely opposite coding standards on this topic? At first I thought, like with a lot of C++ features, this was a console studio vs PC studio type of issue, but from my conversations with colleagues, I dont even think this is the case anymore. It seems to simply be a matter of style and personal taste.</p>
<h2>C++ Style Casting</h2>
<p>syntax:<em> int myInt = static_cast&lt;int&gt;(myFloat);</em></p>
<p>For a detailed description of C++ style casting check out <a title="C++ Casting Tutorial" href="http://www.tenouk.com/download/pdf/Module22.pdf" target="_blank">this paper on the subject</a>. C++ broke up casting into several different keywords with different use cases, here I will take you through a super-quick overview of them:</p>
<p><strong>static_cast</strong>: The most common C++ cast. Casts between like types, with some compile-time checking.</p>
<p><strong>dynamic_cast: </strong>Casting with runtime type checking. Checks to make sure a cast between a parent and a child class is valid, and can return NULL or throw an exception if it is not.</p>
<p><strong>const_cast:</strong> Used for adding or removing the const keyword from a type.</p>
<p><strong>reinterpret_cast: </strong>Used to cast between <strong>any</strong> two types, even between incompatible or opaque types.<span style="font-size: 11px;"><br />
</span></p>
<p>There are many advantages to using C++ style casts over C style, including:</p>
<p><strong>1)</strong> The intent of the programmer is more explicit. Since there are different keywords for different types of casts, it is easies to understand what the programmer wants to accomplish. For example, when you see a reinterpret_cast, you know the programmer is intentionally casting between incompatible types for a specific reason.</p>
<p><strong>2)</strong> C++ style casts are safer. The most common cast that replaces C style casts is the static_cast. If you try to static_cast between incompatible types, the compiler will warn you, whereas it will not with a C style cast. For example, if you have the forward declaration of a class, but forgot to include the complete definition, and perform a cast to that type, then a C++ static_cast will complain at compile time, however a C style cast will compile fine and  most likely crash at runtime.</p>
<p><strong>3)</strong> C++ style casts are greppable. It is easy to do a find in files to find all instances of a C++ style cast such as const_cast in your codebase. However, this is much more difficult with C style casts.</p>
<p><strong>4)</strong> dynamic_cast provides runtime type checking, while a C style cast can not. Most games have RTTI disabled for performance reasons, so this one isnt as interesting, but this feature is still occasionally useful in tools code.</p>
<h2>C Style Casting</h2>
<p>syntax: <em>int myInt = (float)myFloat;</em></p>
<p>C Style casting is the one that most people grew up with and are most familiar with.  Put some parenthesis around the type you want to cast to and away you go. So why do so many people stick with this old school way when C++ has eliminated the need for it?</p>
<p><strong>1)</strong> The C style syntax is much easier to read. The C++ style casts takes the short form of the C style, then adds a verbose keyword, and angled brackets, making it much uglier and harder to quickly parse. It is very important for programmer&#8217;s to be able to read code quickly, and easily get an understanding for what is happening at a glance. Many people feel that the janky syntax of C++ casts obfuscate the code when compared to the more elegant C style casting syntax.</p>
<p><strong>2)</strong> Everybody is already familiar with C style casting. It is widely used and understood, and when writing code using them you can almost guarantee that any other C/C++ programmer recognizes it and understands that. C++ style casting is just not as widely used, making it so that your code is not as universally understood by other programmers.</p>
<p><strong>3) </strong>Since the C++ casts are more complex than normal ones there is more potential for programmer&#8217;s to not fully understand them and potentially misuse them. Simply using static_cast for example can sometimes change the value of a pointer, and as one programmer I know expressed: &#8220;I  never use any language construct that requires moving the &#8216;this&#8217; pointer behind my back.&#8221;</p>
<p><strong>4)</strong> dynamic_cast will slow down your game because it uses RTTI. In addition to being an expensive operation, relying on dynamic_cast means that your code is probably badly designed and very brittle.</p>
<h2>My Stance</h2>
<p>At Riot we are particularly partial to the use of C++ style casts, and I fall squarely on that side of the fence as well, however I agree completely that dynamic_casts are bad news in runtime code. Like many studios we have RTTI disabled, so the option to use them is not even there.</p>
<p>This is, however, an unlikely place for me to fall on this issue. I typically am a &#8220;readability above all&#8221; type of programmer, and the arguments that C++ style casts make code uglier and harder to read at a glance ring true with me. However, I feel that the added safety of C++ style casting and the explicit intent they communicate much outweigh this downside and make them a welcome addition to any C++ codebase I am working in.</p>
<p>How do you handle casting in your codebase?</p>
<p>&nbsp;</p>
<p><a href="http://christophermcarthur.com/programmer-religious-war-c-vs-c-style-casts/">Programmer Religious War &#8211; C vs C++ Style Casts.</a> is a post from: <a href="http://christophermcarthur.com">Christopher McArthur</a></p>
<div class="shr-publisher-143"></div><!-- Start Shareaholic LikeButtonSetBottom --><!-- End Shareaholic LikeButtonSetBottom --><div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=Programmer+Religious+War+%E2%80%93+C+vs+C%2B%2B+Style+Casts.+http%3A%2F%2Fis.gd%2FL4ns2D" title="Post to Twitter"><img class="nothumb" src="http://christophermcarthur.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro4.png" alt="Post to Twitter" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://christophermcarthur.com/programmer-religious-war-c-vs-c-style-casts/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>5 Book Recommendations for Preparing for Your Game Programming Interview</title>
		<link>http://christophermcarthur.com/5-book-recommendations-for-preparing-for-your-game-programming-interview/</link>
		<comments>http://christophermcarthur.com/5-book-recommendations-for-preparing-for-your-game-programming-interview/#comments</comments>
		<pubDate>Wed, 27 Apr 2011 16:35:17 +0000</pubDate>
		<dc:creator>Christopher McArthur</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://christophermcarthur.com/?p=124</guid>
		<description><![CDATA[I received a ton of responses from all of you job hunters out there to my last post on resume tips. Most of the questions I received was from people wanting to know how to prepare for the next phase of the process and be able to do well on their interview. There is already a ton of general interview prep [...]<p><a href="http://christophermcarthur.com/5-book-recommendations-for-preparing-for-your-game-programming-interview/">5 Book Recommendations for Preparing for Your Game Programming Interview</a> is a post from: <a href="http://christophermcarthur.com">Christopher McArthur</a></p>
]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop --><!-- End Shareaholic LikeButtonSetTop --><p>I received a ton of responses from all of you job hunters out there to my last post on resume tips. Most of the questions I received was from people wanting to know how to prepare for the next phase of the process and be able to do well on their interview.</p>
<p>There is already a ton of general interview prep help out there, so I wanted to give you guys something a little more specific to game development. I also wanted to give you guys a little insight on how I prep for interview. I am kind of a technical book maniac; even when on vacation, lounging on the beach you will find me with a stack of programming books. And yeah I am talking about actual BOOKS, not just websites and Google. Google is a great resource, but for real learning there is nothing like the physicality and singular purpose of a book when trying to force your focus onto new concepts.</p>
<p>So following are my top 5 book recommendations for preparing for that game programming interview. Not only have I used these books myself when preparing for an interview, but many of the questions I ask when interviewing come from these. They cover the basic fundamentals that  a game company will expect you to know.</p>
<p>With these recommendations, you really don&#8217;t need to read each one cover to cover. Look at each one as a menu you can sample from. Flip around, read what piques your interest, and mark chapters to come back to for further study.</p>
<p>I want to mention a few common book recommendations that did <strong>not</strong> make my list. These are <strong>Design Patterns</strong> and <strong>Code Complete</strong>. These are great books, and working in the industry you will hear them mentioned alot, but I dont really feel they really offer much practical material that will be specifically helpful on an interview, especially when studying under a short time frame. In addition, while these books are great classics, which also means that some of their material is a bit dated now.</p>
<p><span style="font-size: 15px; font-weight: bold;">1) <a title="C++ Coding Standards  by Herb Sutter" href="http://www.amazon.com/Coding-Standards-Rules-Guidelines-Practices/dp/0321113586/ref=sr_1_1?ie=UTF8&amp;qid=1303614387&amp;sr=8-1" target="_blank">C++ Coding Standards  by Herb Sutter</a></span></p>
<h3>2) <a title="Effective C++ by Scott Meyer" href="http://www.amazon.com/Effective-Specific-Improve-Programs-Designs/dp/0321334876/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1303614551&amp;sr=1-1" target="_blank">Effective C++ by Scott Meyer</a></h3>
<p>C++ is probably the single most essential and commonly covered skill in game programming interviews. Riot is a little more C++ focused than many game companies since we are so PC focused, but you will find C++ language questions a staple across the industry and you better make sure you are ready to tackle them confidently.</p>
<p>&#8220;<em>C++ Coding Standards&#8221; </em>and &#8220;<em>Effective C++&#8221; </em>are hands down the best C++ books available. Their style of short, enumerated topics, each only a few pages long make them extremely easy to read and very friendly to skimming. Be aware that both of these books rely heavily on parts of the standard library that companies like Riot use, but many game companies out there do not use. Even so, however, the concepts still apply. If you don&#8217;t have time for anything else, at least read these books!</p>
<h3>3) <a title="The Pragmatic Programmer by David Thomas" href="http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1303614611&amp;sr=1-1" target="_blank">The Pragmatic Programmer by David Thomas</a></h3>
<p>This is perhaps my favorite programming book of all time.  Its funny, its practical, and it sometimes goes against the grain of &#8220;standard&#8221; programming advice you may have had drilled into you at school. This book is a great look at many of the common every day issues that come up on a programming team, it will give you the vocabulary and talking points you need when discussing general engineering discipline during your interview.</p>
<h3>4) <a title="3d Math Primer for Graphics and Game Development by Fletcher Dunn" href="http://www.amazon.com/Primer-Graphics-Development-Wordware-Library/dp/1556229119/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1303614672&amp;sr=1-1" target="_blank">3d Math Primer for Graphics and Game Development by Fletcher Dunn</a></h3>
<p>When walking into a game programming interview you&#8217;d better know your dot products from your cross products, because basic 3d geometry and linear algebra is a staple of almost every interview I&#8217;ve seen. Mr. Dunn&#8217;s book is a perfect refresher for the exact things you will be expected to know. Certainly there are much better math textbooks out there, that cover this stuff in much greater detail. But, the great thing about &#8220;3d Math Primer&#8221; is that its <strong>not</strong> a textbook. The information it covers is extremely practical, its very readable, and its actually pretty funny (not something you can say for many math books!). While the book has a focus on graphics, don&#8217;t overlook if just because this happens to not be your specialty, most of the material in the book applies very directly to general game development that employers expect you to know even if you are not a graphics programmer.</p>
<h3>5) <a title="Data Structures and Algorithms for Game Developers by Allen Sherrod" href="http://www.amazon.com/Data-Structures-Algorithms-Developers-Development/dp/1584504951/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1303614944&amp;sr=1-1" target="_blank">Data Structures and Algorithms for Game Developers by Allen Sherrod</a></h3>
<p>I feel weird recommending this book, as its a little beginner focused and honestly, it has a lot of very questionable C++ code in it. There are a lot of awesome textbooks on the subject which are just a lot higher quality and go into great detail on the subject. But that exact weakness is also the strength of the book  in a cramming situation, it focuses on the high level parts that you need to know. A book like this is perfect for quickly getting back up to speed on your basics of which sorting algorithms are O(N^2) and which are O(n log n).</p>
<p>As far as data structures are concerned, at Riot we use the Standard Template Library (STL), and you should familiarize yourself with it&#8217;s basic data structures. Even though many game companies never touch STL (especially console-oriented studios), often their internal implementations are heavily influenced by the STL interface, so its very useful to be familiar with it.</p>
<p><a href="http://christophermcarthur.com/5-book-recommendations-for-preparing-for-your-game-programming-interview/">5 Book Recommendations for Preparing for Your Game Programming Interview</a> is a post from: <a href="http://christophermcarthur.com">Christopher McArthur</a></p>
<div class="shr-publisher-124"></div><!-- Start Shareaholic LikeButtonSetBottom --><!-- End Shareaholic LikeButtonSetBottom --><div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=5+Book+Recommendations+for+Preparing+for+Your+Game+Programming+Interview+http%3A%2F%2Fis.gd%2FQu6ISj" title="Post to Twitter"><img class="nothumb" src="http://christophermcarthur.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro4.png" alt="Post to Twitter" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://christophermcarthur.com/5-book-recommendations-for-preparing-for-your-game-programming-interview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5 Resume Tips for Total N00bs to Land a Job as a Game Programmer</title>
		<link>http://christophermcarthur.com/top-5-resume-tips-for-total-n00bs-to-land-a-job-as-a-game-programmer/</link>
		<comments>http://christophermcarthur.com/top-5-resume-tips-for-total-n00bs-to-land-a-job-as-a-game-programmer/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 22:35:21 +0000</pubDate>
		<dc:creator>Christopher McArthur</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://christophermcarthur.com/?p=83</guid>
		<description><![CDATA[Post GDC we received a lot of resumes. Which means that my team has to spend a lot of time going through resumes of game engineers and deciding which to follow up with, and which to pass on. And because of the high student population at GDC the majority of these resumes were from students with no [...]<p><a href="http://christophermcarthur.com/top-5-resume-tips-for-total-n00bs-to-land-a-job-as-a-game-programmer/">5 Resume Tips for Total N00bs to Land a Job as a Game Programmer</a> is a post from: <a href="http://christophermcarthur.com">Christopher McArthur</a></p>
]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop --><!-- End Shareaholic LikeButtonSetTop --><p>Post GDC we received a <strong>lot</strong> of resumes. Which means that my team has to spend a lot of time going through resumes of game engineers and deciding which to follow up with, and which to pass on. And because of the high student population at GDC the majority of these resumes were from students with no professional experience of any kind. So how do you decide the fate of someone based just on a quick glance at a summary of their life?</p>
<p>You really can&#8217;t know for sure, resume judging is a black art more than a science. At some level it is just a roll of the dice and a hope that you dont critically miss. The only way for me to truly judge these canidates would be to talk to them, and to spend time with them. Unfortunately, that is just not possible with the amount of interest we get, and the field of applicants needs to be culled.</p>
<p>The good news is, that even as a green student there are things you can do to make your resume stand out, and with the right preperation, and a little luck you can survive the bloody battlefield of resume sorting and find your way to the phone interview.</p>
<h3>1. Projects. Projects. Projects.</h3>
<p>We all know the classic catch-22: no job without experience, but no experience without a job. Fortunately, in the game industry there is an awesome loophole: you don&#8217;t need a job to make awesome games!</p>
<p>Make sure to provide a link to a website where your projects can be viewed. Videos, screenshots, and game downloads that showcase the games you have made are what convince me that you are a hotshot worth wooing.</p>
<p>Don&#8217;t have any projects? Well get on it! Its never been easier to work with the same tools the big boys are using, UnityEngine has a cheap student license, Half-Life and Unreal have a very active Mod communities, and the XNA framework is just awesome for creating XBOX and PC games. This is how I got my start in the game industry, and this is still the easiest way to impress me with your resume.</p>
<p><span style="font-size: 15px; font-weight: bold;">2. The importance of your school.</span></p>
<p>So this might be a little hypocritical coming from me, as I never finished my degree! But, a hard science or engineering degree can go along way, especially if its from a top school such as CalTech or MIT.</p>
<p>The game development specific schools out there are a mixed bag. Their hard math and science regiment isnt as in depth as a tradition school, but they have the huge upside of getting to make actual games. With people who went to these types of school I am looking to see if they took a leadership role in any of their projects. Lately, Ive been seeing a lot of resumes from students of the game development schools who just list the projects on their resume with a short description of them and no links for more details. Don&#8217;t make this massive mistake! Without being able to see the actual projects you are working on its almost like you didn&#8217;t even do them, make it easy to check out the cool work you did!</p>
<h3>3. Focus on your specialty.</h3>
<p>You really want to work in the game industry, so much so that you would be willing to take any job: Coder, designer, producer, heck even getting coffee! Your passion is awesome, but this lack of focus can be  poison for your resume. Pick what you are really good at and go after it, showing that you know what you want and have been focusing on learning all you can about it.</p>
<p>Even as a student I like to see programmers who have deep-dived into some area of expertise. Highlight the graphics programming you did on one of your projects, or the awesome tool you built to design content faster, or the gameplay systems.</p>
<p>This doesn&#8217;t mean you are doomed to be pigeon-holed, it means that your potential employer can envision exactly what you will be contributing from day one. If I find someone who is really smart in a few key areas, I know that they can learn other areas and branch out. But, when someone is just mediocre in a lot of things, I am much more likely to pass them over.</p>
<h3>4. Highlight your achievements.</h3>
<p>When looking at your resume I am looking for signs of an overachiever. If your game projects have won any awards or received any special notice make sure to call this out. But, even non game specific stuff that you really kick ass at is important to show off. Maybe you have a black belt in Karate, you got to world finals in Magic: the Gathering, or you were Editor in Chief of your school paper. Let me know about these things and I am more likely to give you a second look.</p>
<h3>5. Keep it short and sweet.</h3>
<p>Keep your resume short: one page or less. A short resume forces me to focus on exactly what you want me to see. Leave off the stuff that is not relevant and just not flattering. I really dont care that you flipped burgers at Jack in the Box, or were a waiter at Olive Garden, this stuff is not showing that you have a work ethic, it is just sabotaging you&#8217;re chances of getting an interview by distracting from the important stuff on your resume.</p>
<p>You can also lose the long list of skills that lists every single programming language you&#8217;ve ever heard of and every software package that comes installed with Windows. Listing &#8220;Microsoft Word&#8221; on your Resume is not impressive, and unless you can answer in depth interview questions about all of those programming languages that you listed you are just going to make yourself look bad during the phone screen. Remember tip #3, focus, and pair that list down to just what you are really bad-ass at.</p>
<p><a href="http://christophermcarthur.com/top-5-resume-tips-for-total-n00bs-to-land-a-job-as-a-game-programmer/">5 Resume Tips for Total N00bs to Land a Job as a Game Programmer</a> is a post from: <a href="http://christophermcarthur.com">Christopher McArthur</a></p>
<div class="shr-publisher-83"></div><!-- Start Shareaholic LikeButtonSetBottom --><!-- End Shareaholic LikeButtonSetBottom --><div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=5+Resume+Tips+for+Total+N00bs+to+Land+a+Job+as+a+Game+Programmer+http%3A%2F%2Fis.gd%2F6YW9tZ" title="Post to Twitter"><img class="nothumb" src="http://christophermcarthur.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro4.png" alt="Post to Twitter" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://christophermcarthur.com/top-5-resume-tips-for-total-n00bs-to-land-a-job-as-a-game-programmer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Best of GDC 2011 — Talks and Lectures and Cheese*</title>
		<link>http://christophermcarthur.com/best-of-gdc-2011-talks-and-lectures-and-cheese/</link>
		<comments>http://christophermcarthur.com/best-of-gdc-2011-talks-and-lectures-and-cheese/#comments</comments>
		<pubDate>Sun, 13 Mar 2011 16:39:17 +0000</pubDate>
		<dc:creator>Christopher McArthur</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://christophermcarthur.com/?p=25</guid>
		<description><![CDATA[Just got back from GDC 2011 and had an amazing time. As always I have come back from GDC feeling inspired. Talking to people at the top of their game, pushing the envelope on game development always starts a fire in me to do the same. At no time do am I more excited about [...]<p><a href="http://christophermcarthur.com/best-of-gdc-2011-talks-and-lectures-and-cheese/">Best of GDC 2011 &#8212; Talks and Lectures and Cheese*</a> is a post from: <a href="http://christophermcarthur.com">Christopher McArthur</a></p>
]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop --><!-- End Shareaholic LikeButtonSetTop --><p>Just got back from GDC 2011 and had an amazing time.</p>
<p>As always I have come back from GDC feeling inspired. Talking to people at the top of their game, pushing the envelope on game development always starts a fire in me to do the same. At no time do am I more excited about coming into work every day than the weeks after the GDC.</p>
<p>My favorite lectures this year come from the excellent engineering team at Bungie. Their lectures were both interesting and very practical, their engineering team is extremely open with the game development community, which leads to better engineers and better games for everyone, which is only a good thing for our industry.</p>
<p>On to my top 5.</p>
<h3><span style="font-size: large;">1. Networking the gameplay of Halo: Reach</span></h3>
<h3>by David Aldridge of Bungie</h3>
<p><a href="http://schedule.gdconf.com/session/12126">http://schedule.gdconf.com/session/12126</a></p>
<p>David took us through his journey of updating and optimizing the network code for Halo: Reach. We got some cool videos of their profiling tools, which allows you to visually inspect any object in the gameworld to see exactly when and how the engine  sends packets over the network. This allowed Bungie to do a ton of fine tuning on a per-object basis. For example, this visualization caused them to notice an anomaly in dropped weapons and they reduced their entire network bandwidth by 10% simply by adjusting the rate at which weapons slid down hills!!</p>
<p>One of the most interesting innovations was the addition of a &#8220;lag button&#8221; in playtests. They instructed their testers to press this button whenever the game felt laggy. They could then take the replay and fast forward to these points in order to debug the networking. What they found was that players were pressing this anytime something confusing happened to them in the game. If they got killed from behind quickly and the deathcam didnt show the killer, they would press the &#8220;I Lagged&#8221; button. From this they were able to fix game design issues they had never noticed before. I love this idea and I am definitely stealing it!</p>
<p>Unfortunately, he only spoke briefly about how to predict bullet-based insta-hit weapons which is a really interesting talk I hope he covers in detail at a future GDC. However, there is a great article on how Valve tackled this problem from 2001 available here: <strong>http://tinyurl.com/coljwf</strong></p>
<h3><span style="font-size: large;">2. Halo:Reach Special Effects</span></h3>
<h3>by Chris Tchou of Bungie</h3>
<p><a title="http://schedule.gdconf.com/session/12127" href="http://schedule.gdconf.com/session/12127" target="_blank">http://schedule.gdconf.com/session/12127</a></p>
<p>Only 25 minutes long! Yet packed to the brim with awesome stuff. A highly technical lecture that Chris made easily understandable. A particle system that runs completely on the GPU packing basic particle state into a texture. Using the depthbuffer to handle particle collision allowing for completely GPU-based bouncing rains and sparks! <img title="Mass Particles!" src="http://i270.photobucket.com/albums/jj107/MADMAN_Redux/Halo%20Reach%20For%20BB/350.jpg" alt="Mass Particles!" width="442" height="250" /></p>
<h3><span style="font-size: large;">3. Iterating on a Dynamic Camera System</span></h3>
<h3><strong>by Phil Wilkins of Sony Santa Monica</strong></h3>
<p><strong><a href="http://schedule.gdconf.com/session/12364">http://schedule.gdconf.com/session/12364</a><br />
</strong></p>
<p>Another lecture that just had a ton of practical, useable techniques. Phil took us through the history of the God of War camera from its first iteration in God of War 1 to the final version that shipped in God of War 3. The camera system starts by taking designer placed nodes around the map that are near the action, and blends them together to get a final camera. The combat system then puts in its two cents and modifies the camera to perfectly frame the action taking place in the scene.</p>
<p>Usually defining the rules for a camera system is the easy part, its all the little edge cases and gotchas that really make it difficult, and Phil walks you through several of these edge cases that they ran into, making this talk especially valuable.</p>
<p>Phil&#8217;s original lecture is available here: <a href="http://web.cs.wpi.edu/~rich/courses/imgd4000-d10/lectures/camera.pdf">http://web.cs.wpi.edu/~rich/courses/imgd4000-d10/lectures/camera.pdf</a> His updated lecture for God of War3 is not available yet.</p>
<h3><span style="font-size: large;">4. Forensic Debugging</span></h3>
<h3>by Elan Ruskin of Valve</h3>
<p><a title="http://schedule.gdconf.com/session/12129" href="http://schedule.gdconf.com/session/12129" target="_blank">http://schedule.gdconf.com/session/12129</a></p>
<p>This one really opened my eyes to a lot of interesting debugging techniques. Taking us deep into what the compiler actually does with your code, Elan stressed the importance of understanding some basic assembly in order to track what was actually happening in your release executable. At one point the audience gasped when Chris revealed a stack trace in which the callstack was completely corrupted, that the pattern of the corruption formed the letter &#8220;A&#8221; if you looked at the memory just right, revealing a problem in the font code! Unfortunately, Chris moved a bit too fast for me and left me in the dust a bit. But thankfully, he posted his slides up (<strong><a title="http://tinyurl.com/624efkf" href="http://tinyurl.com/624efkf" target="_blank">http://tinyurl.com/624efkf</a></strong>). This is one of those lectures that I&#8217;m going to be spending a lot of time going back through and reading on to try and fully grasp.</p>
<p>And the one that surpised me the most:</p>
<h3><span style="font-size: large;">5. Industry Lessons Learned</span></h3>
<h3>by Cliff Bleszinski of Epic</h3>
<p><a title="http://schedule.gdconf.com/session/12352" href="http://schedule.gdconf.com/session/12352" target="_blank">http://schedule.gdconf.com/session/12352</a></p>
<p>I didnt know what to expect for this lecture, but it ended up being very entertaining and inspirational. Cliff talks of the idea of a &#8220;Power Creative&#8221;,  a developer who is highly visible, highly active, and plays a leadership role on their team. He encouraged more companies to nuture and grow their own Power Creatives, and expressed concern that he had never met a developer from Rockstar, despite all their successful games. He also stressed the importance of understanding how to sell, pointing out that every great idea has to be sold first to your teammates, then to your company at large, and then to the public, so it is a very valuable tool to possess even for those of us in the trenches.</p>
<p>&#8211;</p>
<p>* The cheese sucked <img src='http://christophermcarthur.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p><a href="http://christophermcarthur.com/best-of-gdc-2011-talks-and-lectures-and-cheese/">Best of GDC 2011 &#8212; Talks and Lectures and Cheese*</a> is a post from: <a href="http://christophermcarthur.com">Christopher McArthur</a></p>
<div class="shr-publisher-25"></div><!-- Start Shareaholic LikeButtonSetBottom --><!-- End Shareaholic LikeButtonSetBottom --><div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=Best+of+GDC+2011+%E2%80%94+Talks+and+Lectures+and+Cheese%2A+http%3A%2F%2Fis.gd%2F5kjfJr" title="Post to Twitter"><img class="nothumb" src="http://christophermcarthur.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-micro4.png" alt="Post to Twitter" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://christophermcarthur.com/best-of-gdc-2011-talks-and-lectures-and-cheese/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

