<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Talk Like A Duck: Category war_stories</title>
    <link>http://talklikeaduck.denhaven2.com/articles/category/war_stories</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>In Ruby, it's not the dog, it's the tricks!</description>
    <item>
      <title>Essence, Ceremony, and Deja-Vu</title>
      <description>&lt;p&gt;&lt;a href="http://blog.thinkrelevance.com/2008/8/21/essence-vs-ceremony-pop-quiz"&gt;Stu Halloway&lt;/a&gt; just pointed out &lt;a href="http://scala-blogs.org/2008/07/application-trait-considered-harmful.html"&gt;an interesting article on a Scala blog&lt;/a&gt;.
&lt;p&gt;Stu asks us to consider whether making a Scala object an application by extending a trait, as described by the Scala article, affects the question of essence vs. ceremony.  It certainly does cut down on boilerplate code.&lt;/p&gt;
&lt;p&gt;Although this appears to be part of the standard Scala library, it is documented in such a way as to discourage its use, for the same reasons given in the article.&lt;/p&gt;
&lt;p&gt;What strikes me is that the reasons seem to be tied up in language implementation and in particular the ways of the &lt;span class="caps"&gt;JVM&lt;/span&gt;.  Perhaps this is an example of how the &lt;span class="caps"&gt;JVM&lt;/span&gt;, &lt;a href="http://blogs.sun.com/jrose/entry/dynamic_invocation_in_the_vm"&gt;at least&lt;/a&gt; &lt;a href="http://blogs.sun.com/jrose/entry/the_golden_spike"&gt;as it&lt;/a&gt; &lt;a href="http://blog.headius.com/2008/05/power-of-jvm.html"&gt;is today&lt;/a&gt; might be a good, but not the best platform for dynamic language implementation.&lt;/p&gt;
&lt;p&gt;Putting on my old curmudgeon&amp;#8217;s hat, this strongly reminds me of the early days of &lt;a href="http://en.wikipedia.org/wiki/PL/I"&gt;PL/I&lt;/a&gt;. The earliest PL/I compilers were notoriously bad at generating efficient code for subroutine linkage.  PL/I was designed for the &lt;span class="caps"&gt;IBM&lt;/span&gt;/360, which used a subroutine calling mechanism entailing chaining invocation frames in a doubly linked list rather than on a stack.  The brute force way to do a call was to perform a system getmain (OS/360 for malloc) at the beginning of a subroutine, and a freemain(free) upon return.  This was fairly expensive.&lt;/p&gt;
&lt;p&gt;As a result of this, early PL/I programmers were admonished &lt;strong&gt;not&lt;/strong&gt; to use subroutines/functions, or at least to use them sparingly.&lt;/p&gt;
&lt;p&gt;This is not bad language design, it is bad implementation.&lt;/p&gt;
&lt;p&gt;And perhaps it is just one example, or maybe there are two here, one in Scala and one in PL/I, of how well meaning decisions based on the characteristics of the implementation at hand, particularly when compounded can give us magnificent complexities, that we really don&amp;#8217;t need.&lt;/p&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 21 Aug 2008 14:13:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:248bda94-dc4a-4f71-85a4-1a0b860d836b</guid>
      <author>Rick DeNatale</author>
      <link>http://talklikeaduck.denhaven2.com/articles/2008/08/21/essence-ceremony-and-deja-vu</link>
      <category>war_stories</category>
      <category>scala</category>
      <category>essenceandceremony</category>
      <trackback:ping>http://talklikeaduck.denhaven2.com/articles/trackback/506</trackback:ping>
    </item>
    <item>
      <title>How Did You Get Started in Programming</title>
      <description>&lt;p&gt;Joe O&amp;#8217;Brien wrote an article about &lt;a href="http://objo.com/2008/6/7/how-did-you-get-started-in-programming"&gt;How he got started in programming.&lt;/a&gt;According to Joe, this is a meme started by &lt;a href="http://michaeleatonconsulting.com/blog/"&gt;Michael Eaton,&lt;/a&gt; and &lt;a href="http://www.codinggeekette.com/2008/06/sarahs-steps-into-software-development.aspx"&gt;Sarah Dutkiewicz.&lt;/a&gt; It seemed like fun, so here&amp;#8217;s my story, in the same form used by Michael and Sarah.&lt;/p&gt;
