<?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>FormatException</title>
	<atom:link href="http://www.formatexception.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.formatexception.com</link>
	<description>Ramblings on developing in the Windows World</description>
	<lastBuildDate>Wed, 10 Feb 2010 15:07:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Programming for Maintenance</title>
		<link>http://www.formatexception.com/2010/02/programming-for-maintenance/</link>
		<comments>http://www.formatexception.com/2010/02/programming-for-maintenance/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 15:07:58 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Programming Standards]]></category>
		<category><![CDATA[maintenance]]></category>

		<guid isPermaLink="false">http://www.formatexception.com/?p=270</guid>
		<description><![CDATA[Code Complete defines Maintainability as &#8220;The ease with which you can modify a software system to change or add capabilities, improve performance, or correct defects.&#8221;
I&#8217;ve been thinking for awhile now about this post and I&#8217;ve been unsure of exactly what needs to be here.  I know I&#8217;ve done a lot of maintenance work.  It&#8217;s inevitable.  [...]]]></description>
			<content:encoded><![CDATA[<p>Code Complete defines Maintainability as &#8220;The ease with which you can modify a software system to change or add capabilities, improve performance, or correct defects.&#8221;</p>
<p>I&#8217;ve been thinking for awhile now about this post and I&#8217;ve been unsure of exactly what needs to be here.  I know I&#8217;ve done a lot of maintenance work.  It&#8217;s inevitable.  You name the field and chances are we&#8217;ve developed something for it.  A lot of the software we develop we do so because there just isn&#8217;t commercial off the shelf (COTS) software for the business process.  COTS is for the broad market.  So customers come to us when COTS doesn&#8217;t meet their needs.</p>
<p>Which gets us to maintenance.  We try the best we can but in any software application there will be bugs.  It is inevitable, it is a fact of life.  Unless you are just writing a &#8220;Hello World&#8221; program there will be people who use your product in ways you didn&#8217;t expect.  We have had clients who take the application we&#8217;ve written for them and walk away.  Not because they&#8217;re unhappy but because the cost to fix every single bug and add in every feature they want can often be prohibitive.  They&#8217;re happy where the app is and that&#8217;s good enough.</p>
<p>Most clients stay with us for a maintenance tail.  They prioritize the bugs they want fixed and features they want added and budget accordingly.  We want happy clients, it&#8217;s that simple.  The happier they are with us the more work they bring to us.  This is common across all businesses, whether you&#8217;re a dry-cleaner or doing software services, a happy client is good.</p>
<p>So in software services how do you make a client happy?  In my experience it&#8217;s been minimizing maintenance tail costs.  But how do you do this?  I&#8217;m going to try and sum up where I have noticed problems.  I could reprint Code Complete here and say, &#8220;There, that&#8217;s how you do it&#8221; but that would be meaningless.  The point of this post is to focus on a few key points.</p>
<p>1.  The obvious:  Requirements, requirements, requirements.<br />
As much as possible try to impress upon your clients the importance of requirements.  The more requirements analysis and design that is done up front before even beginning development the cheaper the maintenance tail.  It&#8217;s fact the earlier you find a problem the cheaper it is to fix. (Code Complete, Table 3-1, Average Cost of Fixing Defects Based on When They&#8217;re Introduced and Detected)</p>
<p>The biggest problem with this?  Most of the time clients don&#8217;t know what they want.  That&#8217;s right, they come to us and say, &#8220;Well, I want an application that does this.&#8221;  But what does that mean?  Does this need to mirror an existing business process?  Is it something completely new?  Do you have an idea of how the process should flow?  Do you know where you get your data and where it should go?  What kind of reporting are you going to need? (Customers never know that last one)</p>
<p>A lot of time we end up building up an existing business process in order to understand what needs to be developed for the application.  That&#8217;s okay.  I can accept that business analysis may be a part of the job.  So this is key:  (most of the time)  Clients don&#8217;t know what they want.  They will usually have a generally vague idea but you will have to help them.  Try to come up with a basic set of requirements.  Next, at a minimum, whip out Visio (there are better products out there but Visio is probably the most common) and throw together a few pages of the app.  Put together some sort of flow.  Help them bring their vision to reality.  Only then will they really begin to understand their own requirements and process.  Only then will they see what&#8217;s there and what&#8217;s missing.  Most clients can&#8217;t envision software.  They&#8217;re paying money for something that is completely virtual and just can&#8217;t see the final product.</p>
<p>Now, this is all well and good.  The problem is that a lot of clients don&#8217;t want to spend several weeks (or longer) designing the app, they want to get moving on it.  This leads to iterative development.  It&#8217;s more expensive.  But done properly I&#8217;ve still had happy clients.  Prioritize parts of the application.  Model a couple of those pages, build it, move on.  You will have problems.  I had one client who missed telling us about a key part of data for the app.  The ERD we had didn&#8217;t support this new data so we had to build out some new tables and fix everything.  This was after we&#8217;d done requirements and modeled the pages.  It wasn&#8217;t until the app was in beta that he went, &#8220;Oh, and you need to put this in there.&#8221;</p>
<p>2.  Naming Conventions: Use it, love it<br />
This is going to sound stupid but one of the biggest problems I&#8217;ve had coming in to maintain an app I didn&#8217;t design or build is naming conventions.  Even if the names are consistent and meaningful, when there is no standard across an application where multiple developers have been working on it, it takes way too long to understand everything.  I&#8217;m not saying that your company should enact a strict naming convention company wide.  That would be nice but it&#8217;s not reality.  Your project lead, however, should.  Even if you&#8217;re working under different project leads you need to adapt.  This is especially true in this polyglot world of development.  At one time I was working on a PHP project, a java project and a C# project.  Each has their own naming conventions.  Yes, it took longer when I had to switch projects to re-orient myself but that in and of itself is the nature of polyglot programming.  I know that when someone comes behind me to maintain the app (and in a lot of cases it&#8217;s even me) it is a hell of a lot easier to get going on maintenance when there is some sort of naming convention across the app.</p>
<p>So what do I mean by naming conventions?  Method names, event and delegate names, variable names.  If it takes a name there needs to be a standard.  Whether it&#8217;s public, private, static, constant, an enum or class, there needs to be a standard.  The only place I haven&#8217;t seen a need for naming conventions is internal to methods.  If the app is coded right and adhering to basic OOP methodology variables internal to a method shouldn&#8217;t be around that long.  They still should be meaningful but I don&#8217;t care if you want to put an underscore in front of your internal variables or not.  I don&#8217;t care if you want to capitalize them or not.  Anytime I have to walk through from class to method to class to method to delegate to method there better be some sort of convention.  Otherwise it costs the client money.  There will always be some sort of spin-up when entering maintenance.  Just try and minimize it.</p>
<p>So you&#8217;ve got your requirements and naming conventions, what&#8217;s next?</p>
<p>3.  OOP, if you use it, use it<br />
The biggest trouble I&#8217;ve had, excepting those mentioned above, are projects where developers seemed to take a procedural approach to OOP.  God classes and methods (functions?), poor use of inheritance and virtually no use of interfaces.  This makes maintenance tough.  I have to admit I myself was bit lacking in this area out of college.  Sure I took an OOP class, sure I had the theory but applying the theory is wholly different then having the theory.  And I&#8217;m not the only one.  It seems one of the universal constants having new engineers on my team fresh out of college is that they can&#8217;t apply OOP.  This often also applies to self-taught programmers who many times don&#8217;t even have the theory.</p>
<p>I want a black box (Code Complete, Encapsulate Implementation Details, Information Hiding).  When I step into a method during troubleshooting I want to only go into that method once.  There after I want to trust that the method works as intended.  I want a method to only do one thing and not affect parts outside of itself.  If I have a login control it should only be doing login.  I want a class to default all properties (getters/setters) to private.  I don&#8217;t want those variables being changed outside the class unless they need to be.  I want interfaces(Code Complete, Form Consistent Abstractions).  It seems like this is the least understood by programmers straight out of college.  So often new engineers like to inherit and override.  Obviously this has it&#8217;s time and place.  But think if this really is needed or if you just need to create an interface (Code Complete, Inherit-When Inheritance Simplifies the Design).</p>
<p>I digress, I&#8217;m starting to write out Code Complete.  If nothing else, use and apply Code Complete, 5.3 Design Building Blocks: Heuristics.</p>
<p>So how to fix this?  If you have an engineer on your team that you&#8217;re not familiar with do a code review.  Assign him a task and take a look at his code.  I don&#8217;t think I carry the title Senior Software Engineer because I such a great programmer.  Really I barely consider myself adequate.  I have seen a lot of code, written a lot myself, I lead teams pretty well as a project lead and clients like to work with me.  If you&#8217;re leading a project remember the code of the engineers underneath you is your responsibility.  Yeah, you might ruffle some feathers.  We programmers take our code personally.  We&#8217;re proud of it.  No different than an architect whose proud of a house he&#8217;s built or a chef whose proud of his food.</p>
<p>4.  Stay up-to-date<br />
I won&#8217;t harp on this long because I&#8217;ve said this before.  Programmers use what&#8217;s available to them.  I love LINQ, but I know LINQ because I read about it before it was even released publicly.  I can do a lot of stuff easier with LINQ.  I love WPF, but I know WPF because I read about it before it was even released publicly.  I can do a lot of stuff easier with WPF then I could with WinForms.  If you don&#8217;t stay current there&#8217;s a good chance you&#8217;ll jump into a project where it&#8217;s using something you don&#8217;t understand.</p>
<p>5.  Code to maintain<br />
I suppose this is really the heart of the issue.  What the hell does this mean?  Any adequate programmer should be able to jump into a piece of code and start working on bugs and adding features.  I&#8217;m not saying there won&#8217;t be a spin-up.  Of course there is going to be some spin-up.  But try and minimize that.  When most people are working on code they&#8217;re not thinking that in a year or more someone is going to have to come behind them and read the same code trying to figure out what they were doing.  But they should be.</p>
<p>Finally, I want happy clients.  That means minimizing maintenance.  There will always be maintenance, it&#8217;s inevitable.  But when I can jump into the maintenance tail of an project faster, fix bugs faster, implement new features faster than clients are happier and my job is easier.  And I like it when my job is easier.  It will always be challenging but I prefer challenging and fun to challenging and a pain in my ass.</p>
<p>I could keep going.  Someone could write a book on the subject (yeah, I know, Code Complete).  This post is just intended to hit a few top issues I&#8217;ve seen when maintaining code. YMMV.  You may have seen other issues that top this list.  Tell me about them.  Post a comment.</p>
<p>Later,<br />
Brian</p>



Share and Enjoy:


	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.formatexception.com%2F2010%2F02%2Fprogramming-for-maintenance%2F&amp;title=Programming%20for%20Maintenance&amp;bodytext=Code%20Complete%20defines%20Maintainability%20as%20%22The%20ease%20with%20which%20you%20can%20modify%20a%20software%20system%20to%20change%20or%20add%20capabilities%2C%20improve%20performance%2C%20or%20correct%20defects.%22%0D%0A%0D%0AI%27ve%20been%20thinking%20for%20awhile%20now%20about%20this%20post%20and%20I%27ve%20been%20unsure%20of%20exact" title="Digg"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.formatexception.com%2F2010%2F02%2Fprogramming-for-maintenance%2F&amp;t=Programming%20for%20Maintenance" title="Facebook"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.formatexception.com%2F2010%2F02%2Fprogramming-for-maintenance%2F&amp;title=Programming%20for%20Maintenance" title="DotNetKicks"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.formatexception.com%2F2010%2F02%2Fprogramming-for-maintenance%2F&amp;title=Programming%20for%20Maintenance&amp;annotation=Code%20Complete%20defines%20Maintainability%20as%20%22The%20ease%20with%20which%20you%20can%20modify%20a%20software%20system%20to%20change%20or%20add%20capabilities%2C%20improve%20performance%2C%20or%20correct%20defects.%22%0D%0A%0D%0AI%27ve%20been%20thinking%20for%20awhile%20now%20about%20this%20post%20and%20I%27ve%20been%20unsure%20of%20exact" title="Google Bookmarks"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fwww.formatexception.com%2F2010%2F02%2Fprogramming-for-maintenance%2F&amp;title=Programming%20for%20Maintenance" title="Live"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fwww.formatexception.com%2F2010%2F02%2Fprogramming-for-maintenance%2F" title="Technorati"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://news.ycombinator.com/submitlink?u=http%3A%2F%2Fwww.formatexception.com%2F2010%2F02%2Fprogramming-for-maintenance%2F&amp;t=Programming%20for%20Maintenance" title="HackerNews"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/hackernews.png" title="HackerNews" alt="HackerNews" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.formatexception.com/2010/02/programming-for-maintenance/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Development for iPhone and Android with Mono</title>
		<link>http://www.formatexception.com/2009/10/development-for-iphone-and-android-with-mono/</link>
		<comments>http://www.formatexception.com/2009/10/development-for-iphone-and-android-with-mono/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 15:13:07 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[mono]]></category>

		<guid isPermaLink="false">http://www.formatexception.com/?p=267</guid>
		<description><![CDATA[Okay, for the first time ever I&#8217;m a bit jealous of iPhone users.(See below)  Novel (the sponsor of Mono) has released the MonoTouch, a C# and .NET development platform for the iPhone.  Granted it&#8217;s $400 for the platform but at least it&#8217;s not Objective C.  For those of you that don&#8217;t know Mono, it&#8217;s a [...]]]></description>
			<content:encoded><![CDATA[<p><span style="text-decoration: line-through;">Okay, for the first time ever I&#8217;m a bit jealous of iPhone users.</span>(See below)  Novel (the sponsor of Mono) has released the MonoTouch, a C# and .NET development platform for the iPhone.  Granted it&#8217;s $400 for the platform but at least it&#8217;s not Objective C.  For those of you that don&#8217;t know Mono, it&#8217;s a platform agnostic port of the .NET libraries, stable at about the equivalent of .NET 3.0 (which means LINQ and a bunch of other cool stuff).  That means, yes, if you want to you can do ASP.NET hosting on apache and linux.  Novell has long been a sponsor of mono and it seems like they&#8217;re going to get the opportunity to make some money back with the release of MonoTouch.  Of course you still need to have a Mac and be part of Apple&#8217;s iPhone Developer Program which is enough to kill it for me.</p>
<p>See<br />
<a href="http://monotouch.net/" target="_blank">http://monotouch.net/</a></p>
<p>For those of us with an Android phone, Mono is running in Android, it&#8217;s just not very stable.  <a href="http://www.koushikdutta.com/2009/01/compiling-mono-under-android-build.html" target="_blank">Here is a post</a> of one of the Mono developers that compiled the Mono libraries from his Android from a debian install on his SD card.  Yes, in Android he&#8217;s running debian to compile Mono.  Is that not just sweet nerdy goodness?  While there is no time line for a full stable release of Mono on Android it&#8217;s in active development and, unlike the iPhone/MonoTouch option, it probably won&#8217;t cost a thing once it gets stable.</p>
<p>So what does this mean for us doing smart phone development?  When I was in college I applied for and received a grant for a platform agnostic project, written in java, to do streaming media, web cam and audio between multiple PCs.  For the first month of the project I developed on linux (don&#8217;t remember the branch) with Java.  I moved all the code to Windows and came across serious threading issues.  I fixed all those and spent the next month developing in Windows.  After that second month I moved everything back to linux and ran across serious threading issues.  For the last month of the project I compiled to a shared directory and tested on both linux and Windows.  I highly doubt there will ever be a stable environment that will work for all platforms, hardware is just too different.  MonoTouch has specific interfaces to the iPhone APIs.  Once Mono for Android gets stable I&#8217;m sure there are going to be wrappers for the Java APIs for Android.  But is this a bad thing?  Isn&#8217;t competition good?</p>
<p>Later,<br />
Brian</p>



Share and Enjoy:


	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F10%2Fdevelopment-for-iphone-and-android-with-mono%2F&amp;title=Development%20for%20iPhone%20and%20Android%20with%20Mono&amp;bodytext=Okay%2C%20for%20the%20first%20time%20ever%20I%27m%20a%20bit%20jealous%20of%20iPhone%20users.%28See%20below%29%C2%A0%20Novel%20%28the%20sponsor%20of%20Mono%29%20has%20released%20the%20MonoTouch%2C%20a%20C%23%20and%20.NET%20development%20platform%20for%20the%20iPhone.%C2%A0%20Granted%20it%27s%20%24400%20for%20the%20platform%20but%20at%20least%20it%27s%20not%20Object" title="Digg"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.formatexception.com%2F2009%2F10%2Fdevelopment-for-iphone-and-android-with-mono%2F&amp;t=Development%20for%20iPhone%20and%20Android%20with%20Mono" title="Facebook"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F10%2Fdevelopment-for-iphone-and-android-with-mono%2F&amp;title=Development%20for%20iPhone%20and%20Android%20with%20Mono" title="DotNetKicks"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.formatexception.com%2F2009%2F10%2Fdevelopment-for-iphone-and-android-with-mono%2F&amp;title=Development%20for%20iPhone%20and%20Android%20with%20Mono&amp;annotation=Okay%2C%20for%20the%20first%20time%20ever%20I%27m%20a%20bit%20jealous%20of%20iPhone%20users.%28See%20below%29%C2%A0%20Novel%20%28the%20sponsor%20of%20Mono%29%20has%20released%20the%20MonoTouch%2C%20a%20C%23%20and%20.NET%20development%20platform%20for%20the%20iPhone.%C2%A0%20Granted%20it%27s%20%24400%20for%20the%20platform%20but%20at%20least%20it%27s%20not%20Object" title="Google Bookmarks"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F10%2Fdevelopment-for-iphone-and-android-with-mono%2F&amp;title=Development%20for%20iPhone%20and%20Android%20with%20Mono" title="Live"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fwww.formatexception.com%2F2009%2F10%2Fdevelopment-for-iphone-and-android-with-mono%2F" title="Technorati"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://news.ycombinator.com/submitlink?u=http%3A%2F%2Fwww.formatexception.com%2F2009%2F10%2Fdevelopment-for-iphone-and-android-with-mono%2F&amp;t=Development%20for%20iPhone%20and%20Android%20with%20Mono" title="HackerNews"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/hackernews.png" title="HackerNews" alt="HackerNews" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.formatexception.com/2009/10/development-for-iphone-and-android-with-mono/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ACM&#8217;s Software Engineering Code of Ethics and Professional Practice</title>
		<link>http://www.formatexception.com/2009/09/acms-software-engineering-code-of-ethics-and-professional-practice/</link>
		<comments>http://www.formatexception.com/2009/09/acms-software-engineering-code-of-ethics-and-professional-practice/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 17:47:17 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.formatexception.com/?p=261</guid>
		<description><![CDATA[Recently I came across ACM&#8217;s Software Engineering Code of Ethics and Professional Practice.   One of the things I&#8217;ve tried to push around here is the idea that we as software engineers must constantly strive to stay current in our ever changing world.  Like a doctor who must stay current with the latest medical procedures and [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I came across <a href="http://www.acm.org/about/se-code" target="_blank">ACM&#8217;s Software Engineering Code of Ethics and Professional Practice</a>.   One of the things I&#8217;ve tried to push around here is the idea that we as software engineers must constantly strive to stay current in our ever changing world.  Like a doctor who must stay current with the latest medical procedures and drugs we as software engineers must stay current with the latest language features and APIs.  It&#8217;s nice, egotistically speaking, to see that other people share my opinions on the matter <img src='http://www.formatexception.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .  Though I know this was created in 1999 I don&#8217;t think a lot of people are familiar with it.  I&#8217;d recommend reading the full version at the link above but here is the short version:</p>
<p><a name="short"><strong>Software Engineering Code of Ethics and Professional Practice  (Short Version)</strong></a></p>
<p><strong>PREAMBLE</strong></p>
<p>The short version of the code summarizes aspirations at a high level of the  abstraction; the clauses that are included in the full version give examples and  details of how these aspirations change the way we act as software engineering  professionals. Without the aspirations, the details can become legalistic and  tedious; without the details, the aspirations can become high sounding but  empty; together, the aspirations and the details form a cohesive code.</p>
<p>Software engineers shall commit themselves to making the analysis,  specification, design, development, testing and maintenance of software a  beneficial and respected profession. In accordance with their commitment to the  health, safety and welfare of the public, software engineers shall adhere to the  following Eight Principles:</p>
<p>1. PUBLIC &#8211; Software engineers shall act consistently with the public  interest.</p>
<p>2. CLIENT AND EMPLOYER &#8211; Software engineers shall act in a manner that is in  the best interests of their client and employer consistent with the public  interest.</p>
<p>3. PRODUCT &#8211; Software engineers shall ensure that their products and related  modifications meet the highest professional standards possible.</p>
<p>4. JUDGMENT &#8211; Software engineers shall maintain integrity and independence in  their professional judgment.</p>
<p>5. MANAGEMENT &#8211; Software engineering managers and leaders shall subscribe to  and promote an ethical approach to the management of software development and  maintenance.</p>
<p>6. PROFESSION &#8211; Software engineers shall advance the integrity and reputation  of the profession consistent with the public interest.</p>
<p>7. COLLEAGUES &#8211; Software engineers shall be fair to and supportive of their  colleagues.</p>
<p>8. SELF &#8211; Software engineers shall participate in lifelong learning regarding  the practice of their profession and shall promote an ethical approach to the  practice of the profession.</p>
<p><strong>This Code may be published without permission as long as it is not changed  in any way and it carries the copyright notice. Copyright (c) 1999 by the  Association for Computing Machinery, Inc. and the Institute for Electrical and  Electronics Engineers, Inc.</strong></p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"><a name="short"><strong>Software Engineering Code of Ethics and Professional PracticeSoftwareasdf</strong></a></div>



Share and Enjoy:


	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F09%2Facms-software-engineering-code-of-ethics-and-professional-practice%2F&amp;title=ACM%27s%20Software%20Engineering%20Code%20of%20Ethics%20and%20Professional%20Practice&amp;bodytext=Recently%20I%20came%20across%20ACM%27s%20Software%20Engineering%20Code%20of%20Ethics%20and%20Professional%20Practice.%C2%A0%C2%A0%20One%20of%20the%20things%20I%27ve%20tried%20to%20push%20around%20here%20is%20the%20idea%20that%20we%20as%20software%20engineers%20must%20constantly%20strive%20to%20stay%20current%20in%20our%20ever%20changing%20wor" title="Digg"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.formatexception.com%2F2009%2F09%2Facms-software-engineering-code-of-ethics-and-professional-practice%2F&amp;t=ACM%27s%20Software%20Engineering%20Code%20of%20Ethics%20and%20Professional%20Practice" title="Facebook"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F09%2Facms-software-engineering-code-of-ethics-and-professional-practice%2F&amp;title=ACM%27s%20Software%20Engineering%20Code%20of%20Ethics%20and%20Professional%20Practice" title="DotNetKicks"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.formatexception.com%2F2009%2F09%2Facms-software-engineering-code-of-ethics-and-professional-practice%2F&amp;title=ACM%27s%20Software%20Engineering%20Code%20of%20Ethics%20and%20Professional%20Practice&amp;annotation=Recently%20I%20came%20across%20ACM%27s%20Software%20Engineering%20Code%20of%20Ethics%20and%20Professional%20Practice.%C2%A0%C2%A0%20One%20of%20the%20things%20I%27ve%20tried%20to%20push%20around%20here%20is%20the%20idea%20that%20we%20as%20software%20engineers%20must%20constantly%20strive%20to%20stay%20current%20in%20our%20ever%20changing%20wor" title="Google Bookmarks"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F09%2Facms-software-engineering-code-of-ethics-and-professional-practice%2F&amp;title=ACM%27s%20Software%20Engineering%20Code%20of%20Ethics%20and%20Professional%20Practice" title="Live"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fwww.formatexception.com%2F2009%2F09%2Facms-software-engineering-code-of-ethics-and-professional-practice%2F" title="Technorati"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://news.ycombinator.com/submitlink?u=http%3A%2F%2Fwww.formatexception.com%2F2009%2F09%2Facms-software-engineering-code-of-ethics-and-professional-practice%2F&amp;t=ACM%27s%20Software%20Engineering%20Code%20of%20Ethics%20and%20Professional%20Practice" title="HackerNews"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/hackernews.png" title="HackerNews" alt="HackerNews" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.formatexception.com/2009/09/acms-software-engineering-code-of-ethics-and-professional-practice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle to Sun Customers</title>
		<link>http://www.formatexception.com/2009/09/oracle-to-sun-customers/</link>
		<comments>http://www.formatexception.com/2009/09/oracle-to-sun-customers/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 17:00:20 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.formatexception.com/?p=259</guid>
		<description><![CDATA[Oracle&#8217;s statement to Sun Customers.
What? No mention of Java.  I really couldn&#8217;t care about Solaris or SPARC.  What is the future of Java?



Share and Enjoy:


	
	
	
	
	
	
	


]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.oracle.com/features/suncustomers.html">Oracle&#8217;s statement to Sun Customers.</a></p>
<p>What? No mention of Java.  I really couldn&#8217;t care about Solaris or SPARC.  What is the future of Java?</p>



Share and Enjoy:


	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F09%2Foracle-to-sun-customers%2F&amp;title=Oracle%20to%20Sun%20Customers&amp;bodytext=Oracle%27s%20statement%20to%20Sun%20Customers.%0D%0A%0D%0AWhat%3F%20No%20mention%20of%20Java.%C2%A0%20I%20really%20couldn%27t%20care%20about%20Solaris%20or%20SPARC.%C2%A0%20What%20is%20the%20future%20of%20Java%3F" title="Digg"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.formatexception.com%2F2009%2F09%2Foracle-to-sun-customers%2F&amp;t=Oracle%20to%20Sun%20Customers" title="Facebook"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F09%2Foracle-to-sun-customers%2F&amp;title=Oracle%20to%20Sun%20Customers" title="DotNetKicks"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.formatexception.com%2F2009%2F09%2Foracle-to-sun-customers%2F&amp;title=Oracle%20to%20Sun%20Customers&amp;annotation=Oracle%27s%20statement%20to%20Sun%20Customers.%0D%0A%0D%0AWhat%3F%20No%20mention%20of%20Java.%C2%A0%20I%20really%20couldn%27t%20care%20about%20Solaris%20or%20SPARC.%C2%A0%20What%20is%20the%20future%20of%20Java%3F" title="Google Bookmarks"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F09%2Foracle-to-sun-customers%2F&amp;title=Oracle%20to%20Sun%20Customers" title="Live"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fwww.formatexception.com%2F2009%2F09%2Foracle-to-sun-customers%2F" title="Technorati"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://news.ycombinator.com/submitlink?u=http%3A%2F%2Fwww.formatexception.com%2F2009%2F09%2Foracle-to-sun-customers%2F&amp;t=Oracle%20to%20Sun%20Customers" title="HackerNews"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/hackernews.png" title="HackerNews" alt="HackerNews" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.formatexception.com/2009/09/oracle-to-sun-customers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.Net 4.0 stuff on the way.</title>
		<link>http://www.formatexception.com/2009/08/net-4-0-stuff-on-the-way/</link>
		<comments>http://www.formatexception.com/2009/08/net-4-0-stuff-on-the-way/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 21:51:21 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[.Net 4.0]]></category>

		<guid isPermaLink="false">http://www.formatexception.com/?p=256</guid>
		<description><![CDATA[Here&#8217;s some nice .Net 4.0 stuff on the way.  I&#8217;ve been working on some poker tournament software with a lot of the new 4.0 features in mind.  Once I have a couple of posts ready I&#8217;ll throw them up.
Thanks,
Brian



Share and Enjoy:


	
	
	
	
	
	
	


]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s some <a href="http://jyotsnakalambe.wordpress.com/2009/08/14/new-release-net-framework-4-0-features/">nice .Net 4.0 stuff on the way</a>.  I&#8217;ve been working on some poker tournament software with a lot of the new 4.0 features in mind.  Once I have a couple of posts ready I&#8217;ll throw them up.</p>
<p>Thanks,<br />
Brian</p>



Share and Enjoy:


	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F08%2Fnet-4-0-stuff-on-the-way%2F&amp;title=.Net%204.0%20stuff%20on%20the%20way.&amp;bodytext=Here%27s%20some%20nice%20.Net%204.0%20stuff%20on%20the%20way.%20%20I%27ve%20been%20working%20on%20some%20poker%20tournament%20software%20with%20a%20lot%20of%20the%20new%204.0%20features%20in%20mind.%20%20Once%20I%20have%20a%20couple%20of%20posts%20ready%20I%27ll%20throw%20them%20up.%0D%0A%0D%0AThanks%2C%0D%0ABrian" title="Digg"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.formatexception.com%2F2009%2F08%2Fnet-4-0-stuff-on-the-way%2F&amp;t=.Net%204.0%20stuff%20on%20the%20way." title="Facebook"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F08%2Fnet-4-0-stuff-on-the-way%2F&amp;title=.Net%204.0%20stuff%20on%20the%20way." title="DotNetKicks"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.formatexception.com%2F2009%2F08%2Fnet-4-0-stuff-on-the-way%2F&amp;title=.Net%204.0%20stuff%20on%20the%20way.&amp;annotation=Here%27s%20some%20nice%20.Net%204.0%20stuff%20on%20the%20way.%20%20I%27ve%20been%20working%20on%20some%20poker%20tournament%20software%20with%20a%20lot%20of%20the%20new%204.0%20features%20in%20mind.%20%20Once%20I%20have%20a%20couple%20of%20posts%20ready%20I%27ll%20throw%20them%20up.%0D%0A%0D%0AThanks%2C%0D%0ABrian" title="Google Bookmarks"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F08%2Fnet-4-0-stuff-on-the-way%2F&amp;title=.Net%204.0%20stuff%20on%20the%20way." title="Live"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fwww.formatexception.com%2F2009%2F08%2Fnet-4-0-stuff-on-the-way%2F" title="Technorati"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://news.ycombinator.com/submitlink?u=http%3A%2F%2Fwww.formatexception.com%2F2009%2F08%2Fnet-4-0-stuff-on-the-way%2F&amp;t=.Net%204.0%20stuff%20on%20the%20way." title="HackerNews"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/hackernews.png" title="HackerNews" alt="HackerNews" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.formatexception.com/2009/08/net-4-0-stuff-on-the-way/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Self-referencing Bindings</title>
		<link>http://www.formatexception.com/2009/06/self-referencing-bindings/</link>
		<comments>http://www.formatexception.com/2009/06/self-referencing-bindings/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 14:56:22 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.formatexception.com/?p=243</guid>
		<description><![CDATA[Between keeping up with what&#8217;s coming for .Net 4.0 as well as the end of a large DOD contract I&#8217;ve been a bit busy (and no developer fatigue, just busy  ).  But don&#8217;t fret loyal readers, more will be coming soon.
Until then here is a bit of xaml for self-referencing bindings.
&#60;TextBlock
  Grid.Column="1"
 [...]]]></description>
			<content:encoded><![CDATA[<p>Between keeping up with what&#8217;s coming for .Net 4.0 as well as the end of a large DOD contract I&#8217;ve been a bit busy (and no developer fatigue, just busy <img src='http://www.formatexception.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ).  But don&#8217;t fret loyal readers, more will be coming soon.</p>
<p>Until then here is a bit of xaml for self-referencing bindings.</p>
<pre name="code" class="csharp">&lt;TextBlock
  Grid.Column="1"
  Width="75"
  Foreground="{StaticResource ActiveTabForeground}"
  TextWrapping="NoWrap"
  TextTrimming="CharacterEllipsis"
  ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=Text}"
  Name="txtHeader"/&gt;</pre>
<p>As you can see I often use these with TextBlocks where I&#8217;m using text trimming.  The reason being that, with text trimming, the text gets cut short if it exceeds the width of the textblock.  This way users will be able to mouse over the textblock and get the tooltip containing the full value.</p>
<p>Where else would this be useful?  Well, um, I don&#8217;t know since I only use this with tooltips on TextBlocks.  But it is certainly helpful for that.</p>
<p>Enjoy,<br />
Brian</p>



Share and Enjoy:


	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F06%2Fself-referencing-bindings%2F&amp;title=Self-referencing%20Bindings&amp;bodytext=Between%20keeping%20up%20with%20what%27s%20coming%20for%20.Net%204.0%20as%20well%20as%20the%20end%20of%20a%20large%20DOD%20contract%20I%27ve%20been%20a%20bit%20busy%20%28and%20no%20developer%20fatigue%2C%20just%20busy%20%3A%29%29.%20%20But%20don%27t%20fret%20loyal%20readers%2C%20more%20will%20be%20coming%20soon.%0D%0A%0D%0AUntil%20then%20here%20is%20a%20bit%20of%20xaml%20" title="Digg"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.formatexception.com%2F2009%2F06%2Fself-referencing-bindings%2F&amp;t=Self-referencing%20Bindings" title="Facebook"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F06%2Fself-referencing-bindings%2F&amp;title=Self-referencing%20Bindings" title="DotNetKicks"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.formatexception.com%2F2009%2F06%2Fself-referencing-bindings%2F&amp;title=Self-referencing%20Bindings&amp;annotation=Between%20keeping%20up%20with%20what%27s%20coming%20for%20.Net%204.0%20as%20well%20as%20the%20end%20of%20a%20large%20DOD%20contract%20I%27ve%20been%20a%20bit%20busy%20%28and%20no%20developer%20fatigue%2C%20just%20busy%20%3A%29%29.%20%20But%20don%27t%20fret%20loyal%20readers%2C%20more%20will%20be%20coming%20soon.%0D%0A%0D%0AUntil%20then%20here%20is%20a%20bit%20of%20xaml%20" title="Google Bookmarks"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F06%2Fself-referencing-bindings%2F&amp;title=Self-referencing%20Bindings" title="Live"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fwww.formatexception.com%2F2009%2F06%2Fself-referencing-bindings%2F" title="Technorati"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://news.ycombinator.com/submitlink?u=http%3A%2F%2Fwww.formatexception.com%2F2009%2F06%2Fself-referencing-bindings%2F&amp;t=Self-referencing%20Bindings" title="HackerNews"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/hackernews.png" title="HackerNews" alt="HackerNews" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.formatexception.com/2009/06/self-referencing-bindings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developer Fatigue?</title>
		<link>http://www.formatexception.com/2009/05/developer-fatigue/</link>
		<comments>http://www.formatexception.com/2009/05/developer-fatigue/#comments</comments>
		<pubDate>Tue, 19 May 2009 17:24:23 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.formatexception.com/?p=231</guid>
		<description><![CDATA[In the recent Visual Studio magazine I saw the following survey:



Do you sense developer fatigue due to the pace of Microsoft Technology introductions?


Yes, some fatigue
45%


No, little or no fatigue
26%


Yes, significant fatigue
24%


Don&#8217;t know
5%



(I love kicking it ol&#8217;school and using tables)
To the 26% that said no I say, &#8220;Good, you&#8217;re doing your job.&#8221;  To the rest [...]]]></description>
			<content:encoded><![CDATA[<p>In the recent Visual Studio magazine I saw the following survey:</p>
<table border="1">
<tbody>
<tr>
<td colspan="2">Do you sense developer fatigue due to the pace of Microsoft Technology introductions?</td>
</tr>
<tr>
<td>Yes, some fatigue</td>
<td>45%</td>
</tr>
<tr>
<td>No, little or no fatigue</td>
<td>26%</td>
</tr>
<tr>
<td>Yes, significant fatigue</td>
<td>24%</td>
</tr>
<tr>
<td>Don&#8217;t know</td>
<td>5%</td>
</tr>
</tbody>
</table>
<p>(I love kicking it ol&#8217;school and using tables)</p>
<p>To the 26% that said no I say, &#8220;Good, you&#8217;re doing your job.&#8221;  To the rest of you, &#8220;Get to work.&#8221;</p>
<p>I don&#8217;t often write opinion pieces preferring to keep the focus of this blog more on tutorial type posts, maybe because I don&#8217;t really consider myself any real authority.  I do my job and in the course of my job I learn a lot that I want to pass on to other people.</p>
<p>So why start now?  Well, this survey struck a nerve for me.  Maybe it&#8217;s because this has some fingers in my <a href="http://www.formatexception.com/2009/04/my-thoughts-on-oracle-sun-and-java/">post about Oracle and Java</a>.  In that post I reveled in the fact that Microsoft is able to keep the .Net framework moving forward at a fast pace and that, relative to .Net, Java has become fairly stagnant.</p>
<p>In Jeff Atwood&#8217;s post, <a href="http://www.codinghorror.com/blog/archives/001002.html">The Two Types of Programmers</a> he discusses the two types of programmers as mentioned in an article by Ben Collins-Sussman which says there are two classes of programmers, the &#8220;20%&#8221; and the &#8220;80%&#8221; programmers.</p>
<p>To this I have a serious problem.  I spend a great deal of time reading the latest programming books, blogs and magazines.  I do so because I want to stay current in my field.  If I was doctor it would be expected that I would stay up-to-date on the latest research and trends in the medical fields.  So should we as programmers.</p>
<p>Our job is to be the best programmers we can be.  Fatigue should be irrelevant.  Even if you are working in a world were the language features and APIs aren&#8217;t moving forward there is still a lot you can do.  Read up on patterns and anti-patterns, if you haven&#8217;t read Code Complete, do so.  I find the idea that programmers are perfectly happy to rest on their laurels completely ridiculous.  Strive to become a better programmer, push yourself and your knowledge.  As you become better at your job you will become a better person all-around.  Knowledge is power.</p>
<p>If you stay current fatigue isn&#8217;t an issue.  By keeping current incrementally there won&#8217;t be any fatigue.  Start reading up on .Net 4.0 right now.  By the time .Net 4.0 releases you will be pretty caught up and boom!, no more fatigue.</p>
<p>You may say, &#8220;Well, my job is to use this or that API or SDK.  Knowing anything outside of that is irrelevant.&#8221;  To that I&#8217;m calling &#8220;Bullshit!&#8221;  It&#8217;s not about just writing code.  If being a programmer was just about writing code then anybody could be a programmer.  Writing code is easy.  Writing code cleanly, efficiently so it&#8217;s easy to maintain, now that takes some skill.  The best way to do so is to stay current.</p>
<p>Saying that you&#8217;re experiencing &#8220;fatigue due to the pace of Microsoft Technology introductions&#8221; is a serious cop-out.  Staying current is your job because the more current you are the better programmer you are.  If I was a fry-cook I&#8217;d want to be the best damn fry-cook on the planet, learn the lingo, find the right temperature for the grill so it cooks the eggs and burgers efficiently, work on recipes that taste good and can cook fast.  I&#8217;m not a fry-cook, however, I&#8217;m a computer programmer.  Being the best programmer I can be means that I have to stay current on new technology.  Screw fatigue.</p>
<p>Thank you, that&#8217;s my time</p>
<p><em>high-pitched whine as I drop the microphone</em></p>



Share and Enjoy:


	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F05%2Fdeveloper-fatigue%2F&amp;title=Developer%20Fatigue%3F&amp;bodytext=In%20the%20recent%20Visual%20Studio%20magazine%20I%20saw%20the%20following%20survey%3A%0D%0A%0D%0A%0D%0A%0D%0ADo%20you%20sense%20developer%20fatigue%20due%20to%20the%20pace%20of%20Microsoft%20Technology%20introductions%3F%0D%0A%0D%0A%0D%0AYes%2C%20some%20fatigue%0D%0A45%25%0D%0A%0D%0A%0D%0ANo%2C%20little%20or%20no%20fatigue%0D%0A26%25%0D%0A%0D%0A%0D%0AYes%2C%20significant%20fatigue" title="Digg"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.formatexception.com%2F2009%2F05%2Fdeveloper-fatigue%2F&amp;t=Developer%20Fatigue%3F" title="Facebook"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F05%2Fdeveloper-fatigue%2F&amp;title=Developer%20Fatigue%3F" title="DotNetKicks"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.formatexception.com%2F2009%2F05%2Fdeveloper-fatigue%2F&amp;title=Developer%20Fatigue%3F&amp;annotation=In%20the%20recent%20Visual%20Studio%20magazine%20I%20saw%20the%20following%20survey%3A%0D%0A%0D%0A%0D%0A%0D%0ADo%20you%20sense%20developer%20fatigue%20due%20to%20the%20pace%20of%20Microsoft%20Technology%20introductions%3F%0D%0A%0D%0A%0D%0AYes%2C%20some%20fatigue%0D%0A45%25%0D%0A%0D%0A%0D%0ANo%2C%20little%20or%20no%20fatigue%0D%0A26%25%0D%0A%0D%0A%0D%0AYes%2C%20significant%20fatigue" title="Google Bookmarks"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F05%2Fdeveloper-fatigue%2F&amp;title=Developer%20Fatigue%3F" title="Live"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fwww.formatexception.com%2F2009%2F05%2Fdeveloper-fatigue%2F" title="Technorati"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://news.ycombinator.com/submitlink?u=http%3A%2F%2Fwww.formatexception.com%2F2009%2F05%2Fdeveloper-fatigue%2F&amp;t=Developer%20Fatigue%3F" title="HackerNews"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/hackernews.png" title="HackerNews" alt="HackerNews" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.formatexception.com/2009/05/developer-fatigue/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Combating Deferred Execution in LINQ with ToList(), ToArray() and ToDictionary()</title>
		<link>http://www.formatexception.com/2009/05/combating-deferred-execution-in-linq-with-tolist-toarray-and-todictionary/</link>
		<comments>http://www.formatexception.com/2009/05/combating-deferred-execution-in-linq-with-tolist-toarray-and-todictionary/#comments</comments>
		<pubDate>Mon, 04 May 2009 16:10:31 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[deferred execution]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[ToDictionary]]></category>
		<category><![CDATA[ToList]]></category>

		<guid isPermaLink="false">http://www.formatexception.com/?p=223</guid>
		<description><![CDATA[As I&#8217;m sure you can tell by the title of this post that it is about deferred execution in LINQ.  When a LINQ query (I know, it&#8217;s like saying, &#8220;NIC card&#8221; or &#8220;ATM machine&#8221;) is created the values are not immediatly determined.  Only when the list is utilized are the results determined.
This bit [...]]]></description>
			<content:encoded><![CDATA[<p>As I&#8217;m sure you can tell by the title of this post that it is about deferred execution in LINQ.  When a LINQ query (I know, it&#8217;s like saying, &#8220;NIC card&#8221; or &#8220;ATM machine&#8221;) is created the values are not immediatly determined.  Only when the list is utilized are the results determined.</p>
<p>This bit me at first so hopefully with this it won&#8217;t bite you.</p>
<p>If you have:
<pre name="code" class="csharp">List&lt;Product&gt; products = new List&lt;Product&gt;();
products.Add(new Product { Id = 1, Name = "Cheese", Quantity = 2 });
products.Add(new Product { Id = 2, Name = "Wine", Quantity = 2 });
products.Add(new Product { Id = 3, Name = "Crackers", Quantity = 0 });

var zeroInStock = from product in products
                  where product.Quantity == 0
                  select product;

foreach (var stock in zeroInStock)
{
    products.Remove(stock);
}</pre>
<p>you will get:<br />
<blockquote>InvalidOperationException was unhandled.  Collection was modified; enumeration operation may not execute.</p></blockquote>
<p>This is due to the deferred execution of LINQ.  The results of zeroInStock are not calculated until you need them.  The problem is that if you attempt to remove an item from the list in which the result originated from the original list is now not valid for the LINQ query.  So how do you combat this?  With ToList(), ToArray() and ToDictionary().</p>
<pre name="code" class="csharp">List&lt;Product&gt; products = new List&lt;Product&gt;();
products.Add(new Product { Id = 1, Name = "Cheese", Quantity = 2 });
products.Add(new Product { Id = 2, Name = "Wine", Quantity = 2 });
products.Add(new Product { Id = 3, Name = "Crackers", Quantity = 0 });

var zeroInStock = (from product in products
                  where product.Quantity == 0
                  select product).ToList();

foreach (var stock in zeroInStock)
{
    products.Remove(stock);
}</pre>
<p>Now this code works.  In this example ToList() and ToArray() could have been used interchangbly since we&#8217;re utilizing var but you may need one over the other.  By calling ToList() or ToArray() it forces execution of the query.  This means that now you can change the original list all you want without any issues.</p>
<p>ToDictionary() works a bit different.  You have to specify a lambda expression to detemine what the key should be for each given result.  Here&#8217;s the ToDictionary() example:</p>
<pre name="code" class="csharp">List&lt;Product&gt; products = new List&lt;Product&gt;();
products.Add(new Product { Id = 1, Name = "Cheese", Quantity = 2 });
products.Add(new Product { Id = 2, Name = "Wine", Quantity = 2 });
products.Add(new Product { Id = 3, Name = "Crackers", Quantity = 0 });

var zeroInStock = (from product in products
                  where product.Quantity == 0
                  select product.ToDictionary(x => x.Name);

foreach (var stock in zeroInStock)
{
    products.Remove(stock.Value);
}</pre>
<p>You can see here the lambda expression means that the generated dictionary will be made of KeyValuePair&lt;string, Product&gt;.  Since the product is now the value of the KeyValuePair the foreach that removes products with zero in stock now uses the Value.</p>
<p>If you are going from dictionary to dictionary as in:
<pre name="code" class="csharp">Dictionary&lt;int, Product&gt; products = new Dictionary&lt;int, Product&gt;();
products.Add(1, new Product { Id = 1, Name = "Cheese", Quantity = 2 });
products.Add(2, new Product { Id = 2, Name = "Wine", Quantity = 2 });
products.Add(3, new Product { Id = 3, Name = "Crackers", Quantity = 0 });

var zeroInStock = (from product in products
                   where product.Value.Quantity == 0
                   select product).ToDictionary(x => x.Key);

foreach (var stock in zeroInStock)
{
    products.Remove(stock.Key);
}</pre>
<p> you will most likely want to just use the existing key as I have above.  Now, this doesn&#8217;t mean you can&#8217;t change the key but for my purposes I just used the existing key since I can use that to just remove from the dictionary.</p>
<p>That&#8217;s all for now.  Leave me a comment if you have any questions.</p>
<p>Brian</p>



Share and Enjoy:


	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F05%2Fcombating-deferred-execution-in-linq-with-tolist-toarray-and-todictionary%2F&amp;title=Combating%20Deferred%20Execution%20in%20LINQ%20with%20ToList%28%29%2C%20ToArray%28%29%20and%20ToDictionary%28%29&amp;bodytext=As%20I%27m%20sure%20you%20can%20tell%20by%20the%20title%20of%20this%20post%20that%20it%20is%20about%20deferred%20execution%20in%20LINQ.%20%20When%20a%20LINQ%20query%20%28I%20know%2C%20it%27s%20like%20saying%2C%20%22NIC%20card%22%20or%20%22ATM%20machine%22%29%20is%20created%20the%20values%20are%20not%20immediatly%20determined.%20%20Only%20when%20the%20list%20is%20uti" title="Digg"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.formatexception.com%2F2009%2F05%2Fcombating-deferred-execution-in-linq-with-tolist-toarray-and-todictionary%2F&amp;t=Combating%20Deferred%20Execution%20in%20LINQ%20with%20ToList%28%29%2C%20ToArray%28%29%20and%20ToDictionary%28%29" title="Facebook"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F05%2Fcombating-deferred-execution-in-linq-with-tolist-toarray-and-todictionary%2F&amp;title=Combating%20Deferred%20Execution%20in%20LINQ%20with%20ToList%28%29%2C%20ToArray%28%29%20and%20ToDictionary%28%29" title="DotNetKicks"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.formatexception.com%2F2009%2F05%2Fcombating-deferred-execution-in-linq-with-tolist-toarray-and-todictionary%2F&amp;title=Combating%20Deferred%20Execution%20in%20LINQ%20with%20ToList%28%29%2C%20ToArray%28%29%20and%20ToDictionary%28%29&amp;annotation=As%20I%27m%20sure%20you%20can%20tell%20by%20the%20title%20of%20this%20post%20that%20it%20is%20about%20deferred%20execution%20in%20LINQ.%20%20When%20a%20LINQ%20query%20%28I%20know%2C%20it%27s%20like%20saying%2C%20%22NIC%20card%22%20or%20%22ATM%20machine%22%29%20is%20created%20the%20values%20are%20not%20immediatly%20determined.%20%20Only%20when%20the%20list%20is%20uti" title="Google Bookmarks"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F05%2Fcombating-deferred-execution-in-linq-with-tolist-toarray-and-todictionary%2F&amp;title=Combating%20Deferred%20Execution%20in%20LINQ%20with%20ToList%28%29%2C%20ToArray%28%29%20and%20ToDictionary%28%29" title="Live"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fwww.formatexception.com%2F2009%2F05%2Fcombating-deferred-execution-in-linq-with-tolist-toarray-and-todictionary%2F" title="Technorati"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://news.ycombinator.com/submitlink?u=http%3A%2F%2Fwww.formatexception.com%2F2009%2F05%2Fcombating-deferred-execution-in-linq-with-tolist-toarray-and-todictionary%2F&amp;t=Combating%20Deferred%20Execution%20in%20LINQ%20with%20ToList%28%29%2C%20ToArray%28%29%20and%20ToDictionary%28%29" title="HackerNews"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/hackernews.png" title="HackerNews" alt="HackerNews" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.formatexception.com/2009/05/combating-deferred-execution-in-linq-with-tolist-toarray-and-todictionary/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My thoughts on Oracle, Sun and Java</title>
		<link>http://www.formatexception.com/2009/04/my-thoughts-on-oracle-sun-and-java/</link>
		<comments>http://www.formatexception.com/2009/04/my-thoughts-on-oracle-sun-and-java/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 15:03:18 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Sun]]></category>

		<guid isPermaLink="false">http://www.formatexception.com/?p=216</guid>
		<description><![CDATA[Over at Oren&#8217;s Blog there was the following comment:
Alberto:
So what. I don&#8217;t care much what the writer says. Java is open source, so Oracle can&#8217;t &#8220;own&#8221; it in the sense they can&#8217;t control it.
to which I responded:
@Alberto,
Java itself is not opensource only the JDK. This means if you want to help to make changes to [...]]]></description>
			<content:encoded><![CDATA[<p>Over at <a href="http://ayende.com/Blog/archive/2009/04/20/buying-the-pot-as-a-way-of-winning-the-database.aspx" target="_blank">Oren&#8217;s Blog</a> there was the following comment:<br />
Alberto:<br />
<blockquote>So what. I don&#8217;t care much what the writer says. Java is open source, so Oracle can&#8217;t &#8220;own&#8221; it in the sense they can&#8217;t control it.</p></blockquote>
<p>to which I responded:<br />
<blockquote>@Alberto,<br />
Java itself is not opensource only the JDK. This means if you want to help to make changes to the core libraries you can but if you got a wild hair for some reason and wanted to figure out how to add LINQ to Java you couldn&#8217;t. See <a href="http://www.sun.com/software/opensource/java/faq.jsp#b8" target="_blank">http://www.sun.com/software/opensource/java/faq.jsp#b8</a></p>
<p>This is an important distinction. The JDK is opensource, not Java. This means the future of Java is in the hands of Oracle and it scares me. Development on the Oracle DB itself has been rather stagnant. I&#8217;m not saying that there haven&#8217;t been new features added, just that Oracle hasn&#8217;t been making any big leaps forward.</p>
<p>I&#8217;ve had the unique opportunity for the last 6 years to develop professionally in Java and the last 5 years in C#, a man of both worlds. When C# first came out I was thinking, so what? I can do that in Java and do it easier and cleaner. C# had a lot of catching up to do. Fast forward 5 years and Java is so far behind the curve now. Development of the Java language has become stagnant. Like the Oracle DB, new features are added sure, but there haven&#8217;t been any significant leaps forward. Java has simply fallen behind. I just hope Oracle doesn&#8217;t do to Java what it has done to it&#8217;s DB and let it die a slow death. As pointed out by Andrew nearly all of Oracle&#8217;s business is with the government, and having worked on some government contracts I can tell you that is starting to slip.</p>
<p>As a new generation of IT moves into places of power they simply are not as enamored with Oracle as the old guard were and they are willing to look to other solutions.</p>
<p>So what does this mean? C, C++ and Perl haven&#8217;t had any new features for a long time. Does a language need to make leaps forward? C, C++ and Perl live in different worlds with different purposes then Java and .Net. Sure there are some cross purposes but for the most part they are separate. Java has to continue to innovate if it wants to stay a viable mainstream language. I hope that Oracle can bring innovation back to Java and yet worry that it doesn&#8217;t really care.</p>
<p>Brian</p></blockquote>
<p>In thinking back, the only part of my comment I disagree with is:<br />
<blockquote>having worked on some government contracts I can tell you that is starting to slip.</p></blockquote>
<p>The reason I disagree with it is because, at this moment, the federal government and the DOD are still firmly entrenched in the idea that Oracle is the only way to go.  So basically I&#8217;m saying that things aren&#8217;t starting to slip, at least not right now.</p>
<p>But I do firmly believe the next part of my comment:<br />
<blockquote>As a new generation of IT moves into places of power they simply are not as enamored with Oracle as the old guard were and they are willing to look to other solutions.</p></blockquote>
<p>My point here is that I think Oracle cares about Java because their tools are written in Java.  But that is it&#8217;s only extent.  Now that the JDK is opensourced I&#8217;m sure we&#8217;ll see some movement in the JDK but very little, if not nothing, in the Java language itself.  This is really a shame.</p>
<p>There is no doubt that Java rules in the web application market against .Net and ASP.Net, just as there is no doubt that Apache rules in the web server market against IIS.  Maybe that is fine for Java.  Maybe Sun wants it to be consigned to a subset of the development market.  But there are some heavy hitters in that market, Ruby, PHP, and Perl to name a few.</p>
<p>So why not try and carve out a significant share in all markets?  Java has never truly had a significant share in the desktop application market.  I feel it was held back by how bad AWT and then Swing were.  In Java 6 it seems like they&#8217;ve tried to make some steps forward with the new desktop APIs but it doesn&#8217;t seem like that is enough.</p>
<p>6 years ago Java was an innovation.  Now it&#8217;s merely stagnant.  It&#8217;s APIs can&#8217;t keep up, it&#8217;s language features can&#8217;t keep up.  With every new release of .Net I find it easier and easier to do everything.  With every new release of Java I think, &#8220;That&#8217;s kind of cool but that doesn&#8217;t help me.&#8221;</p>
<p>There is a definite flaw there.  I hope Oracle dumps a bunch of money into Java and really gets the development platform, from both the JDK and the language features perspective, kicked into high gear.  It&#8217;s just that it seems that Oracle actually likes stagnation.  If it ain&#8217;t broke, don&#8217;t fix it is their attitude.  The problem is that, while that may work for the Oracle DB with their heavy paying government projects, it doesn&#8217;t work for Java.</p>
<p>Later,<br />
Brian</p>



Share and Enjoy:


	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F04%2Fmy-thoughts-on-oracle-sun-and-java%2F&amp;title=My%20thoughts%20on%20Oracle%2C%20Sun%20and%20Java&amp;bodytext=Over%20at%20Oren%27s%20Blog%20there%20was%20the%20following%20comment%3A%0D%0AAlberto%3A%20So%20what.%20I%20don%27t%20care%20much%20what%20the%20writer%20says.%20Java%20is%20open%20source%2C%20so%20Oracle%20can%27t%20%22own%22%20it%20in%20the%20sense%20they%20can%27t%20control%20it.%0D%0A%0D%0Ato%20which%20I%20responded%3A%40Alberto%2C%0D%0AJava%20itself%20is%20not%20op" title="Digg"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.formatexception.com%2F2009%2F04%2Fmy-thoughts-on-oracle-sun-and-java%2F&amp;t=My%20thoughts%20on%20Oracle%2C%20Sun%20and%20Java" title="Facebook"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F04%2Fmy-thoughts-on-oracle-sun-and-java%2F&amp;title=My%20thoughts%20on%20Oracle%2C%20Sun%20and%20Java" title="DotNetKicks"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.formatexception.com%2F2009%2F04%2Fmy-thoughts-on-oracle-sun-and-java%2F&amp;title=My%20thoughts%20on%20Oracle%2C%20Sun%20and%20Java&amp;annotation=Over%20at%20Oren%27s%20Blog%20there%20was%20the%20following%20comment%3A%0D%0AAlberto%3A%20So%20what.%20I%20don%27t%20care%20much%20what%20the%20writer%20says.%20Java%20is%20open%20source%2C%20so%20Oracle%20can%27t%20%22own%22%20it%20in%20the%20sense%20they%20can%27t%20control%20it.%0D%0A%0D%0Ato%20which%20I%20responded%3A%40Alberto%2C%0D%0AJava%20itself%20is%20not%20op" title="Google Bookmarks"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F04%2Fmy-thoughts-on-oracle-sun-and-java%2F&amp;title=My%20thoughts%20on%20Oracle%2C%20Sun%20and%20Java" title="Live"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fwww.formatexception.com%2F2009%2F04%2Fmy-thoughts-on-oracle-sun-and-java%2F" title="Technorati"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://news.ycombinator.com/submitlink?u=http%3A%2F%2Fwww.formatexception.com%2F2009%2F04%2Fmy-thoughts-on-oracle-sun-and-java%2F&amp;t=My%20thoughts%20on%20Oracle%2C%20Sun%20and%20Java" title="HackerNews"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/hackernews.png" title="HackerNews" alt="HackerNews" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.formatexception.com/2009/04/my-thoughts-on-oracle-sun-and-java/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Book Review: Code Complete</title>
		<link>http://www.formatexception.com/2009/04/book-review-code-complete/</link>
		<comments>http://www.formatexception.com/2009/04/book-review-code-complete/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 15:06:02 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Programming Standards]]></category>
		<category><![CDATA[Book Review]]></category>

		<guid isPermaLink="false">http://www.formatexception.com/?p=213</guid>
		<description><![CDATA[I suppose for any serious software engineer one must read Code Complete.  Last week I finished it and have been trying to think of how to write a review of it. I&#8217;ve decided to do so briefly.  
Let me start off by saying I&#8217;m excited that I finished it.  There is a [...]]]></description>
			<content:encoded><![CDATA[<p>I suppose for any serious software engineer one must read <a href="http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1239806638&#038;sr=8-1" target="_blank">Code Complete</a>.  Last week I finished it and have been trying to think of how to write a review of it. I&#8217;ve decided to do so briefly.  </p>
<p>Let me start off by saying I&#8217;m excited that I finished it.  There is a lot of good information and there is no doubt that it is the standard for sound software developement principles.  That being said, remember when you try to tackle this bood that it is a text book.  Sure there are some interesting anecdotes about this and that.  I suppose I should have been more thrilled about reading it but couldn&#8217;t drag myself to pour through it like I have some of my other software books.  It took me a year to read Code Complete.  During that time I re-read <a href="http://www.amazon.com/s/ref=nb_ss_b?url=search-alias%3Dstripbooks&#038;field-keywords=belgariad&#038;x=0&#038;y=0" target="_blank">The Belgariad series</a>, <a href="http://www.amazon.com/s/qid=1239806906/ref=a9_sc_1?ie=UTF8&#038;search-alias=stripbooks&#038;field-keywords=malloreon" target="_blank">The Malloreon series</a>, most of the <a href="http://www.amazon.com/s/ref=nb_ss_b?url=search-alias%3Dstripbooks&#038;field-keywords=song+of+ice+and+fire&#038;x=0&#038;y=0" target="_blank">Song of Ice and Fire series</a>, and read for the first time <a href="http://www.amazon.com/Pro-WPF-2008-Presentation-Professionals/dp/1590599551/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1239807040&#038;sr=1-1" target="_blank">Pro WPF in C# 2008</a>, <a href="http://www.amazon.com/Effective-Specific-Improve-Software-Development/dp/0321245660/ref=sr_1_2?ie=UTF8&#038;s=books&#038;qid=1239807085&#038;sr=1-2" target="_blank">Effective C#</a> and I&#8217;m almost done with <a href="http://www.amazon.com/More-Effective-Specific-Software-Development/dp/0321485890/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1239807085&#038;sr=1-1" target="_blank">More Effective C#</a>.</p>
<p>So what am I saying?  I know there are those of you out there that love Code Complete and read it voraciously like a good fiction novel.  I couldn&#8217;t even read it like a good code book.  Pro WPF in C# 2008 I read like a good fiction novel.  I drank it in and loved it.  Code Complete I just couldn&#8217;t do that with.  As I said, it&#8217;s sound, solid developement principles I try to apply every day on the job.  I learned a lot and will continue to try and apply the princibles of Code Complete.  Simply because of that it is a reason to read the book.</p>
<p>If you&#8217;re like me and are struggling to get through Code Complete, spread it out, read a chapter and then take a break and read something else.  There are 35 chapters in Code Complete.  Read a chapter every two weeks, in between other books and it will take you just a bit over a year to read it.</p>
<p>What else can I say?  99% of the book makes perfect sense.  Some of the code formatting seemed a bit off but I just let visual studio format my code for me.  Ctrl-K + Ctrl-D, Baby!</p>
<p>Read it, grok it, follow it and your code will be better, cleaner and easier to maintain.<br />
That&#8217;s all there it to it.</p>
<p>Brian</p>



Share and Enjoy:


	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F04%2Fbook-review-code-complete%2F&amp;title=Book%20Review%3A%20Code%20Complete&amp;bodytext=%0D%0A%0D%0AI%20suppose%20for%20any%20serious%20software%20engineer%20one%20must%20read%20Code%20Complete.%20%20Last%20week%20I%20finished%20it%20and%20have%20been%20trying%20to%20think%20of%20how%20to%20write%20a%20review%20of%20it.%20I%27ve%20decided%20to%20do%20so%20briefly.%20%20%0D%0A%0D%0ALet%20me%20start%20off%20by%20saying%20I%27m%20excited%20that%20I%20fini" title="Digg"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.formatexception.com%2F2009%2F04%2Fbook-review-code-complete%2F&amp;t=Book%20Review%3A%20Code%20Complete" title="Facebook"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F04%2Fbook-review-code-complete%2F&amp;title=Book%20Review%3A%20Code%20Complete" title="DotNetKicks"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.formatexception.com%2F2009%2F04%2Fbook-review-code-complete%2F&amp;title=Book%20Review%3A%20Code%20Complete&amp;annotation=%0D%0A%0D%0AI%20suppose%20for%20any%20serious%20software%20engineer%20one%20must%20read%20Code%20Complete.%20%20Last%20week%20I%20finished%20it%20and%20have%20been%20trying%20to%20think%20of%20how%20to%20write%20a%20review%20of%20it.%20I%27ve%20decided%20to%20do%20so%20briefly.%20%20%0D%0A%0D%0ALet%20me%20start%20off%20by%20saying%20I%27m%20excited%20that%20I%20fini" title="Google Bookmarks"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;url=http%3A%2F%2Fwww.formatexception.com%2F2009%2F04%2Fbook-review-code-complete%2F&amp;title=Book%20Review%3A%20Code%20Complete" title="Live"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/live.png" title="Live" alt="Live" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fwww.formatexception.com%2F2009%2F04%2Fbook-review-code-complete%2F" title="Technorati"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://news.ycombinator.com/submitlink?u=http%3A%2F%2Fwww.formatexception.com%2F2009%2F04%2Fbook-review-code-complete%2F&amp;t=Book%20Review%3A%20Code%20Complete" title="HackerNews"><img src="http://www.formatexception.com/wp-content/plugins/sociable/images/hackernews.png" title="HackerNews" alt="HackerNews" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://www.formatexception.com/2009/04/book-review-code-complete/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
