<?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>Programming Matters</title>
	<atom:link href="http://programmingmatters.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://programmingmatters.com</link>
	<description>My thoughts on all things technical, programming and otherwise</description>
	<lastBuildDate>Wed, 21 Dec 2011 12:30:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Review of Apache Axis2 Web Services 2nd Edition by Deepal Jayasinghe &amp; Afkham Azeez</title>
		<link>http://programmingmatters.com/review-of-apache-axis2-web-services-2nd-edition-by-deepal-jayasinghe-afkham-azeez/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=review-of-apache-axis2-web-services-2nd-edition-by-deepal-jayasinghe-afkham-azeez</link>
		<comments>http://programmingmatters.com/review-of-apache-axis2-web-services-2nd-edition-by-deepal-jayasinghe-afkham-azeez/#comments</comments>
		<pubDate>Fri, 13 May 2011 20:01:37 +0000</pubDate>
		<dc:creator>Steve Riley</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://programmingmatters.com/?p=50</guid>
		<description><![CDATA[I just recently had a chance to read Apache Axis2 Web Services 2nd Edition by Deepal Jayasinghe &#38; Afkham Azeez.  I really didn&#8217;t know much about deployable java frameworks for web-service integration and this book quite effectively taught me a lot. &#8230; <a href="http://programmingmatters.com/review-of-apache-axis2-web-services-2nd-edition-by-deepal-jayasinghe-afkham-azeez/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://programmingmatters.com/wp-content/uploads/2011/05/1568_Apache-Axis2cov.png" rel="nofollow"><img class="alignright size-thumbnail wp-image-54" title="1568_Apache Axis2cov" src="http://programmingmatters.com/wp-content/uploads/2011/05/1568_Apache-Axis2cov-125x150.png" alt="" width="125" height="150" /></a>I just recently had a chance to read Apache Axis2 Web Services 2nd Edition by Deepal Jayasinghe &amp; Afkham Azeez.  I really didn&#8217;t know much about deployable java frameworks for web-service integration and this book quite effectively taught me a lot.  Axis2 seems to be a very strong robust framework for implementing web-service solutions, having learned a lot from it&#8217;s initial implementation Axis 1.  The book gives a great breakdown of the history of Apache SOAP, Axis 1 and Axis 2 including the motivations and reasons for each advancing technology.</p>
<p>The first few chapters do a great job of explaining how to install a distribution and give a look around it&#8217;s architecture including it&#8217;s XML and SOAP models.  It shows all the various ways to create and use AXIOM it&#8217;s Axis 2 XML model.  This is followed by chapters explaining the execution chain of the handlers and introducing the concept of a phase; which is a collection of handlers in a prescribed order.  The book continues to give a full understanding of the deployment model and all the various ways to deploy handlers showing both top down and bottom up approaches.  The Axis 2 information model is explained next as it is used in relation to service oriented architectures.</p>
<p>In the following chapters, a thorough explanation is given of how to implement Axis2 services and modules.  The remaining chapters focus on everything you might want to know about the client api, session management and clustering.</p>
<div id="theme" style="display: none;">Find more about <a href="http://phone-cards.olnevhost.net/"><strong>cheap calls to india</strong></a>.</div>
<p>All in all Apache Axis2 Web Services 2nd Edition got me excited about setting up Axis2 on my own server (which I plan to do over the next couple of days) for integrating into my own custom geolocation and visualization applications.  I just recently became familiar with the books at Packt publishing &#8211; but they are quite rapidly becoming one of my preferred publishers and this book is another great addition to their offerings.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingmatters.com/review-of-apache-axis2-web-services-2nd-edition-by-deepal-jayasinghe-afkham-azeez/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Review of OpenSceneGraph 3.0 Beginner&#8217;s Guide by Rui Wang &amp; Xuelei Qian</title>
		<link>http://programmingmatters.com/review-openscenegraph-30-beginners-guide-by-rui-wang-xuelei-qian/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=review-openscenegraph-30-beginners-guide-by-rui-wang-xuelei-qian</link>
		<comments>http://programmingmatters.com/review-openscenegraph-30-beginners-guide-by-rui-wang-xuelei-qian/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 22:24:54 +0000</pubDate>
		<dc:creator>Steve Riley</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://programmingmatters.com/index.php/review-openscenegraph-30-beginners-guide-by-rui-wang-xuelei-qian/</guid>
		<description><![CDATA[When asked to review OpenSceneGraph 3.0: Beginner&#8217;s Guide I was excited to hear that a published book on OpenSceneGraph 3.0 was coming out.  OpenSceneGraph has grown into such a first class tool that it&#8217;s high time some books start hitting &#8230; <a href="http://programmingmatters.com/review-openscenegraph-30-beginners-guide-by-rui-wang-xuelei-qian/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://programmingmatters.com/wp-content/uploads/2011/03/2824_OpenSceneGraph-3.png"><img class="alignright size-thumbnail wp-image-56" title="2824_OpenSceneGraph 3" src="http://programmingmatters.com/wp-content/uploads/2011/03/2824_OpenSceneGraph-3-125x150.png" alt="" width="125" height="150" /></a>When asked to review <a href="http://www.amazon.com/gp/product/1849512825/ref=as_li_tf_tl?ie=UTF8&amp;tag=wsrileycom-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1849512825">OpenSceneGraph 3.0: Beginner&#8217;s Guide</a> I was excited to hear that a published book on OpenSceneGraph 3.0 was coming out.  OpenSceneGraph has grown into such a first class tool that it&#8217;s high time some books start hitting the shelves on how to use it.  The dearth of good published material reminds me a little bit of OpenGl back in 1998 &#8211; it was difficult to find a book on it anywhere outside of the classic red, blue and white books.</p>
<p>This book is called a beginners guide but has useful bits for anyone who seriously uses the library.  OpenSceneGraph is simply amazing; but getting up to speed and just compiling and building can be daunting for the first time user.  OpenSceneGraph 3.0 a Beginner&#8217;s Guide excels in covering all the details in setting things up in the first few chapters and brings out a number of important gotchas that can really cause you to spin your wheels if you miss them.</p>
<p>Chapters 1-3 quickly get you setup and running the sample programs in your build environment.  It&#8217;s obvious that the authors have a preference for Windows but the important Linux information is provided as well.  Chapters 4-9 get you up to speed on the basics of using scene graphs and of course OpenSceneGraph in particular.  It is quite comprehensive covering the basic principles of scene graphs and exploring all the various nuances that you may need to explore &#8211; stereo rending, multiple windows and viewports, etc.  This in addition to covering the core basics of models, animation, lighting, texturing etc.  Chapters 10-12 cover more advanced topics such as plugins, visual components and optimizing the rendering process.  A number of pop quizes throughout the book ask well thought out questions about each chapters topics.</p>
<p>At 385 pages I was highly impressed at the depth and scope of coverage.  The book does indeed deliver on it&#8217;s claims of being accessible for those brand new to OpenSceneGraph; although it does require a firm understanding of C++ of course  - it&#8217;s not a primer on that.  To be frank I almost find the title a bit deceiving &#8211; this book definitely should sit on the shelf of any developer of OpenSceneGraph at any skill level.</p>
<p>I look forward to hearing back from others who have read and used this book.  I would recommend a cover to cover read for any OpenSceneGraph user.</p>
<p>The publishers site for this book is available for your perusal <a title="OSG Book" href="http://www.packtpub.com/openscenegraph-3-0-beginners-guide/book" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingmatters.com/review-openscenegraph-30-beginners-guide-by-rui-wang-xuelei-qian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>24 years of game programming: thrills, chills and spills: part 3 of 3</title>
		<link>http://programmingmatters.com/24-years-of-game-programming-thrills-chills-and-spills-part-3-of-3/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=24-years-of-game-programming-thrills-chills-and-spills-part-3-of-3</link>
		<comments>http://programmingmatters.com/24-years-of-game-programming-thrills-chills-and-spills-part-3-of-3/#comments</comments>
		<pubDate>Wed, 16 May 2007 02:37:23 +0000</pubDate>
		<dc:creator>Steve Riley</dc:creator>
				<category><![CDATA[Game Industry]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://eureka3d.com/blog/2007/24-years-of-game-programming-thrills-chills-and-spills-part-3-of-3/</guid>
		<description><![CDATA[If you haven’t read the first and second parts of this article, you’ll probably want to check them out here and here. So I was working with a company that did 3D development for games! It was 1998 and things &#8230; <a href="http://programmingmatters.com/24-years-of-game-programming-thrills-chills-and-spills-part-3-of-3/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>If you haven’t read the first and second parts of this article, you’ll probably want to check them out <a href="http://eureka3d.com/blog/?p=22">here </a>and <a href="http://eureka3d.com/blog/2007/24-years-of-game-programming-thrills-chills-and-spills-part-2/">here</a>.<br />
</em></p>
<p>So I was working with a company that did 3D development for games!  It was 1998 and things were still fresh and new in that area.  The three API&#8217;s of mention were Glide, Direct 3D and OpenGL.  I was working with some amazing artists and programmers and was glad to be learning more about the ins and outs of 3D development and tools.  This was my first taste of a scene graph using Paradigm Entertainment&#8217;s Viskit.  Scene Graphs are amazing things &#8211; and I was learning everything I could.  Viskit was based on SGI&#8217;s Performer and like OpenGL &#8211; they had done something really, really right when crafting this API.  Viskit sat effortlessly on top of OpenGL or Direct3D.  I ended up working quite a bit on our Multigen loader to get all the bells and whistles supported.  We used Max for our prerendered scenes but at this point Multi-Gen creator was huge in developing real-time models.  It was a great app that made both programmers and artists feel immediately at home.  Scene Graph nodes could be mapped very easily to Multi-Gen nodes.  It was a perfect match.</p>
<p>As usual my dedication ran high.  I was able to entice a truly stellar programmer from my time in NJ to live with me a significant portion of the month so he could code on the team as well.  I worked with two artists that two this day I have to say are second to none. We created an amazingly beautiful world with truly stunning environmental effects.  It was enthralling.  In the end though small companies with only one project are fraught with peril.  In 2000 Aeon closed it&#8217;s doors and my love for Viskit took me to my next job at console developer Paradigm Entertainment.  They had built a version of Viskit that ran on all the next-gen consoles including the X-Box, Game Cube, PS/2 and even the dreamcast.  It could still be baselined on the PC as well. This was my first time working with consoles &#8211; a fixed format machine, finally!<br />
It was now 2000 and I found myself in Dallas, Texas,  In typical game industry fashion several weeks after joining Paradigm they sold themselves to Infogrammes.  However, they still were able to call their own shots for my time at the company.  It was awesome having 3 or 4 teams working with 3D technology for multiple consoles.  This technology was developed by a dedicated core technology group &#8211; I hadn&#8217;t been lucky enough to work with a company big enough to have this luxury before.  They were the think tank of the company always getting all the heavy pressures but coming up with some truly stunning innovations.  All of our artists were using Maya &#8211; which worked well, it supported a group hierarchy for scenes like Multi-Gen creator had previously.</p>
<p>Consoles are truly outstanding beasts to develop for.  In all the years of working on the PC I had always dreamed of being able to develop for fixed platforms.  You could know that once your testing was done it was good to go &#8211; no surprises based on machine configurations later in the pipeline.  C++ was still the defining factor in game programming, although plenty of PS/2 code was written in Microcode as well.  Common acceptance of scripting languages for high level prototyping was still a few years off.  The best part about working at Paradigm was access to resources.  When teams ramped up they could have 8-10 artists and almost as many coders.  Things could really come together fast.<br />
2003 found me back in Virginia where I started working for ITSpatial &#8211; a company that  did 3D representations of cities a la Google Earth &#8230; before Google Earth had been around.  In fairness there was Keyhole, but what ITSpatial offered was a different kind of thing all together.  ITSpatial built a product that provided data integration and fusion in an environment that supported 2D and 3D mapping.  This was perfect for command and control applications, situational awareness and emergency training.  It was really one big serious game and had many of the elements of a full fledged game development effort and content production pipeline.  The only thing difference was the price point of the product and the number of shipping units.</p>
<p>ITSpatial was strong and knew a lot about sales and business development.  They were phenomenal sales people.  I will always be amazed at how effortlessly they were able to get potential clients in the building, looking at demos &#8211; 3 or 4 times a week some weeks.  They really were devoted to finding and wooing clients.  This is a skill I&#8217;ve still got a long way to go on.  I guess in some ways I&#8217;m still 100% a programmer at heart:)</p>
<p>In 2005 I broke away and this time started my own company Eureka 3D, Inc.  I&#8217;m more of a hired gun/contractor with the luck to have access to a lot of other proven hired gun contractors. Eureka3D has worked on entertainment 3D, GIS and I&#8217;ve really boned up on my web programming skills in the last two years.  Deep down inside I&#8217;m still wanting to get back &#8220;into the game&#8221; and sink my teeth into that big 2 year development project.  Right now my pipeline is very full and I really am enjoying what I&#8217;m doing &#8211; so no complaints!</p>
<p>Here we are in 2007.  What have I learned from the game and serious game industry after all these years?  So much&#8230; I&#8217;ve worked with top notch programmers, others who couldn&#8217;t program their way out of a paper bag; I&#8217;ve worked with great artists, and a young up and coming project manager who was one of the sharpest guys I&#8217;ve ever met.  I&#8217;ve worked with some truly genius biz-dev types that knew how to sell and pitch to clients.  In 24 years every theory on project management for software/hardware/games has been debated, turned over and debated again much to my chagrin.  I&#8217;ve seen every element of the business from pitching the contracts, building proof of concepts to final testing and delivery/deployment/distribution.  I&#8217;ve learned a thing or two about politics and how important it is to avoid if at al possible.  I&#8217;ve literally seen programmers in drop-down, drag out fights (visiting programmers from another company no less!).  Religious wars over version control systems, graphics api&#8217;s, and taking on the latest new technology &#8211; been there, seen that.<br />
The main thing I&#8217;ve learned however is that I thrive on the high-intensity, creative, ingenius environment that games and serious games involve.  Finding a team that works well together, or a few truly brilliant individuals makes it all so worth while.  I know I want to keep raising the bar and never lose the adventure.  Because in the end it&#8217;s about the product, the team, and the experience. What an amazing 24 years it&#8217;s been!</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingmatters.com/24-years-of-game-programming-thrills-chills-and-spills-part-3-of-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Top 10 Attributes of a Great Programmer</title>
		<link>http://programmingmatters.com/the-top-10-attributes-of-a-great-programmer/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-top-10-attributes-of-a-great-programmer</link>
		<comments>http://programmingmatters.com/the-top-10-attributes-of-a-great-programmer/#comments</comments>
		<pubDate>Mon, 05 Feb 2007 08:25:14 +0000</pubDate>
		<dc:creator>Steve Riley</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://eureka3d.com/blog/2007/the-top-10-attributes-of-a-great-programmer/</guid>
		<description><![CDATA[With all the latest attention again on what does and doesn&#8217;t make a good programmer, I couldn&#8217;t help but put together my own top 10 list. Being a great problem solver. Being driven and lazy at the same time. Ability &#8230; <a href="http://programmingmatters.com/the-top-10-attributes-of-a-great-programmer/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://programmingmatters.com/wp-content/uploads/2007/02/Thinker3.jpg"><img class="alignright size-medium wp-image-69" title="Thinker" src="http://programmingmatters.com/wp-content/uploads/2007/02/Thinker3-190x300.jpg" alt="" width="190" height="300" /></a>With all the latest attention again on what does and doesn&#8217;t make a good programmer, I couldn&#8217;t help but put together my own top 10 list.</p>
<ol>
<li>Being a great problem solver.</li>
<li>Being driven and lazy at the same time.</li>
<li>Ability to understand other people&#8217;s code</li>
<li>Having a passion for programming</li>
<li>Loving learning for the sake of learning</li>
<li>Being good at math</li>
<li>Having good communications skills</li>
<li>Strong debating skills</li>
<li>Extreme optimism</li>
<li>Extreme pessimism</li>
</ol>
<p><span style="font-size: 16px; font-family: Georgia, 'Bitstream Charter', serif; line-height: 24px;"> </span></p>
<ul></ul>
<p>&nbsp;</p>
<ol>
<li>Being a great problem solver &#8211; Hopefully everyone recognizes this one.  Most good programming is all about being able to find solutions where others can&#8217;t see them.  If you don&#8217;t have this skill the others matter far less.</li>
<li>Being driven and lazy at the same time &#8211; This one surprises some people.  Programmers question things and are often &#8220;too lazy&#8221; to take the long route.  The will spend countless cycles trying to simplify the problem and simplify their task.  That said they having a burning need to get the job done, they just want to do it as efficiently as possible.</li>
<li>Ability to understand other people&#8217;s code &#8211; This point is essential but cuts some good programmers off from being great programmers.  It doesn&#8217;t matter how well you can rewrite everything yourself &#8211; you need to be able to work with other people&#8217;s code on existing projects, lean on opensource in new projects, and learn good techniques from the code base that is already out there.</li>
<li>Having a passion for programming &#8211; on some level you have to love programming for programming&#8217;s sake.  I suppose to be truly great at anything you have to love it in most cases.</li>
<li>Loving learning for the sake of learning &#8211; Programming is a moving target.  Unless you love the art of edification you will sink fast.  There are no laurels to rest on and no one cares what you did yesterday.  Unless you are aware of the techniques on the horizon, you won&#8217;t be ready to embrace them when they become relevant.</li>
<li>Being good at math &#8211; Different people will have different opinions here &#8211; but at the very least having a strong grip on pre-Calculus math.  I&#8217;ve never seen a great programmer without a solid grasp of at the very least algebra and trig.</li>
<li>Having good communications skills &#8211; This doesn&#8217;t mean that they can communicate with anyone and everyone.  Specifically this means that they are able to clearly express their thoughts on their own terms.  I&#8217;ve met plenty of great programmers who couldn&#8217;t communicate well with the world at large. However, given someone to talk to who understands the problem domain, they were all able to clearly state the problem and the solutions proposed.</li>
<li>Strong debating skills &#8211; This follows the same logic as #7.</li>
<li>Extreme optimism &#8211; Great programmers I have encountered have an insane certainty they can get the job done once they have chewed on it a bit.</li>
<li>Extreme pessimism &#8211; Great programmers I have encountered have an insane insistence that when they lack the information needed to make a good judgment that they won&#8217;t be able to make one at all.</li>
</ol>
<ol>After putting together this list some aspects surprised me, and I was the one who put together the list. So let me explain each in detail.These attributes describe those I&#8217;ve found in pretty much every great programmer I&#8217;ve come across. There were a number that fell through the cracks and I&#8217;ll explain those later.&nbsp;</p>
<p>Some of the things I <em>instinctively wanted</em> to put on the list but <strong>couldn&#8217;t say were true</strong> of at least 95% of great programmers include the following:</ol>
<ol>
<li>Being extremely organized &#8211; Understanding when and where organization is important, yes.  But anal attention to detail is something present in great programmers as often as it is people in other disciplines.</li>
<li>Being good at managing other people and or programming projects &#8211; Somehow these skill sets are wonderfully synergistic when they sit side by side, but management and programming are often completely different disciplines.</li>
<li>Being able to write good design documents &#8211; Same as #2.  This skill may make some people better programmers and I am in favor of learning it.  However, plenty of great programmers I have encountered couldn&#8217;t write a coherent design doc if their life depended on it.  This will know doubt be debated by heavily by some.</li>
<li>Having an ability to estimate time frames &#8211; Once again like #2.  This is an acquired skill and a very useful one.  However, I have seen absolutely zero correlation between great programmers and estimation skills.</li>
<li>Prolific reading of tech books &#8211; I do this all the time myself, but many great programmers don&#8217;t.  Let me be clear though &#8211; most programmers who aren&#8217;t all that hot could definitely benefit from bootstrapping their skills with some good reading.</li>
<li>Ability to transfer their programming skills to any programming domain &#8211; Although many can, some great programmers can&#8217;t, or refuse to, grok other programming technologies.  I like to think that this is a &#8220;refuse to&#8221; situation.</li>
<li>Write code that is correct the first time around &#8211; Many great programmers commonly have syntactic issues flagged by compilers or at runtime interpretation.  Some are zealots about the details the first time out, others are much more &#8220;extreme&#8221; in this area.</li>
<li>Having other areas of great skills &#8211; some great programmers are good at only one thing &#8211; programming.</li>
<li>Social or antisocial &#8211; Great programmers come in both forms.</li>
<li>Are someone you&#8217;d want on you team &#8211; Unfortunately some of them just can&#8217;t work with others well.</li>
<p>&nbsp;</ol>
]]></content:encoded>
			<wfw:commentRss>http://programmingmatters.com/the-top-10-attributes-of-a-great-programmer/feed/</wfw:commentRss>
		<slash:comments>73</slash:comments>
		</item>
		<item>
		<title>How SEO will kill google &#8211; or the problem with backlinks</title>
		<link>http://programmingmatters.com/how-seo-will-kill-google-or-the-problem-with-backlinks/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-seo-will-kill-google-or-the-problem-with-backlinks</link>
		<comments>http://programmingmatters.com/how-seo-will-kill-google-or-the-problem-with-backlinks/#comments</comments>
		<pubDate>Sat, 20 Jan 2007 05:09:31 +0000</pubDate>
		<dc:creator>Steve Riley</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://eureka3d.com/blog/2007/how-seo-will-kill-google-or-the-problem-with-backlinks/</guid>
		<description><![CDATA[When the web was young, backlinks were the perfect way to measure a sites popularity. The sites with backlinks were more popular and the sites with backlinks from more popular sites were even more popular as you would expect. And &#8230; <a href="http://programmingmatters.com/how-seo-will-kill-google-or-the-problem-with-backlinks/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>When the web was young, backlinks were the perfect way to measure a sites popularity.  The sites with backlinks were more popular and the sites with backlinks from more popular sites were even more popular as you would expect.  And all was well.</p>
<p>But in today&#8217;s world no matter how much bleach you apply to your white hat, you can&#8217;t get around that little bit of knowledge you&#8217;ve acquired.  Backlinks = success on Google.  And by knowing this and &#8220;exploiting&#8221; this you will knock out those websites that don&#8217;t attempt to do any &#8220;SEO&#8221;.  Your white hat may look white, but really it&#8217;s gray.  You will do all the right things to generate backlinks.  Invariably as much as Google would hate to admit it, this breeds a competitive landscape.  &#8220;You can&#8217;t win if you don&#8217;t play.&#8221;  It has now become essential to &#8220;ethically&#8221; build backlinks in order to get organic Google search results.  And this is very bad for the quality of links on Google&#8217;s search results.</p>
<p>No matter how innocent you try to be, the cat is out of the bag.  It is far to easy to get a large number of &#8220;encouraged&#8221; backlinks to a given site.  When you search on Google the really big players come up first.   And this is good.  They have such a huge number of backlinks that they can pretty much be seen as genuine.  It&#8217;s the middle ground.  The &#8220;long tail&#8221;.  These are the problems.  If a smart developer/designer releases a WordPress theme with a backlink and that theme is used by several hundred people they get lots of page rank.  These wordpress themes can be used on popular blogs with plenty of pagerank themselves.  This is &#8220;white hat&#8221; activity.  But it&#8217;s really intelligently gaming the system.  The SEO gurus know plenty of tricks to get backlinks and PR.<br />
Because of this many Google &#8220;long tail&#8221; searches that are  more specific are filled with SEO&#8217;d sites both white hat and black hat spam.  I know quite a few people who actually are switching to other search engines because of the &#8220;backlink&#8221; spam.  &#8220;Quality backlinks&#8221; are just too easy to get, especially if you are willing to pay money for them.  And that goes on everyday.</p>
<p>Backlinks were a good idea at some point.  Now they are only showing that you are trying really hard.  The people that talk the loudest and the most often aren&#8217;t always the best.  And proliferating backlinks to your site with all the right keywords to game the system doesn&#8217;t mean your content is the best either.  It just means that you are good at generating backlinks.</p>
<p>Until spiders can have a clue what they are parsing it will be hard to impossible to solve this problem and still use backlinks.<br />
Social networks like digg.com, stumbleupon.com and reddit.com are &#8220;the next new thing&#8221;.  By having people vote on pages&#8230; the crap filters to the bottom.  This of course will have it&#8217;s own set of problems &#8211; but invariably will be far better and more accurate than backlinks.  At the end of the day some content will be brilliant and good &#8211; and still be undiscovered.  However more data will yield better results.</p>
<p>How do you really judge the worth of a website?  Is it how many people like it?  The demographics of those people linking to worth for specific topics?  How long people spend on the site itself?  These are fascinating questions that search engines will be forced to answer in upcoming year &#8211; or they will be inconsequential.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingmatters.com/how-seo-will-kill-google-or-the-problem-with-backlinks/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Why Silver Bullets Tarnish Over Time &#8211; New Paradigms Getting Thrashed in the Field</title>
		<link>http://programmingmatters.com/why-silver-bullets-tarnish-over-time-new-paradigms-getting-thrashed-in-the-field/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=why-silver-bullets-tarnish-over-time-new-paradigms-getting-thrashed-in-the-field</link>
		<comments>http://programmingmatters.com/why-silver-bullets-tarnish-over-time-new-paradigms-getting-thrashed-in-the-field/#comments</comments>
		<pubDate>Fri, 19 Jan 2007 07:30:29 +0000</pubDate>
		<dc:creator>Steve Riley</dc:creator>
				<category><![CDATA[Development Philosophy]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Technology]]></category>

		<guid isPermaLink="false">http://eureka3d.com/blog/2007/why-silver-bullets-tarnish-over-time-new-paradigms-getting-thrashed-in-the-field/</guid>
		<description><![CDATA[This concept really applies to much of life, however, computer science in particular. Why is is that new ways of doing things can have remarkable success when they are at &#8220;the discovery stage&#8221; and end up being useful but disappointing &#8230; <a href="http://programmingmatters.com/why-silver-bullets-tarnish-over-time-new-paradigms-getting-thrashed-in-the-field/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This concept really applies to much of life, however, computer science in particular.</p>
<p>Why is is that new ways of doing things can have remarkable success when they are at &#8220;the discovery stage&#8221; and end up being useful but disappointing in the field?  Object oriented programming turns into spaghetti class interdependencies and deep hierarchies in day to day use.  A giant leap forward and two steps back.  Software patterns turn into misuse and abuse of the Singleton pattern and inappropriate shoehorning.  Extreme programming becomes an excuse to write unmaintainable code that passes each and every unit test.  Simplicity becomes an excuse to build things so bare bone as to become unusable.  It seems like each new &#8220;promising technique&#8221; becomes troublesome once it goes mainstream.  Still worth the trouble, but troublesome all the same.</p>
<p>You may find yourself scratching your head about why such issues aren&#8217;t discovered before they gain mass acceptance.  Why when things are in &#8220;the R&#038;D&#8221; phase they perform so well.  Even when these same things are tested in limited circles on &#8220;real world problems&#8221; they continue to seem like the next silver bullet.</p>
<p>The answer unfortunately is as hard to swallow as it is simple. Early on the people developing and working with these new technologies are quite often some of the best in the field and the smartest guys out there.  By the time the concept migrates to the other 90% of the coding world it finds itself slammed against the middle and trailing ugly end of the bell curve.  These portions of the curve will often times misunderstand and misuse the new tools and techniques presented to them.  It&#8217;s during these phases that the backlash usually kicks in.  Guidelines and rules must be created to keep the average programmer from hanging himself with too much rope.</p>
<p>Often times new paradigms go through a few separate stages of development and acceptance.  In stage 1 the really smart R&#038;D types hit it.  These people are actually great at creating new solutions that are both groundbreaking and elegant.  Once these &#8220;conceptual entrepreneurs&#8221; have firmed things up it is ready for stage 2.  In stage 2 the brightest of the &#8220;real world group&#8221; is brave enough to tackle integrating these concepts into production code.  They become evangelists of the techniques they have had so much success with.  Stage 3 involves more risk takers embracing the techniques advocated by stage 2.  They pour over the concepts involved, grok them and integrate them into their code bases.  It&#8217;s at stage 4 that the tide starts to turn.  At stage four the middle of the bell curve is beginning to be pierced.  The new mantra is gaining success.  By stage 5 you have everyone accepting the new paradigm as &#8220;the way to go&#8221; based more on appeal to authority and peer pressure.  At this stage a significant number may not understand the new techniques at all.  They will advocate them but only graft them on top of their existing ways of doing things.</p>
<p>I like to think of myself as a stage 3 integrator.  At this point things have hit my comfort zone and they are worth a try.  I will do everything I can to understand a new technique, but by no means have created it or been the true dare devil integrating it at stage 2 into production code.  Later down the pipe when I see these concepts misused and abused &#8211; I avidly follow the &#8220;shoring up&#8221; techniques to keep people from blowing body parts off my misusing a new technique.</p>
<p>No matter what the latest silver bullet appears to be, it is merely getting it justly deserved 15 minutes of fame during its integration period.  These techniques will live on but the focus will move on.  It&#8217;s important not to throw the baby out with the bath water.  New techniques may disappoint after several years of growth &#8211; but in the end they often stay part of our process.  Object orientation, design patterns, components, agile programming, the list goes on.  Don&#8217;t forget that silver bullets are still bullets even when they tarnish.  Just because a concept hasn&#8217;t completely lived up to its hype doesn&#8217;t make it a great and useful part of your process.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingmatters.com/why-silver-bullets-tarnish-over-time-new-paradigms-getting-thrashed-in-the-field/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>24 years of game programming: thrills, chills and spills: part 2</title>
		<link>http://programmingmatters.com/24-years-of-game-programming-thrills-chills-and-spills-part-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=24-years-of-game-programming-thrills-chills-and-spills-part-2</link>
		<comments>http://programmingmatters.com/24-years-of-game-programming-thrills-chills-and-spills-part-2/#comments</comments>
		<pubDate>Wed, 10 Jan 2007 07:36:21 +0000</pubDate>
		<dc:creator>Steve Riley</dc:creator>
				<category><![CDATA[Game Industry]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://eureka3d.com/blog/?p=24</guid>
		<description><![CDATA[If you haven&#8217;t read the first part of this article, you&#8217;ll probably want to check it out here. 1995 &#8211; Legend Entertainment &#8211; My First Industry Years I was finally working full-time in the game industry at Legend Entertainment and &#8230; <a href="http://programmingmatters.com/24-years-of-game-programming-thrills-chills-and-spills-part-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>If you haven&#8217;t read the first part of this article, you&#8217;ll probably want to check it out <a title="24 Years of Game Programming" target="_blank" href="http://eureka3d.com/blog/?p=22">here</a>.</em></p>
<p><strong>1995</strong> &#8211; Legend Entertainment &#8211; My First Industry Years</p>
<p>I was finally working full-time in the game industry at Legend Entertainment and couldn&#8217;t be more thrilled!  No more sandwiching game coding in between contracting gigs.  I was with a company that has produced a large number of award winning titles, gotten them published and distributed &#8211; all with a company of under 20 people!</p>
<p>I started out coding in Watcom C on a daily basis and working in crunch time on a game called Star Control 3.  I was thrilled working with industry veterans from the Zork era!  We even had an inhouse testing team.  I can honestly say I&#8217;ve never worked at a company that ran as smoothly and without contention as the time I worked at Legend.  There were blips on the radar, but over-all development fell into place extremely well during my years there.  This is a testament to team dynamics.  Get a good team that works well together and keep them together.</p>
<p>I learned so much while at Legend.  These guys were experts at what they did.  It was amazing being able to sit in on the entire development process &#8211; creative, technical and other.  A lot of my best practices I learned while I was at Legend and over the years this feeling never left me.  We&#8217;re talking about game development done the way everyone dreams of it being done.  Projects would often times have just a few coders on them for most of their development cycle.  I can say that I never saw a game canceled while I was at Legend &#8211; and had never heard of one being canceled before I joined them.  They ran lean and mean and couldn&#8217;t afford that kind of wasteful slack.  This had an extremely positive effect on morale needless to say.</p>
<p>At the time we were writing DOS based games that used SVGA libraries to build 256 color 640&#215;480 games.  The WATCOM  compiler let us overcome DOS&#8217; one meg memory barriers and access all of extended memory.  We had to support a dizzying array of low tech video cards and collection of VESA video modes.  But boy was it fun.</p>
<p>From a philosophy standpoint I finally started to get behind the understanding that old rules change. Optimization was still king, but design came first.  Things I had previously considered wasteful were trivial on 486 systems with 4 meg of available memory.  I began to realize that when working with a group of programmers design and communication were of paramount importance.  These things had to be worked at, they just didn&#8217;t fall out naturally.</p>
<p>By 1996 I was coding in C++ in Microsoft (Visual) C++ and we were working on a game library using Direct X 5 for Windows 95.  DirectX was all the rage.  The access to hardware sprites and features was a major boon.  OpenGL was at the time still too high level(slow) and lacked ubiquitous support.  Of course we weren&#8217;t using DirectX for Direct3D at the time.  Direct3D was a few revs a way from being usable.  But uniform driver support for 2D sprites and pages was a major plus in itself.  However 3D was on the horizon and I was very curious.</p>
<p>While I was at Legend I worked on 3 games and saw 5 games ship &#8211; all with a group of under 20 people; including the testing department, customer support and marketing!  I owe them a huge debt of gratitude for everything they taught me and breaking me into the game industry.</p>
<p>By 1997 I would find myself somewhere new.  I had a hunger for cutting edge 3D and a company in NJ was doing that and more.  They were actually producing their own OpenGL compliant hardware for the military using an off the shelf Glint chip (from 3D Labs) and a proprietary in house ASIC they had built for voxelized 3D terrain rendering.   I was now at ASPI!</p>
<p><strong>1997 &#8211; </strong>ASPI<strong><br />
</strong></p>
<p>ASPI was another opportunity to work with a small group of brilliant people.  The engineers that worked on digital logic design considered machine language high level.  They used custom software to produce their own ASIC&#8217;s, soldering them to the boards in-house.  I had already become very sold on object oriented development at the time.  I had definitely drank the cool aid.  I picked up a copy of Design Patterns by the Gang of Four and fell in love with it.  Years later I would spend plenty of time examining the ways that novice coders abused OOP and design patterns.  But in 1997 I was still loving learning all the ins and outs.  I picked the few patterns that fit the API we were developing and got to work.  It took a bit but I got everyone on board with tightly optimized C++ (which at the time many saw as an oxymoron).  I had realized that C++ could give you the low level control to maintain C like speed.  And I liked it &#8211; a lot.</p>
<p>I was now using OpenGL and MESA(an opensource OpenGL) and accepting the fact that on modern machines &#8211; OpenGL definitely was worth the minor performance loss.  Back in those days there were still camps that wanted much lower level access to graphics hardware to eek out every last bit of power.  We even got to write our own custom drivers for MESA under SCO Unix.</p>
<p>The cards were awesome and we ended up calling them the &#8220;True Terrain 3D&#8221;.  The military had a contract to buy them up and deploy them.  They were able to ingest DTED data and use LODed voxel planes to create amazing looking terrain.  We interleaved access to the frame and depth buffers with the Glint chip and OpenGL/Mesa to add polygonal features.  This was in 1997 and at the time polygonal 3D cards couldn&#8217;t come close to generating the terrain that the custom cardset could.  Not in the under $20,000 price range at least.<br />
I loved everyone I was working with but invariably even cutting edge high tech couldn&#8217;t keep me from wanting to go back into the games industry.  Somehow high tech and &#8220;serious games&#8221; were exciting, but games were still in my blood.<br />
By 1999 I was back in the industry working on a submarine sim at Aeon Entertainment in Baltimore.</p>
<p>But we&#8217;ll cover that in part 3&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingmatters.com/24-years-of-game-programming-thrills-chills-and-spills-part-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>How null breaks polymorphism: or the problem with null: part 2</title>
		<link>http://programmingmatters.com/how-null-breaks-polymorphism-or-the-problem-with-null-part-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-null-breaks-polymorphism-or-the-problem-with-null-part-2</link>
		<comments>http://programmingmatters.com/how-null-breaks-polymorphism-or-the-problem-with-null-part-2/#comments</comments>
		<pubDate>Mon, 01 Jan 2007 06:05:42 +0000</pubDate>
		<dc:creator>Steve Riley</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://eureka3d.com/blog/?p=23</guid>
		<description><![CDATA[If you haven&#8217;t read part one you really need to do that first. It&#8217;s here. I got a lot of interesting feedback on part 1 of this topic and found I needed to further explain myself in certain areas. Two &#8230; <a href="http://programmingmatters.com/how-null-breaks-polymorphism-or-the-problem-with-null-part-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>If you haven&#8217;t read part one you really need to do that first.  It&#8217;s <a title="How null breaks polymorphism: the problem with null: part 1" href="http://eureka3d.com/blog/?p=21">here</a>. </em></p>
<p><em>I got a lot of interesting feedback on part 1 of this topic and found I needed to further explain myself in certain areas.<br />
</em></p>
<p><em>Two initial responses to issues brought to me from part 1: </em></p>
<p><em>1. Typed languages </em></p>
<p><em>In languages that aren&#8217;t typed at all, null is no more a problem than any other reassignments as they never care about types.  They all can result in similar issues.  Which in my mind is in fact a problem.  I am definitely a huge proponent compile time type checking.  This is why perhaps I seem so hard on it in part 1.  Compile time checks should be able to help out.<br />
</em></p>
<p><em>2. When functions might not return a value </em></p>
<p><em>There are plenty of times when a function may or may not return a value.  If this is the case the return type should reflect that.  Having null used as a &#8220;magic number&#8221; is not the ideal solution in my mind.  I&#8217;d much rather see a return type that forces the issue to be very clear.  It may seem non-standard but a type masquerading as a collection that potentially has one item seems ideal.  Most any programmer will realize he needs to check the size of a collection before trying to access its first element.  This is no more cumbersome than checking for null &#8211; but seems logically intuitive.  This can be easily optimized so that there is no performance hit in a language like C++ using templates.  A container is intuitive as it can be potentially empty &#8211; this very straightforward.</em></p>
<p><strong>Making the problem even more clear:</strong></p>
<p>I often find it easier to express programming concepts in real world terms.  This helps to reduce them to the absurd when appropriate.  This doesn&#8217;t always work but a lot of times can help look at the problem from a different perspective.</p>
<p>Let&#8217;s take the concept of typical null check behavior and attempt to map it to a real world procedure.</p>
<p>We are going to explore John teaching Norm to drive a car.  The following may sound a little familiar.</p>
<p>John: &#8220;First you are going to need to make sure you have a car.  Do you have a  car?  If you don&#8217;t have a car just return to what you were doing.  I won&#8217;t be able to teach you to drive a car.</p>
<p>&#8220;Norm: &#8220;I have a car.&#8221;</p>
<p>John: &#8220;Let&#8217;s call that car normsCar.  Check to see if your car has a door.  We&#8217;ll call it normsCarDoor.  Does normsCar have a normsCarDoor?&#8221;</p>
<p>Norm: &#8220;Yes&#8221;</p>
<p>John: &#8220;Great, but if you don&#8217;t just skip the rest of this &#8211; I won&#8217;t be able to tell you how to drive a car.&#8221;</p>
<p>Norm: &#8220;I have a car door.&#8221;</p>
<p>John: &#8220;Once you open the door check and see  if it has a seat we&#8217;ll call normsComfySeat.  If you don&#8217;t have a seat skip the rest of this &#8211; I won&#8217;t be able to tell you how to drive a car.&#8221;</p>
<p>Norm: &#8220;I have a seat&#8221;</p>
<p>John: &#8220;Things have changed scope a bit &#8211; can you check whether you have a door again for me &#8211; we called it normsCarDoor?&#8221;&#8230;&#8230;&#8230;..</p>
<p>I think you can see where this is going.  Classes have contracts.  It should be reasonable to talk about a car that always has a door and a seat without having to neurotically check at all times.</p>
<p>Unlike the real world, when we code we make new things up all the time.  So even though seats and doors can be reasonably inferred on cars the things that a UserAgentControl may or may not have probably won&#8217;t be obvious.  Does the UserAgentControl have a ThrottleManager all the time?  If I have a non-nullable class type I can check by looking at the class.  If I get it wrong for some reason maybe I can have the compiler issue a warning.  Maybe I can be forced to &#8220;conjugate&#8221; it with a special syntax every time I use it to help me remember (&#8220;.&#8221; vs. &#8220;->&#8221; in C++).  Or a naming convention.</p>
<p><strong>Why is this such an overarching problem?</strong></p>
<p>It may seem like griping over a simple check for a things existence.  Except this check can conceivably apply to each and every object I can have (or don&#8217;t have).  This makes the issue enormous.  A lot of the time programmers put in checks for null when it seems appropriate or when unit testing throws an exception at run-time.  This sounds a whole lot like something statically typed languages are supposed to help us protect ourselves against.  The unchecked null is by far the most common runtime error and the &#8220;overchecked&#8221; null one of the most prevalent unintentional code obfuscation techniques.</p>
<p><strong>Solutions that don&#8217;t involve changing existing languages:</strong></p>
<p>1. If your language supports the concept out of the box (C++, <a title="Spec#" target="_blank" href="http://research.microsoft.com/specsharp/">Spec#</a>, <a title="F#" target="_blank" href="http://research.microsoft.com/fsharp/fsharp.aspx">F#</a>, <a title="OCaml" target="_blank" href="http://en.wikipedia.org/wiki/OCaml">OCaml</a>, <a title="Nice" target="_blank" href="http://nice.sourceforge.net/">Nice</a>, etc.) or it can be built with templates or other mechanisms use not-nullable types.  Use these types whenever possible.  If you&#8217;re language doesn&#8217;t support it then use number 2 alone.<br />
2. Create a simple naming convention (don&#8217;t go hungarian on me) to discern what is nullable and what isn&#8217;t.  This is a fundamental concept and it should be obvious everytime a value, instance or object is accessed.  Use this to compensate for your languages deficiency in a similar manner to prefixing private variables in languages that don&#8217;t have mechanisms for hiding access to variables and member functions.<br />
3. Check for null as early as possible in the food chain and prefer to call methods that are granular and don&#8217;t have to check themselves.   This means make every parameter passed to a routine get used.  If a parameter is optional write a new routine.  Make the types passed to these routines be not-nullable if the language supports it.</p>
<p>4. If it makes sense prefer empty collections to collections containing nothing but null for obvious reasons.</p>
<p><strong>Wrap-up</strong>:</p>
<p>There is no perfect solution.  But so many times in code I see null being checked or not checked and am left wondering.  Is the check gratuitous?  Is this a runtime error waiting in the wings?  And unless its commented it or I check it&#8217;s usage &#8211; I get that typically uneasy feeling.  Bound to catch it at runtime with unit testing.  This is not the answer I want to hear.</p>
<p>I think a few simple practices and conventions could get this off our plate so we can get back to the problem at hand.  Solving actual problems.</p>
<p><em>Afterthoughts:</em></p>
<p><em>Some other articles that beat me to the punch on some of these concepts:</em></p>
<ol>
<li><em> <a target="_blank" title="Artima" href="http://www.artima.com/weblogs/viewpost.jsp?thread=168511">Let&#8217;s Reconsider That Offensive Coding</a> from Michael Feathers.</em></li>
<li><em><a target="_blank" title="Null" href="http://blog.blainebuxton.com/2006/11/null-runtime-error-generator.html">Null:The Runtime Error Generator</a>  by Blaine Buxton</em></li>
</ol>
<p><em>Empty containers solve this problem nicely for return types.  Also as many readers have mentioned, monads are extremely useful in solving this problem as well.  But once again, stop propagating unneeded nulls and similar &#8220;safer null-like&#8221; structures as soon as possible.  As Michael Feathers states &#8211; it&#8217;s just offensive code.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://programmingmatters.com/how-null-breaks-polymorphism-or-the-problem-with-null-part-2/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>24 years of game programming: thrills, chills and spills: part 1</title>
		<link>http://programmingmatters.com/24-years-of-game-programming-thrills-chills-and-spills-part-1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=24-years-of-game-programming-thrills-chills-and-spills-part-1</link>
		<comments>http://programmingmatters.com/24-years-of-game-programming-thrills-chills-and-spills-part-1/#comments</comments>
		<pubDate>Sun, 31 Dec 2006 18:07:21 +0000</pubDate>
		<dc:creator>Steve Riley</dc:creator>
				<category><![CDATA[Game Industry]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://eureka3d.com/blog/?p=22</guid>
		<description><![CDATA[Originally I was thinking about calling this article 24 years of game programming: observations and lessons learned. Somehow the title seemed much too stuffy for an entry about something I&#8217;ve loved so much over the years. In this three part &#8230; <a href="http://programmingmatters.com/24-years-of-game-programming-thrills-chills-and-spills-part-1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>Originally I was thinking about calling this article 24 years of game programming: observations and lessons learned.  Somehow the title seemed much too stuffy for an entry about something I&#8217;ve loved so much over the years.</em></p>
<p>In this three part series I trace my 24 years of game programming.  From machine language in 1982, Pascal in 1987, C in 1992, C++ in 1995, using &#8220;high level API&#8217;s&#8221; like OpenGL in 97, catching the pattern craze in &#8217;98, the component mantra in 99, coding for 3 consoles at once in 2000, moving into Java, C#, and javascript on the top of C++ in the 21st century.  And more!</p>
<p><strong>Let&#8217;s go back to 1982:</strong></p>
<p>This is where it all began for me.  I had received my first computer a Vic-20 and dreamed of everything I could do with it.  William Shatner had advertised it as a gaming system and a computer too (and we all know he has integrity from the whole priceline fiasco).  I remember writing my first basic program for it from the thin manual that came with it.  An animated bird that used character graphics to flap it&#8217;s wings and fly around the screen.  I was mesmerized!</p>
<p>I quickly learned the machine inside and out, bought the Vic-20 Programmer&#8217;s  Reference Guide, hung the schematic of the machine on my wall and went to work.  Very quickly I realized that a 1 mhz machine with 5k of ram was going to take some heavy tricks to create games for.  So I learned 6502 machine language to really pull the stops out.  An 8 bit processor with an X, Y and Accumulator that could add and subtract any 8 bit value!  X and Y could only increment and decrement.  And of course when the numbers were larger than 255 a little juggling was required.</p>
<p>Very soon the Commodore 64 came out and I immediately upgraded.  Programmable sprites, a SID chip for sound, 64k of ram (with 16k bank switched under rom that held Bill&#8217;s basic and the &#8220;OS&#8221;).   Now we were playing with power.  I wrote more than a few games for the Commodore 64 as a hobbiest in straight machine code.  An Olympic games type clone, a chess game that worked with the 300 baud modem, a utility to dump on screen graphics to the printer, some arcade variations, a sprite editor.<br />
These were the truly brass tacks years.  6502 machine language mixed with little bits of bootstrap basic was hardcore by any standards.  Jumping to subroutines was something you couldn&#8217;t take lightly and the &#8220;hardware&#8221; stack was only 512 bytes long.  It was strictly for keeping the return address from subroutine calls.  I was firmly convinced games required maximum power and could only be written in machine language.  I was pretty convinced this fact would never change.</p>
<p>I was of course wrong.</p>
<p><strong>Fast forward to 1987:</strong></p>
<p>The IBM PC/XT was starting to show promise and a friend introduced me to Turbo Pascal on it.  4.77 megahertz!  640k of ram.  Sure my machine was an XT and only capable of CGA graphics (and character mode graphics &#8211; not even programmable at that).  But Turbo Pascal was my first true compiler.  It was actually possible to write a significant chunk of many games in high level code.  Sure low-level interrupt stuff was often in assembly.  We spent many, many all nighters coding games and often ignoring our girlfriends.  But they couldn&#8217;t code:)  I slowly got used to the fact that passing variables on the stack was a useful enough concept that it was worth the performance hit it sometimes had on games.  We are talking about functions passing parameters on the stack!  But this was &#8220;non-trivial&#8221; and took cycles.  Things were still so tight that every cycle mattered<strong>.</strong></p>
<p><strong>Fast forward to 1992:</strong></p>
<p>I got my first  386 20 mhz clone with 4 meg of memory and an 80 meg hard drive.  I quickly bought a soundblaster card for it.  Before long I was coding games in MCGA 320&#215;200 256 color graphics mode.  I learned everything I could about palette manipulation and palette color theory.  I was coding in C by this time as well 8086 assembly of course.  You could actually inline your assembly right there with the C code.  It was awesome.  I wrote a sprite compiler that would literally turn all the data into straight machine code so it didn&#8217;t have to loop and check for key colors.  It used a triple buffer, dirty rect system to update the screen as efficiently as possible.</p>
<p>I learned Autodesk animator inside and out and spent hundreds of hours working on a sprite editor with bucket fills, circles, lines and palette manipulation functions as well as animation capability.  I was in heaven.  I recruited some good friends to do graphics for me and created a number of demos to show off the library.</p>
<p>I still hand-optimized everything and didn&#8217;t trust the compilers at all.  A C compiler may not use a bit shift for an integer multiplication.  The horror!</p>
<p>I made sure and learned all I could about fixed point numbers.  At this point floats were still done in software and slower than hell.  Since C didn&#8217;t support operator overloading the code looked pretty clunky.  But it didn&#8217;t matter.  320&#215;200 256 color mode was fast &#8211; really fast.  And I was learning all I could from Abrash books about mode 13 hex that allowed the full 256k of graphics memory to be utilized.  At the time the PC was still back switching 64k into it&#8217;s memory map.  And don&#8217;t even get me started on 80&#215;86 segment offset addressing!</p>
<p>I ended up releasing all my code as shareware and learning the ins and outs of shareware distribution mechanisms.  I remember printing labels for 5 1/4 and 3 1/2 disks and mailing them off to shareware distribution hubs.  This was before the internet took off of course and everything was BBS based.</p>
<p>1995 was right around the corner and soon I would find myself working at Legend Entertainment on Star Control 3 &#8211; my first commercial game product.</p>
<p><strong>Part 2 cracks the lid open on my game industry years.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://programmingmatters.com/24-years-of-game-programming-thrills-chills-and-spills-part-1/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>How null breaks polymorphism: or the problem with null: part 1</title>
		<link>http://programmingmatters.com/how-null-breaks-polymorphism-or-the-problem-with-null/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-null-breaks-polymorphism-or-the-problem-with-null</link>
		<comments>http://programmingmatters.com/how-null-breaks-polymorphism-or-the-problem-with-null/#comments</comments>
		<pubDate>Sun, 31 Dec 2006 07:19:17 +0000</pubDate>
		<dc:creator>Steve Riley</dc:creator>
				<category><![CDATA[Development Philosophy]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://eureka3d.com/blog/?p=21</guid>
		<description><![CDATA[Preface: After talking to a number of people I realize that somehow I managed to misrepresent myself with respect to type systems in this article. This article is an attack on null, and to point out that null is still &#8230; <a href="http://programmingmatters.com/how-null-breaks-polymorphism-or-the-problem-with-null/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em><a href="http://programmingmatters.com/wp-content/uploads/2006/12/NoNull.png"><img class="alignright size-thumbnail wp-image-71" title="NoNull" src="http://programmingmatters.com/wp-content/uploads/2006/12/NoNull-150x150.png" alt="" width="150" height="150" /></a>Preface: After talking to a number of people I realize that somehow I managed to misrepresent myself with respect to type systems in this article.  This article is an attack on null, and to point out that null is still problematic in many (if not all) strongly typed languages.  Many who prefer strong types and static types feel they are more immune to certain runtime type related inappropriate behaviors.  I feel the ability to use null in most languages in place of an object breaks polymorphism in the most extreme possible way.  I am in no way implying that dynamic or weak type systems are better at handling these issues.  As for me &#8211; I prefer languages with stronger compile time type checking.<br />
</em></p>
<p>This is a difficult concept for a lot of died in the wool strong staticly typed OO programmers to fully digest and accept.  There is an immense sense of pride in the strong staticly typed community about the fact that unlike untyped languages, strong staticly typed languages protect them from run-time errors related to type mismatches and unavailable methods.  Unless you do a dynamic type cast (frowned upon heavily) you should be safe from at least this broad class of error.  But they are wrong.  Type mismatches and unavailable methods occur all the time in strong staticly typed languages.  And it is a common form on runtime surprise.  What causes this common problem: the null which can be used with any type yet breaks polymorphism with every single one.</p>
<p>Unlike types in loosely typed languages the null is <em>guaranteed</em> not work polymorphicly thus requiring a specific type check.  Did I say type check?  But I have no dynamic casts, I&#8217;m following all the rules.  Why should I have any type checks?  Checking for null is a type check.  It&#8217;s the mother of all type checks.  Instead of having code littered with conditional checks for types and branches based on those types (an OO worst practice) you have code littered with conditional checks for null having branches based on  whether it is null or not.</p>
<p>Now granted, life in a world without nulls isn&#8217;t easy and I use null often myself.  It&#8217;s too tempting to use this magic value instead of writing code more appropriately.  Some will mention the null object design pattern that &#8220;does nothing&#8221; with pride as a solution to this problem.  These are in fact polymorphic.  The only issue is that null objects only work in special circumstances.  If you really don&#8217;t have a thing you shouldn&#8217;t be pretending you do and having it do nothing.  You should have a separate chain of logic that doesn&#8217;t use the thing you don&#8217;t have.</p>
<p>I have talked to a number of coders that think that removing null from a majority of their code would be difficult to impossible.  An difficult to grok kind of problem perhaps but intractable, no. Consider the following function:</p>
<p>int DoSomethingSpecific( int x, int y, int z);</p>
<p>Now I will asked the magic question.  Do you check z for null in case you don&#8217;t have it? (or x or y for that matter).  In C++ that isn&#8217;t even possible because it&#8217;s passed by value.  If an appropriate default exists for z you may set z to that default before it is called.  However plenty of times that concept isn&#8217;t the one you are looking for.  What do you do?  You simply write another function that doesn&#8217;t take z.</p>
<p>int DoSomethingSpecific(int x, int y);</p>
<p>Now let&#8217;s use generic objects:</p>
<p>int DoSomethingSpecific(object x, object y, object z);</p>
<p>int DoSomethingSpecific(object x, object y);</p>
<p>Using this approach doesn&#8217;t break polymorphism.  You only call the appropriate function when you actual have the parameters in question.</p>
<p>Of course this brings us back to a more fundamental problem.  The concept of null is so burned in to most OO languages that visual inspection of code reveals that most any object should be nullable and thus checked for null.  C++ has a way around this with references that can not be null or checked for null (yes I know many compilers will let you assign null but you make clear your intent in using a reference:it <em>should not</em> be null).  The C++ reference being used this way is at best an afterthought in the language.  These references can&#8217;t be reassigned and thus are limited to incoming parameters on function calls in many cases.</p>
<p>Even if you create a class which prohibits non-null assignment casual readers of your code in many languages will miss this fact and do gratuitous checks for null anyways; defeating much of the purpose.  The key is supporting syntax that makes clear the fact that an object can not be null.  But that discussion is for another day.</p>
<p>In part two of this article I will explain many of the misconceptions and supposedly <em>intractable </em>issues related to removing null.  It&#8217;s not as hard as you might at first think.  I will also further explore the syntax issue, or without language support at least a possible naming convention.</p>
]]></content:encoded>
			<wfw:commentRss>http://programmingmatters.com/how-null-breaks-polymorphism-or-the-problem-with-null/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Served from: programmingmatters.com @ 2012-02-06 10:33:48 -->