&lt;h2&gt;How old were you when you started programming?&lt;/h2&gt;
&lt;p&gt;I would have been 18 or 19.  It was my freshman year in college (1970/71), but I can&amp;#8217;t recall whether it was first or second semester, and my birthday is in December.&lt;/p&gt;
&lt;h2&gt;How did you get started in programming?&lt;/h2&gt;
&lt;p&gt;Let me go back just a little bit. When I was in high school, I was very interested in music.  I&amp;#8217;d played in various rock and blues bands since junior high.  My high school in Connecticut was part of a program which taught electronic music.  This was a time when synthesizers were just coming to the fore.  Walter (now Wendy) Carlos&amp;#8217; album &amp;#8220;Switched on Bach&amp;#8221; had come out in 1968 when I was a high-school sophomore.&lt;/p&gt;
&lt;p&gt;So I started at the University of Connecticut in the fall of 1970 and enrolled in the Electrical Engineering School, with the sole intention of becoming the next Robert Moog.  All I really wanted to learn was how to design voltage-controlled oscilators and amplifiers.&lt;/p&gt;
&lt;p&gt;One of the courses which all freshman engineers at UConn had to take was a 100 level CE course which consisted of one-half semester of &amp;#8220;Engineering Graphics&amp;#8221; i.e drafting on a board with a T-Square, Triangles and French-curves, and one-half semester of Fortran I programming on an &lt;span class="caps"&gt;IBM 1620&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;That course got me hooked on programming, and my musical career ended in a hurry.&lt;/p&gt;
&lt;h2&gt;What was your first language?&lt;/h2&gt;
&lt;p&gt;As I mentioned it was Fortran I, but I quickly became one of those guys who wanted to dabble with every programming language I could get my hands on.&lt;/p&gt;
&lt;h2&gt;What was the first real program you wrote?&lt;/h2&gt;
&lt;p&gt;It&amp;#8217;s been so long that I can&amp;#8217;t really remember.  One of the things I remember from school was writing a compiler as a class project.  I also remember a computer architecture (hardware) course, taught by grad student with a recent math MS, who I baffled by designing a computer for the term project which had a very simple hardware design, because it was micro-programmed so the main part of the design was actually firmware.  The poor guy didn&amp;#8217;t really know what to make of it.&lt;/p&gt;
&lt;h2&gt;What languages have you used since you started programming?&lt;/h2&gt;
&lt;p&gt;This is probably not a complete list but:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;PL/I&lt;/li&gt;&lt;li&gt;Snobol&lt;/li&gt;&lt;li&gt;Lisp 1.5&lt;/li&gt;&lt;li&gt;Formac&lt;/li&gt;&lt;li&gt;1620 Assembler Language&lt;/li&gt;&lt;li&gt;&lt;span class="caps"&gt;PDP 8&lt;/span&gt;/5 Assembler Language&lt;/li&gt;&lt;li&gt;&lt;span class="caps"&gt;IBM&lt;/span&gt; System/360/370 Assembler Language&lt;/li&gt;&lt;li&gt;&lt;span class="caps"&gt;APL&lt;/span&gt;&lt;/li&gt;&lt;li&gt;PL/S &amp;#8211; an &lt;span class="caps"&gt;IBM&lt;/span&gt; internal mid-level language akin to C but with a PL/I like syntax, and a later variant PL/AS&lt;/li&gt;&lt;li&gt;Basic &amp;#8211; on the &lt;span class="caps"&gt;APPLE&lt;/span&gt; ][&lt;/li&gt;&lt;li&gt;&lt;span class="caps"&gt;UCSD&lt;/span&gt; Pascal&lt;/li&gt;&lt;li&gt;C&lt;/li&gt;&lt;li&gt;Class-C, an object oriented C variant similar to Objective-C which I invented for use within &lt;span class="caps"&gt;IBM&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Object Pascal (using MacApp)&lt;/li&gt;&lt;li&gt;C++ (as little as possible)&lt;/li&gt;&lt;li&gt;Smalltalk &amp;#8211; my first real love&lt;/li&gt;&lt;li&gt;Java &amp;#8211; mostly because I had no choice&lt;/li&gt;&lt;li&gt;Ruby &amp;#8211; my current love&lt;/li&gt;&lt;li&gt;JavaScript &amp;#8211; which I&amp;#8217;ve decided is my language of the year for 2008.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;If you knew then what you know now, would you have started programming?&lt;/h2&gt;
&lt;p&gt;Only because I can&amp;#8217;t figure out how to become a real Rock Star.&lt;/p&gt;
&lt;h2&gt;If there is one thing you learned along the way that you would tell new developers, what would it be?&lt;/h2&gt;
&lt;p&gt;Try to get a broad a picture as possible of programming, try to use your knowledge of other languages enhance your learning of new ones instead of inhibiting yourself by misunderstanding how the languages differ from the ones you&amp;#8217;ve already used,&lt;/p&gt;
&lt;h2&gt;What&amp;#8217;s the most fun you&amp;#8217;ve ever had &amp;#8230; programming?&lt;/h2&gt;
&lt;p&gt;The most enjoyable aspects of programming are the social ones.  I was doing pair programming before anyone had coined the term.  I remember sessions where two or three guys were working on something, one working the keyboard, one the mouse, and maybe a third kibitzing.  Beyond that it&amp;#8217;s great to hang out with other programmers whether at local groups or at a conference like &lt;span class="caps"&gt;OOPSLA&lt;/span&gt; or RubyConf and talk about the craft of programming, maybe over a beer or two.&lt;/p&gt;</description>
      <pubDate>Sat, 07 Jun 2008 23:14:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:3bc15a36-f91e-4fa5-b630-6fb171d7f249</guid>
      <author>Rick DeNatale</author>
      <link>http://talklikeaduck.denhaven2.com/articles/2008/06/07/how-did-you-get-started-in-programming</link>
      <category>war_stories</category>
      <trackback:ping>http://talklikeaduck.denhaven2.com/articles/trackback/502</trackback:ping>
    </item>
    <item>
      <title>What Would You Miss If You Had To Stop Using Ruby and Go Back to Smalltalk?</title>
      <description>&lt;p&gt;Last night, James Robertson from Cincom, &lt;a href="http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;#38;printTitle=Seaside_with_the_Raleigh_Rubyists&amp;#38;entry=3388818661"&gt;presented Smalltalk and Seaside to the Raleigh Ruby Brigade.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It was an interesting deja-vu experience, since in my younger days, part of my job with &lt;span class="caps"&gt;IBM&lt;/span&gt; was evangelizing Smalltalk, much as James does today.  It was interesting to see what has and hasn&amp;#8217;t changed. For the most part the things about Smalltalk which were blessings and curses (or many times both) haven&amp;#8217;t changed.  The &lt;span class="caps"&gt;IDE&lt;/span&gt; is still powerful. It gets much of it&amp;#8217;s power from Smalltalk&amp;#8217;s model of how source code and run-time implementation objects like compiled-methods, classes and metaclasses interact, but the consequence is that there aren&amp;#8217;t really Smalltalk source files to use with popular editors like &lt;span class="caps"&gt;VIM&lt;/span&gt; or &lt;span class="caps"&gt;EMACS&lt;/span&gt; or Textmate.  The question came up about whether the Smalltalk &lt;span class="caps"&gt;IDE&lt;/span&gt; supported the notion of giving the code to an external editor, and the answer was that the size of a typical Smalltalk method, which is the unit of editing, was so small (10 lines is a long Smalltalk method) as to make it &amp;#8216;moot.&amp;#8217;  I used to get the same kind of questions and give pretty much the same answers.&lt;/p&gt;
