<?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>engfer(s) &#187; Software Design</title>
	<atom:link href="http://www.engfers.com/category/software-design/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.engfers.com</link>
	<description>» scrumptions blog &#038; code » nothing more, nothing less</description>
	<lastBuildDate>Tue, 06 Oct 2009 21:52:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Some Computer Science Blogs You Might Consider Following</title>
		<link>http://www.engfers.com/2008/11/26/some-computer-science-blogs-you-might-consider-following/</link>
		<comments>http://www.engfers.com/2008/11/26/some-computer-science-blogs-you-might-consider-following/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 19:06:40 +0000</pubDate>
		<dc:creator>engfer</dc:creator>
				<category><![CDATA[Software Design]]></category>

		<guid isPermaLink="false">http://www.engfers.com/?p=1065</guid>
		<description><![CDATA[Here&#8217;s a list of CS blogs that I find interesting and insightful. If there&#8217;s any more I should be following, let me know! The List Martin Fowler Martin Fowler is the author of several notable CS books; his most notable book is Patterns of Enterprise Application Architecture (currently reading this at the moment). The articles [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a list of CS blogs that I find interesting and insightful. If there&#8217;s any more I should be following, let me know!</p>
<p><span id="more-1065"></span></p>
<h3 class="hrule"><span style="color: #3366ff;">The List</span></h3>
<p><strong>Martin Fowler</strong></p>
<p>Martin Fowler is the author of several notable CS books; his most notable book is <a href="http://www.amazon.com/gp/product/0321200683?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321200683">Patterns of Enterprise Application Architecture</a> (currently reading this at the moment). The articles on his blog are interesting and thought provoking.</p>
<ul>
<li><strong><a href="http://martinfowler.com/bliki">Martin&#8217;s blog</a></strong> [ <a style="background: transparent url(http://engfers.com/wp-content/plugins/rss.jpg) scroll no-repeat left center; padding: 1px 0px 1px 20px" href="http://martinfowler.com/bliki/bliki.atom">RSS</a> ]</li>
</ul>
<p><strong>ThoughtBlogs</strong></p>
<p>ThoughtBlogs is the aggregation of articles from tons of <a href="http://www.thoughtworks.com/">ThoughtWorks</a>&#8216; employees (consulting company). It&#8217;s worth looking at because they hire some pretty smart people; Martin Fowler is their chief scientist.</p>
<ul>
<li><strong><a href="http://blogs.thoughtworks.com">ThoughtBlogs</a></strong> [ <a style="background: transparent url(http://engfers.com/wp-content/plugins/rss.jpg) scroll no-repeat left center; padding: 1px 0px 1px 20px" href="http://blogs.thoughtworks.com/rss20.xml">RSS</a> ]</li>
</ul>
<p><strong>Tim Berners-Lee</strong><br />
For those of you who don&#8217;t know, Tim Berners-Lee was the first person to successfully establish an connection between an HTTP client and server (he invented the intarwebz), and now serves as director of the W3C.</p>
<p>** Be advised; this doesn&#8217;t get updated very often.</p>
<ul>
<li><strong><a href="http://dig.csail.mit.edu/breadcrumbs/blog/4">Tim&#8217;s blog @ DIG</a></strong> [ <a style="background: transparent url(http://engfers.com/wp-content/plugins/rss.jpg) scroll no-repeat left center; padding: 1px 0px 1px 20px" href="http://dig.csail.mit.edu/breadcrumbs/blog/4/feed">RSS</a> ]</li>
</ul>
<p><strong>Ivar Jacobson</strong></p>
<p>Ivar was one of the 3 developers (along with Grady Booch and James Rumbaugh) who developed and defined <a href="http://en.wikipedia.org/wiki/Unified_Modeling_Language">UML</a> and the <a href="http://en.wikipedia.org/wiki/Rational_Unified_Process">Rational Unified Process</a>. He maintains a blog that has some interesting articles.</p>
<ul>
<li><strong><a href="http://ivarjacobson.wordpress.com/">Ivar&#8217;s blog</a></strong> [ <a style="background: transparent url(http://engfers.com/wp-content/plugins/rss.jpg) scroll no-repeat left center; padding: 1px 0px 1px 20px" href="http://ivarjacobson.wordpress.com/feed">RSS</a> ]</li>
</ul>
<p><strong>Grady Booch</strong></p>
<p>Grady Booch was one of the other &#8220;3 Amigos&#8221; (listed above) to develop <a href="http://en.wikipedia.org/wiki/Unified_Modeling_Language">UML</a> and the <a href="http://en.wikipedia.org/wiki/Rational_Unified_Process">RUP</a>. He now works at <a href="http://www.research.ibm.com/">IBM Research</a> as chief scientist of the Software Engineering group.</p>
<p>**At the time of writing this post, his website seems to be down. Google&#8217;s cache shows that the last cached version was on Nov. 20, 2008. Hopefully he gets it fixed soon!</p>
<ul>
<li><strong><a href="http://www.booch.com/architecture/blog.jsp">Booch&#8217;s blog</a></strong> [ <a style="background: transparent url(http://engfers.com/wp-content/plugins/rss.jpg) scroll no-repeat left center; padding: 1px 0px 1px 20px" href="http://www.booch.com/architecture/blog/text/blog.xml">RSS</a> ]</li>
</ul>
<p><strong>Mark Russinovich</strong></p>
<p>Mark is a technical fellow at Microsoft in the research group; he was co-creator of <a href="http://technet.microsoft.com/en-us/sysinternals/default.aspx">Sysinternals</a> when it was usurped into MS. He updates at a decent rate and his articles are pretty long.</p>
<ul>
<li><strong><a href="http://blogs.technet.com/markrussinovich">Mark&#8217;s blog</a></strong> [ <a style="background: transparent url(http://engfers.com/wp-content/plugins/rss.jpg) scroll no-repeat left center; padding: 1px 0px 1px 20px" href="http://blogs.technet.com/markrussinovich/rss.xml">RSS</a> ]</li>
</ul>
<p><strong>Raymond Chen</strong></p>
<p>Raymond is a well known developer for Microsoft&#8217;s Windows Shell team. The writing style for his blog and book, both titled <span style="text-decoration: underline;">The Old New Thing</span>, is very witty and funny; it&#8217;s a pretty good read.</p>
<ul>
<li><strong><a href="http://blogs.msdn.com/oldnewthing">Raymond&#8217;s blog</a></strong> [ <a style="background: transparent url(http://engfers.com/wp-content/plugins/rss.jpg) scroll no-repeat left center; padding: 1px 0px 1px 20px" href="http://blogs.msdn.com/oldnewthing/rss.xml">RSS</a> ]</li>
</ul>
<p><strong>Jakob Nielson</strong></p>
<p>Jakob is a leading web usability consultant; he writes usability articles for his website, <a href="http://www.useit.com">useit.com</a>. The site contains some really interesting articles on usability and human-computer interaction. For example, read his article on the &#8220;<a href="http://www.useit.com/alertbox/reading_pattern.html">F-Shaped Pattern For Reading Web Content</a>&#8220;.</p>
<p>His site isn&#8217;t pretty, and it doesn&#8217;t really follow his own guidelines; nevertheless, the articles are worth reading. Unfortunately, Jakob missed the boat on RSS feeds, so you can only subscribe via his mailing list.</p>
<ul>
<li><strong><a href="http://www.useit.com/alertbox/">Useit.com&#8217;s Alertbox</a></strong></li>
</ul>
<p><strong>Seth Godin</strong></p>
<p>This is not really a CS blog at all; however, I did include this for SEO and internet marketing. Many consider Seth Godin to be a genius at marketing. You can see some of his talks online that he&#8217;s done at various businesses and events: <a href="http://video.google.com/videoplay?docid=-6909078385965257294">@ Google</a>, <a href="http://video.google.com/videoplay?docid=-4101280286098310645">@ Gel 2006</a>, <a href="http://www.ted.com/index.php/talks/view/id/28">@ TED</a>, <a href="http://blog.hubspot.com/blog/tabid/6307/bid/4383/Seth-Godin-America-s-Greatest-Marketer.aspx">@ 2008 Inbound Marketing Summit</a>, and a <a href="http://blog.mixergy.com/seth-godin-tribe">presentation on his book, Tribes</a>.</p>
<ul>
<li><strong><a href="http://sethgodin.typepad.com/seths_blog">Seth&#8217;s blog</a></strong> [ <a style="background: transparent url(http://engfers.com/wp-content/plugins/rss.jpg) scroll no-repeat left center; padding: 1px 0px 1px 20px" href="http://sethgodin.typepad.com/seths_blog/index.rdf">RSS</a> ]</li>
</ul>
<p><strong>Google Blog&#8217;s</strong></p>
<p>Google has a whole <a href="http://www.google.com/press/blogs/directory.html">slew of blogs</a> for their products and some other topics they like to cover. Some of them are good, and some of them are just product update articles; therefore, I listed the ones that I thought contained the most interesting articles.</p>
<ul>
<li><strong><a href="http://googleresearch.blogspot.com/">Google Research Blog</a></strong> [ <a style="background: transparent url(http://engfers.com/wp-content/plugins/rss.jpg) scroll no-repeat left center; padding: 1px 0px 1px 20px" href="http://googleresearch.blogspot.com/rss.xml">RSS</a> ]</li>
<li><strong><a href="http://googletesting.blogspot.com/">Google Testing Blog</a></strong> [ <a style="background: transparent url(http://engfers.com/wp-content/plugins/rss.jpg) scroll no-repeat left center; padding: 1px 0px 1px 20px" href="http://googletesting.blogspot.com/rss.xml">RSS</a> ]</li>
</ul>
<p><strong>Google Employees</strong></p>
<ul>
<li><strong><a href="http://scienceblogs.com/goodmath/">Mark Chu-Carroll&#8217;s blog</a></strong> [ <a style="background: transparent url(http://engfers.com/wp-content/plugins/rss.jpg) scroll no-repeat left center; padding: 1px 0px 1px 20px" href="http://scienceblogs.com/goodmath/atom.xml">RSS</a> ] <em>via Christopher Roach</em></li>
<li><a href="http://steve-yegge.blogspot.com/"><strong>Steve Yegge&#8217;s blog</strong></a> [ <a style="background: transparent url(http://engfers.com/wp-content/plugins/rss.jpg) scroll no-repeat left center; padding: 1px 0px 1px 20px" href="http://steve-yegge.blogspot.com/atom.xml">RSS</a> ]</li>
</ul>
<p><strong>IBM&#8217;s developerWorks Sites</strong></p>
<p>The IBM developerWorks sites contain some pretty useful information about the respective topics they cover. The IBM employees in those groups write the articles for the sites and many of the articles are worth reading.</p>
<ul>
<li><strong><a href="http://www.ibm.com/developerworks/architecture">Architecture</a></strong> [ <a style="background: transparent url(http://engfers.com/wp-content/plugins/rss.jpg) scroll no-repeat left center; padding: 1px 0px 1px 20px" href="http://www.ibm.com/developerworks/views/architecture/rss/libraryview.jsp">RSS</a> ]</li>
<li><strong><a href="http://www.ibm.com/developerworks/webservices">Web services</a></strong> [ <a style="background: transparent url(http://engfers.com/wp-content/plugins/rss.jpg) scroll no-repeat left center; padding: 1px 0px 1px 20px" href="http://www.ibm.com/developerworks/views/webservices/rss/libraryview.js">RSS</a> ]</li>
<li><strong><a href="http://www.ibm.com/developerworks/web">Web development</a></strong> [ <a style="background: transparent url(http://engfers.com/wp-content/plugins/rss.jpg) scroll no-repeat left center; padding: 1px 0px 1px 20px" href="http://www.ibm.com/developerworks/views/web/rss/libraryview.jsp">RSS</a> ]</li>
<li><strong><a href="http://www.ibm.com/developerworks/java">Java</a></strong> [ <a style="background: transparent url(http://engfers.com/wp-content/plugins/rss.jpg) scroll no-repeat left center; padding: 1px 0px 1px 20px" href="http://www.ibm.com/developerworks/views/java/rss/libraryview.jsp">RSS</a> ]</li>
<li><strong><a href="http://www.ibm.com/developerworks/linux">Linux</a></strong> [ <a style="background: transparent url(http://engfers.com/wp-content/plugins/rss.jpg) scroll no-repeat left center; padding: 1px 0px 1px 20px" href="http://www.ibm.com/developerworks/views/linux/rss/libraryview.jsp">RSS</a> ]</li>
</ul>
<p>You can find IBM employee blogs and the rest of IBM&#8217;s feeds</p>
<ul>
<li><strong><a href="http://www.ibm.com/developerworks/rss/#blogfeeds">developerWorks&#8217; other RSS feeds</a></strong></li>
</ul>
<h3 class="hrule"><span style="color: #3366ff;">Something Missing? Sucked? Good?<br />
</span></h3>
<p>Do you think something&#8217;s missing from this list? Let me know, so I can update it.</p>
<p>Did this list suck? Let me know (in the constructive way) how to fix it.</p>
<p>Was this list Good? Rate the article and leave a comment?<br />
<div align="center"><script type="text/javascript"><!--
google_ad_client = "pub-9461422058527053";
google_ad_slot = "5057152483";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.engfers.com/2008/11/26/some-computer-science-blogs-you-might-consider-following/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Why Rapid Prototyping Generally Sucks For a Developer</title>
		<link>http://www.engfers.com/2008/09/23/why-rapid-prototyping-generally-sucks-for-a-developer/</link>
		<comments>http://www.engfers.com/2008/09/23/why-rapid-prototyping-generally-sucks-for-a-developer/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 21:28:13 +0000</pubDate>
		<dc:creator>engfer</dc:creator>
				<category><![CDATA[Rants]]></category>
		<category><![CDATA[Software Design]]></category>

		<guid isPermaLink="false">http://www.engfers.com/?p=457</guid>
		<description><![CDATA[Rapid prototyping can be a wonderful thing for involving the end customer in the design and development process; it can make them happy (it shows progress) which makes you money; however, if you have the wrong kind of customer, your life as a developer can becoming a living nightmare. The horror is increased by several [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-medium wp-image-489 aligncenter" title="Rapid prototyping sucks..." src="http://www.engfers.com/wp-content/uploads/2008/09/track.jpg" alt="" /></p>
<p>Rapid prototyping <strong>can be a wonderful</strong> thing for involving the end customer in the design and development process; it can make them happy (<em>it shows progress</em>) which makes you money; however, if you have the <span style="text-decoration: underline;">wrong kind of customer</span>, your life as a developer can becoming a <span style="color: #ff0000;"><strong>living nightmare</strong></span>. The horror is increased by <em>several orders of magnitude</em> if you have the requirement to produce <strong>fully functional </strong>prototypes.</p>
<p style="text-align: center;">
<p><span id="more-457"></span></p>
<h3 class="hrule"><span style="color: #3366ff;">What Is Rapid Prototyping?</span></h3>
<p>It&#8217;s a software development process that involves creating incomplete prototypes of an application that either helps build or build toward the ideal of the final design of the application.</p>
<p>There are several different methods of rapid prototyping as listed on the <a href="http://en.wikipedia.org/wiki/Software_prototyping">Wikipedia article</a>:</p>
<ul>
<li><em>Throwaway</em> &#8211; none of the actual code developed will be used in the final product (FAST)</li>
<li><em>Evolutionary</em> &#8211; iterative design and development of functional prototypes (and the code used isn&#8217;t thrown away)</li>
<li><em>Incremental</em> &#8211; piecemeal construction of a larger prototype using smaller prototypes</li>
<li><em>Extreme</em> &#8211; like everything else but has a period where mock-data is used</li>
</ul>
<p><strong><span style="text-decoration: underline;">Advantages of Rapid Prototyping</span> </strong>(via <a href="http://en.wikipedia.org/wiki/Software_prototyping">Wikipedia article</a>)</p>
<ul>
<li><strong>Lowered development time and costs</strong>
<ul>
<li>Less process to get in the way of defining; the customer can see requested changes <em>fast</em></li>
</ul>
</li>
<li><strong>Increased customer involvement in design and development</strong>
<ul>
<li>User&#8217;s can give immediate and incremental feedback on the prototypes so they end up with a much happier, better functioning product</li>
</ul>
</li>
</ul>
<p><div align="center"><script type="text/javascript"><!--
google_ad_client = "pub-9461422058527053";
google_ad_slot = "5057152483";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</div></p>
<h3 class="hrule"><span style="color: #3366ff;">Why Is It So Bad Then?</span></h3>
<p>If you have a customer that would like something, but they don&#8217;t know what they want, and they tend to get stuck on telling you how to implement their something instead of real concrete requirements. RUN!!!</p>
<p>Let&#8217;s just take a quick look at the disadvantages&#8230;</p>
<p><span style="text-decoration: underline;"><strong>Disadvantages of Rapid Prototyping</strong></span> (via <a href="http://en.wikipedia.org/wiki/Software_prototyping">Wikipedia article</a>)</p>
<ul>
<li><strong>Poor/insufficient analysis</strong>
<ul>
<li>Since you were busy <em>coding your life away</em> on a feature that&#8217;s not really &#8220;production-ready&#8221; and you only have a week or two to finish, you might not have had enough time to sit back and really <strong>think </strong>about your design. You could make some <em>dumb </em>mistakes that could have been fixed by thinking about the problem from a different angle or using more time.Now imagine every other developer working on the same project but on different parts! You may have a functional prototype, but it may well easily be a <strong>big ball of hack</strong></li>
</ul>
</li>
<li><strong>Customers don&#8217;t tend realize that the prototype is a &#8220;<em>prototype</em>&#8220;</strong>
<ul>
<li>This one can be really bad. If you give a customer a prototype release with the GUI features working but the data is not really connected to the real data (so that you could ask them if this new GUI feature was what they wanted), they will always try to use it as a final product and ask instead, &#8220;<em>where&#8217;s my data?</em>&#8220;</li>
<li><span style="color: #ff0000;"><em>Rapid prototyping tends to allow the customer to foucs more on the minute volatile details rather than the larger picture or the workflows.</em></span><span style="color: #ff0000;"><em></em></span></li>
<li>Another problem, <strong>once the customer sees a feature, they tend to stick with that feature even though it may evolve</strong>.  They have been trying to imagine the solution to their problem, and you give them a half-arse solution; the next release you give them something better or it changes and they will want to stick with the old and poorer features (i.e. once you&#8217;ve laid the track around the mountain, they won&#8217;t like it if you decide to tunnel the track through the mountain even though it might have been shorter/cheaper/better/whatever)</li>
</ul>
</li>
<li><strong>Clouding of the developer&#8217;s goals and mission as compared to the customer</strong>
<ul>
<li>The customers will ask for features sometimes, and everyone thought they knew what the customer meant by those features/requirements; however, what they wanted and what was interpreted can become skewed and misaligned. To help you out, <em>make sure to ask them for the business case for everything they are requiring!</em> <strong>Ask, ask ask!</strong> They need to know why they are asking for the new feature.</li>
</ul>
</li>
<li><strong>Developers are too attached to their creations </strong>
<ul>
<li>Developers might spend 40+ engineer hours each on a feature, and when the prototype iteration is released, the customer might say to throw the feature out.  Developers will try to persuade the customer that it&#8217;s a viable feature (even though it may not); developers really don&#8217;t like wasting their coding time; however, it is a prototype so developers <strong>should </strong>be ready for  features (especially those with a lot of sweat and blood in them) to be thrown out or never used.</li>
</ul>
</li>
<li><strong>Way too much development time of a prototype </strong>
<ul>
<li>This is where the paradox of rapid prototyping exists because RP boats faster time to market. Developers tend to over-architect and spend way too much time on the features of a prototype for efficiency or whatever reason, and a change in the requirements or features totally negates the time spent on the architecture.  When it comes down to it, development teams really need to make their deadlines, <em>so don&#8217;t over-architect a feature that the customer isn&#8217;t completely gang-ho for; just put enough design in to mitigate medium-level risks until the feature is solidified.</em></li>
<li>There also exists a big balance issue here: <span style="color: #ff0000;">do you sacrifice design for lowered development time? <span style="color: #000000;">or </span>do you extend the development time for better analysis and design?</span> It&#8217;s all dependent on what type of prototyping you want to do; throwaway-prototyping makes it much easier to hack away and come back later for better analysis and design</li>
</ul>
</li>
</ul>
<p><span style="color: #ff0000;"><strong>What does it all mean?</strong></span></p>
<p>It means that developers tend to work a ton of time (just to make the release deadlines) on over-architected features that the customer may or may not want.</p>
<p>How satisfactory is it for a developer when the stuff they create is destroyed?</p>
<h3 class="hrule"><span style="color: #3366ff;">Case Study: IT Asset Adhoc Reporting</span></h3>
<p><strong>Background:</strong></p>
<p>Our customer has a contract with another very large company to audit the IT assets that the customer has.  The original requirements for that large company were to produce quite a few reports of the IT asset audit status.</p>
<p>The customer then asked this contractor to produce a queryable form for all the IT assets, so the large contractor gave them a <strong>MS Access database</strong> with very elementary <strong>MS Access query Form</strong>.</p>
<p>We had the job to migrate the MS Access database into Oracle for reporting purposes, which stunk because there were no primary-key or foreign-key constraints enforced (replicated data was in the Access DB)</p>
<p><span style="color: #3366ff;"><strong>Adhoc Reports (ranting&#8230;)<br />
</strong></span></p>
<p>The customer wanted us to create a mechanism for adhoc query reporting, but they didn&#8217;t know what they wanted,  so we researched for a week on the industry standards of adhoc query reporting like JReport or some other type of business intelligence suites that had lots of features like pivot tables, drag-and-drop report generation, and drill-down capabilities.</p>
<p>We presented the idea to them and they said that they just wanted something that functioned like the MS Access query form, so we did that.  Then they <strong>complained </strong>that the form looked like the MS Access query form!!!</p>
<p>We then needed to glean the report generation workflow from them and gave them working prototypes of each workflow.  Their comments back were, &#8220;<em>the form is missing these fields</em>&#8220;, &#8220;<em>the font is too big</em>&#8220;, and &#8220;<em>I want a green popup when I hover over this thing</em>&#8221; instead of &#8220;we like workflow option 2&#8243; or whatever.</p>
<p>We have been asking questions constantly about the requirements and the answers come back in the form of <em>more questions</em>!!! It&#8217;s just the way this customer is.  Moreover, since we constantly ask them questions about the prototypes for feedback, they decided to take that as an offense and they complained to their higher ups that we weren&#8217;t doing anything. So what did we do? Make prototypes in closer release intervals! BAH!</p>
<p>Moreover, they told use that we<strong> can&#8217;t warehouse</strong> the data to <strong>normalize </strong>it, but yet they <strong>complain </strong>that they see null&#8217;s and replicated fields.</p>
<p>Since we aren&#8217;t a bunch of dumb developers, we like making good quality products, and when the requirements change as much as they do, it&#8217;s sad to see your stuff that you created just go to waste.  I can&#8217;t tell you how many lines of code were just <em>thrown away</em>. I know that some of the readers will be saying, &#8220;well, you should have designed it better&#8221;.  Well yeah, we know!!!  However, with two week release cycles it&#8217;s pretty hard to do that when the requirements end up changing the design dramatically; moreover, I don&#8217;t want to work 80 hours a week on design that might change anyway.</p>
<p>However, they do <strong>pay the bills</strong>, so we must do as we are told. Enough of my complaining. This wasn&#8217;t as much of a case study as it was a rant I guess, and I do apologize.</p>
<p>The point of this is that it takes a lot of sweat and blood to make these prototypes, and the customer is just never happy; therefore, we aren&#8217;t happy.</p>
<p><span style="color: #3366ff;"><strong><span style="text-decoration: underline;">Moral of the Story</span>: If you are going to chose a prototyping method, use <em>throwaway</em>!!! It will be the best for everyone, and you won&#8217;t deliver a ball of hack as your final product.<br />
</strong></span></p>
<h3 class="hrule"><span style="color: #ff0000;">Has Anyone Else Experienced As Much Trouble with Rapid Prototyping?</span></h3>
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll. Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
<p><div align="center"><script type="text/javascript"><!--
google_ad_client = "pub-9461422058527053";
google_ad_slot = "5057152483";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</div></p>
<h3><span style="color: #ff0000;">What are Your Comments on RP?</span></h3>
<p>Please leave a comment on your expieriences and thoughts of rapid prototyping!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.engfers.com/2008/09/23/why-rapid-prototyping-generally-sucks-for-a-developer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>15 Books To Make You a Better Software Engineer (Not Web-Developer Designer)</title>
		<link>http://www.engfers.com/2008/08/29/15-books-to-make-you-a-better-software-engineer-not-web-developer/</link>
		<comments>http://www.engfers.com/2008/08/29/15-books-to-make-you-a-better-software-engineer-not-web-developer/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 21:51:13 +0000</pubDate>
		<dc:creator>engfer</dc:creator>
				<category><![CDATA[Software Design]]></category>
		<category><![CDATA[patterns]]></category>

		<guid isPermaLink="false">http://www.engfers.com/?p=138</guid>
		<description><![CDATA[We were starting to get sick of the &#8220;X# Design Websites That Web Designers Need To Follow!!11!!&#8221; articles and other similar items pertaining to web development design coming through the pike on the social news sites like Digg and Delicious (we won&#8217;t even bring up reddit&#8230; try reducing the stories to programming), so we decided [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" src="http://www.engfers.com/wp-content/uploads/2008/06/soft_developer.png" alt="&lt;strike&gt;Web Developer&lt;/strike&gt; Software Engineer" /></p>
<p>We were starting to get <strong>sick </strong>of the <em>&#8220;X# Design Websites That Web Designers Need To Follow!!11!!&#8221;</em> articles and other <a href="http://digg.com/search?s=web+developer&amp;submit=Search&amp;section=all&amp;type=both&amp;area=promoted&amp;sort=score" target="_blank">similar items pertaining to web <span style="text-decoration: line-through;">development</span> design</a> coming through the pike on the social news sites like <a title="Teh Digg" href="http://www.digg.com" target="_blank">Digg</a> and <a href="http://del.icio.us/" target="_blank">Delicious</a> (we won&#8217;t even bring up <a href="http://www.reddit.com" target="_blank">reddit</a>&#8230; <em>try </em>reducing the stories to programming), so we decided to do something about it.  There is nothing wrong with those articles, but every <strong>once in a while </strong>it would be good to see a resource that talks about enterprise design; unfortunately, <span style="text-decoration: underline;"><strong>not everyone is a freelance web-developer</strong>.</span></p>
<p>So we decided to put together a <em>list of books</em> that we thought you should read to make you a <em>better</em> <strong>software engineer</strong>&#8230;<span id="more-138"></span></p>
<h3>1. <span style="color: #3366ff;">Patterns of Enterprise Application Architecture</span></h3>
<div style="float: right"><a href="http://www.amazon.com/gp/product/0321200683?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321200683"><img src="http://www.engfers.com/wp-content/uploads/2008/08/pofeaa.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0321200683" border="0" alt="" width="1" height="1" /></div>
<p><strong>Author(s)</strong>: Martin Fowler</p>
<p><strong>Publisher</strong>: Addison-Wesley Professional</p>
<p><strong>ISBN</strong>: 978-0321200686</p>
<p><strong>Linky</strong>: <a href="http://www.amazon.com/gp/product/0321200683?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321200683" target="_blank">Amazon</a></p>
<p>This book serves as a good base for enterprise application architecture and comes highly recommended.  The book is written in 2 parts: the <strong>first </strong>part of the book serves as a tutorial and foundation for developing enterprise applications (things like MVC, business logic organization, concurrency, object registries, Object Relational topics, etc), the <strong>second </strong>part is a pattern catalog.  A list of the patterns and short descriptions/UML can be found on the <strong><a title="P of EEA Patterns" href="http://martinfowler.com/eaaCatalog/" target="_blank">author&#8217;s website</a></strong>.</p>
<p>For those of you unfamiliar with <strong><a title="Martin Fowler - Wikipedia" href="http://en.wikipedia.org/wiki/Martin_Fowler" target="_blank">Martin Fowler</a></strong>, you <em>need </em>to be.  He is a brilliant speaker, writer and software architect that works for the <a href="http://www.thoughtworks.com/" target="_blank">ThoughtWorks</a> consulting firm.  His website has a plethora of <strong><a href="http://martinfowler.com/articles.html" target="_blank">information and articles</a></strong> that are worthwhile reading; moreover, <a href="http://martinfowler.com/bliki/" target="_blank">his blog</a> (er um &#8220;bliki&#8221;) has some very thought-provoking articles.</p>
<h3>2. <span style="color: #3366ff;">Core J2EE Patterns</span></h3>
<div style="float: right"><a href="http://www.amazon.com/gp/product/0131422464?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0131422464"><img src="http://www.engfers.com/wp-content/uploads/2008/08/corej2eejpng.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0131422464" border="0" alt="" width="1" height="1" /></div>
<p><strong>Author(s)</strong>: Deepak Alur, Dan Malks, John Crupi</p>
<p><strong>Publisher</strong>: Prentice-Hall (2nd Edition)</p>
<p><strong>ISBN</strong>: 978-0131422469</p>
<p><strong>Linky</strong>: <a href="http://www.amazon.com/gp/product/0131422464?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0131422464" target="_blank">Amazon</a></p>
<p>This book serves as the goto-book for the patterns used in the J2EE spec; it covers the different components in the J2EE Model-View-Controller architecture such as <a href="http://www.corej2eepatterns.com/Patterns2ndEd/FrontController.htm">front-controller</a>, <a href="http://www.corej2eepatterns.com/Patterns2ndEd/DataAccessObject.htm">data-access-object (DAO)</a>, <a href="http://www.corej2eepatterns.com/Patterns2ndEd/ViewHelper.htm">view-helpers</a>, <a href="http://www.corej2eepatterns.com/Patterns2ndEd/ApplicationService.htm">application-service</a>, <a href="http://www.corej2eepatterns.com/Patterns2ndEd/SessionFacade.htm">session-facade</a>, etc&#8230;</p>
<p>The book divides the patterns into the three application tiers: <strong>presentation tier</strong>, <strong>business tier</strong>, and <strong>integration tier</strong>.  This serves as a much better source for the patterns than trying to dig through Sun&#8217;s J2EE tutorial. If you don&#8217;t buy the book, at least make pattern cards for those patterns!</p>
<p>The book&#8217;s website (<a href="http://www.corej2eepatterns.com/Patterns2ndEd/index.htm" target="_blank">http://www.corej2eepatterns.com</a>) also <strong><a href="http://www.corej2eepatterns.com/Patterns2ndEd/index.htm" target="_blank">lists and describes the design patterns</a></strong> in the book; there is also a <a href="http://www.corej2eepatterns.com/Patterns2ndEd/index.htm" target="_blank">giant class interaction diagram</a>.</p>
<h3>3. <span style="color: #3366ff;">Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions<br />
</span></h3>
<div style="float: right"><a href="http://www.amazon.com/gp/product/0321127420?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321127420"><img src="http://www.engfers.com/wp-content/uploads/2008/08/eipatt.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0321127420" border="0" alt="" width="1" height="1" /></div>
<p><strong>Author(s)</strong>: Gregor Hohpe, Bobby Woolf</p>
<p><strong>Publisher</strong>: Addison-Wesley Professional</p>
<p><strong>ISBN</strong>: 978-0321200686</p>
<p><strong>Linky</strong>: <a href="http://www.amazon.com/gp/product/0321127420?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321127420" target="_blank">Amazon</a></p>
<p>This was another wonderful book for those that are interested in learning about <strong>enterprise messaging</strong>. The obvious choice for this is using Java&#8217;s <a href="http://en.wikipedia.org/wiki/Java_Message_Service">JMS</a> system (or the JMS extended counterparts: Websphere MQ (MQSeries), JbossMQ, MSMQ, etc); however, the book does talk about other systems of messaging: <strong>file-based</strong>, <strong>RPC</strong>, <strong>shared DB</strong>, etc.</p>
<p>Messaging is great for enterprise applications because it offers an easy solution (<em>not necessarily by code or setup</em>) to any problem that needs both/either synchronous and/or asynchronous communication. The book talks about many topics dealing with messaging: <strong>systems, channels, construction, routing, control, endpoints, transaction, delivery and other topics</strong>.</p>
<p>Some of the example patterns covered include: <strong><a href="http://www.enterpriseintegrationpatterns.com/WireTap.html">wire-tap</a></strong>, <strong><a href="http://www.enterpriseintegrationpatterns.com/Aggregator.html">aggregator</a></strong>, <strong><a href="http://www.enterpriseintegrationpatterns.com/EventDrivenConsumer.html">event-driven-consumer</a></strong>, <strong><a href="http://www.enterpriseintegrationpatterns.com/SmartProxy.html">smart-proxy</a></strong>. You can see the full <a href="http://www.enterpriseintegrationpatterns.com/toc.html"><strong>pattern catalog</strong> at the book&#8217;s site</a>.</p>
<h3>4. <span style="color: #3366ff;">Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development</span></h3>
<div style="float: right"><a href="http://www.amazon.com/gp/product/0131489062?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0131489062"><img src="http://www.engfers.com/wp-content/uploads/2008/08/apply_uml_pattjpng.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0131489062" border="0" alt="" width="1" height="1" /></div>
<p><strong>Author(s)</strong>: Craig Larman</p>
<p><strong>Publisher</strong>: Prentice-Hall (3rd Edition)</p>
<p><strong>ISBN</strong>: 978-0131489066</p>
<p><strong>Linky</strong>: <a href="http://www.amazon.com/gp/product/0131489062?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0131489062" target="_blank">Amazon</a></p>
<p>Some people would scoff at us for including this book in the list; well, we did anyways because it is worth it.  If you are a <em>beginner to mid-level software engineer/developer</em> and you <em>don&#8217;t know</em> what any of these terms are: <strong>agile, Unified Process, UML, OOA&amp;D, GRASP, and GoF</strong>&#8230; then this is the book for you.</p>
<p>Larman does a pretty good job of describing an agile software development process and some of the basic documentation needed for designing a robust application/system (<strong>patterns, requirements gathering, iterations, planning, diagramming, use-cases</strong>).   He uses UML (Unified Modeling Language) and the Unified Process to walk you through the foundational concepts of object-oreinted analysis and design, and he includes a fake case-study as an example.</p>
<p>He also mentions and describes the use of the design patterns developed by the <strong>GoF </strong>(Gang of Four = Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides) and what are known as the <strong>GRASP</strong> patterns: <strong><span style="text-decoration: underline;">G</span>eneral <span style="text-decoration: underline;">R</span>esponsibility <span style="text-decoration: underline;">A</span>ssignment <span style="text-decoration: underline;">P</span>rinciples</strong> (<em>Information Expert, Creator, Controller, Low Coupling, High Cohesion, Polymorphism, Pure Fabrication, Indirection, Protected Variations</em>).  The GRASP patterns (developed by Larman) describe ways and best-practices for assigning responsibilities to an object during design.  The book goes into detail but you can <strong><a title="GRASP Patterns" href="http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design)" target="_blank">read the highlights on Wikipedia</a></strong>.</p>
<h3>5. <span style="color: #3366ff;">Introduction to Algorithms</span></h3>
<div style="float: right"><a href="http://www.amazon.com/gp/product/0262032937?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0262032937"><img src="http://www.engfers.com/wp-content/uploads/2008/08/algo.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0262032937" border="0" alt="" width="1" height="1" /></div>
<p><strong>Author(s)</strong>: Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein</p>
<p><strong>Publisher</strong>: MIT Press (2nd Edition)</p>
<p><strong>ISBN</strong>: 978-0262032933</p>
<p><strong>Linky</strong>: <a href="http://www.amazon.com/gp/product/0262032937?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0262032937" target="_blank">Amazon</a></p>
<p>If you were ever looking for an <strong>algorithm dictionary</strong>, this would definitely be it. Don&#8217;t let the word &#8220;Introduction&#8221; in the title scare you away from this book; it&#8217;s the exact opposite.</p>
<p>To rattle off just a few of the topics and algorithms covered: <em>master method, randomization, heapsort, quicksort, asymptotic runtime analysis, medians and order statistics, stacks, queues, linked lists, hash tables, perfect hashing, binary search trees red-black trees, dynamic programming, huffman codes, greedy algorithms, minimum spanning tree, optimal subset, amortized analysis, b-trees, splay trees, binomial heaps, fibonacci heaps, disjoint sets, strongly connected components, rank and path compression, graphs, all pairs shortest paths, breadth first search, depth first search, topological sort, minimum spanning trees, kruskal&#8217;s algorithm, prim&#8217;s algorithm, dijkstra&#8217;s algorithm, ford-fulkerson method, maximum flow min cut, edmonds-karp algorithm, comparison networks, bitonic sorting network, matricies, strassen&#8217;s algorithm, solving systems of linear equations, linear programming, polynomials, discrete and fast fourier transform, RSA public-key cryptosystem, primality testing, string matching, rabin-karp algorithm, knuth-morris-pratt string matching, computational gemotry, line and segment intersection, vertex cover, convex hull, np-complete problems, traveling salesman</em>.</p>
<p>The pseudo-code is a little annoying if you are used to counting from 0&#8230;n-1 because they start from counting from &#8220;1&#8243; instead.</p>
<p>As a side note, I&#8217;d like to see them write the <em>non-introductory</em> version of this 1184 page book!</p>
<h3>6. <span style="color: #3366ff;">Design Patterns: Elements of Reusable Object-Oriented Software</span></h3>
<div style="float: right"><a href="http://www.amazon.com/gp/product/0201633612?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201633612"><img src="http://www.engfers.com/wp-content/uploads/2008/08/design_patt_gof.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0201633612" border="0" alt="" width="1" height="1" /></div>
<p><strong>Author(s)</strong>: Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides</p>
<p><strong>Publisher</strong>: Addison-Wesley Processional</p>
<p><strong>Linky</strong>: <a href="http://www.amazon.com/gp/product/0201633612?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201633612" target="_blank">Amazon</a></p>
<p>Whenever you hear the words &#8220;software&#8221; and &#8220;pattern&#8221; used in a sentence together, you&#8217;ll likely hear this book title or the synonym for the group of authors thrown in somewhere in the mix because this is the definitive source for software patterns.  Whenever someone mentions <strong>GoF</strong> or <strong>Gang-of-Four</strong> or buying their book, this is what they are talking about (<em>referring to the &#8220;gang&#8221; of the four authors of this book</em>)</p>
<p>The book is divided into two parts. The first part talks about object-oriented programming in general and includes a case study on a WYSIWYG editor using pseudo-code and UML diagrams; the second part is the detailed description of the following 23 patterns&#8230;</p>
<p><strong>Creational Patterns</strong></p>
<ul>
<li><em>Abstract Factory, Builder, Factory Method, Prototype, Singleton</em></li>
</ul>
<p><strong>Structural </strong><strong>Patterns</strong></p>
<ul>
<li><em>Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy</em></li>
</ul>
<p><strong>Behavioral Patterns</strong></p>
<ul>
<li><em>Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor</em></li>
</ul>
<p>This book is a must-get just for the collection of patterns alone.</p>
<h3>7-15. <span style="color: #3366ff;"><em>Any Other Book</em> from the <span style="text-decoration: underline;">Addison-Wesley Signature Series</span></span></h3>
<p><strong>Author(s)</strong>: many&#8230;</p>
<p><strong>Publisher</strong>: Addison-Wesley Professional</p>
<p><strong>Linky</strong>: <a href="http://www.amazon.com/s/ref=nb_ss_b?url=search-alias%3Dstripbooks&amp;field-keywords=Addison-Wesley+Signature+Series&amp;x=0&amp;y=0" target="_blank">Amazon</a></p>
<p>Honestly, all of these books can add be added to your list of things to read they are all completely amazing in the fields that they cover. Martin Fowler and Kent Beck signed off on the books that were put in this series. Some of the books that are listed&#8230;</p>
<table border="0" width="90%">
<tbody>
<tr>
<td width="50%" align="center"><a href="http://www.amazon.com/gp/product/0321205685?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321205685"><strong>User Stories Applied</strong><br />
<img src="http://www.engfers.com/wp-content/uploads/2008/08/user_stories_applied.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0321205685" border="0" alt="" width="1" height="1" /></td>
<td width="50%" align="center"><a href="http://www.amazon.com/gp/product/0321146530?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321146530"><strong>Test Driven Development</strong><br />
<img src="http://www.engfers.com/wp-content/uploads/2008/08/test_driven_dev.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0321146530" border="0" alt="" width="1" height="1" /></td>
</tr>
<tr>
<td width="50%" align="center"><a href="http://www.amazon.com/gp/product/0321437381?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321437381"><strong>Implementing Lean Software Development</strong><br />
<img src="http://www.engfers.com/wp-content/uploads/2008/08/lean_soft.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0321437381" border="0" alt="" width="1" height="1" /></td>
<td width="50%" align="center"><a href="http://www.amazon.com/gp/product/0131495054?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0131495054"><strong>xUnit Test Patterns</strong><br />
<img src="http://www.engfers.com/wp-content/uploads/2008/08/xunit.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0131495054" border="0" alt="" width="1" height="1" /></td>
</tr>
<tr>
<td width="50%" align="center"><a href="http://www.amazon.com/gp/product/0321336380?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321336380"><strong>Continuous Integration</strong><br />
<img src="http://www.engfers.com/wp-content/uploads/2008/08/cont_integ.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0321336380" border="0" alt="" width="1" height="1" /></td>
<td width="50%" align="center"><a href="http://www.amazon.com/gp/product/0321413091?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321413091"><strong>Implementation Patterns</strong><br />
<img src="http://www.engfers.com/wp-content/uploads/2008/08/imp_patterns.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0321413091" border="0" alt="" width="1" height="1" /></td>
</tr>
<tr>
<td width="50%" align="center"><a href="http://www.amazon.com/gp/product/0321293533?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321293533"><strong>Refactoring Databases</strong><br />
<img src="http://www.engfers.com/wp-content/uploads/2008/08/ref_db.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0321293533" border="0" alt="" width="1" height="1" /></td>
<td width="50%" align="center"><a href="http://www.amazon.com/gp/product/0201775948?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201775948"><strong>Beyond Software Architecture</strong><br />
<img src="http://www.engfers.com/wp-content/uploads/2008/08/beyond_soft_arch.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0201775948" border="0" alt="" width="1" height="1" /></td>
</tr>
<tr>
<td width="50%" align="center"><a href="http://www.amazon.com/gp/product/0321213351?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321213351"><strong>Refactoring To Patterns</strong><br />
<img src="http://www.engfers.com/wp-content/uploads/2008/08/ref_patt.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0321213351" border="0" alt="" width="1" height="1" /></td>
<td width="50%" align="center"><a href="http://www.amazon.com/gp/product/0321503635?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321503635"><strong>Refactoring HTML</strong><br />
<img src="http://www.engfers.com/wp-content/uploads/2008/08/ref_html.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0321503635" border="0" alt="" width="1" height="1" /></td>
</tr>
<tr>
<td width="50%" align="center"><a href="http://www.amazon.com/gp/product/0321503627?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321503627"><strong>Growing Object-Oriented Software, Guided by Tests</strong><br />
<img src="http://www.engfers.com/wp-content/uploads/2008/08/growing_oos_by_tests.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0321503627" border="0" alt="" width="1" height="1" /></td>
<td width="50%" align="center"><a href="http://www.amazon.com/gp/product/0321304721?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321304721"><strong>Aspect Oriented Refactoring</strong><br />
<img src="http://www.engfers.com/wp-content/uploads/2008/08/ao_ref.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0321304721" border="0" alt="" width="1" height="1" /></td>
</tr>
</tbody>
</table>
<h3 class="hrule"><span style="color: #ff0000;">Give Me More!!!</span></h3>
<p>Go have a ball with Wikipedia&#8217;s List of <a href="http://en.wikipedia.org/wiki/List_of_important_publications_in_computer_science"><strong>Important Publications In Computer Science</strong></a><br />
<div align="center"><script type="text/javascript"><!--
google_ad_client = "pub-9461422058527053";
google_ad_slot = "5057152483";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</div></p>
<h3 class="hrule"><span style="color: #ff0000;">Update: Code Style</span></h3>
<p>So I have noticed that my article mentions software engineer; I am sorry for my selection of diction. Maybe I should have said software developer as to not piss people off.</p>
<p>However, since we are on the topic&#8230; I thought that I might add a few more books having to do with <strong>code style</strong> to help you out!<strong></strong></p>
<h3><span style="color: #3366ff;">The Elements of Java Style</span></h3>
<div style="float: right"><a href="http://www.amazon.com/gp/product/0521777682?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0521777682"><img src="http://www.engfers.com/wp-content/uploads/2008/09/eojs.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0521777682" border="0" alt="" width="1" height="1" /></div>
<p><strong>Author(s)</strong>: Allan Vermeulen, Scott W. Ambler, Greg Bumgardner, Eldon Metz, Trevor Misfeldt, Jim Shur, Alan Vermeulen, Patrick Thompson</p>
<p><strong>Publisher</strong>: Cambridge University Press</p>
<p><strong>ISBN</strong>: 978-0521777681</p>
<p><strong>Linky</strong>: <a href="http://www.amazon.com/gp/product/0521777682?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0521777682" target="_blank">Amazon</a></p>
<p>This is a very short book that serves as Java style conventions in several areas: formatting, naming conventions (variable, class, package, method, etc), programming conventions (type safety, construction, execption handling, synchronization, etc), and documentation conventions. If you are looking for a common convention for you or your group to follow. This is a start.</p>
<p>It&#8217;s also worth it to check out the rest of the SIGS Reference Library.</p>
<p>There are two more books that follow the same flow that I would like to recommend:</p>
<table border="0" width="90%">
<tbody>
<tr>
<td width="50%" align="center"><a href="http://www.amazon.com/gp/product/0521616786?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0521616786"><img src="http://www.engfers.com/wp-content/uploads/2008/09/eous.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0521616786" border="0" alt="" width="1" height="1" /></td>
<td width="50%" align="center"><a href="http://www.amazon.com/gp/product/0521893089?ie=UTF8&amp;tag=engfers-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0521893089"><img src="http://www.engfers.com/wp-content/uploads/2008/09/eocs.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=engfers-20&amp;l=as2&amp;o=1&amp;a=0521893089" border="0" alt="" width="1" height="1" /></td>
</tr>
</tbody>
</table>
<p><em>Now I <strong>know </strong>that someone is going to say&#8230; <strong>UML ISN&#8217;T CODING! </strong>They would be correct, but I felt that since you should be able to generate code from UML and UML from code, I figured that I would throw it on there as well; moreover and more <span style="text-decoration: underline;">importantly</span>, <strong>it will force you to find a style!!!</strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.engfers.com/2008/08/29/15-books-to-make-you-a-better-software-engineer-not-web-developer/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
