<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>The Efficient Coder</title>
    <link>http://www.efficientcoder.net/</link>
    <description>There has got to be a better way of communicating with our computers!</description>
    <language>en-us</language>
    <copyright>Kevin D. Wolf</copyright>
    <lastBuildDate>Tue, 17 Feb 2009 13:25:31 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.8.5223.2</generator>
    <managingEditor>kevinw@software-logistics.com</managingEditor>
    <webMaster>kevinw@software-logistics.com</webMaster>
    <item>
      <trackback:ping>http://www.efficientcoder.net/Trackback.aspx?guid=9e6780bb-52a6-47de-aa0f-4e6428204bc6</trackback:ping>
      <pingback:server>http://www.efficientcoder.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.efficientcoder.net/PermaLink,guid,9e6780bb-52a6-47de-aa0f-4e6428204bc6.aspx</pingback:target>
      <dc:creator>kevinw@software-logistics.com (Kevin D. Wolf)</dc:creator>
      <wfw:comment>http://www.efficientcoder.net/CommentView,guid,9e6780bb-52a6-47de-aa0f-4e6428204bc6.aspx</wfw:comment>
      <wfw:commentRss>http://www.efficientcoder.net/SyndicationService.asmx/GetEntryCommentsRss?guid=9e6780bb-52a6-47de-aa0f-4e6428204bc6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <font face="Times New Roman">
          <font size="4">I've
   always had a drive to take apart anything electronic and figure out how it worked. 
   Even better if the thing had a microprocessor since then I would try to start up a
   conversation with it.  I think my first experience with this was hooking up an
   old <a href="http://www.columbia.edu/acis/history/teletype.html">teletype machine</a> given
   to me by my junior high school to a <a href="http://en.wikipedia.org/wiki/Commodore_VIC-20">VIC-20</a> computer
   to use a printer.  Then came the first XBox.  I enjoyed playing games on
   it, but I wasn't really a gamer.  Then I found out about <a href="http://www.llamma.com/xbox/Mods/DUO_X3_Installation.htm">modding</a> the
   darn thing...I think the main reason for this was to be able to make *back-ups* of
   your games.  I really didn't so much care about that, I wanted to find a version
   of the XBox SDK and get my own Hello World programming running.<br /></font>
        </font>
        <p>
        </p>
        <img src="http://www.efficientcoder.net/content/binary/x3.jpg" border="0" />
        <br />
        <br />
        <font face="Times New Roman" size="4">That brings us to current day, Microsoft did
   something really cool and made game development main-stream for the XBox 360 in the
   form of the <a href="http://creators.xna.com/en-US/">XNA Game Studio</a>.  Last
   summer I downloaded Version 2.0 of the SDK and started my journey on learning this
   new technology.  Other than playing around with the <a href="http://en.wikipedia.org/wiki/HYDRA_Game_Development_Kit">Hydra
   Game Development Kit</a>, I knew next to nothing about game programming, this was
   a chance to learn a brand new technology.  
   <br /><br />
   I'm still in the process of learning but I thought it was interesting on how I'm building
   my first game.  Most of the time when I write an application, I <i>really</i> want
   to have an in depth knowledge of what's happening with the code.  I don't like
   calling methods, even if they are in a library or frameworks unless I at least have
   a general knowledge of how that software will be ran by the processor.  In January
   I started a project that I will be publishing in March as a Community Game on the
   XBox 360.  To make this work, I needed to do a bunch of stuff I really had no
   clue how to program.  These were things like explosions, smoke from a missle
   trail etc...  I found some great tutorials and started cutting and pasting my
   way to an application that pretty much did what I needed to, although the program
   was a mess.  I did feel dirty doing this, but just reading about code isn't enough,
   implementing it into something that actually runs is a much better way to learn things.  
   <br /><br />
   So I figured out how to create 3D models with the <a href="http://www.softimage.com/products/modtool/">XSI
   Mod Tool</a>, that was no small chore, but kind of fun and something I did on the
   couch while watching TV.  Next I found some code to render the model in my game,
   I cut-and-pasted that into my application and be-hold the model was spinning in 3D,
   although I didn't know how it worked it was rewarding.  Then I added a few more
   models and decided that the code just didn't "smell right" anymore.  It was a
   good time to create a class that knew how to render models in <b>my game</b>, this
   was important since <b>my game</b> had some specific needs and I couldn't just cut-and-paste
   anymore I needed to know how the code worked.  This is when the lights started
   coming on.  Next was implementing the flight of a missile.  I found some
   algorithms for acceleration and gravity as well as a smoke plume and cut-and-pasted
   the code.  This got me about 75% of the way there and was a mess, but at least
   it sort-of worked and was rewarding.  I refactored the code, learned how it worked
   and the light bulbs came on again.  I repeated this process for other things
   such as rendering water and implementing a generic controller that works with either
   a keyboard or game controller.  So the basic pattern here was add the features,
   you may need a dependency that you don't know how to implement, that's OK, instead
   of just banging your head against the wall for 3 days, find some code the sort-of
   does what you want, get it working.  Then the real critical part, refactor the
   hell out of it and make that code your own!<br /><br /></font>
        <img src="http://www.efficientcoder.net/content/binary/Game.png" border="0" />
        <br />
        <br />
        <font face="Times New Roman" size="4">This was a project I wrote for myself, most
   of the time people pay me to write software so I can't recommend this process for
   any client work.  However now if a client contracted with me build an XNA game
   (fat chance, but you never know), I can point to some real world experience and feel
   good that I'll be delivering a solution and not learning on the job.<br /></font>
        <br />
        <img src="http://www.efficientcoder.net/content/binary/Game2.png" border="0" />
        <br />
        <br />
        <font face="Times New Roman" size="4">I think to a certain extent, this is probably
   how we learn to implement technologies most of the time, but in smaller steps. 
   This was just very obvious since I had to start from scratch with many core concepts
   and the process of turning the cut-and-paste code into my own code was very clear
   and effective.  So don't feel bad about cutting and pasting code, just make sure
   you don't leave it like that once you get it working.  Apply your style, refactor,
   rinse and repeat and make the code your own!<br /><br />
   -ec</font>
        <br />
        <br />
        <br />
        <img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=9e6780bb-52a6-47de-aa0f-4e6428204bc6" />
      </body>
      <title>From Copy-and-Paste to Ninja, Learning New Technologies</title>
      <guid>http://www.efficientcoder.net/PermaLink,guid,9e6780bb-52a6-47de-aa0f-4e6428204bc6.aspx</guid>
      <link>http://www.efficientcoder.net/PermaLink,guid,9e6780bb-52a6-47de-aa0f-4e6428204bc6.aspx</link>
      <pubDate>Tue, 17 Feb 2009 13:25:31 GMT</pubDate>
      <description>&lt;font face="Times New Roman"&gt;&lt;font size="4"&gt;I've always had a drive to take apart
