Nick Sieger: RubyConf: Nathaniel Talbott: Open Classes, Open Companies tag:blog.nicksieger.com,2005:Typo Typo 2010-11-22T19:46:00+00:00 Platte Daddy urn:uuid:0ff3ed0c-de01-445c-be15-de54d31ccc96 2006-10-25T04:42:12+00:00 2010-11-22T19:46:00+00:00 Comment on RubyConf: Nathaniel Talbott: Open Classes, Open Companies by Platte Daddy <p>Commenter x, the same argument can work the other way: if you find static typing indispensable, your systems probably have other problems&#46;</p> <p>Amazon writes big enough programs, I imagine we could agree, and have become a completely service&#45;oriented shop, each feature running separately from the others, in whatever language suits&#46; Imagine all the work they <em>don&#8217;t</em> have to do to make changes to those systems&#46;</p> x urn:uuid:6f25b220-fafd-4c7c-a30e-b58f2d068c8f 2006-10-23T16:56:58+00:00 2010-11-22T19:46:01+00:00 Comment on RubyConf: Nathaniel Talbott: Open Classes, Open Companies by x <p>If you don&#8217;t find static typing useful, you don&#8217;t write big enough programs&#46;</p> <p>Take a look here for a contrasting view on the dangers of duck typing:</p> <p><a href='http://beust' rel="nofollow">http://beust</a>&#46;com/weblog/archives/000269&#46;html</p> Nick Sieger urn:uuid:a34a9408-1458-4d25-b94c-d5370b81c524 2006-10-21T18:54:00+00:00 2010-11-22T18:11:23+00:00 RubyConf: Nathaniel Talbott: Open Classes, Open Companies <p><em>Update: <a href="http://blog.terralien.com/past/2006/10/26/open_classes_open_companies_rubyconf_2006/">Full text of Nathaniel&#8217;s talk</a>&#46;</em></p> <p>Nathaniel is honored to be speaking at RubyConf for the sixth year in a row&#46; His basic premise for today is this: the language you&#8217;ve chosen has certain characteristics that reflect back on you&#46; In turn we can reflect on those characteristics and how they relate to what we value in business as well&#46;</p> <h2>Dynamism</h2> <p>Ruby&#8217;s typing system (contrast to static typing)&#46; I&#8217;m thinking about my program, not satisfying the type checker&#46; Static typing sounds good in theory but I haven&#8217;t found it that helpful in practice&#46;</p> <p>How about dynamism in business? How about job titles&#46; If you stick a person in a &#8220;box&#8221;, they pretty much stay in it&#46; It&#8217;s easy for HR, but not good for the growth of the business&#46; In Ruby we have duck&#45;typing, but a fixed job title is kind of like static typing&#46; It makes it harder for you to adapt to the situation at hand, or keeps you from growing into new roles you never thought you could do&#46; Nathaniel mentions how he, as a programmer, never thought he could be good at sales, but now he likes it&#46;</p> <h2>Interpretation</h2> <p>The behavior of the program is order&#45;dependent (contextual)&#46; Once you embrace that Ruby interprets statements as it encounters them, you find power in it&#46; It allows you to delay decisions until they&#8217;re necessary, a feature that supports dynamic business&#46;</p> <h2>Succinctness</h2> <p>A stated design goal for ruby (by Matz) is succinctness, but not just brevity for brevity&#8217;s sake (e&#46;g&#46;, extremely compact Perl), but in a read/write sense&#46;</p> <p>A succinct legal agreement is wise use of the limited time a client has to figure out what he&#8217;s signing up for&#46; Legal agreements should have one purpose &#45;&#45; to set expectations so that no one is surprised&#46;</p> <p>Maybe your employment agreement is so long and full of legalese that you&#8217;ve inadvertently signed up as a corporate slave&#46; Be wary; ask for a summary; consider how it might affect your ability to contribute to open source projects&#46;</p> <h2>Reflection</h2> <p>Ruby the language permits and even encourages a high degree of introspection&#46; Does your workplace reward introspection, or penalize it? Or is it a &#8220;fire and forget&#8221; environment?</p> <h2>Open classes</h2> <p>Ruby allows any code to open any class, add/remove code, muck with state&#46; Could we break things everywhere? Yes&#46; But Ruby values implementor power over safety or security through obscurity&#46; This can be scary for some&#46;</p> <p>When people close to you know a lot about you, they can hurt you&#46; You&#8217;re vulnerable&#46; But the other side of this is that being open builds trust, which is an essential component of a successful business relationship&#46;</p> <p>Do you know what your peers are paid? Do you know what deals are in the pipeline? Can you look at the books?</p> <p>Ruby&#8217;s open nature may seem naive, but it&#8217;s wonderfully naive&#46;</p> <h2>Discussion</h2> <p><em>Q&#46; Would these techniques work outside of a technical hub?</em> My business is not driven by locale&#46; I&#8217;m able to assign work in a distributed manner&#46;</p> <p><em>Q&#46; You assume that your peers are trustworthy and honest&#46; What about in a more cutthroat competitive environment?</em> You either need to change your organization or &#8220;change your organization&#8221;, i&#46;e&#46;, switch jobs or try to effect change to find a place that reflects your values&#46;</p> <p><em>Q&#46; Transparency meets the real world&#46; Crashing software and crashing companies are two different things &#45;&#45; perhaps the analogy can only be taken so far?</em> The worst that could happen is that I get nothing for the time I invest other than the learning experience&#46; It&#8217;s more a matter of limiting risk&#46; I&#8217;m not saying I&#8217;m broadcasting every detail to every client&#46;</p> <p><em>Q&#46; Do you scope clearly and bid, or do you do ongoing hourly work?</em> I only do time and materials&#46; RFPs make me gag&#46; People spend time on the piece of paper and then give it more credence than my own opinion&#46;</p> <p><em>Q&#46; How does testing play into this?</em> One thing that Ruby values is constant feedback, which is also a big tenet of testing&#46; Constant and short feedback cycles, &#8220;testing your customer&#8221; &#45;&#45; don&#8217;t get caught in a long&#45;term agreement&#46;</p> <p><em>Q&#46; How do you put that in a statement of work?</em> I make sure the client knows that we&#8217;re building a trusting relationship&#46; I also don&#8217;t claim to have this all figured out&#46;</p> <p><em>Q&#46; Can you scale this (team of trustworthy people) to a larger model?</em> This is in a way like the evergreen question about Ruby; &#8220;does it scale?&#8221; Partly, I don&#8217;t care because it&#8217;s working for me now&#46; On the other hand, I&#8217;m thinking about it because I like the thought of bringing more people into the fold&#46; [A comment from the audience brought up the subject of lifestyle companies as an example of why it wouldn&#8217;t&#46;]</p> <p><em>Q&#46; There are two types of contracts &#45;&#45; the 2&#45;page business agreements and the 50&#45;page CYA edge cases&#46;</em> True, I have the luxury of working with clients that small enough that they are not likely to sue me&#46;</p> <p><em>Q&#46; If everyone is a sub&#45;contractor, there is no career path or &#8220;carrot&#8221;&#46;</em> Part of the goal of my business is to catapult people beyond it by allowing them enough free time to work on their own things&#46;</p> <p><em>Q&#46; How do you balance work and life?</em> I&#8217;m not always the best at it, but now I&#8217;m working out of my house and can be with my family when things come up&#46; Some days I shut the door and get things done&#46; Work/life balance is messy and I work on it on a daily basis&#46;</p>