<?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>Versus Software &#187; software engineering</title>
	<atom:link href="http://versus-software.com/blog/tags/software-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>http://versus-software.com/blog</link>
	<description>game + free time = duck</description>
	<lastBuildDate>Tue, 14 Feb 2012 08:50:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Parking a car == Software Development</title>
		<link>http://versus-software.com/blog/parking-a-car-software-development/</link>
		<comments>http://versus-software.com/blog/parking-a-car-software-development/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 03:13:15 +0000</pubDate>
		<dc:creator>J.Raza</dc:creator>
				<category><![CDATA[rambling]]></category>
		<category><![CDATA[common sense]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[managment]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[team]]></category>

		<guid isPermaLink="false">http://versus-software.com/blog/?p=185</guid>
		<description><![CDATA[A few days ago while I was waiting for the the bus so I could go to work, I saw on the other side of the street a taxi driver trying to parallel park his car. He initially used to wide of an angle to try to get into the parking spot, so after maneuvering [...]]]></description>
			<content:encoded><![CDATA[<p>A few days ago while I was waiting for the the bus so I could go to work, I saw on the other side of the street a taxi driver trying to <a href="http://en.wikipedia.org/wiki/Parallel_parking">parallel park</a> his car.</p>
<p>He initially used to wide of an angle to try to get into the parking spot, so after maneuvering the car in, he kept moving back and forth, trying to adjust the cab to the right spot. Unfortunally, since his initiall angle was so wide, no matter what he did he could not get the car close enough to the curb.</p>
<p>He kept going, back and forth for at least 2 minutes, until finally he moved the car completely out of the spot, took the right angle , and managed to fit the car perfectly in the parking spot this time.</p>
<p>Now I don&#8217;t know about you, but when I saw that I thought : &#8220;That&#8217;s a perfect software enginnering metaphor.&#8221; And indeed it is, heres why.</p>
<p>You see the vast majority of software managers when trying to do their job, aka manage software development, they usually list the things they should estimate: functional requisites, prototype, develop code, refactor, etc. They usually forget one simple and yet crucial thing:</p>
<blockquote><p>You will throw code away.</p></blockquote>
<p>Every software that&#8217;s used requires maintanance. Maintanance requires to increase or change the scope of software. As you do that, previous software under that new scope doesn&#8217;t function or isn&#8217;t the best for that system. They have to re-write things, start again, but with the new goal in mind.</p>
<p>But software managers usually don&#8217;t like the sentence &#8220;Throw code away&#8221;. It implies an idea of waste of time, or that any system can be adapted, it&#8217;s just a matter of figuring out how.</p>
<p>Those managers are doing exactly what that taxi driver was trying to do. Going back and forth with their code, hopeleslly trying to get their software/taxi in the right spot. They never will, and regardless of how many factors point to it, they won&#8217;t admit they&#8217;re bad drivers. To them the car will eventually set in the right spot, while in reality they should restart the parking procedure as a whole.</p>
<p>Those usually are bad managers, ones that I try to avoid. If they can&#8217;t park a car right, how the fuck do they plan to manage software development?</p>
]]></content:encoded>
			<wfw:commentRss>http://versus-software.com/blog/parking-a-car-software-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Slow Agile Development</title>
		<link>http://versus-software.com/blog/slow-agile-development/</link>
		<comments>http://versus-software.com/blog/slow-agile-development/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 22:15:09 +0000</pubDate>
		<dc:creator>J.Raza</dc:creator>
				<category><![CDATA[comparissons]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rambling]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[conira]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[system design]]></category>

		<guid isPermaLink="false">http://versus-software.com/blog/?p=120</guid>
		<description><![CDATA[While riding the subway today I saw a man my age holding a book titled &#8220;Agile Software Development, Principles, Patterns and Practices&#8220;. This reminded me of a few opinions I had about software enginnering. I talked on a previous post that it&#8217;s important to take into consideratoin the final product that&#8217;s going to be developed [...]]]></description>
			<content:encoded><![CDATA[<p>While riding the subway today I saw a man my age holding a book titled &#8220;<a href="http://www.amazon.com/Software-Development-Principles-Patterns-Practices/dp/0135974445/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1279574440&amp;sr=8-2">Agile Software Development, Principles, Patterns and Practices</a>&#8220;. This reminded me of a few opinions I had about software enginnering. I talked on a <a href="http://versus-software.com/blog/?p=41">previous</a> post that it&#8217;s important to take into consideratoin the final product that&#8217;s going to be developed in order to choose a proper software Engineering methodology.</p>
<p style="text-align: center;"><img class="size-medium wp-image-121 aligncenter" title="1208-f1-4" src="http://versus-software.com/blog/wp-content/uploads/2010/07/1208-f1-4-300x252.jpg" alt="" width="300" height="252" /></p>
<p>Today I&#8217;d like to keep talking about that but focusing more on the technological nature of that which is being developed. Here&#8217;s a short story to better explain why:</p>
<p>While I was working on <a href="http://versus-software.com/blog/?page_id=19">Conira</a>, early on I decided just for the hell of it that this game would be multithreaded. Given my previous experience developing the <a href="http://versus-software.com/blog/?page_id=16">Solis engine</a> I saw that you could dissect the game engine into three threads.</p>
<ol>
<li>One that renders all the objects in the game, be it sprites, particles or models. This thread uses the &#8216;get&#8217; methods each object had.</li>
<li>Another that updates all the objects in the game, their displacement, acceleration, hit detection, etc. This thread uses the &#8216;set&#8217;  and &#8216;get&#8217; methods each object had.</li>
<li>One thread that takes care of loading/unloading objects and handling the Operating System calls like windows and messages.</li>
</ol>
<p>Initially I thought this would be a good design. I elaborated on how the threads would communicate, tried to figure out and reduce potential deadlock /livelocks and set off to code!</p>
<p>It wasn&#8217;t but one day later that I had to redo the whole design.</p>
<p>You see there is a technical limitation when dealing with rendering systems, threads and the Win32 specification. MSDN clearly states that &#8220;the same thread that RENDERS the objects MUST be the same thread that CREATES the WINDOW and handles its OPERATING SYSTEM calls.&#8221; In other words, thread 1 and 2 had to be same. In the end it wasn&#8217;t a big alteration, meerely trivial given the design I had but it did bring me into re-thinking certain software engeneering practices people take for granted.</p>
<p>When I was in college I was basically told that &#8220;code development is a final product of a series of design decisions&#8221;. You figure out your system first, its classes, structures, layers and then the code you write is merely an extension of that. In other words, take the broad view of a project and as you develop it, handle the inner details and its intricancies as they come. But that type of methodology fails to work in development environments where those same inner details and intricancies are what actually defines the system as whole.</p>
<p>I think Agile Software advocates say the same thing but with different words. &#8220;Work on the code first, let the inner details of a system be delt as they come, so don&#8217;t worry about documentation, design, etc. Code, code and code!&#8221;. They also usually point cases where such methodologies worked. However they fail to point out the architecture of the system in which they developed. Most, if not all, of those success stories I heard were either web applications or with an interpreted language such as Java or C#.</p>
<p>Well it makes sense for those projects to work on those scenarios! They were built on top of languages where it is expected to delegate the inner details of a system to <a href="http://en.wikipedia.org/wiki/Java_Virtual_Machine">whomever </a>is <a href="http://www.apache.org/">handling </a>it. So all they have proven is that those agile methods work on those environments, which is ok, but not that agile methods work as a whole, which is what they usually advocate. Honestly, I&#8217;m yet to see an long run story of a sucessfull low level driver or high optmized high-level assembly language project using Agile methodologies.</p>
<p>Don&#8217;t get me wrong, I&#8217;m not saying that Agile methods suck or that they don&#8217;t work. They do and can work quite well but one must understand the context in which they work, or else failing into the trap of beliving that they work in any environment.</p>
<p>If one doesn&#8217;t take into consideration the end product as well as it&#8217;s internal architecture while taking enginnering decisions, he&#8217;ll end up eventually just making bad or lucky engineering.</p>
]]></content:encoded>
			<wfw:commentRss>http://versus-software.com/blog/slow-agile-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sculptor and Mason</title>
		<link>http://versus-software.com/blog/sculptor-and-mason/</link>
		<comments>http://versus-software.com/blog/sculptor-and-mason/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 04:58:16 +0000</pubDate>
		<dc:creator>J.Raza</dc:creator>
				<category><![CDATA[comparissons]]></category>
		<category><![CDATA[rambling]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[artist]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[path]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://versus-software.com/blog/?p=59</guid>
		<description><![CDATA[Ever since I read this book a long time ago, I&#8217;ve always enjoyed art history and it&#8217;s analysis. I like how art, specially painting and drawing is a form of craftsmanship, how one evolves with it in time. I do enjoy looking at great contemporary artist like Anry Nemo Daniel Lieske As well as old [...]]]></description>
			<content:encoded><![CDATA[<p>Ever since I read <a href="http://www.amazon.com/Art-Physics-Parallel-Visions-Space/dp/0688123058">this</a> book a long time ago, I&#8217;ve always enjoyed art history and it&#8217;s analysis. I like how art, specially painting and drawing is a form of craftsmanship, how one evolves with it in time. I do enjoy looking at great contemporary artist like</p>
<p>Anry Nemo<br />
<a href="http://versus-software.com/blog/wp-content/uploads/2010/07/anry.jpg"><img class="alignnone size-medium wp-image-60" title="anry" src="http://versus-software.com/blog/wp-content/uploads/2010/07/anry-300x300.jpg" alt="" width="300" height="300" /></a></p>
<p>Daniel Lieske<br />
<a href="http://versus-software.com/blog/wp-content/uploads/2010/07/daniel.jpg"><img class="alignnone size-medium wp-image-61" title="daniel" src="http://versus-software.com/blog/wp-content/uploads/2010/07/daniel-300x190.jpg" alt="" width="300" height="190" /></a></p>
<p>As well as old wizards like Dali<br />
<a href="http://versus-software.com/blog/wp-content/uploads/2010/07/dali.jpg"><img class="alignnone size-medium wp-image-62" title="dali" src="http://versus-software.com/blog/wp-content/uploads/2010/07/dali-191x300.jpg" alt="" width="191" height="300" /></a></p>
<p>and Caravaggio<br />
<a href="http://versus-software.com/blog/wp-content/uploads/2010/07/caravaggio.jpg"><img class="alignnone size-medium wp-image-63" title="K43692CARAVAG 1" src="http://versus-software.com/blog/wp-content/uploads/2010/07/caravaggio-300x280.jpg" alt="" width="300" height="280" /></a></p>
<p>One thing I find particular interesting is how clearly explicit is a GOOD artist from a good one. Sure we can go down the path of Picasso being top notch and a genius while not being the best painter in the world, but my focus right now is in skill.</p>
<p>You can see, an artist is good when he masters several techniques like body proportions, shading, lighting,  diffusion, blur, meaning, semantics, and so on. To me all the artist above mastered this and it&#8217;s clearly visible even to laymen their genius.</p>
<p>That&#8217;s a thing a I refer to as the difference between masons and sculptors. Both work with the same raw materials, sometimes even the same tools, but their product is what separates the <a href="http://en.wikipedia.org/wiki/Piet%C3%A0_%28Michelangelo%29">Pieta</a> from simply another wall.</p>
<p>A sculptor understands the material he works to a point of such mastery that there is no limitation to what he can construct, all he needs is just time and resources. A mason while he may be good at it and could even attempt such a feat, in the end he would never reach such level.</p>
<blockquote><p>There is clearly a distinction between the two, but what causes it? This change, that makes a beginner that is once a mason become a sculptor? What is the road to mastery?</p></blockquote>
<p>I ask myself this question because I often draw parallels in between art and software development. Because I could just as well ask the same questions:</p>
<blockquote><p>What defines a master developer? How does one become a genius in software construction? What is the road to mastery?</p></blockquote>
<p>It&#8217;s easy to discern a great artist from an average one, all we have to do is look at their work, but how could we do this with developers? I usually read this in forums or talk with colleges and it usually revolves around with &#8211;</p>
<p>A great developer:</p>
<ul>
<li>Knows many languages</li>
<li>Knows difficult languages</li>
<li>Develops a lot</li>
<li>Develops for fun</li>
<li>Knows a lot about development</li>
<li>Read a bunch of books</li>
<li>Wrote a bunch of articles or even books</li>
<li>Develops big products</li>
<li>Never/rarely has bugs</li>
</ul>
<p>And so on and so forth. Personally I think these criteria are fine but in the end, with them, you can&#8217;t discern a good mason from a sculptor. Knowing many languages doesn&#8217;t mean mastery of software construction, developing big products can be bottled down to trivial tasks such as mundane functions, lack of bugs can be either due to an easy to work environment or lack of new challenges.</p>
<p>My point is you can counter each one of those statements, thus failing to reach anywhere when trying to label an individual as a mason or a sculptor. What I believe is the way to go is something more along the lines of:</p>
<ul>
<li>A mason, given time, is able to solve most if not all known problems.</li>
<li>An individual that is in between the two finds problems that haven&#8217;t been asked before.</li>
<li>A sculptor is able to answer them.</li>
</ul>
<p>I say this mainly because of my reference of what I consider to be great sculptors and their history, guys like Carmack, Abrash, Sweeney, Bram Cohen and so on. These guys managed to find problems no one faced before, or if they did no one answered, and then managed to find a solution of their own.</p>
<p>They did this because they knew their developing languages, their work environment, the machine down to the bitwise, to the electrical signal, to its deepest mathematical roots.</p>
<p>That to me is mastery. These are great artists. These are software sculptors.</p>
]]></content:encoded>
			<wfw:commentRss>http://versus-software.com/blog/sculptor-and-mason/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Luck and Effort</title>
		<link>http://versus-software.com/blog/luck-and-effort/</link>
		<comments>http://versus-software.com/blog/luck-and-effort/#comments</comments>
		<pubDate>Mon, 24 May 2010 03:21:03 +0000</pubDate>
		<dc:creator>J.Raza</dc:creator>
				<category><![CDATA[comparissons]]></category>
		<category><![CDATA[rambling]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[sport]]></category>

		<guid isPermaLink="false">http://versus-software.com/blog/?p=45</guid>
		<description><![CDATA[I once heard a tale of a famous soccer player named Zico. Never figured it out if it was true or not, but I thought it was an interesting tale. Basically goes like this: On on particular soccer match Zico kicks off from the middle of the field, the ball barely hits the goal post [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://versus-software.com/blog/wp-content/uploads/2010/05/4leaf.jpg"><img class="size-full wp-image-46 aligncenter" title="4leaf" src="http://versus-software.com/blog/wp-content/uploads/2010/05/4leaf.jpg" alt="" width="122" height="121" /></a></p>
<p>I once heard a tale of a famous soccer player named Zico. Never figured it out if it was true or not, but I thought it was an interesting tale. Basically goes like this:</p>
<p>On on particular soccer match Zico kicks off from the middle of the field, the ball barely hits the goal post and bounces back inside. It&#8217;s a goal and the crowd roars. After the match a reporter interviews Zico:</p>
<p>&#8220;Zico! That was one lucky shot mate, talk about luck! You kicked off and it luckly got inside! How do you feel?&#8221;</p>
<p>Zico replied :</p>
<p>&#8220;Well you know it&#8217;s interesting. The more I train the luckier people say I get&#8221;.</p>
<p>I think it&#8217;s a funny story and holds a very deep morale.</p>
<p>You see I think &#8220;luck&#8221; is an interesting concept but merely abstract. There&#8217;s luck in winning the lottery and then there&#8217;s luck in managing to get that one job position or meeting that one person that allows you to get in a big project. But to get such a &#8220;lucky chance&#8221; you obviously had to work a lot to even be able to have such an opportunity. And even if you don&#8217;t succeed once, if you keep working, eventually you&#8217;ll get another &#8220;lucky chance&#8221;.</p>
<p>Deep down, I think that lady luck tends to favor those who keep trying.</p>
]]></content:encoded>
			<wfw:commentRss>http://versus-software.com/blog/luck-and-effort/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Planning vs. Common sense</title>
		<link>http://versus-software.com/blog/planning-vs-common-sense/</link>
		<comments>http://versus-software.com/blog/planning-vs-common-sense/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 01:14:08 +0000</pubDate>
		<dc:creator>J.Raza</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[book review]]></category>
		<category><![CDATA[game development]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[suggestion]]></category>

		<guid isPermaLink="false">http://versus-software.com/blog/?p=41</guid>
		<description><![CDATA[Today I&#8217;ll review another book I read, Software Engineering for Game Developers. As a book that concerns itself with software engineering I say it does the job. It&#8217;s an 800 page beast covering topics from UML, resource management, project risks, stipulations and damage control. More interestingly enough it tries to tie that with actual game [...]]]></description>
			<content:encoded><![CDATA[<p>Today I&#8217;ll review another book I read, <a href="http://www.amazon.com/Software-Engineering-Game-Developers/dp/1592001556/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1271291546&amp;sr=8-1">Software Engineering for Game Developers</a>.</p>
<p style="text-align: center;"><img class="aligncenter" title="Software Enginnering For Developers Cover" src="http://ecx.images-amazon.com/images/I/21CBjnCXnzL._SL500_AA300_.jpg" alt="" width="300" height="300" /></p>
<p style="text-align: left;">As a book that concerns itself with software engineering I say it does the job. It&#8217;s an 800 page beast covering topics from UML, resource management, project risks, stipulations and damage control. More interestingly enough it tries to tie that with actual game development. It goes quite in-depth in each of it&#8217;s topics and gives plenty of further references if any particular one interests you. Overall it&#8217;s a good book.</p>
<p style="text-align: left;">But that&#8217;s not really what I want to discuss about.</p>
<p style="text-align: left;">You see, the book comes with a game a small team of developers made using a variety of software engineering techniques. This serves to show how one can apply them into game development. The game is quite stable, performing well given the myriad of things attached to it (3d mesh loading, textures, events, GUI, scripts, etc). However there&#8221;s just one problem with it:</p>
<p style="text-align: left;">It&#8217;s not really any <strong>fun</strong>.</p>
<p style="text-align: left;">Now I&#8217;m sure the goal of the book  is to teach software developers techniques they can use in their own development, with the game being fun not a pre-requisite in this scenario. It had to be <strong>functional</strong>, not fun.</p>
<p style="text-align: left;">That&#8217;s one of the things game development as a software differs from others. If a program manager assumes that a project will take:</p>
<ul>
<li><strong>w </strong>hours of development</li>
<li>take <strong>y</strong> developers to develop it</li>
<li>cost <strong>z </strong>dollars</li>
<li>have <strong>k</strong> use cases</li>
</ul>
<p>And it ends up taking exactly that, most likely that was a successful project.</p>
<p>The problem with game development is that even if you manage to make a game with all your estimates correct, if the game in the end is not fun than you still have an unsuccessful project. Sure it can still sell well, but it&#8217;ll probably take tons of marketing to make up for it.</p>
<p>Some could say that fun is a <a href="http://en.wikipedia.org/wiki/Non-functional_requirements"><strong>non-functional requirement</strong></a>, which is true. However it undermines it&#8217;s importance into the actual game development process. Sucesfull game companies have long realized this and build entire systems of software enginnering whose sole goal is to enhance and facilitate adding &#8216;fun&#8217; to a game.</p>
<p>Valve software uses their CABAL system, ID software with their endless  internal engine prototypes, Blizzard with their QA tests, and so on.</p>
<p>Which leads me to conclude:</p>
<blockquote><p>Sometimes the most important aspect of a project cannot be expressed in a process or in a form. That is still not a justification to leave it out off processes and forms.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://versus-software.com/blog/planning-vs-common-sense/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working with a team of one</title>
		<link>http://versus-software.com/blog/working-with-a-team-of-one/</link>
		<comments>http://versus-software.com/blog/working-with-a-team-of-one/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 23:12:06 +0000</pubDate>
		<dc:creator>J.Raza</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[rambling]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://versus-software.com/blog/?p=34</guid>
		<description><![CDATA[I was having a chat with my good friend this afternoon. He was having some trouble getting the XML parser on the iPhone to work and I tried to help him out where I could. I gave him the tip to always check for the xml error parser code, when something goes wrong, even if [...]]]></description>
			<content:encoded><![CDATA[<p>I was having a chat with my good friend this afternoon. He was having some trouble getting the XML parser on the iPhone to work and I tried to help him out where I could. I gave him the tip to always check for the xml error parser code, when something goes wrong, even if most likely nothing will.</p>
<p>He said that he was doing this project solo, and that such verification wasn&#8217;t necessary. That&#8217;s when I remarked &#8220;Two months from today you will be another person working on this project.&#8221; He got the joke and we both laughed.</p>
<p>You see even when you are working alone, as projects evolve, change focus or simply take time, you will forget about different assumptions you had previously taken. You will also forget about previous remarks you had in your code, which functions should be called, by whom and so on.</p>
<p>A solo project is still being developed by a team of individuals. They&#8217;re just separated by the 4rth dimension.</p>
]]></content:encoded>
			<wfw:commentRss>http://versus-software.com/blog/working-with-a-team-of-one/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced

Served from: versus-software.com @ 2012-05-19 07:06:21 -->
