<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Doolwind&#039;s Game Coding Blog &#187; Game Programming</title>
	<atom:link href="http://www.doolwind.com/blog/tag/game-programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.doolwind.com/blog</link>
	<description>Pragmatic Thoughts On Game Development</description>
	<lastBuildDate>Wed, 28 Jul 2010 22:53:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Fanatical Pragmatism in Software Development</title>
		<link>http://www.doolwind.com/blog/fanatical-pragmatism-in-software-development/</link>
		<comments>http://www.doolwind.com/blog/fanatical-pragmatism-in-software-development/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 21:17:18 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Fanatical Pragmatism]]></category>
		<category><![CDATA[Game Programming]]></category>
		<category><![CDATA[Pragmatic]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=496</guid>
		<description><![CDATA[I’ve caught the pragmatism bug.  Everything I do now is the most pragmatic way I can possibly complete the task.  This all started when my time started costing me money; when I started working for myself.  I like to think of it as “The product justifies the means”.  Today I’m going to briefly describe what [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/pragmatic.jpg"><img class="alignright" title="Fanatical Pragmatism" src="http://www.doolwind.com/images/blog/pragmatic.jpg" alt="" width="173" height="130" /></a>I’ve caught the pragmatism bug.  Everything I do now is the most <a href="http://www.doolwind.com/blog/pragmatic-game-development/">pragmatic</a> way I can possibly complete the task.  This all started when my time started costing me money; when I started working for myself.  I like to think of it as “The product justifies the means”.  Today I’m going to briefly describe what I mean by fanatical pragmatism with some concrete rules I’ve been following recently.</p>
<p><span id="more-496"></span></p>
<p><strong>What fanatical pragmatism is</strong></p>
<p>Fanatical pragmatism involves pursuing the optimal product as cost effectively as possible, without cutting corners.  For anything non-trivial, see if there is an existing solution that can solve the problem.  For games, this involves using a 3<sup>rd</sup> party engine, particle system, etc wherever possible.  It’s about solving the problems that need to be solved, in the cheapest way possible.</p>
<p>It’s good for developers as focuses them on completing as much as possible, as quickly as possible.  It’s also good for the business as it means the problems the business exists to solve are solved as cost effectively as possible.</p>
<p><strong>What fanatical pragmatism isn’t</strong></p>
<p>It is not about cutting corners to get to a solution faster.  Nor is it about ignoring long-term goals to reach short-term goals faster.  Fanatical pragmatism is not “cowboy coding” (rather it’s tangential to it) and it’s more about solving the businesses needs for the least cost than just getting things done quickly.</p>
<p><strong>How scrum fits in</strong></p>
<p>It fits in perfectly with agile development practices, particularly Scrum.  Scrum is a discipline-agnostic framework that gives developers the freedom to work within their own specific style.  For this reason, fanatical pragmatism works hand-in-hand with extremely short sprints and meeting changing customer demands.  It acts on high-level sprint planning (deciding what goes into a sprint) as well as low-level, day-to-day development such as exactly how to solve the tasks for a given sprint.  For this reason it can be embraced by both developers and management alike.</p>
<p><strong>Some general rules</strong></p>
<p>Some general rules I’ve found myself following recently:</p>
<ul>
<li><strong>Broaden your knowledge</strong>.  I’ve spent the last couple of years running a software company focussed on web applications.  I’ve picked up a lot of skills that I’ve been able to transfer over to game development (and vice versa).  The broader your knowledge, the large the pool of resources you can draw from to solve problems.  The jack of all trades is the master of fanatical pragmatism</li>
<li><strong>Focus on the goal</strong>.  The key to keeping pragmatic is always looking at where you are heading.  Every decision from day-to-day task assignment to strategic planning should focus on where the team is heading.  All efforts should be in driving the team towards their ultimate goal(s).<strong></strong></li>
</ul>
<p>Some general software development rules:</p>
<ul>
<li><strong>Separate your concerns</strong>.  A big part of why <a href="http://www.doolwind.com/blog/model-view-controller-mvc-game-engine/">MVC</a> works so well for a game engine is that it keeps the obvious concerns (e.g. gameplay vs. rendering) separated from each other.  This keeps each person on the team focussed on their part of the problem domain and helps to reduce complexity as the software grows in size</li>
<li><strong>Clean Interfaces</strong>.  Keeping loosely coupled systems is a great way of isolating your code so that any mistakes made, or changes needed can be done with the least amount of hassle in the future</li>
<li><strong>Build strong architecture where it’s needed</strong>.  For some large, complex system’s it’s important to spend the time up front designing the architecture for the system.  This gives everyone a foundation to build upon.  This should only be done in rare situations though.  It&#8217;s easy to get caught in the trap of doing lots of big design up front, however fanatical pragmatism calls for this only when absolutely necessary, and enough information is known.</li>
</ul>
<p><strong>Conclusion</strong></p>
<p>So that’s fanatical pragmatism in a nutshell.  Share your thoughts on the topic and let me know how you work best in achieving your goals.  I’m constantly evolving the way I work and I’m always looking for the best way to solve problems so please leave a message with your best practices.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/fanatical-pragmatism-in-software-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Review: Certified ScrumMaster for Video Game Development with Clinton Keith</title>
		<link>http://www.doolwind.com/blog/review-certified-scrummaster-for-video-game-development-with-clinton-keith/</link>
		<comments>http://www.doolwind.com/blog/review-certified-scrummaster-for-video-game-development-with-clinton-keith/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 22:38:14 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Game Programming]]></category>
		<category><![CDATA[GDC]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=477</guid>
		<description><![CDATA[In the days leading up to GDC this year Clinton Keith held a ScrumMaster course specifically for video game development.  I attended the course and in this blog post I share my experiences with a brief review for anyone thinking of attending or sending some of their developers to attend. The course runs over two [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/certified_scrummaster.jpg"><img class="alignright" title="Certified ScrumMaster" src="http://www.doolwind.com/images/blog/certified_scrummaster.jpg" alt="" width="155" height="107" /></a>In the days leading up to GDC this year <a href="http://clintonkeith.com/">Clinton Keith</a> held a ScrumMaster course specifically for video game development.  I attended the course and in this blog post I share my experiences with a brief review for anyone thinking of attending or sending some of their developers to attend.</p>
<p><span id="more-477"></span></p>
<p>The course runs over two full days and was the first course of this length where I didn’t fall asleep.  The content was of a high quality and was kept interesting with lots of interactive tasks and small group discussions.  Clinton began with a great overview of Scrum and then dug deep in to the details, explaining all concepts in great detail, without bogging down in minutiae.  While there was a slight programmer emphasis he covered all facets of game development.</p>
<p>Clinton has a lot of experience with general game development and is a pioneer with implementing Scrum in game development.  His stories were not only interesting but served as a great way to show how Scrum is being used in the real world.  He has worked with some big studios including CCP (creators of Eve Online) and Bioware.  This gives him both credibility and a great insight into how large companies have made successful games using Scrum.</p>
<p>The last part of the second day was spent simulating a handful of sprints to get a feel for how the interactions worked between ScrumMaster, product owner and the team.  The use of lego to create a small world was surprisingly similar to software development and served as a great way to simulate a small development cycle.  This brought the whole group together and let them experience the realities of working with Scrum in a group of people.  It allowed us to put into practice what had been learnt over the past two days.</p>
<p>An obvious benefit is the certification received at the end of the course.  However more important was the knowledge gained during the course.  I had a fairly good understanding of Scrum before the course however this helped to fill all the holes and even correct a number of misconceptions I had.  There are a lot of resources on the net and in books that can teach the basics of Scrum however I found that the interactive and hands-on nature of the course taught me things I would never have picked up through reading or trying to implement Scrum in a vacuum within my own team.  This is the primary reason I would recommend the course to anyone looking to adopt Scrum in the software development team.  Most people admitted to using a “version” of Scrum which by the end of the course proved to not have some of the essential ingredients.</p>
<p>One of the great points of the course was the high level of interactivity.  We could ask questions at any time (which people did) and Clinton would often integrate his answer into the rest of his talk give context rather than a simple answer.  He was happy to answer the hard questions about Scrum including where it has its problems and where we are likely to run into trouble.</p>
<p>I highly recommend the course to any lead’s or project managers.  While the cost of $1500 is fairly high (it&#8217;s the standard cost of any ScrumMaster course) it pays for itself in the payoffs you will experience within your team.  It’s an enjoyable two days where a lot is learnt and most will be inspired to fix the problems with the way their teams are managed.</p>
<p>Have you participated in a certified ScrumMaster course?  Have you attended one of Clinton’s courses or talks?  What do you think of Scrum and its relevance to video game development?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/review-certified-scrummaster-for-video-game-development-with-clinton-keith/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best Graphics Programming and Game Programming Blogs</title>
		<link>http://www.doolwind.com/blog/best-graphics-programming-and-game-programming-blogs/</link>
		<comments>http://www.doolwind.com/blog/best-graphics-programming-and-game-programming-blogs/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 06:15:57 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Game Engine]]></category>
		<category><![CDATA[Game Programming]]></category>
		<category><![CDATA[Graphics Programming]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=455</guid>
		<description><![CDATA[Below are a collection of Blogs relating to game development, primarily graphics programming. Use your favourite reader (eg Google Reader) to read them.  Know of any blogs not on the list that you can recommend? Add a comment and I&#8217;ll add them to the list. Big thanks to Damian Trebilco for help with the list.  The [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/rssfeed.jpg"><img class="alignright" title="RSS Feed" src="http://www.doolwind.com/images/blog/rssfeed.jpg" alt="" width="130" height="119" /></a>Below are a collection of Blogs relating to game development, primarily graphics programming.  Use your favourite reader (eg <a href="http://www.google.com/reader">Google Reader</a>) to read them.  Know of any blogs not on the list that you can recommend? Add a comment and I&#8217;ll add them to the list. Big thanks to <a href="http://glintercept.nutty.org/">Damian Trebilco</a> for help with the list.  The blogs are listed alphabetically rather than by any preference of mine.</p>
<p><span id="more-455"></span></p>
<p>.mischief.mayhem.soap.<br />
<a href="http://msinilo.pl/blog/?feed=rss2"> http://msinilo.pl/blog/?feed=rss2</a></p>
<p>Atom<br />
<a href="http://farrarfocus.blogspot.com/feeds/posts/default "> http://farrarfocus.blogspot.com/feeds/posts/default </a></p>
<p>Beautiful Pixels<br />
<a href="http://feeds.feedburner.com/BeautifulPixels"> http://feeds.feedburner.com/BeautifulPixels</a></p>
<p>Dead Voxels<br />
<a href="http://deadvoxels.blogspot.com/feeds/posts/default"> http://deadvoxels.blogspot.com/feeds/posts/default</a></p>
<p>Diary of a Graphics Programmer<br />
<a href="http://diaryofagraphicsprogrammer.blogspot.com/feeds/posts/default"> http://diaryofagraphicsprogrammer.blogspot.com/feeds/posts/default</a></p>
<p>direct to video<br />
<a href="http://directtovideo.wordpress.com/feed/"> http://directtovideo.wordpress.com/feed/</a></p>
<p>Gamasutra<br />
<a href="http://feeds.feedburner.com/GamasutraNews">http://feeds.feedburner.com/GamasutraNews</a></p>
<p>Game Angst<br />
<a href="http://gameangst.com/?feed=rss2">http://gameangst.com/?feed=rss2</a></p>
<p>Game Rendering<br />
<a href="http://www.gamerendering.com/feed/"> http://www.gamerendering.com/feed/</a></p>
<p>GameArchitect<br />
<a href="http://gamearchitect.net/feed/"> http://gamearchitect.net/feed/</a></p>
<p>GameDev.Net<br />
<a href="http://www.gamedev.net/xml/">http://www.gamedev.net/xml/</a></p>
<p>Geeks3D Forums &#8211; 3D-Tech News Around The Web<br />
<a href="http://feeds2.feedburner.com/Geeks3DTechNewsForum">http://feeds2.feedburner.com/Geeks3DTechNewsForum</a></p>
<p>GPGPU» :: GPGPU.org<br />
<a href="http://www.gpgpu.org/cgi-bin/blosxom.cgi/index.rss">http://www.gpgpu.org/cgi-bin/blosxom.cgi/index.rss</a></p>
<p>Graphic Rants<br />
<a href="http://graphicrants.blogspot.com/feeds/posts/default"> http://graphicrants.blogspot.com/feeds/posts/default</a></p>
<p>Graphics Size Coding<br />
<a href="http://sizecoding.blogspot.com/feeds/posts/default"> http://sizecoding.blogspot.com/feeds/posts/default</a></p>
<p>Humus<br />
<a href="http://www.humus.name/rss.xml"> http://www.humus.name/rss.xml</a></p>
<p>Ignacio Castaño<br />
<a href="http://castano.ludicon.com/blog/feed/"> http://castano.ludicon.com/blog/feed/</a></p>
<p>John Ratcliff&#8217;s Code Suppository<br />
<a href="http://codesuppository.blogspot.com/feeds/posts/default"> http://codesuppository.blogspot.com/feeds/posts/default</a></p>
<p>level of detail<br />
<a href="http://www.jshopf.com/blog/?feed=rss2"> http://www.jshopf.com/blog/?feed=rss2</a></p>
<p>Level of Detail<br />
<a href="http://levelofdetail.wordpress.com/feed/"> http://levelofdetail.wordpress.com/feed/</a></p>
<p>Lost in the Triangles<br />
<a href="http://feeds.feedburner.com/LostInTheTriangles"> http://feeds.feedburner.com/LostInTheTriangles</a></p>
<p>Make It Big In Games<br />
<a href="http://makeitbigingames.com/feed/">http://makeitbigingames.com/feed/</a></p>
<p>meshula.net<br />
<a href="http://meshula.net/wordpress/?feed=rss2"> http://meshula.net/wordpress/?feed=rss2</a></p>
<p>OpenGL News<br />
<a href="http://www.opengl.org/news/rss_2.0/"> http://www.opengl.org/news/rss_2.0/</a></p>
<p>NVIDIA Developer News<br />
<a href="http://news.developer.nvidia.com/rss.xml"> http://news.developer.nvidia.com/rss.xml</a></p>
<p>Outside Hollywood<br />
<a href="http://www.outside-hollywood.com/feed/"> http://www.outside-hollywood.com/feed/</a></p>
<p>Real-Time Rendering<br />
<a href="http://www.realtimerendering.com/blog/feed/"> http://www.realtimerendering.com/blog/feed/</a></p>
<p>realtimecollisiondetection.net &#8211; the blog<br />
<a href="http://realtimecollisiondetection.net/blog/?feed=rss2"> http://realtimecollisiondetection.net/blog/?feed=rss2</a></p>
<p>Sanders&#8217; blog<br />
<a href="http://sandervanrossen.blogspot.com/feeds/posts/default"> http://sandervanrossen.blogspot.com/feeds/posts/default</a></p>
<p>Scattered Pixels<br />
<a href="http://feeds.feedburner.com/ScatteredPixels"> http://feeds.feedburner.com/ScatteredPixels</a></p>
<p>Solid Angle<br />
<a href="http://solid-angle.blogspot.com/feeds/posts/default"> http://solid-angle.blogspot.com/feeds/posts/default</a></p>
<p>The Hacks of Life<br />
<a href="http://hacksoflife.blogspot.com/feeds/posts/default"> http://hacksoflife.blogspot.com/feeds/posts/default</a></p>
<p>w00t<br />
<a href="http://bpeers.com/blog/xml-rss2.php"> http://bpeers.com/blog/xml-rss2.php</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/best-graphics-programming-and-game-programming-blogs/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Top 10 Software Development Books</title>
		<link>http://www.doolwind.com/blog/top-10-software-development-books/</link>
		<comments>http://www.doolwind.com/blog/top-10-software-development-books/#comments</comments>
		<pubDate>Sun, 27 Dec 2009 10:40:30 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[Game Programming]]></category>
		<category><![CDATA[Softare Development]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=277</guid>
		<description><![CDATA[Good software development books are hard to find. I&#8217;m always being asked which books I recommend so I thought I&#8217;d compile a list of my favourites. These are books every software developer should read. All of these books have made me a better programmer. The list covers everything from the basics of coding to agile [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/top10books/Top10SoftwareDevelopmentBooks.jpg"><img class="alignright" title="Top 10 Software Development Books" src="http://www.doolwind.com/images/blog/top10books/Top10SoftwareDevelopmentBooks.jpg" alt="" width="82" height="103" /></a>Good software development books are hard to find.  I&#8217;m always being asked which books I recommend so I thought I&#8217;d compile a list of my favourites.  These are books every software developer should read.  All of these books have made me a better programmer.  The list covers everything from the basics of coding to agile development and architectural software development.</p>
<p><span id="more-277"></span></p>
<p><strong>The Pragmatic Programmer: From Journeyman to Master</strong><br />
<a href="http://www.amazon.com/gp/product/020161622X?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=020161622X"><img src="http://www.doolwind.com/images/blog/top10books/ThePragmaticProgrammer.jpg" border="0" alt="" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=doosgamcodblo-20&amp;l=as2&amp;o=1&amp;a=020161622X" border="0" alt="" width="1" height="1" /><br />
<strong> </strong></p>
<p><strong>Code Complete</strong><br />
<a href="http://www.amazon.com/gp/product/0735619670?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0735619670"><img src="http://www.doolwind.com/images/blog/top10books/CodeComplete.jpg" border="0" alt="" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=doosgamcodblo-20&amp;l=as2&amp;o=1&amp;a=0735619670" border="0" alt="" width="1" height="1" /><br />
<strong> </strong></p>
<p><strong>Rapid Development: Taming Wild Software Schedules</strong><br />
<a href="http://www.amazon.com/gp/product/1556159005?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1556159005"><img src="http://www.doolwind.com/images/blog/top10books/RapidDevelopment.jpg" border="0" alt="" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=doosgamcodblo-20&amp;l=as2&amp;o=1&amp;a=1556159005" border="0" alt="" width="1" height="1" /><br />
<strong> </strong></p>
<p><strong>Agile Software Development, Principles, Patterns, and Practices</strong><br />
<a href="http://www.amazon.com/gp/product/0135974445?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0135974445"><img src="http://www.doolwind.com/images/blog/top10books/AgileSoftwareDevelopment.jpg" border="0" alt="" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=doosgamcodblo-20&amp;l=as2&amp;o=1&amp;a=0135974445" border="0" alt="" width="1" height="1" /><br />
<strong> </strong></p>
<p><strong>Refactoring: Improving the Design of Existing Code</strong><br />
<a href="http://www.amazon.com/gp/product/0201485672?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0201485672"><img src="http://www.doolwind.com/images/blog/top10books/Refactoring.jpg" border="0" alt="" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=doosgamcodblo-20&amp;l=as2&amp;o=1&amp;a=0201485672" border="0" alt="" width="1" height="1" /><br />
<strong> </strong></p>
<p><strong>Peopleware: Productive Projects and Teams</strong><br />
<a href="http://www.amazon.com/gp/product/0932633439?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0932633439"><img src="http://www.doolwind.com/images/blog/top10books/Peopleware.jpg" border="0" alt="" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=doosgamcodblo-20&amp;l=as2&amp;o=1&amp;a=0932633439" border="0" alt="" width="1" height="1" /><br />
<strong> </strong></p>
<p><strong>The Mythical Man-Month: Essays on Software Engineering</strong><br />
<a href="http://www.amazon.com/gp/product/0201835959?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0201835959"><img src="http://www.doolwind.com/images/blog/top10books/TheMythicalManMonth.jpg" border="0" alt="" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=doosgamcodblo-20&amp;l=as2&amp;o=1&amp;a=0201835959" border="0" alt="" width="1" height="1" /><br />
<strong> </strong></p>
<p><strong>Design Patterns: Elements of Reusable Object-Oriented Software</strong><br />
<a href="http://www.amazon.com/gp/product/0201633612?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0201633612"><img src="http://www.doolwind.com/images/blog/top10books/DesignPatterns.jpg" border="0" alt="" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=doosgamcodblo-20&amp;l=as2&amp;o=1&amp;a=0201633612" border="0" alt="" width="1" height="1" /><br />
<strong> </strong></p>
<p><strong>Software Estimation: Demystifying the Black Art</strong><br />
<a href="http://www.amazon.com/gp/product/0735605351?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0735605351"><img src="http://www.doolwind.com/images/blog/top10books/SoftwareEstimation.jpg" border="0" alt="" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=doosgamcodblo-20&amp;l=as2&amp;o=1&amp;a=0735605351" border="0" alt="" width="1" height="1" /><br />
<strong> </strong></p>
<p><strong>Patterns of Enterprise Application Architecture</strong><br />
<a href="http://www.amazon.com/gp/product/0321127420?ie=UTF8&amp;tag=doosgamcodblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321127420"><img src="http://www.doolwind.com/images/blog/top10books/PatternsOfEnterpriseApplicationArchitecture.jpg" border="0" alt="" /></a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.com/e/ir?t=doosgamcodblo-20&amp;l=as2&amp;o=1&amp;a=0321127420" border="0" alt="" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/top-10-software-development-books/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>How To Make A Game (For Free In XNA)</title>
		<link>http://www.doolwind.com/blog/how-to-make-a-game-for-free-in-xna/</link>
		<comments>http://www.doolwind.com/blog/how-to-make-a-game-for-free-in-xna/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 20:48:52 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[Game Programming]]></category>
		<category><![CDATA[Xbox 360]]></category>
		<category><![CDATA[XNA]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=273</guid>
		<description><![CDATA[Do you want to learn how to make your own computer games?  Not sure where to start?  This step-by-step tutorial shows you how to create your own games for free using XNA.  I’ve been asked by a number of people what the best route to take when learning to develop games.  The following tutorial will [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/xna.jpg"><img class="alignright" title="XNA" src="http://www.doolwind.com/images/blog/xna.jpg" alt="" width="169" height="98" /></a>Do you want to learn how to make your own computer games?  Not sure where to start?  This step-by-step tutorial shows you how to create your own games for free using XNA.  I’ve been asked by a number of people what the best route to take when learning to develop games.  The following tutorial will give you a good start towards creating your first few games for PC and Xbox 360.  I cover the software you’ll need, a list of tutorial both in C# and XNA and other helpful links.</p>
<p><span id="more-273"></span></p>
<p><strong>Software</strong></p>
<p style="padding-left: 30px;"><strong><span style="font-weight: normal; ">1. Download Visual Studio 2008 Express &#8211; <a href="http://bit.ly/VCSExp">http://bit.ly/VCSExp</a></span></strong></p>
<p style="padding-left: 30px;"><strong><span style="font-weight: normal; "><a href="http://bit.ly/VCSExp"></a>2. Download XNA Game Studio 3.1 &#8211; <a href="http://bit.ly/XNAGS31">http://bit.ly/XNAGS31</a></span></strong></p>
<p><strong>Learning C#</strong></p>
<p style="padding-left: 30px;"><strong><span style="font-weight: normal; ">3. Read these C# tutorials</span></strong></p>
<p style="padding-left: 60px;"><strong><span style="font-weight: normal; ">a. C# Station Tutorial &#8211; <a href="http://bit.ly/CSTut1">http://bit.ly/CSTut1</a></span></strong></p>
<p style="padding-left: 60px;"><strong><span style="font-weight: normal; "><a href="http://bit.ly/CSTut1"></a>b. C# WikiBooks &#8211; <a href="http://bit.ly/CSWiki">http://bit.ly/CSWiki</a></span></strong></p>
<p><strong>Learning XNA</strong></p>
<p style="padding-left: 30px;"><strong><span style="font-weight: normal;">4. Read these XNA tutorials</span></strong></p>
<p style="padding-left: 60px;"><strong><span style="font-weight: normal;">a. Introduction &#8211; <a href="http://bit.ly/XNATut1">http://bit.ly/XNATut1</a></span></strong></p>
<p style="padding-left: 60px;"><strong><span style="font-weight: normal;"><a href="http://bit.ly/XNATut1"></a>b. 2D Introduction &#8211; <a href="http://bit.ly/XNATut2D">http://bit.ly/XNATut2D</a></span></strong></p>
<p style="padding-left: 60px;"><strong><span style="font-weight: normal;"><a href="http://bit.ly/XNATut2D"></a>c. 3D Introduction &#8211; <a href="http://bit.ly/XNATut3D">http://bit.ly/XNATut3D</a></span></strong></p>
<p style="padding-left: 30px;">5.<strong> <span style="font-weight: normal;">Look at these starter kits &#8211; <a href="http://bit.ly/XNAKit">http://bit.ly/XNAKit</a></span></strong></p>
<p><strong>Other Links</strong></p>
<p style="padding-left: 30px;"><strong><span style="font-weight: normal;">6. Visit the following for more information on game development</span></strong></p>
<p style="padding-left: 60px;"><strong><span style="font-weight: normal;">a. Gamedev.net &#8211; <a href="http://www.gamedev.net/">http://www.gamedev.net/</a></span></strong></p>
<p style="padding-left: 60px;"><strong><span style="font-weight: normal;"><a href="http://www.gamedev.net/"></a>b. Gamasutra &#8211; <a href="http://gamasutra.com/">http://gamasutra.com/</a></span></strong></p>
<p style="padding-left: 60px;"><strong><span style="font-weight: normal;"><a href="http://gamasutra.com/"></a>c. Indie Gamer Forums &#8211; <a href="http://forums.indiegamer.com/">http://forums.indiegamer.com/</a></span></strong></p>
<p><strong>What should you create?</strong></p>
<p>I&#8217;ve found the best way to learn game development is by creating a full game.  Exactly what game you create depends on what you want to get out of game development.  There are a number of paths I commonly see people taking:</p>
<ul>
<li><strong>Becoming a game programmer</strong> &#8211; The best route here is to take an existing game like Pong, Space Invaders or Mario and recreating it.  The game design done is already complete, allowing you to focus on learning the skills required to code the game</li>
<li><strong>Becoming a game designer</strong> &#8211; Rather than recreating an existing game, come up with a new, simpler design.</li>
<li><strong>Getting a job at a particular game company </strong>- Before you begin your new game, you should find out what technology the company is using.  You are much more likely to be hired by them if you are experienced in their technology suite.  If you&#8217;re unsure of what they use, ask them.  Game companies are always looking for good talent and they&#8217;ll be happy to share the technologies they use with you.</li>
</ul>
<p><strong>Want more?</strong></p>
<p>I’d like this list to become a comprehensive, step-by-step introduction to game development that takes developers from zero experience to creating their own 3D (or 2D) games.  If you get to a point where you’re stuck and don’t know what to do next, please email me and I’ll help you fill in the blanks.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/how-to-make-a-game-for-free-in-xna/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Unified Game Development Scripting Language</title>
		<link>http://www.doolwind.com/blog/unified-game-development-scripting-language/</link>
		<comments>http://www.doolwind.com/blog/unified-game-development-scripting-language/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 23:55:13 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Game Engine]]></category>
		<category><![CDATA[Game Programming]]></category>
		<category><![CDATA[Scripting Language]]></category>
		<category><![CDATA[Unreal]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=194</guid>
		<description><![CDATA[What is the best scripting language for game development?  Every different game engine has its own scripting language making for a difficult choice.  Game programmers have a unified language in C++ however game designers are left with whatever language their engine supports.  I propose a unified scripting language that all engines/platforms can share. Problem When [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/scriptinglanguages.jpg"><img class="alignright" title="Scripting Languages" src="http://www.doolwind.com/images/blog/scriptinglanguages.jpg" alt="" width="86" height="75" /></a>What is the best scripting language for game development?  Every different game engine has its own scripting language making for a difficult choice.  Game programmers have a unified language in C++ however game designers are left with whatever language their engine supports.  I propose a unified scripting language that all engines/platforms can share.</p>
<p><span id="more-194"></span></p>
<p><strong>Problem</strong></p>
<p>When you chose an engine or platform to develop for, you’re locking yourself into its scripting language.  This has the following core problems:</p>
<ul>
<li><strong>Difficult cross platform development</strong>.  Cross platform development is hard      enough without the worry of porting gameplay code.  Gameplay code should not be platform      specific, and therefore there is no reason to have a different language      per platform/engine.</li>
<li><strong>Immature languages</strong>.       With each company re-inventing the wheel when they implement a new      language designers are left with immature languages.</li>
<li><strong>Too many languages</strong>.       Designers must learn a new language whenever they develop for a new      engine/platform.  This increases      development time and reduces fluency in a language.  A designer cannot be free to fully      express themselves until they are fluent in the language they describe      their gameplay in.</li>
</ul>
<p><strong>Solution</strong></p>
<p>The solution to these problems is to have a unified scripting language shared by all engines/platforms.  Written specifically for game development it would take the best of current scripting languages.  The games industry as a whole would “own” the language allowing it to evolve with the needs of the industry as each new generation of hardware is released.</p>
<p><strong>Advantages</strong></p>
<p>There are a number of key advantages for moving towards a unified scripting language.</p>
<ul>
<li><strong>Single gameplay codebase</strong>.       Gameplay doesn’t change dramatically between similar platforms      (e.g. 360 and PS3 or flash and iPhone).       A unified language would allow a single codebase to kept across      multiple platforms helping with porting and maintenance.</li>
<li><strong>Specific to game development needs</strong>.  A language created specifically for game      development could cater to the needs of the industry.</li>
<li><strong>Single language for designers to use.</strong> Small nuances in existing languages can      create major issues for non-programmer designers.  A single unified language reduces these      problems and makes the learning path for students clearer.</li>
<li><strong>Less Wheel Re-Invention</strong>.       An open-source unified scripting language would allow anyone to      submit changes to the language to improve it, rather than re-inventing a      whole new language.</li>
<li><strong>Unified Toolset</strong>.  A      unified set of tools could sit on top of a unified scripting language.<strong></strong></li>
</ul>
<p><strong>Genre Specific</strong></p>
<p>The core language will hold the basic building blocks for all games.  In the future, small libraries can be built by studios or the community for each specific genre.  For example a library of functions common to most FPS or RTS games could be created and shared between developers.   A unified scripting language makes this sharing possible and encourages people to develop well thought out, robust libraries they can reuse from engine to engine.  It also serves to soften the blow for designers when changing engines as their common set of functions will move across with them.</p>
<p><strong>How</strong></p>
<p>There are two main options for the creation of a new unified scripting language:</p>
<ul>
<li><strong>Large studio forks their current language</strong>.  For example Epic could open up Unreal      Script and give out the source code for its implementation (let&#8217;s call it      OpenUnrealScript).</li>
<li><strong>Community Driven</strong>.  A      simple codeplex/google code project with a couple of leaders and a team of      developers would allow for rapid development, while meeting the needs of      multiple teams.  Early adopters      would drive the initial feature-set and help to drive its development.<strong></strong></li>
</ul>
<p><strong>Conclusion</strong></p>
<p>My dream is to see the next generation of consoles and other platforms (PC, iPhone, Flash) all supporting a unified language.  I&#8217;m interested in people&#8217;s thoughts on this idea and candidates for which language to use.  It&#8217;s less about language features and just agreeing on a core language everyone can use to develop games and bring all developers onto the same page.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/unified-game-development-scripting-language/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Doolwind&#039;s Game Coding Standard</title>
		<link>http://www.doolwind.com/blog/doolwinds-game-coding-standard/</link>
		<comments>http://www.doolwind.com/blog/doolwinds-game-coding-standard/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 22:37:05 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Game Programming]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=93</guid>
		<description><![CDATA[For some time now I&#8217;ve been asked by a few people to write up my thoughts on a coding standard. To me, coding standards are like source control, until you use them you don&#8217;t realise just how awesome they are. Coding standards are a requirement for large software teams, however even if you are working [...]]]></description>
			<content:encoded><![CDATA[<p align="left"><img src="http://www.doolwind.com/images/blog/comic/comic-05.jpg" usemap="#Map" align="right" border="0" height="230" width="300" /><br />
<map name="Map" id="Map">
<area href="http://www.squidtank.com" shape="rect" coords="91,191,300,229" /></map>
<p>For some time now I&#8217;ve been asked by a few people to write up my thoughts on a coding standard.  To me, coding standards are like source control, until you use them you don&#8217;t realise just how awesome they are.  Coding standards are a requirement for large software teams, however even if you are working alone I&#8217;d recommend adopting at least a simple coding standard.Keeping code consistent and readable is helpful when reading other people&#8217;s code as well as when reading your own code weeks or months are it was written.  In effect a coding standard is trading development time for maintainability time.  I&#8217;ve found that the ratio of dev time to maintenance time grows from 1:1 on a small project to something approaching 1:∞ on larger projects.</p>
<p><span id="more-93"></span></p>
<p>I&#8217;d like to formally thank <a href="http://www.somedude.net/gamemonkey/forum/viewtopic.php?f=12&amp;t=377">Greg</a> for showing me the light on a lot of these points.  I&#8217;ve spoken previously about <a href="http://www.doolwind.com/blog/?p=61">pair programming</a> and just generally mixing the experience level of developers to help the younger ones.  I think that these kinds of relationships are invaluable for making great programmer as it&#8217;s something that you just can&#8217;t pick up from textbooks or coding by yourself.</p>
<p>As always, please add your thoughts and complaints.  I think that just talking about these issues is a good step in growing as a software developer, even if everyone doesn&#8217;t always agree.</p>
<h3><strong>General Tips</strong></h3>
<p><strong>1.       </strong><strong>Be consistent</strong></p>
<p>This is the golden rule with coding standards in any language.  Every other rule below is pointless unless there is consistency.  If you completely disagree with all of my points below that&#8217;s fine, so long as you set out a standard, and everyone conforms to it.  The only thing worse than a bad coding standard is not having one or having one that isn&#8217;t followed by everyone.</p>
<p>This can be an issue for some programmers as their ego&#8217;s get in the way however it&#8217;s vitally important that everyone follows the standard otherwise it will quickly turn into bedlam.  This consistency should ideally cross both the programmer boundary and the project boundary.  It will be much harder to have consistency between projects, however if this can be achieved, any programmer within the company can switch projects freely (even if only to assist briefly).  This also increases efficiency on new projects when programmers who haven&#8217;t worked together already have this coding standard in common.</p>
<p><strong>2.       </strong><strong>Get everyone involved</strong></p>
<p>To get the best &#8220;buy-in&#8221; and to reduce friction amongst the team, it&#8217;s important to get everyone involved in the discussions.  I&#8217;d recommend writing up the standard once &#8220;complete&#8221; and passing it around as the first draft.  Giving people plenty of time to comment also gives leaders more ammunition when enforcing the standard.  If people can voice their thoughts on the subject they are more likely to follow the standard in the future.</p>
<p>There is always going to be the inevitable ideological disputes where programmers won&#8217;t be able to come to a conclusion.  There are really two options here:</p>
<blockquote><p>i. Military style: The highest ranked programmer makes a decision, and everyone follows suit.  This may be the only way to solve the most ideological debates but has the side effect of lowering morale.</p></blockquote>
<blockquote><p>ii. Politician style: Both sides put their case forward and the entire team (or key members) vote on which to choose.</p></blockquote>
<h3><strong>Specific Tips</strong></h3>
<p><strong>3.       </strong><strong>Curly braces &#8211; on the next line</strong></p>
<p><code><font color="#0000ff">if</font> (condition)<br />
{<br />
}</code></p>
<p>This is pretty much the standard I&#8217;m seeing everyone use these days.  There are some strange lecturers and Java programmers that keep the brace on the same line, but otherwise most people seem to have unofficially agreed to this.  This has the added advantage of allowing the condition to be commented out quickly (using //)</p>
<p>Negative: It takes up less space having it on the same line.<br />
Response: It makes code far more readable, and white space is free and should be used.</p>
<p><strong>4.       </strong><strong>Always put curly braces in</strong></p>
<p>The main reason for this is that it reduces errors in code such as a macro hiding the fact its multiple statements.  The secondary reason is for maintainability.  If the single statement becomes multiple statements it takes longer to update, and can lead to errors if people miss adding the braces.</p>
<p>Negative: It saves time to leave braces out.<br />
Response: Saving time at the expense of readability is bad.  If all conditions/loops have braces then the source will be far more consistent.</p>
<p>Negative: It takes up less space without braces and more code can fit on the screen.<br />
Response: Fitting more code on screen is not as important as having error free, maintainable code.  As desktop resolutions increase this argument holds even less weight.</p>
<p><strong>5.       </strong><strong>Prefix members and arguments</strong></p>
<p><code><span style="color: #0000ff">class</span> MyClass<br />
{<br />
<span style="color: #0000ff">  int</span> m_myInt;<br />
};</code></p>
<p><code><span style="color: #0000ff">void</span> MyFunction( <span style="color: #0000ff">int</span> a_myParam )<br />
{<br />
}<br />
</code></p>
<p>Firstly, adding these prefixes is NOT Hungarian notation.  Rather than describing the type of a variable adding these prefixes gives context about what the variable is.  This context is the key reason for adding prefixes.  Prefixes make it easier to build a map in your mind of what the code is doing as you can quickly tell what variables are arguments/parameters, which are members and which are simply local variables.  You can also add g_ to globals, however I&#8217;d be advocating the use of globals then J.</p>
<p>If m_ and a_ are too verbose then the alternative is simply appending m and a.</p>
<p><code><span style="color: #0000ff">void</span> MyFunction( <span style="color: #0000ff">int</span> aMyParam )<br />
{<br />
}</code></p>
<p>Personally, I prefer the full prefix (m_) as it makes the code more readable, and it follows the convention of the first character of the variable name being lower case.</p>
<p>Negative: With modern IDE&#8217;s you can mouse over variables to get extra information<br />
Response: Mousing over is slower than simply perusing code.  The information given is usually just the type which doesn&#8217;t give context, it only gives further information.</p>
<p>Negative: It takes too long<br />
Response: Again, readability is more important than saving a few seconds on typing</p>
<p>Negative: Underscore is hard to type<br />
Response: Once you&#8217;ve been using it for a while it becomes quite natural.  Also with tools like visual assist the underscore can automatically be added in for you.</p>
<p><strong>6.       </strong><strong>Put modifiers (* and &amp;) next to variable type rather than variable name</strong></p>
<p><code>MyClass*             myVariable;</code></p>
<p>This point actually goes against what I am seeing most people using in their coding standards at the moment.  It also goes against what I was taught at university (whether that&#8217;s bad or not I don&#8217;t know).  Before you dismiss it though, I recommend you actually sit and think about the alternatives and why you would use them.  The modifier (pointers or reference) is modifying the type of the variable and therefore it should be placed next to the type itself.  The negative to this is one I gave when first taught this, however after thinking about it I realised the error of my ways.</p>
<p>Negative: The modifier should go next to the variable name as it is misleading if you declare multiple variables per line.  In the example below, the first variable is a pointer and the second is not, this is misleading.</p>
<p><code>MyClass*             myPointerVariable, myNonPointerVariable;</code></p>
<p>Response: Declaring multiple variables on one line is really the exception to the rule.  Should you be making a decision about based on the exception or the rule?  If there are any modifiers like this, don&#8217;t declare them on the same line.  The worst issue here is a bit of extra typing and more screen real-estate being used up, neither of which should be an issue.  Having the pointer next to the variable name makes it harder to reader when skimming over code, particularly if there are a number of spaces (or tabs) between the type and name.</p>
<p><strong>7.       </strong><strong>Create const on functions and function arguments where appropriate</strong></p>
<p>Const correctness for variables is a bit like cleaning your teeth.  It&#8217;s annoying to do, but everyone agrees that you should do it.  There are three main benefits:</p>
<blockquote><p>i. More descriptive code.  A quick look at a function tells you whether it changes the state of an object, and whether it changes the state of any variables passed in.</p></blockquote>
<blockquote><p>ii. Faster code.  Giving the compiler more information about constness allows it to optimize your code.</p></blockquote>
<blockquote><p>iii. Less errors.  If a function or argument is const then anyone changing the function will get compile time errors if they do something the function was never intended to do.</p></blockquote>
<p><strong>8.       </strong><strong>Conditions/Loops should have a space after them</strong></p>
<p><code><span style="color: #0000ff">if</span> (myVar)<br />
{<br />
}<br />
</code></p>
<p>This is the most readable way of writing conditional and loop statements I&#8217;ve seen.  I personally recommend this usage, however the main reason for this point is to get you thinking about how it should be done.  If you disagree, that&#8217;s fine, just make sure you remember point #1 and decide how you want your code to look and keep it consistent.</p>
<p><strong>9.       </strong><strong>Camel case variables, capitalize classes and functions and full capitalize constants</strong></p>
<p>I&#8217;ll finish up with an easy one.  Most people agree with this standard but I thought I&#8217;d list it anyone.  The best way to show this is with examples:</p>
<p>Variable:</p>
<p><code><span style="color: #0000ff">int </span>myVariableName;     <span style="color: #339966">// camel case</span><br />
</code><br />
Class and functions:</p>
<p><code><span style="color: #0000ff">class</span> MyClassName {} ; <span style="color: #339966">// camel case with capital first</span><br />
<span style="color: #0000ff">void </span>MyFunctionName();</code></p>
<p>Constants:</p>
<p><code><span style="color: #0000ff">const int</span> MY_CONSTANT_NAME = 5;</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/doolwinds-game-coding-standard/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Creating Good Software Development Teams</title>
		<link>http://www.doolwind.com/blog/creating_good_software_development_teams/</link>
		<comments>http://www.doolwind.com/blog/creating_good_software_development_teams/#comments</comments>
		<pubDate>Tue, 22 Apr 2008 06:26:56 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Game Development Teams]]></category>
		<category><![CDATA[Game Programming]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=92</guid>
		<description><![CDATA[Below is a short list on how I believe managers can foster a good software development team. 1. Fire bad programmers (and don&#8217;t hire them) I decided to start with the controversial one; however it&#8217;s one of the most important. Nearly every team I&#8217;ve worked on has had someone on it that should have been [...]]]></description>
			<content:encoded><![CDATA[<p><img usemap="#Map" src="http://www.doolwind.com/images/blog/comic/comic-04.jpg" border="0" alt="" width="300" height="200" align="right" /></p>
<p><span id="more-92"></span></p>
<map id="Map" name="Map">
<area shape="rect" coords="92,169,336,221" href="http://www.squidtank.com" /></map>
<p>Below is a short list on how I believe managers can foster a good software development team.</p>
<p><strong>1.  Fire bad programmers (and don&#8217;t hire them) </strong></p>
<p>I decided to start with the controversial one; however it&#8217;s one of the most important.  Nearly every team I&#8217;ve worked on has had someone on it that should have been fired but the company just wouldn&#8217;t do it.  There are many benefits to be made from firing the bad programmers, some of which aren&#8217;t immediately obvious.</p>
<blockquote><p>a. The obvious one is that bad programmers add bad code.  This in turn causes more work for the rest of the team, adds to maintenance time and pushes deadlines back.  This also leads to software entropy where good programmers will be forced to work with bad code which often encourages other bad code.</p></blockquote>
<blockquote><p>b. They bring the morale of the team down.  Any good programmer can pick a bad programmer after only a few weeks of working with them.  It&#8217;s very demoralising to be forced to work with someone that is no good, particularly if they are getting paid just as much, or more than the good programmers.</p></blockquote>
<blockquote><p>c. They teach bad habits.  Keeping bad programmers on gives new programmers bad influences to look to for support.  By letting them stay on within the team, managers are basically saying that they don&#8217;t mind having bad programmers working for them.  It makes it hard to foster good quality coding standards when members of the team are openly ignoring them.</p></blockquote>
<p>The only caveat to this is mid-development of a product.  It may be detrimental in the short term to remove bad programmers immediately; however this often turns into apathy where the programmer simply stays on to the next project or milestone.  Look at the schedule and actually mark off when the time is right to remove them.  Once this date comes around bite the bullet and get rid of them.</p>
<p><strong>2.  Give rewards</strong></p>
<p>I&#8217;m surprised how many programmers when asked how work is going will mention certain perks or rewards they receive from their bosses.  This can be anything from having a few days off after record profits to free food/beer/game nights once a week.  One of the biggest problems with &#8216;working for the man&#8217; is that there&#8217;s no direct connection between the quality of work programmers do and their rewards.  This was one of the key points in Office Space and every programmer I speak to has had this problem at some stage in their career.  The main purpose here is to tie the success of the company to the employee&#8217;s that are creating this success.  It can range from profit sharing to simply taking everyone out for a big meal (with free drinks for those inclined) after meeting a big milestone.</p>
<p>In the grand scheme of things it doesn&#8217;t end up costing much, and the productivity benefits returned will easily pay the rewards back many times over.</p>
<p><strong>3.  Give good direction</strong></p>
<p>There&#8217;s nothing worse than having a project that&#8217;s just aimlessly drifting towards it&#8217;s goal.  There need to be set goals that the entire project is working towards as well as sub-goals for each individual team.  Programmers are logical, methodical people and they like order in their lives.  The more you can make the project&#8217;s direction fit in with this view the more the programmers will &#8216;buy in&#8217; on the future direction.</p>
<p>Programmers will look at the project as if it were a program in itself.  There&#8217;s a bunch of commands the team is following (create the UI), with conditions (if there&#8217;s time, add in flashy feature 53) and iteration (each milestone).  If you can learn to think like programmers do and show the direction of the project in a way they&#8217;ll understand you&#8217;ll see productivity gains.</p>
<p><strong>4.  Be transparent</strong></p>
<p>I touched on this in an <a href="http://www.doolwind.com/blog/?p=88">earlier post</a>, so I&#8217;ll keep this one short.  Basically let the team know what&#8217;s happening within the company.  You don&#8217;t have to give them every detail, but make sure that the important information is propagated.  This can be as simple as a company newsletter or an internal website that has the news.  Those who are interested can stay up to date and others who don&#8217;t care can just ignore it.  People often worry about their jobs and not knowing what is happening can often lead to a drop in productivity.</p>
<p><strong>Conclusion</strong></p>
<p>I&#8217;d like to hear from people if they have other ideas or whether people agree or disagree with my list.  As things move forward with the business we&#8217;re hoping to set up a software team in the near future so I&#8217;ll start posting on how implementing these and other ideas I&#8217;ve blogged about works out in reality.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/creating_good_software_development_teams/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>New Rendering Technique (Light Indexed Deferred Lighting)</title>
		<link>http://www.doolwind.com/blog/new-rendering-technique-light-indexed-deferred-lighting/</link>
		<comments>http://www.doolwind.com/blog/new-rendering-technique-light-indexed-deferred-lighting/#comments</comments>
		<pubDate>Wed, 16 Jan 2008 05:34:27 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Game Programming]]></category>
		<category><![CDATA[Rendering]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=90</guid>
		<description><![CDATA[A good friend of mine Damian Trebilco has just made public his new rendering technique. It takes the best parts of forward and deferred rendering. A paper on the technique as well as a demo showing it off are available at his Google Code page. The demo (shown in the screenshot) renders a scene with [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/lidr.jpg"><img src="http://www.doolwind.com/images/blog/lidr.jpg" alt="" hspace="10" vspace="10" width="184" height="136" align="right" /></a>A good friend of mine <a href="http://glintercept.nutty.org/links.html">Damian Trebilco</a> has just made public his new rendering technique.  It takes the best parts of forward and deferred rendering.  A paper on the technique as well as a demo showing it off are available at his <a href="http://code.google.com/p/lightindexed-deferredrender/">Google Code</a> page.</p>
<p><span id="more-90"></span></p>
<p>The demo (shown in the screenshot) renders a scene with ~40,000 triangles and 255 lights!  It reaches a staggering 82fps using his LIDR technique compared to 12fps with multi-pass forward rendering.  Using this technique would allow for a far more dynamic environment than we are currently seeing with only a handful of lights in the scene.</p>
<p>This is Damian&#8217;s second amazing achievement, the first being <a href="http://glintercept.nutty.org/index.html">GLIntercept</a>, a program that allows debugging OpenGL calls.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/new-rendering-technique-light-indexed-deferred-lighting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What Auran Did Wrong</title>
		<link>http://www.doolwind.com/blog/what-auran-did-wrong/</link>
		<comments>http://www.doolwind.com/blog/what-auran-did-wrong/#comments</comments>
		<pubDate>Sat, 12 Jan 2008 02:59:20 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Auran]]></category>
		<category><![CDATA[Game Programming]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=88</guid>
		<description><![CDATA[Auran Developments went into liquidation late last year. Many of us saw it coming for at least a few months, if not years. Below are my personal thoughts on why Auran went bust. I&#8217;m writing this to try and help other struggling software or game development stduios from ending up in the same way. To [...]]]></description>
			<content:encoded><![CDATA[<p><img usemap="#Map" src="http://www.doolwind.com/images/blog/comic/comic-02.jpg" border="0" alt="" width="300" height="145" align="right" /></p>
<map id="Map" name="Map">
<area shape="rect" coords="138,167,336,221" href="http://www.squidtank.com" />
<area shape="rect" coords="138,120,305,164" href="http://www.squidtank.com" /></map>
<p><span id="more-88"></span></p>
<p>Auran Developments went into liquidation late last year.  Many of us saw it coming for at least a few months, if not years.  Below are my personal thoughts on why Auran went bust.  I&#8217;m writing this to try and help other struggling software or game development stduios from ending up in the same way.</p>
<p>To get the legal stuff out of the way.  When I mention &#8220;Auran&#8221; I&#8217;m talking about <em>Auran Developments</em>.  That is the company who hired me, and the only one I ever really had any interaction with.  <em>Auran Games</em> et al. are still running fine and have nothing to do with the following article.</p>
<h3><strong>Listen</strong></h3>
<p>The first main problem was that <strong>Auran wouldn&#8217;t listen to anyone</strong>.  This was the core problem I see as its tentacles really reached out and touched every part of the company.  I don&#8217;t know how many people would talk to me about how they&#8217;d made a suggestion months or years earlier only to have it ignored and then the exact problem they foresaw coming up.  While it&#8217;s important that people high up are the ones making the decisions to direct the company, they also need to know where their weaknesses are and seek advice from the best people in each field.</p>
<p>When I started at Auran there were a LOT of extremely talented people that had thoughts on the direction the company should take.  Unfortunately, most of their requests were ignored, and the majority of people simply left the company as they could see that the wrong decision was being made.  By listening to people who are skilled in their particular field, they would have been able to keep these skilled people on, further increasing the company&#8217;s chances of success.  The bottom line is that good people have good advice, and not listening has a twofold problem.  The company fails because <strong>they don&#8217;t do the right thing </strong>AND <strong>they lose the good people giving out this advice</strong>.</p>
<h3><strong>Keep Good People</strong></h3>
<p>This leads into the second problem, the number of great employee&#8217;s I saw leaving was astounding.  This also has a snowball effect because <strong>when great, senior, people leave everyone below them wonders if there&#8217;s something they don&#8217;t know about</strong>.  For me, the first sign that something wasn&#8217;t quite right was when one of the star graphics programmers informed Auran he was going to leave if he wasn&#8217;t put on something interesting.  This guy (while never admitting it himself) was basically Carmack 2.0.  He is the kind of person that good companies would give almost anything to have on their team.  However, at Auran, they just let him slip away even after giving them a direct option to resolve the problem.  The other problem was when the three leads (programming, art and QA) all resigned within a couple of weeks of each other.</p>
<h3><strong>Be Transparent </strong></h3>
<p>The other main problem was the <strong>lack of transparency and communication</strong>.  It&#8217;s vital, for any software project that crucial information flows down to &#8220;the trenches&#8221;.  There&#8217;s nothing worse than reading in a magazine or website that the company is in trouble, or that it&#8217;s just received another round of funding from investors.  Many companies have this problem, where you need to be on the grape vine to find out information that directly affects your job and your life.  This was compounded at the end when people were literally sitting around waiting to find out if they were fired or not.</p>
<p>The transparency part comes from sharing the vision and direction of the company with all staff members<strong>.  Most of us had to simply guess what would be happening in the coming months</strong>.  Part of this problem comes from having the wrong people too high up in the chain of command.  As soon as you have less qualified people above more qualified there&#8217;s going to be both conflict and misdirection with the company.</p>
<h3><strong>The B team</strong></h3>
<p>I was part of a second team at Auran (not Fury).  Let&#8217;s call it the &#8220;B Team&#8221;.  This team worked really well together, produced a great product in a short time and was ready to move onto producing more great products.  What&#8217;s the logical step Auran should have taken? Good companies know that <strong>good people are hard to find</strong> (and even harder to replace).  <strong>Good teams though, they are like the holy grail of software development</strong>.  If you have a good team, you do anything you can to hold onto it, foster it and mainly, make a crap load of money from it.</p>
<p><strong>Not so at Auran</strong>.  We were broken up, forced to work on crappy projects that we would rather resign than work on (as was the case in my situation).  A number of people pleaded with Auran to keep us together and to make money from us.  <strong>That&#8217;s all we wanted to do, work together in a great team making money for Auran</strong>.  It seemed this direction was not the same as Auran&#8217;s.</p>
<h3><strong>Don&#8217;t Keep All Your Eggs In One Basket</strong></h3>
<p>The next big issue was focussing on one single product.  I&#8217;m not going to get into whether Fury was a good game or not.  Either way, it is too much to risk an entire company on a single game.  I heard this almost daily from people around the company, but no one would listen.  Generally, when an age old <a href="http://dictionary.reference.com/browse/Don't%20put%20all%20your%20eggs%20in%20one%20basket?r=14">proverb</a> is written about something, it&#8217;s a good sign that you should heed its advice.</p>
<p>The games industry is a hit driven industry which means there&#8217;s a great chance you won&#8217;t succeed off a single product.  Sure, <strong>there&#8217;s a chance you could make it to the big time, but there&#8217;s a far higher chance all your employees could be jobless just before Christmas</strong>.</p>
<h3><strong>Software Development, It&#8217;s Hard!</strong></h3>
<p>Finally it just comes down to software development.  Software Development is really hard.  Personally, I love it; I&#8217;ve found what I want to do for the rest of my life.  I&#8217;ve also come to the conclusion that I&#8217;ll spend the rest of my life trying to do it perfectly, and never succeed.  There&#8217;s no <a href="http://en.wikipedia.org/wiki/No_Silver_Bullet">&#8220;silver bullet&#8221;</a> and you certainly can&#8217;t treat it like running a regular non-tech company.  While software development is relatively young, compared to the other schools of engineering, it&#8217;s also full of great techniques.  <strong>Unfortunately, most of these weren&#8217;t employed at Auran</strong>.  Good games development practices weren&#8217;t employed either.  I&#8217;m a strong believer of making a game fun, then working out how to finish off the &#8220;extra bits&#8221;.</p>
<h3><strong>Conclusion</strong></h3>
<p>So that&#8217;s what I see that Auran did wrong.  I don&#8217;t blame any individual people and I don&#8217;t think that anything can be gained from doing so.  I loved a lot of my time working at Auran; it was the dream company I&#8217;d wanted to work at since Dark Reign came out when I was in high school.  I did a lot of soul searching when I decided to resign, and it made me really depressed to think of what could have been.</p>
<p>If I had to put down one single moment when I knew it was over, it was a lunch time in September sitting in one of the back rooms with Shauno, the artist on my team.  I was flicking through the booklets of Dark Reign with every newspaper clipping relating to it.  I remembered back to when I read those very newspapers/magazines 10 years earlier and what I had dreamed working at Auran would be like.  I compared it to what was happening at the time, and the decision was pretty much made for me.  I&#8217;d like to thank everyone I worked with at Auran, and I hope that others can learn from the mistakes made and we can see the Australian games industry flourish in the coming years.</p>
<p>The picture for this blog was done by <a href="http://www.squidtank.com">Shauno</a> again.  It&#8217;s actually based off the <a href="http://www.doolwind.com/images/blog/farewall.jpg">original picture</a> he drew for my farewell card when I resigned.</p>
<p><script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/what-auran-did-wrong/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
	</channel>
</rss>