anything electronic and figure out how it worked.&amp;nbsp; Even better if the thing had
a microprocessor since then I would try to start up a conversation with it.&amp;nbsp;
I think my first experience with this was hooking up an old &lt;a href="http://www.columbia.edu/acis/history/teletype.html"&gt;teletype
machine&lt;/a&gt; given to me by my junior high school to a &lt;a href="http://en.wikipedia.org/wiki/Commodore_VIC-20"&gt;VIC-20&lt;/a&gt; computer
to use a printer.&amp;nbsp; Then came the first XBox.&amp;nbsp; I enjoyed playing games on
it, but I wasn't really a gamer.&amp;nbsp; Then I found out about &lt;a href="http://www.llamma.com/xbox/Mods/DUO_X3_Installation.htm"&gt;modding&lt;/a&gt; the
darn thing...I think the main reason for this was to be able to make *back-ups* of
your games.&amp;nbsp; I really didn't so much care about that, I wanted to find a version
of the XBox SDK and get my own Hello World programming running.&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://www.efficientcoder.net/content/binary/x3.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font face="Times New Roman" size="4"&gt;That brings us to current day, Microsoft did
something really cool and made game development main-stream for the XBox 360 in the
form of the &lt;a href="http://creators.xna.com/en-US/"&gt;XNA Game Studio&lt;/a&gt;.&amp;nbsp; Last
summer I downloaded Version 2.0 of the SDK and started my journey on learning this
new technology.&amp;nbsp; Other than playing around with the &lt;a href="http://en.wikipedia.org/wiki/HYDRA_Game_Development_Kit"&gt;Hydra
Game Development Kit&lt;/a&gt;, I knew next to nothing about game programming, this was
a chance to learn a brand new technology.&amp;nbsp; 
&lt;br&gt;
&lt;br&gt;
I'm still in the process of learning but I thought it was interesting on how I'm building
my first game.&amp;nbsp; Most of the time when I write an application, I &lt;i&gt;really&lt;/i&gt; want
to have an in depth knowledge of what's happening with the code.&amp;nbsp; I don't like
calling methods, even if they are in a library or frameworks unless I at least have
a general knowledge of how that software will be ran by the processor.&amp;nbsp; In January
I started a project that I will be publishing in March as a Community Game on the
XBox 360.&amp;nbsp; To make this work, I needed to do a bunch of stuff I really had no
clue how to program.&amp;nbsp; These were things like explosions, smoke from a missle
trail etc...&amp;nbsp; I found some great tutorials and started cutting and pasting my
way to an application that pretty much did what I needed to, although the program
was a mess.&amp;nbsp; I did feel dirty doing this, but just reading about code isn't enough,
implementing it into something that actually runs is a much better way to learn things.&amp;nbsp; 
&lt;br&gt;
&lt;br&gt;
So I figured out how to create 3D models with the &lt;a href="http://www.softimage.com/products/modtool/"&gt;XSI
Mod Tool&lt;/a&gt;, that was no small chore, but kind of fun and something I did on the
couch while watching TV.&amp;nbsp; Next I found some code to render the model in my game,
I cut-and-pasted that into my application and be-hold the model was spinning in 3D,
although I didn't know how it worked it was rewarding.&amp;nbsp; Then I added a few more
models and decided that the code just didn't "smell right" anymore.&amp;nbsp; It was a
good time to create a class that knew how to render models in &lt;b&gt;my game&lt;/b&gt;, this
was important since &lt;b&gt;my game&lt;/b&gt; had some specific needs and I couldn't just cut-and-paste
anymore I needed to know how the code worked.&amp;nbsp; This is when the lights started
coming on.&amp;nbsp; Next was implementing the flight of a missile.&amp;nbsp; I found some
algorithms for acceleration and gravity as well as a smoke plume and cut-and-pasted
the code.&amp;nbsp; This got me about 75% of the way there and was a mess, but at least
it sort-of worked and was rewarding.&amp;nbsp; I refactored the code, learned how it worked
and the light bulbs came on again.&amp;nbsp; I repeated this process for other things
such as rendering water and implementing a generic controller that works with either
a keyboard or game controller.&amp;nbsp; So the basic pattern here was add the features,
you may need a dependency that you don't know how to implement, that's OK, instead
of just banging your head against the wall for 3 days, find some code the sort-of
does what you want, get it working.&amp;nbsp; Then the real critical part, refactor the
hell out of it and make that code your own!&lt;br&gt;
&lt;br&gt;
&lt;/font&gt;&lt;img src="http://www.efficientcoder.net/content/binary/Game.png" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font face="Times New Roman" size="4"&gt;This was a project I wrote for myself, most
of the time people pay me to write software so I can't recommend this process for
any client work.&amp;nbsp; However now if a client contracted with me build an XNA game
(fat chance, but you never know), I can point to some real world experience and feel
good that I'll be delivering a solution and not learning on the job.&lt;br&gt;
&lt;/font&gt;
&lt;br&gt;
&lt;img src="http://www.efficientcoder.net/content/binary/Game2.png" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font face="Times New Roman" size="4"&gt;I think to a certain extent, this is probably
how we learn to implement technologies most of the time, but in smaller steps.&amp;nbsp;
This was just very obvious since I had to start from scratch with many core concepts
and the process of turning the cut-and-paste code into my own code was very clear
and effective.&amp;nbsp; So don't feel bad about cutting and pasting code, just make sure
you don't leave it like that once you get it working.&amp;nbsp; Apply your style, refactor,
rinse and repeat and make the code your own!&lt;br&gt;
&lt;br&gt;
-ec&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;img width="0" height="0" src="http://www.efficientcoder.net/aggbug.ashx?id=9e6780bb-52a6-47de-aa0f-4e6428204bc6" /&gt;</description>
      <comments>http://www.efficientcoder.net/CommentView,guid,9e6780bb-52a6-47de-aa0f-4e6428204bc6.aspx</comments>
      <category>Software Engineering;XNA</category>
    </item>
  </channel>
</rss>