&lt;p&gt;One area where Smalltalk really does excel is in it&amp;#8217;s debugging and inspection tools.  The same implementation object model which enables browser features, like finding all senders or implementers of a message using structural rather than textual searching, also allows live debugging, where you can not only inspect the run-time state at a breakpoint, or when an exception occurs, but actually make changes to the running code, and compile those changes, at which point the VM prunes the invocation stack down to the point of the change and allows you to restart from that point.  Protestations from &lt;span class="caps"&gt;TDD&lt;/span&gt;/BDD adherents that &lt;a href="http://talklikeaduck.denhaven2.com/articles/2007/10/18/true-confesssions"&gt;you don&amp;#8217;t need no steenking debugger&lt;/a&gt; if you follow &lt;span class="caps"&gt;TDD&lt;/span&gt; practice, the Smalltalk debugger was tool much favored by the very people, like Kent Beck, who invented &lt;span class="caps"&gt;TDD&lt;/span&gt;.  Many Rubyists who were around for more than a year or two had an anti-debugger attitude, generated more, I suspect, by the lack of a decent Ruby debugger than any real hatred of debuggers.&lt;/p&gt;
&lt;p&gt;Now that ruby-debug has been around for &lt;a href="http://datanoise.com/articles/2006/7/7/faster-debugger-for-ruby"&gt;almost two years&lt;/a&gt;, the situation is much better. Ruby has a fairly competent debugger which allows stepping through code.  It&amp;#8217;s still hampered by Ruby&amp;#8217;s rather simple run-time meta information, being forced to work on a line-by-line mode, rather than being able to step through individual expressions as can the Smalltalk debugger.  And we&amp;#8217;re still a long way from the live surgery capabilities I described. Perhaps as Ruby VM implementations mature we might see some of these advanced features emerge, perhaps this is something which the Rubinius implementers might also take as an inspiration from Smalltalk.  This is one of the main things I miss from my Smalltalk days.&lt;/p&gt;
&lt;p&gt;On the other hand, at this point in time, I&amp;#8217;m really much happier working in Ruby than  I think I would be were I somehow forced to work in Smalltalk again instead.  Much as I love it, Smalltalk is now my second favorite language.&lt;/p&gt;
&lt;p&gt;At one point last night, Brian Adkins asked me the question which is the title of this article.  I think it&amp;#8217;s a fair question, and I&amp;#8217;m not sure I know exactly, but let me try to answer it.&lt;/p&gt;
&lt;h2&gt;What I&amp;#8217;d miss from Ruby&lt;/h2&gt;
&lt;p&gt;I&amp;#8217;ve said this before, but one of the things I like about Ruby is that it is more dynamic than Smalltalk in ways which I like, and cuts back on other aspects of Smalltalk which I don&amp;#8217;t think are really that important.&lt;/p&gt;
&lt;p&gt;One of the things I like about Ruby is the &lt;a href="http://talklikeaduck.denhaven2.com/articles/2008/02/08/whose-variable-is-it-anyway"&gt;elimination of variable declarations.&lt;/a&gt; A good example of this was that during the Seaside demo last night, James showed how interfacing to the database requires attribute instance variables in model objects to be declared.  Now the &lt;span class="caps"&gt;IDE&lt;/span&gt; provides tools for helping with this, you get prompted with a list of column names and can add them one by one just by clicking buttons.  Contrast this with ActiveRecord where model objects just acquire instance variables dynamically at run-time.  Now I know that some prefer more explicit mappings, but personally I feel that the dynamic mapping provides much more capability for much less ceremony.&lt;/p&gt;
&lt;p&gt;The ways in which Ruby is more dynamic than Smalltalk seem to me to provide better facilities for building low-ceremony architectures and artifacts like Rails, Rake, etc.  There are more dynamic languages than Ruby to be sure, such as Self, and from what I can sense JavaScript, but Ruby seems to strike a very nice balance.&lt;/p&gt;
&lt;p&gt;Much has been made of the legacy of Smalltalk in pioneering metaprogramming, although some Lisp guys might quibble with that, and in truth, most Smalltalk metaprogramming was only used to support the &lt;span class="caps"&gt;IDE&lt;/span&gt; and never put to use by application programmers.  Alan Kay used to say that he was disappointed that no one seemed to make new classes of Behavior (which is the superclass of both Class and Metaclass in Smalltalk). I know he said this to some of us at an &lt;span class="caps"&gt;IBM&lt;/span&gt; internal conference, which at least led to Dave Smith and Jerry Archbald developing a &amp;#8220;behavior of behavior&amp;#8221; tutorial which ran for several years at &lt;span class="caps"&gt;OOPSLA&lt;/span&gt;.  But Rubyists have taken metaprogramming much further than I recall from my Smalltalk days.&lt;/p&gt;
&lt;p&gt;On the other end of the scale, Smalltalk as James pointed out, as I used to, has a very simple syntax, a few reserved words (self, super, nil, true, and false), three types of messages (unary, binary, and keyword),  two operators (:= for assignment, and &amp;#94; for return), and a few more things for defining block literals.&lt;/p&gt;
&lt;p&gt;Now when I was doing James&amp;#8217; job, this got mixed reactions. Some people took to syntax like:&lt;/p&gt;
&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_smalltalk "&gt;topLeft = Point x: 3+2*5 y: 15&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;While others found it just a little too strange, something which we Smalltalkers just couldn&amp;#8217;t get.&lt;/p&gt;
&lt;p&gt;Another thing which put off newcomers to Smalltalk was that, because of the simplicity of the language, and the lack of any form of operator precedence (remember the only operators are := and &amp;#94;), that subexpression 3+2*5 evaluates to 25 and not 13.&lt;/p&gt;
&lt;p&gt;Ruby trades off a little simplicity and does provide precedence between messages which seem like they should act as operators.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m not saying that Ruby is without quirks, just that different people react to different quirks in different ways.  If you don&amp;#8217;t like what you perceive to be the quirks of &lt;strong&gt;any&lt;/strong&gt; programming language, you won&amp;#8217;t be convinced, even by the most ardent supporter of those quirks.&lt;/p&gt;
&lt;p&gt;One of the interesting effects of the Smalltalk syntax was that, as we observed back in Smalltalk&amp;#8217;s heyday in the Enterprise (late &amp;#8216;80s-early &amp;#8216;90s), it seemed that a lot of &lt;span class="caps"&gt;COBOL&lt;/span&gt; programmers seemed to take to Smalltalk. We used to think that Smalltalk might actually become the 21st century &lt;span class="caps"&gt;COBOL&lt;/span&gt;, until the &amp;#8220;Enterprise&amp;#8221; got wooed away by EJBs and the like. The same things which made Smalltalk approachable by &lt;span class="caps"&gt;COBOL&lt;/span&gt; programmers made it seem weird to those who looked down on those &lt;span class="caps"&gt;COBOL&lt;/span&gt; programmers as &amp;#8220;trade-school&amp;#8221; programmers.&lt;/p&gt;
&lt;p&gt;Another much-touted feature of Smalltalk, is that everything is done by message sending, even control flow.  In Smalltalk a if/then/else control flow is achieved by sending an ifTrue:ifFalse: message to a boolean object as in:&lt;/p&gt;
&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_smalltalk "&gt; ^(x = 0) ifTrue:[a] ifFalse:[b]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Smalltalk evaluates this as if the the expression (x = 0) is evaluated by sending the message with the selector = and argument 0, to the object referenced by x.  The result of that message, an object of course, is then sent the message with the selector ifTrue:ifFalse: and the arguments [a] and [b], which are two blocks.  What happens is up to that object.  Typically that object is either true (the sole instance of the class True) whose ifTrue:ifFalse: method evaluates the first argument, or false (the sole instance of the class False) whose ifTrue:ifFalse: method evaluates the second argument.  Very neat and conceptually clean.  It allows you to define your own control flow methods.&lt;/p&gt;
&lt;p&gt;Ruby on the other hand compiles if statements and their kind as tests and branches, much as a C compiler would.  We trade off a little flexibility for performance.&lt;/p&gt;
&lt;p&gt;But, in my experience, that flexibility rarely got used in Smalltalk.  Not only that but, in my day at least, the Smalltalk compilers would &lt;strong&gt;also&lt;/strong&gt; compile ifTrue:ifFalse: to a test of the result of the &amp;#8216;receiver&amp;#8217; and a branch.  In fact I just tried defining a FakeBoolean class with an ifTrue: method and when I try to use it I see this:&lt;/p&gt;
&lt;img src="http://talklikeaduck.denhaven2.com/files/2008-05-21_must_be_boolean.png" alt="must_be_boolean" height="326" width="326"&gt;
&lt;p&gt;That NonBooleanReceiver exception is like seeing the Wizard of Oz behind the curtain, this notion of no control flow, just messages is actually a bit of an illusion.&lt;/p&gt;
&lt;p&gt;Again, while Ruby doesn&amp;#8217;t even pretend to implement all control flow by messaging, it provides most of what the underlying Smalltalk mechanisms are really used for in the form of blocks used to implement iterators.&lt;/p&gt;
&lt;p&gt;There are other aspects of Smalltalk which are both blessings and curses.  The fact that Smalltalk has a persistent run-time image, containing all the development tools, which can be saved along with its state of execution, and restarted is quite powerful, alien to many programmers, and can drastically change your approach to deployment.  Back when I was doing Smalltalk we always struggled with issues like the footprint of the image, how to strip out the development tools before deployment, and start-up time.  Some of these problems might seem to be less severe with today&amp;#8217;s hardware, but they are still issues.&lt;/p&gt;
&lt;p&gt;I feel that I might be coming across a little too harshly on my old friend Smalltalk.  It still provides a great programming environment, and serves as a source of inspiration which shouldn&amp;#8217;t be overlooked, and I hope to see some of the powerful development tool features from Smalltalk appear with help from support in some of the emerging Ruby implementations.  I&amp;#8217;m glad to see that it seems to be making somewhat of a resurgence, along with dynamic languages in general.  But for me right now, while I wouldn&amp;#8217;t be unhappy if I had to go back to Smalltalk, but I feel happier with Ruby.&lt;/p&gt;</description>
      <pubDate>Wed, 21 May 2008 16:58:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:8d57cff0-8bf8-43fe-8b97-c7b98decd8f1</guid>
      <author>Rick DeNatale</author>
      <link>http://talklikeaduck.denhaven2.com/articles/2008/05/21/what-would-you-miss-if-you-had-to-stop-using-ruby-and-go-back-to-smalltalk</link>
      <category>ruby</category>
      <category>war_stories</category>
      <category>smalltalk</category>
      <category>seaside</category>
      <category>debugging</category>
      <trackback:ping>http://talklikeaduck.denhaven2.com/articles/trackback/500</trackback:ping>
    </item>
    <item>
      <title>Cool, but Stupid, Things I've Done</title>
      <description>&lt;div style='width:240; float:left; text-align:right; font-size:xx-small; border-width:1px; border-color:#444444; border-style:solid;margin-bottom:30px; margin-right:30px;' class='tease-image'&gt;
&lt;img width='240' height='162' alt='Cones' src='http://farm2.static.flickr.com/1156/525199388_4361019fd9_m.jpg'&gt;
&lt;br/&gt;
&lt;a href='http://flickr.com/photos/ericcastro/525199388/'&gt;Cones&lt;/a&gt;
&lt;br/&gt;&amp;copy;
&lt;a href='http://flickr.com/people/ericcastro'&gt;Eric Castro&lt;/a&gt;
&lt;br/&gt;&lt;a href='http://creativecommons.org/licenses/by/2.0/'&gt;&lt;img src='http://i.creativecommons.org/l/by/2.0/80x15.png' title='used under a Creative Commons Attribution License' width='80' height='15' border='0'/&gt;&lt;/a&gt;
&lt;/div&gt;
One of the things about working with software is that you can pretty much do anything you imagine.
&lt;p&gt;Many of these things can be cool.&lt;/p&gt;
&lt;p&gt;And many of them, particularly in retrospect, can be less than brilliant.&lt;/p&gt;
&lt;p&gt;Here are two of the more visible cool, but stupid things I've done in the past.&lt;/p&gt;



&lt;h2&gt;Visual VisualAge&lt;/h2&gt;
&lt;p&gt;Years ago, my position at IBM gave me the opportunity to visit other companies pushing the envelope in software development.  One such visit was to a small company in Santa Barbera, CA called Expertelligence, which at the time produced a version of common lisp for the Macintosh called &lt;a href="http://www.byte.com/art/9608/sec4/art2.htm"&gt;ExperCommonLisp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There I met an interesting young Frenchman by the name of Jean-Marie Hulot, who showed me a user interface tool written in ExperCommon Lisp.&lt;/p&gt;
&lt;p&gt;Sometime later I ran into Jean-Marie again at a meeting with Steve Jobs at NeXT.  Steve had hired Jean-Marie. The interface tool had been ported to Objective-C and had become the NeXT interface builder. It lives on to this day as part of the XCode tools for Mac OSX.&lt;/p&gt;
&lt;p&gt;I was impressed by what I'd seen, but by then I'd been working with Smalltalk for a while.  The visual construction of the UI was cool, but I didn't like the idea of being dumped back into the mundane world of compilers and make.  After having seen "Paree" in the form of the Smalltalk development environment, it was hard to imagine staying down on the farm.&lt;/p&gt;
&lt;p&gt;So, I thought, why not make something like the interface builder inside the Smalltalk environment, and a quick prototype was born.&lt;/p&gt;
&lt;p&gt;For some reason, I dubbed this the "Application Builder" with the idea that the combined UI Builder/IDE was for building more than just UIs.&lt;/p&gt;
&lt;p&gt;Well, after I showed the prototype around a bit, I got to show it to Earl Wheeler, who was the IBM executive responsible for IBMs software tools strategy (AD/Cycle).  He apparently liked what he saw, and funded a Smalltalk project based on my prototype.  This opened the door for the IBM Smalltalk products to come.&lt;/p&gt;
&lt;p&gt;Rather than getting intimately involved with the product development group, I stayed in advanced technology research.&lt;/p&gt;
&lt;p&gt;When Earl took on Smalltalk, the last thing he seemed to want was to introduce a new language.  But, because of the visual UI construction in my prototype, he rationalized "positioning" Smalltalk as a "generator."  Perhaps as a result of this, the product team got quite carried away with visual construction and made the project a complete visual programming language, and the product was dubbed &lt;a href="http://en.wikipedia.org/wiki/VisualAge"&gt;VisualAge&lt;/a&gt; as a result of a christening contest among the development team.&lt;/p&gt;
&lt;p&gt;In retrospect the streass on visual programming wasn't so smart.  The resulting programs were hard to understand, debug and maintain. Ken Auer &lt;a href="http://rubyhoedown2007.confreaks.com/session07.html"&gt;recently observed&lt;/a&gt; that it produced a lot of "Smalltalk" programmers who didn't learn Smalltalk.&lt;/p&gt;
&lt;p&gt;It also had a marketing effect on Smalltalk.  After IBM came out with VisualAge, ParcPlace renamed their ObjectWorks family of products as VisualWorks.&lt;/p&gt;
&lt;p&gt;IBM did eventually release IBM Smalltalk, unbundled from the visual programming componentry.&lt;/p&gt;
&lt;h2&gt;Too Much Transparency Considered Harmful&lt;/h2&gt;
&lt;p&gt;Sometime later, I had another "cool idea" and led a small development team to turn it into a product.  The idea was transparent distributed execution of Smalltalk programs, and the product was the IBM/Smalltalk Distributed feature.&lt;/p&gt;
&lt;p&gt;This was, if I may say so, a technical tour-de-force.  Completely written in Smalltalk, the feature allowed Smalltalk programs to comprise objects on different networked machines.  It was much more transparent that other distributed object technologies like Rubys DRB, Javas RMI, or Corba.  Everything worked off of Smalltalks reflection capabilities, there was no IDL. In fact we named it Smalltalk Distributed to distinguish it from HPs Distributed Smalltalk which was 'just' a binding of Smalltalk to CORBA.&lt;/p&gt;
&lt;p&gt;And the development environment was fully distributed as well, without too much work on our parts.  For example the regular Smalltalk debugger was able to follow execution threads (in Smalltalk threads are called Proessses) from machine to machine and back again. A Smalltalk block containing a return on one machine could be called from a method on another machine, and the distributed stack would unwind just like it would on a single machine. Normal process synchronization techniques would work as well.&lt;/p&gt;
&lt;p&gt;The key to making this work was implementing what I called a "logical" process which associated each Smalltalk process with a single local process on each physical machine involved in the logical process. The Debugger worked, because the Smalltalk debugger is, at heart, a process inspector, and by making the logical process mimic a normal process, the debugger was none the wiser.&lt;/p&gt;
&lt;p&gt;This was really cool technical stuff, but in reality it turned out to be stupid because making distributed method sends so transparent hides important facts such as that there can be orders of magnitude performance differences between a local and remote send and, probably more importantly, there are failure modes (like network outages) for a remote send which just don't occur for local sends.&lt;/p&gt;
&lt;p&gt;So just like cases where a building owner decides that it's prudent to put some obvious visual clue on a large floor-to-ceiling window to keep people from trying to walk through it, sometimes it's better to eschew transparency and make the programmer deal with reality rather than perception.&lt;/p&gt;</description>
      <pubDate>Sat, 17 Nov 2007 06:18:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:ddf2e13e-1398-4255-9ee4-998ab2300b71</guid>
      <author>Rick DeNatale</author>
      <link>http://talklikeaduck.denhaven2.com/articles/2007/11/17/cool-but-stupid-things-ive-done</link>
      <category>war_stories</category>
      <category>smalltalk</category>
      <category>visualage</category>
      <category>stupidity</category>
      <category>smalltalkdistributed</category>
      <trackback:ping>http://talklikeaduck.denhaven2.com/articles/trackback/482</trackback:ping>
    </item>
    <item>
      <title>To paraphrase Kent Beck...</title>
      <description>&lt;p&gt;&lt;img src="http://talklikeaduck.denhaven2.com/files/merlin2tee.jpg" class="tease-image"/&gt;
I&amp;#8217;m catching up on my &lt;span class="caps"&gt;RSS&lt;/span&gt; feeds this afternoon, and I just ran across the 
&lt;a href="http://www.iunknown.com/2007/09/what-is-this-me.html"&gt;
latest from John Lam&lt;/a&gt;.  Which exposed an interesting coincidence.&lt;blockquote class="pullquote"&gt;Oh yes, Merlin is the original code-name for our team, which was originally IronPython but has now expanded to include the Dynamic Language Runtime and IronRuby. &lt;br/&gt;- John Lam&lt;/blockquote&gt;
&lt;p&gt;The codename for &lt;span class="caps"&gt;IBM&lt;/span&gt;&amp;#8217;s original VisualAge project was &amp;#8220;Camelot.&amp;#8221;  Various subcomponents
and follow-ons were dubbed with various names from Arthurian legend.  For example, there
were components with names like &amp;#8220;Lancelot&amp;#8221; and &amp;#8220;Guinivere.&amp;#8221;&lt;/p&gt;
&lt;p&gt;Sometime after the initial success of VisualAge, it was decided that &lt;span class="caps"&gt;IBM&lt;/span&gt; would actually 
produce a separate Smalltalk language and &lt;span class="caps"&gt;IDE&lt;/span&gt; packaging, a product which was originally named
&amp;#8220;IBM Smalltalk&amp;#8221; at launch.&lt;/p&gt;
&lt;p&gt;But during development &lt;span class="caps"&gt;IBM&lt;/span&gt; Smalltalk had Arthur&amp;#8217;s wizard as its namesake.  As usual there
were tee shirts, and this article starts with a picture I just took of my copy of the &lt;span class="caps"&gt;IBM&lt;/span&gt;
Merlin Tee, which my wife still uses as an exercise tee.
And in case you can&amp;#8217;t read them, the words in the
crystal ball read &amp;#8220;think &lt;span class="caps"&gt;BIG&lt;/span&gt;/TALK small&amp;#8221; a combined reference to &lt;span class="caps"&gt;IBM&lt;/span&gt;, Smalltalk, and I suppose, Teddy Roosevelt.
&lt;img src="http://talklikeaduck.denhaven2.com/files/merlin1tee.jpg" class="tease-image"/&gt;
Now old Merlin might look more like a Swami than the wizard of Camelot, but here&amp;#8217;s the proof
from the front of the shirt:&lt;/p&gt;
&lt;p&gt;So to paraphrase my old buddy Kent Beck, I knew that Microsoft was trying to implement
Ruby, but I didn&amp;#8217;t know it would be called Merlin!&lt;/p&gt;&lt;/p&gt;</description>
      <pubDate>Sun, 02 Sep 2007 17:35:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:5bc282b9-04f1-4c02-9707-414a10802e05</guid>
      <author>Rick DeNatale</author>
      <link>http://talklikeaduck.denhaven2.com/articles/2007/09/02/to-paraphrase-kent-beck</link>
      <category>ruby</category>
      <category>war_stories</category>
      <category>smalltalk</category>
      <category>ironruby</category>
      <category>ibmsmalltalk</category>
      <trackback:ping>http://talklikeaduck.denhaven2.com/articles/trackback/459</trackback:ping>
    </item>
    <item>
      <title>Nobody Could Count Beans Like IBM</title>
      <description>&lt;p&gt;&lt;img src="http://talklikeaduck.denhaven2.com/files/128px-Revolving_light_microscope.jpg" class="tease-image"/&gt;
In my thirty-two year career at &lt;span class="caps"&gt;IBM&lt;/span&gt;, I can&amp;#8217;t begin to count how many times I was bothered by
the &lt;span class="caps"&gt;IBM&lt;/span&gt; software development process.
&lt;p&gt;When I started, in 1974, I found myself trying to swim under the waterfall.  Everything
hinged on &amp;#8220;Requirements Documents,&amp;#8221; &amp;#8220;Initial Functional Specs,&amp;#8221; &amp;#8220;Design Reviews,&amp;#8221; etc.
Managers were constantly wanting line of code estimates.  Far more effort was wasted on
process rather than progress. Sometimes the process overhead was fatal.  My first project at
&lt;span class="caps"&gt;IBM&lt;/span&gt; was part of IBMs major initiative in the 1970s to replace the &lt;span class="caps"&gt;IBM&lt;/span&gt;/370 with a new system 
called &amp;#8220;FS&amp;#8221;.  One of my heroes at the time was John Sowa who worked in the architecture
department and whose role seemed to be the resident iconoclast.  In one of his memorable
memos &lt;a href="http://www.jfsowa.com/computer/memo125.htm"&gt;available on his web site,&lt;/a&gt;
John made the observation that the system architecture specification comprised fifteen
registered &lt;span class="caps"&gt;IBM&lt;/span&gt; confidential documents, each with an individual need to know. A fact which
effectively prevented &lt;strong&gt;anyone&lt;/strong&gt; in the company from understanding the system
and its problems.&lt;/p&gt;
&lt;p&gt;So, it should be no surprise that I came to an appreciation of what are now called
agile methods, early on in my career, and fought for the processes and technologies which
enable agility inside &lt;span class="caps"&gt;IBM&lt;/span&gt;, and evangelized such approaches to &lt;span class="caps"&gt;IBM&lt;/span&gt; customers.&lt;/p&gt;
&lt;p&gt;Fred George was one of my allies during part of this struggle. Fred was a middle-level &lt;span class="caps"&gt;IBM&lt;/span&gt;
manager who came to the &lt;span class="caps"&gt;IBM&lt;/span&gt; lab in Cary, NC about the time we started using Smalltalk, and 
I was developing a prototype application development tool which morphed into VisualAge.
I worked in Fred&amp;#8217;s organization and claim influencing him on dynamic OO technology, and agile
methods.&lt;/p&gt;
&lt;p&gt;Fred now works for ThoughtWorks, and blogs about agile methods.  Recently he has been 
writing about &lt;a href="http://processpeoplepods.blogspot.com/2007/09/and-how-are-you-going-to-use-that.html"&gt;how to push back against bean-counting&lt;/a&gt;.  I get the sense that Fred shared
many of my frustrations with the old &lt;span class="caps"&gt;IBM&lt;/span&gt; process.&lt;/p&gt;</description>
      <pubDate>Sun, 02 Sep 2007 16:52:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:fe204e36-3919-4dbc-b62c-24a1112b8ab1</guid>
      <author>Rick DeNatale</author>
      <link>http://talklikeaduck.denhaven2.com/articles/2007/09/02/nobody-could-count-beans-like-ibm</link>
      <category>war_stories</category>
      <category>agility</category>
      <category>IBM</category>
      <trackback:ping>http://talklikeaduck.denhaven2.com/articles/trackback/458</trackback:ping>
    </item>
    <item>
      <title>After the Hoedown is Over, Part 1</title>
      <description>&lt;p&gt;&lt;img src="http://talklikeaduck.denhaven2.com/files/hoedown.png" class="tease-image"/&gt;
The first Ruby Hoedown, sponsored by the Raleigh Ruby brigade, has finally come and gone. I had a great two days, saw some old friends, and made lots of new ones.
&lt;p&gt;Here are my initial thoughts after more than a bit too litle sleep after a night trying to root out werewolves.&lt;/p&gt;


&lt;h2&gt;Deja-Vu All over again&lt;/h2&gt;
&lt;p&gt;I was just a little surprised how often Smalltalk came up during the weekend.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The first instance was in the keynote talk by Bruce Tate, well known as a &lt;a href="http://www.pragmaticprogrammer.com/titles/fr_j2r/index.html"&gt;Java apostate&lt;/a&gt; in which he explored the current state of Ruby, how it got where it is, and where it might go in the future.&lt;p&gt;This was in part a cautionary tale, and the fate of Smalltalk in the mid-late 1990s loomed large.&lt;/p&gt;&lt;p&gt;As one of those heavily involved in the Smalltalk community as a developer and evangelist for &lt;span class="caps"&gt;IBM&lt;/span&gt;, I found it interesting to get an independent perspective.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.rolemodelsoft.com/ken_auer"&gt;Ken Auer&lt;/a&gt; gave a talk on Saturday called &amp;#8220;Does Ruby have a Chasm to cross?&amp;#8221;&lt;/li&gt; which covered much of the same ground as Bruce&amp;#8217;s talk, but really focused on comparing the life paths of Ruby and Smalltalk.
&lt;p&gt;So another independent perspective on what happened to Smalltalk, this time from someone with known credentials as a key member of the Smalltalk community when it was booming. Ken and I go back quite a ways.&lt;/p&gt;
&lt;p&gt;Ken worked at Knowledge Systems Corp back then, which as a company which provided intensive training in object oriented development using Smalltalk via an apprentice program.  Clients would send small development teams to &lt;span class="caps"&gt;KSC&lt;/span&gt; to work on the clients project with the assistance and mentoring of &lt;span class="caps"&gt;KSC&lt;/span&gt; folks.  Efforts such as these were important seeds for what we now know as the agile movement.&lt;/p&gt;
&lt;p&gt;Ken got a lot of things right about what happened to Smalltalk, although I could add some details and corrections from and &amp;#8220;inside &lt;span class="caps"&gt;IBM&lt;/span&gt;&amp;#8221; perspective, which might be food for future articles.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
Finally, I &amp;#8220;organized&amp;#8221; a birds-of-a-feather session covering &amp;#8220;Ruby for Smalltalkers, and Smalltalk for Rubyists&amp;#8221; which was well attended and turned out to be mostly a few old &lt;span class="caps"&gt;IBM&lt;/span&gt; Smalltalkers like me, Fred George, and my &lt;a href="http://www-03.ibm.com/developerworks/blogs/page/pmuellr?entry=ruby_hoedown_day_2"&gt;
&amp;#8220;evil twin&amp;#8221;, Pat Mueller&lt;/a&gt; responding to questions from Rubyists about Smalltalk.
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Testing Workshop&lt;/h2&gt;
Stepping back, on Friday morning, Bruce Tate, &lt;a href="http://www.chadfowler.com/2007/8/12/ruby-hoedowned"&gt;
Chad Fowler&lt;/a&gt;, and 
&lt;a href="http://therailsway.com/"&gt;Marcel Molina jr.&lt;/a&gt; ran a charity workshop on test driven development, with proceeds going to the local food bank.
&lt;p&gt;Although I&amp;#8217;m a pretty committed test-driven developer, I found the session very informative, and got a new appreciation for the use of mocks, not only to allow testing before all the code is written, but to keep tests independent even after the components being mocked exist.&lt;/p&gt;
&lt;h2&gt;Watch this space&lt;/h2&gt;
&lt;p&gt;This article has already gotten long enough, I expect to post more about the events of the past weekend in the near future.&lt;/p&gt;</description>
      <pubDate>Tue, 14 Aug 2007 11:03:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:6eb9e44b-b826-4897-829b-2f7a29cba151</guid>
      <author>Rick DeNatale</author>
      <link>http://talklikeaduck.denhaven2.com/articles/2007/08/14/after-the-hoedown-is-over</link>
      <category>ruby</category>
      <category>war_stories</category>
      <category>smalltalk</category>
      <category>rails</category>
      <category>rubyhoedown</category>
      <category>history</category>
      <trackback:ping>http://talklikeaduck.denhaven2.com/articles/trackback/454</trackback:ping>
    </item>
    <item>
      <title>The other Dave Thomas and the Birth of the Agile Alliance</title>
      <description>&lt;p&gt;&amp;#8220;Uncle Bob&amp;#8221; Martin of Object Mentor just published an article containing his 
&lt;a href="http://blog.objectmentor.com/articles/2007/07/09/the-founding-of-the-agile-alliance"&gt;personal recollection&lt;/a&gt;
of how the 
&lt;blockquote class="pullquote"&gt;
... Dave Thomas of &lt;span class="caps"&gt;OTI&lt;/span&gt; fame. (We call him &#8220;Big Dave&#8221; to differentiate him from the Pragmatic Programmer of the same name.)
&lt;/blockquote&gt;
&lt;a href="http://www.agilealliance.org/"&gt;Agile Alliance&lt;/a&gt; got started and the writing of the
&lt;a href="http://agilemanifesto.org/"&gt;&amp;#8220;Agile Manifesto&amp;#8221;&lt;/a&gt;
&lt;p&gt;He gives a bit more background than has previously been told.  Of particular interest to me is the role of &lt;a href="http://www.davethomas.net/"&gt;&amp;#8220;Big Dave&amp;#8221; Thomas&lt;/a&gt;, the founder of &lt;span class="caps"&gt;OTI&lt;/span&gt; in kick-starting the organization.&lt;/p&gt;
&amp;#8220;Big Dave,&amp;#8221; not to be confused with Dave Thomas of the Pragmatic Programmers, has been one of the movers and shakers of the object-oriented technology community for many years, and doesn&amp;#8217;t always get the credit he deserves, particularly now that he has &amp;#8220;retired&amp;#8221; to the Carribean island of &lt;a href="http://en.wikipedia.org/wiki/Anguilla"&gt;Anguilla.&lt;/a&gt;  He might not be as visible now as he was in the heyday of &lt;span class="caps"&gt;OTI&lt;/span&gt;, but he&amp;#8217;s &lt;a href="http://www.bedarra.com/"&gt;still active.&lt;/a&gt;  Had Anguilla been easier to reach, the Agile Manifesto would have been written at Dave&amp;#8217;s place instead of in Utah.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m proud of my experiences working with and for &amp;#8220;Big Dave&amp;#8221; and to count him as a friend.&lt;/p&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 09 Jul 2007 13:17:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:7ea6c63c-fde8-4132-b194-e1497451cccd</guid>
      <author>Rick DeNatale</author>
      <link>http://talklikeaduck.denhaven2.com/articles/2007/07/09/the-other-dave-thomas-and-the-birth-of-the-agile-alliance</link>
      <category>war_stories</category>
      <category>agilealliance</category>
      <category>davethomas</category>
      <category>oti</category>
      <trackback:ping>http://talklikeaduck.denhaven2.com/articles/trackback/440</trackback:ping>
    </item>
    <item>
      <title>Punch Card Tales</title>
      <description>&lt;p&gt;For some reason, talk on ruby-talk brought up old computer stories.  David Black related a story told him by a former boss about a &amp;#8220;photo op&amp;#8221; in a company computer center triggering failures when the photographers&amp;#8217; flashes upset the optical sensors in the tape drives.&lt;/p&gt;


	&lt;p&gt;Since I&amp;#8217;m sitting in a hospital cafeteria this afternoon waiting to see my wife who just had some surgery. I figured I might amuse myself, and hopefully you gentle reader with some old mainframe war stories.&lt;/p&gt;


&lt;h2&gt;Tale #1&lt;/h2&gt;

	&lt;p&gt;When I was an undergraduate, I used to spend all my free-time (and much of my non-free time) at the University computer center.  There was a large room for student use with keypunch machines on the walls and worktables in the center.&lt;/p&gt;


	&lt;p&gt;One of my friends was a graduate student who was working on a team writing an Algol compiler as a term project.  They had broken down into teams, lexical analysis, parser, code generation ,etc.  They were in the middle of integration.&lt;/p&gt;


	&lt;p&gt;The &amp;#8220;source code control system&amp;#8221; was a large punch card box.  For those who haven&amp;#8217;t seen them these are long corrogated cardboard boxes which hold a &lt;b&gt;big&lt;/b&gt; stack of cards and have a lid hinged in the back.&lt;/p&gt;


	&lt;p&gt;The team was making a series of debugging runs, they would take turns carrying the box to the room with the card reader and offer the contents to the god in the mainframe as their latest &amp;#8216;sacrifice.&amp;#8217;  When the listing came back, they would spread it out on the table and figura out what to do next.&lt;/p&gt;


	&lt;p&gt;This wasn&amp;#8217;t &amp;#8216;pair&amp;#8217; programming, it was &amp;#8216;septet&amp;#8217; programming.&lt;/p&gt;


	&lt;p&gt;I was sitting at a nearby table helping another student with a homework assignment, and glancing occasionally at the compiler team.&lt;/p&gt;


	&lt;p&gt;The guy with the card box came back from the reader to see his team-mates vigoursly discussing something they had seen in the last run. He was carrying the box in front of him, his fingers wrapped around the bottom, and his thumbs holding the lid down.  He walked up to the table gaining interest in the discussion. As he leaned over the table, he absent-mindedly rotated his wrists and &lt;b&gt;relaxed his thumbs!&lt;/b&gt;&lt;/p&gt;


	&lt;p&gt;They spent the next hour or so trying to &amp;#8216;revert&amp;#8217; the deck from the last listing.&lt;/p&gt;


	&lt;p&gt;Thank God that today we&amp;#8217;ve got cheap hard-disks and subversion!&lt;/p&gt;


&lt;h2&gt;Tale #2&lt;/h2&gt;

	&lt;p&gt;Same time frame and place.&lt;/p&gt;


	&lt;p&gt;Tom was another graduate student friend.  He was an older guy who had come back to school after spending some time in the trenches in Texas. Back in the early 1970s there was lots of data processing done by what &lt;span class="caps"&gt;IBM&lt;/span&gt; called &amp;#8220;Unit Record Shops.&amp;#8221; Tome had worked in one before coming to graduate school.&lt;/p&gt;


	&lt;p&gt;In &lt;span class="caps"&gt;IBM&lt;/span&gt; parlance a punched card was a unit record since the file record (I guess we&amp;#8217;d call it a row in &lt;span class="caps"&gt;SQL&lt;/span&gt; these days) and the physical unit, the card, were one and the same.&lt;/p&gt;


	&lt;p&gt;Unit record shops, didn&amp;#8217;t have computers, which in those days were investments on the order of a million dollars, give or take an order of magnitude or two. They did everything with decks of punchcards and machines which sorted, collated, or printed them. These machines were &amp;#8216;programmed&amp;#8217; by connecting holes in plugboards with wires.&lt;/p&gt;


	&lt;p&gt;Tom said that once he&amp;#8217;d accompanied his boss to a trade show. The boss, like many others, didn&amp;#8217;t have a really good grasp of the technology his business used.&lt;/p&gt;


	&lt;p&gt;The boss saw Tom on the show floor and told him, &amp;#8220;Tom, come here, you&amp;#8217;ve &lt;b&gt;got&lt;/b&gt; to see this!&amp;#8221;&lt;/p&gt;


	&lt;p&gt;He led Tom to a booth where a &amp;#8220;booth babe&amp;#8221; was loading a rainbow-colored stack of cards into the input hopper of a machine, and pushing the start button at which point the machine put all the blue cards in one slot, the yellow cards in another, and so forth.&lt;/p&gt;


	&lt;p&gt;Tom couldn&amp;#8217;t figure out &lt;b&gt;why&lt;/b&gt; the boss was so impressed, surely he&amp;#8217;d seen sorting machines before. After all they has several of them at work.&lt;/p&gt;


Then the boss showed his hand.
&lt;blockquote&gt;
Tom, I&amp;#8217;ve seen lots of fancy machines in my day, but this is the &lt;b&gt;first&lt;/b&gt; one I&amp;#8217;ve ever seen that could sort by &lt;b&gt;color!&lt;/b&gt;
&lt;/blockquote&gt;

	&lt;p&gt;Even today, it&amp;#8217;s too easy to create demos with lots of flash and no substance.&lt;/p&gt;</description>
      <pubDate>Wed, 27 Jun 2007 17:02:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:b6bc2534-09b1-4377-8985-50808c2642b8</guid>
      <author>Rick DeNatale</author>
      <link>http://talklikeaduck.denhaven2.com/articles/2007/06/27/punch-card-tales</link>
      <category>war_stories</category>
      <category>humor</category>
      <trackback:ping>http://talklikeaduck.denhaven2.com/articles/trackback/436</trackback:ping>
    </item>
    <item>
      <title>Good News</title>
      <description>Recently  on gluttonous, Kevin Clark announced that &lt;a href="http://glu.ttono.us/articles/2007/06/21/powerset-to-launch-front-end-on-ruby"&gt;
Powerset is going to launch their front-end on Ruby.&lt;/a&gt; It seems that they were already pre-disposed to a major ruby comitment having built a sizable Ruby talent pool for their internal applications.
&lt;p&gt;Prior to making the final decision to go all out with ruby for their front-end launch, the did some due diligence which included investigating the facts behind the recent furore caused by an &lt;a href="Twitter&#8217;s lead developer, Blaine Cook,"&gt;interview&lt;/a&gt; with one of Twitter&amp;#8217;s developers.&lt;/p&gt;
&lt;p&gt;So they went to 
Twitter&#8217;s lead developer, &lt;a href="http://www.slideshare.net/Blaine/scaling-twitter"&gt;Blaine Cook&lt;/a&gt; to get the straight dope.&lt;/p&gt;&lt;p&gt;Quoting Kevin:
&lt;blockquote&gt;The simple fact is that Ruby wasn&#8217;t the source of Twitter&#8217;s woes. As it often happens with rapidly growing sites, they ran into architectural problems. Some design decisions don&#8217;t hurt until they reach a massive scale and at that point you have to rethink your approach. In an email he writes:
&lt;blockquote&gt;
    For us, it&#8217;s really about scaling horizontally &amp;#8211; to that end, Rails and Ruby haven&#8217;t been stumbling blocks, compared to any other language or framework. The performance boosts associated with a &#8220;faster&#8221; language would give us a 10-20% improvement, but thanks to architectural changes that Ruby and Rails happily accommodated, Twitter is 10000% faster than it was in January
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;That last sounds quite true and corresponds to my experiences in the past with Smalltalk.  I used to tell &lt;span class="caps"&gt;IBM&lt;/span&gt; customers that almost all performance comes not from the language but from application design, and that using a dynamic language which allowed the application to be developed in what&amp;#8217;s now called an agile development process allows major performance gains through refining, refactoring, and retuning the system as both business and performance requirements get uncovered/discovered.&lt;/p&gt;&lt;p&gt;
That&amp;#8217;s as least as true of Ruby as it was of Smalltalk 15-20 years ago.&lt;/p&gt;</description>
      <pubDate>Fri, 22 Jun 2007 10:29:00 -0400</pubDate>
      <guid isPermaLink="false">urn:uuid:26814954-7ba2-4b21-bb89-8ed609dacb89</guid>
      <author>Rick DeNatale</author>
      <link>http://talklikeaduck.denhaven2.com/articles/2007/06/22/good-news</link>
      <category>ruby</category>
      <category>war_stories</category>
      <category>best_practices</category>
      <category>performance</category>
      <category>evangelism</category>
      <category>rails</category>
      <trackback:ping>http://talklikeaduck.denhaven2.com/articles/trackback/435</trackback:ping>
    </item>
  </channel>
</rss>
