<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE rss [<!ENTITY % HTMLlat1 PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">]>
<rss version="2.0" xml:base="http://www.charleshaws.com/drupal" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>Chaz&#039;s Software Rants - </title>
 <link>http://www.charleshaws.com/drupal</link>
 <description></description>
 <language>en</language>
<item>
 <title>To Kill A Mockist</title>
 <link>http://www.charleshaws.com/drupal/?q=node/66</link>
 <description>&lt;p&gt;For some background on who&#039;s using mock objects and why, check out Martin Fowler&#039;s updated &lt;a href=&quot;http://martinfowler.com/articles/mocksArentStubs.html&quot;&gt;Mocks Aren&#039;t Stubs&lt;/a&gt;.  There are some clear advantages to both the &quot;classical&quot; and &quot;mockist&quot; model.  I appreciated his eloquent comparison between the two, and it seems to fairly represent both mindsets.  I think I have a better understanding of when to turn to mock objects.  And there are some interesting corollaries to my own work in managing states and expectations in state-based tests, which I someday hope I can write down.  (I&#039;m just trying to get back in the habit of writing at all first...)&lt;/p&gt;
&lt;p&gt;But mostly I&#039;m writing to say &quot;Yes!&quot; and &quot;Thank you!&quot; and that I very much agree with his wrapup:  &lt;em&gt;I really like the fact that while writing the test you focus on the result of the behavior, not how it&#039;s done.  A mockist is constantly thinking about how the &lt;span class=&quot;caps&quot;&gt;SUT &lt;/span&gt;is going to be implemented in order to write the expectations.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Of course, I suppose I&#039;m more focused on acceptance tests at the moment, so looking under the hood feels more wrong than usual.  I&#039;ll grant that there&#039;s a real place for mocking in unit testing.  I just think it&#039;s smaller than some do, and I&#039;m oddly heartened that it&#039;s not just me. :)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.charleshaws.com/drupal/?q=node/66&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.charleshaws.com/drupal/?q=node/66#comment</comments>
 <pubDate>Tue, 27 Feb 2007 22:37:41 -0500</pubDate>
 <dc:creator>Chaz</dc:creator>
 <guid isPermaLink="false">66 at http://www.charleshaws.com/drupal</guid>
</item>
<item>
 <title>That&#039;s All?</title>
 <link>http://www.charleshaws.com/drupal/?q=node/65</link>
 <description>&lt;p&gt;I just googled for &quot;ecmascript java rhino jscript.net actionscript flash &quot;virtual machine&quot;&quot; and the only thing that it found was the JavaScript entry on wikipedia.&lt;/p&gt;
&lt;p&gt;Maybe this is a fever dream from the flu I&#039;m just now shaking off.  I really am taken by the idea of a standard, established, independent language, EcmaScript v3+, which can work unmodified on the Java virtual machine (standard as of version 6), the Flash/Flex virtual machine (ActionScript), and the .NET &lt;span class=&quot;caps&quot;&gt;CLR &lt;/span&gt;(JScript.Net).&lt;/p&gt;
&lt;p&gt;(And it&#039;s JavaScript?  Unbelievable.  I&#039;m not a fan of JavaScript, although that really has a lot more to do with my dislike of &lt;span class=&quot;caps&quot;&gt;HTML. &lt;/span&gt; Yes, &lt;span class=&quot;caps&quot;&gt;HTML &lt;/span&gt;has accomplished amazing things, but it&#039;s so inelegant.  Besides, JavaScript in a browser is subject to the whims of the browser.  I don&#039;t know about Rhino, but Flash and JScript are both good solid implementations of this.)&lt;/p&gt;
&lt;p&gt;EcmaScript seems to be all things to all platforms.  It&#039;s &lt;span class=&quot;caps&quot;&gt;OO, &lt;/span&gt;if you like that.  Or functional, if you prefer.  It&#039;s dynamic.  It&#039;s static.  It&#039;s got closures.  Reflection is probably VM-specific.  It runs in every browser, on any Linux server, on any Windows or Mac front end.  Heck, it&#039;ll run in either an Oracle or a Microsoft &lt;span class=&quot;caps&quot;&gt;SQL &lt;/span&gt;database.&lt;/p&gt;
&lt;p&gt;Business logic in EcmaScript, isolated from language-specific libraries, with portable unit tests, and serialized.  Now, &lt;strong&gt;that&lt;/strong&gt; is some &lt;span class=&quot;caps&quot;&gt;DRY, &lt;/span&gt;mobile code.  I can now move behavior across the wire, across different virtual machines, as easily as data.&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;It is also, I should note, the red-headed bastard stepchild of .NET, with no decent editor available.  Managing references is already hard in JScript.  Managing the same code that to be copied around into different projects and actually requiring a different compiler for each different components... that&#039;s a little different.  But I&#039;ve done a lot of fancy build scripting lately and I think these problems could be overcome.&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;So, I once posted on Bob Martin&#039;s message board that dynamic languages would really take off as soon as there were really good &lt;span class=&quot;caps&quot;&gt;IDE&lt;/span&gt;s.  I really like debuggers, IntelliSense, and refactoring.  Ah, well.  I may find out if he was write that good unit tests can replace debuggers.&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;So, next question:  What does Ruby really have on EcmaScript?  EcmaScript &lt;span class=&quot;caps&quot;&gt;V3,&lt;/span&gt; I mean; the older ones that don&#039;t support classes just don&#039;t count.  Probably a slightly cleaner syntax.  But is it significantly limiting?  If only there were a Rails.NET, I could really compare apples &amp;amp; apples.&lt;/p&gt;
&lt;p&gt;Python, of course, I could compare more easily to IronPython.&lt;/p&gt;
&lt;p&gt;Very intriguing.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.charleshaws.com/drupal/?q=node/65&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.charleshaws.com/drupal/?q=node/65#comment</comments>
 <pubDate>Tue, 09 Jan 2007 23:16:37 -0500</pubDate>
 <dc:creator>Chaz</dc:creator>
 <guid isPermaLink="false">65 at http://www.charleshaws.com/drupal</guid>
</item>
<item>
 <title>Time - Cost - Scope - Quality</title>
 <link>http://www.charleshaws.com/drupal/?q=node/62</link>
 <description>&lt;p&gt;Does Quality always get the respect it deserves as one of the key tradeoffs of project management?  Here&#039;s an interesting article from InfoQ, &lt;a href=&quot;http://www.infoq.com/news/Ken-Schwaber-Sacrificing-Quality&quot;&gt;a reflection on a talk of Ken Schwaber&#039;s&lt;/a&gt;, &quot;Sacrificing Quality should be an Executive Management Decision&quot;, that I found through Carnival of the Agilists.  I think Ken Schwaber&#039;s ultimate point is something like this:&lt;/p&gt;
&lt;p&gt;Traditional project management focuses on tradeoffs involving time, scope, and cost.  Quality is not as explicitly managed.  Therefore, quality can be sacrificed at any time for any reason by any individual on the development team.&lt;/p&gt;
&lt;p&gt;We now have reason to believe that high quality work actually gets things done faster.  Less rework, etc.  So quality should be re-emphasized, and the decision to cut corners should only be made strategically by the product owner and never by the development team.&lt;/p&gt;
&lt;p&gt;The response is interesting.  A lot of people said (kinda rudely) how stupid it was to assume all projects require high quality, and how stupid it was to push everything to the &lt;span class=&quot;caps&quot;&gt;CEO. &lt;/span&gt; Well, they&#039;re half right.  The point is, it&#039;s management&#039;s call.  How high in management, well, that depends on the project.  Basically, some people were distracted by the word &quot;CEO&quot;, and I&#039;m not sure if that was Ken Schwaber&#039;s or the poster&#039;s wording.&lt;/p&gt;
&lt;p&gt;Anyway, the response illustrates exactly the response many people will have to the idea.  I think to those of us that have studied these issues the choice is pretty obvious.  So, I have two questions:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Product owners and managers need to ask for high quality work, instead of just getting the job done.&lt;/strong&gt;  Historically they always asked for the opposite.  They will also need to fund a test for high quality work.  I think actual code reviews may be required.  (I don&#039;t think a set of passing unit tests is quite sufficient here, because the model itself is one thing that should be reviewed.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How do we educate the product owners and managers to be able to make these decisions?&lt;/strong&gt;  I agree with Ken Schwaber that these are the people to who should make these decisions.  Though I&#039;m not sure they&#039;ll buy the &quot;Quality Costs Less&quot; principles easily.  I&#039;ve learned that &quot;Technical Debt&quot; was an astonishingly easy concept to introduce, perhaps because people were already familiar with the idea and finding a name for it made communication easier.  Perhaps I can rephrase it in those terms.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.charleshaws.com/drupal/?q=node/62&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.charleshaws.com/drupal/?q=node/62#comment</comments>
 <category domain="http://www.charleshaws.com/drupal/?q=taxonomy/term/19">Agile</category>
 <pubDate>Sat, 29 Jul 2006 13:01:55 -0400</pubDate>
 <dc:creator>Chaz</dc:creator>
 <guid isPermaLink="false">62 at http://www.charleshaws.com/drupal</guid>
</item>
<item>
 <title>Is low-precision test-driven development the next reasonable attempt to tame software?</title>
 <link>http://www.charleshaws.com/drupal/?q=node/59</link>
 <description>&lt;p&gt;There has been a lot of discussion about post-Agile, pliant, ex-Agile, etc.  It&#039;s kind of interesting to see how quickly people jump &lt;strong&gt;off&lt;/strong&gt; of a bandwagon.  I shouldn&#039;t bitch; most of these people were probably in fact never quite &lt;strong&gt;on&lt;/strong&gt; the bandwagon.  I still think this is a great philosophy... but somehow I never quite managed to consistently sit down and write tests first.  But I couldn&#039;t put my finger on the reason...&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.charleshaws.com/drupal/?q=node/59&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.charleshaws.com/drupal/?q=node/59#comment</comments>
 <category domain="http://www.charleshaws.com/drupal/?q=taxonomy/term/19">Agile</category>
 <category domain="http://www.charleshaws.com/drupal/?q=taxonomy/term/3">Links</category>
 <pubDate>Tue, 27 Jun 2006 21:03:27 -0400</pubDate>
 <dc:creator>Chaz</dc:creator>
 <guid isPermaLink="false">59 at http://www.charleshaws.com/drupal</guid>
</item>
<item>
 <title>Agile Development circa 1987</title>
 <link>http://www.charleshaws.com/drupal/?q=node/58</link>
 <description>&lt;p&gt;Wow.  This one really caught my eye.  Fred Brooks of &lt;a href=&quot;http://en.wikipedia.org/wiki/The_Mythical_Man-Month&quot;&gt;Mythical Man-Month&lt;/a&gt; fame, whose wisdom on software is still applicable decades later, wrote an article in 1987 that damn near predicted the Agile movement.  This isn&#039;t Agile in the name-brand &lt;span class=&quot;caps&quot;&gt;TDD &lt;/span&gt;sense, but a more general recognition that the most effective way to develop complex software is to iteratively &quot;grow&quot; it.  Build one to &lt;a href=&quot;http://www.propylon.com/news/ctoarticles/040309_throw_away.html&quot;&gt;throw away&lt;/a&gt; becomes a &quot;spike&quot;.  I can definitely see the evolution of the ideas a bit more clearly now.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.charleshaws.com/drupal/?q=node/58&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.charleshaws.com/drupal/?q=node/58#comment</comments>
 <category domain="http://www.charleshaws.com/drupal/?q=taxonomy/term/19">Agile</category>
 <category domain="http://www.charleshaws.com/drupal/?q=taxonomy/term/3">Links</category>
 <pubDate>Mon, 26 Jun 2006 22:42:34 -0400</pubDate>
 <dc:creator>Chaz</dc:creator>
 <guid isPermaLink="false">58 at http://www.charleshaws.com/drupal</guid>
</item>
<item>
 <title>Software Engineering Explained</title>
 <link>http://www.charleshaws.com/drupal/?q=node/57</link>
 <description>&lt;p&gt;&lt;a href=&quot;http://2listnow.com/googleimage/softwareengineeringexplained1r550x413.jpg&quot;&gt;Software Engineering Explained&lt;/a&gt;, as posted by &lt;a href=&quot;http://toolshed.com/blog/articles/2006/06/26/software-engineering-explained-perfectly&quot;&gt;Andy Hunt&lt;/a&gt;.&lt;/p&gt;</description>
 <comments>http://www.charleshaws.com/drupal/?q=node/57#comment</comments>
 <category domain="http://www.charleshaws.com/drupal/?q=taxonomy/term/3">Links</category>
 <pubDate>Mon, 26 Jun 2006 22:30:48 -0400</pubDate>
 <dc:creator>Chaz</dc:creator>
 <guid isPermaLink="false">57 at http://www.charleshaws.com/drupal</guid>
</item>
<item>
 <title>More on Web Services</title>
 <link>http://www.charleshaws.com/drupal/?q=node/56</link>
 <description>&lt;p&gt;Bruce Eckel &lt;a href=&quot;http://www.artima.com/forums/flat.jsp?forum=106&amp;amp;thread=165293&quot;&gt;points out a key distinction&lt;/a&gt; between standards that work and standards that don&#039;t.  He quotes an &lt;a href=&quot;http://www.acmqueue.org/modules.php?name=Content&amp;amp;pa=showpage&amp;amp;pid=396&amp;amp;page=4&quot;&gt;article about &lt;span class=&quot;caps&quot;&gt;CORBA&#039;&lt;/span&gt;s decline&lt;/a&gt; and reduced it to the wonderfully clean and understandable:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A standards body should formalize existing practice, rather than inventing new practice without experience.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yeah, Web Services fits into that mold, too.  But maybe not quite as badly as &lt;span class=&quot;caps&quot;&gt;CORBA... &lt;/span&gt;at least Microsoft and &lt;span class=&quot;caps&quot;&gt;IBM &lt;/span&gt;and Sun are all at the same table on this one.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.charleshaws.com/drupal/?q=node/56&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.charleshaws.com/drupal/?q=node/56#comment</comments>
 <category domain="http://www.charleshaws.com/drupal/?q=taxonomy/term/30">Web Services</category>
 <pubDate>Tue, 20 Jun 2006 22:28:15 -0400</pubDate>
 <dc:creator>Chaz</dc:creator>
 <guid isPermaLink="false">56 at http://www.charleshaws.com/drupal</guid>
</item>
<item>
 <title>The Anders Hejlsberg Story</title>
 <link>http://www.charleshaws.com/drupal/?q=node/54</link>
 <description>&lt;p&gt;Well, okay, it&#039;s not all about him, but that was the part of this &lt;a href=&quot;http://www.codeproject.com/dotnet/CSharpVersusVB.asp&quot;&gt;CodeProject article&lt;/a&gt; that I found the most compelling.  I ran across this in a discussion over at &lt;a href=&quot;http://discuss.joelonsoftware.com/?design&quot;&gt;Joel&lt;/a&gt;&#039;s.  I&#039;d like to credit &quot;RandomPunter&quot; for the link, but I&#039;m not sure if that accomplishes much.&lt;/p&gt;
&lt;p&gt;Recap:  We all know that C# and &lt;span class=&quot;caps&quot;&gt;VB.NET &lt;/span&gt;are effectively tied with each other, feature for feature.  If you think late binding, implicit casts, and implicit event management are always a good thing, you tend to like &lt;span class=&quot;caps&quot;&gt;VB. &lt;/span&gt; If you think that early binding to interfaces, explicit casts and explicit event management are always a good thing, you tend to like C#.  So, how to choose, other than arbitrarily?&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.charleshaws.com/drupal/?q=node/54&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.charleshaws.com/drupal/?q=node/54#comment</comments>
 <pubDate>Sun, 18 Jun 2006 16:24:34 -0400</pubDate>
 <dc:creator>Chaz</dc:creator>
 <guid isPermaLink="false">54 at http://www.charleshaws.com/drupal</guid>
</item>
<item>
 <title>Another LinQ in the Chain of O/R Mappers</title>
 <link>http://www.charleshaws.com/drupal/?q=node/53</link>
 <description>&lt;p&gt;Microsoft is talking a lot about its forthcoming LinQ for &lt;span class=&quot;caps&quot;&gt;SQL &lt;/span&gt;(&lt;a href=&quot;http://weblogs.asp.net/aaguiar/archive/2006/06/12/DLinQ-_3D00_-LinQ-for-SQL.aspx&quot;&gt;not DLinQ&lt;/a&gt;!) and &lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=E9BA57AA-2A27-4658-AD04-4380A2DF836C&amp;amp;displaylang=en&quot;&gt;&lt;span class=&quot;caps&quot;&gt;ADO.NET&lt;/span&gt; Entity Framework&lt;/a&gt; technology and it really looks pretty sharp.  (Despite the confusion over there being &lt;a href=&quot;http://linqinaction.net/blogs/main/archive/2006/06/13/18.aspx&quot;&gt;two mapping technologies&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;But I have a reservation.  Here&#039;s a quote from the Entity Framework doc: &lt;/p&gt;
&lt;p&gt;&lt;em&gt;No plumbing. The code is very database intensive, yet there are no database connection objects, no external language such as &lt;span class=&quot;caps&quot;&gt;SQL &lt;/span&gt;for query formulation, no parameter binding, no configuration embedded in code. In this sense, you could say this code is “pure business logic”.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;(No time to grab an image just now.  Go to the doc to see the code it&#039;s talking about, but if you&#039;ve seen DLinQ samples before, you&#039;ve seen it.)&lt;/p&gt;
&lt;p&gt;So, is that a good thing?  Pure business logic that generates the appropriate &lt;span class=&quot;caps&quot;&gt;SQL &lt;/span&gt;and parameter binding and config logic?  Or is that an unfortunate merging of domain concerns with implementation concerns?&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.charleshaws.com/drupal/?q=node/53&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.charleshaws.com/drupal/?q=node/53#comment</comments>
 <category domain="http://www.charleshaws.com/drupal/?q=taxonomy/term/28">Data Mapper</category>
 <category domain="http://www.charleshaws.com/drupal/?q=taxonomy/term/20">Mobile Objects</category>
 <category domain="http://www.charleshaws.com/drupal/?q=taxonomy/term/1">O/R Mapper</category>
 <pubDate>Sat, 17 Jun 2006 19:41:48 -0400</pubDate>
 <dc:creator>Chaz</dc:creator>
 <guid isPermaLink="false">53 at http://www.charleshaws.com/drupal</guid>
</item>
<item>
 <title>Context-Driven Testing</title>
 <link>http://www.charleshaws.com/drupal/?q=node/52</link>
 <description>&lt;p&gt;There seems to be a lot of talk about the shape of Agile this week.&lt;/p&gt;
&lt;p&gt;Cedric Beust thinks Agile is &lt;a href=&quot;http://beust.com/weblog/archives/000392.html&quot;&gt;just plain wrong&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Bob Martin &lt;a href=&quot;http://www.butunclebob.com/ArticleS.UncleBob.AgilePeopleStillDontGetIt&quot;&gt;responds&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And a few other posts referenced it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.context-driven-testing.com/&quot;&gt;This one&lt;/a&gt; predates this argument, but I think it&#039;s related.  I can&#039;t disagree with the idea that different contexts call for different solutions.  Personally, I think Agile approaches have a lot to recommend them in the contexts I work in.  But I can&#039;t deny that there is a little bit of religious fervor out there.  These are some good rules of thumb to keep things in perspective.  It&#039;s not a silver bullet, folks, just another improvement to build on.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.charleshaws.com/drupal/?q=node/52&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.charleshaws.com/drupal/?q=node/52#comment</comments>
 <category domain="http://www.charleshaws.com/drupal/?q=taxonomy/term/19">Agile</category>
 <pubDate>Tue, 13 Jun 2006 20:27:18 -0400</pubDate>
 <dc:creator>Chaz</dc:creator>
 <guid isPermaLink="false">52 at http://www.charleshaws.com/drupal</guid>
</item>
</channel>
</rss>
