<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-3836263610079655093.post5526479418711428245..comments</id><updated>2011-08-04T03:33:16.258-03:00</updated><category term='linux'/><category term='ENTP'/><category term='sysadmin'/><category term='CDATA'/><category term='javascript'/><category term='ajax'/><category term='mocha'/><category term='Design'/><category term='Functional programming'/><category term='reverse ajax'/><category term='Metaprogramming'/><category term='Refactoring'/><category term='Testing'/><category term='C#'/><category term='Duck typing'/><category term='ssh git capistrano'/><category term='comet'/><category term='Ruby Cubox'/><category term='RSpec'/><category term='Xml'/><category term='Ruby'/><category term='plugin'/><category term='BDD'/><category term='DSL'/><category term='Linq'/><category term='rails'/><category term='mongrel'/><category term='Humor'/><category term='vim'/><category term='Autotest'/><category term='prototype'/><title type='text'>Comments on Daniel Cadenas: Ruby</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.danielcadenas.com/feeds/5526479418711428245/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3836263610079655093/5526479418711428245/comments/default'/><link rel='alternate' type='text/html' href='http://www.danielcadenas.com/2007/10/ruby.html'/><author><name>Daniel Cadenas</name><uri>http://www.blogger.com/profile/07935636187234627682</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://lh3.google.es/dcadenas/Ra-_PqMllUI/AAAAAAAAAAw/-221g8_4dkc/594183122.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3836263610079655093.post-7596141445884902926</id><published>2007-12-15T18:04:00.000-02:00</published><updated>2007-12-15T18:04:00.000-02:00</updated><title type='text'>Thanks Diego I already updated the post.&lt;br&gt;&lt;br&gt;I ...</title><content type='html'>Thanks Diego I already updated the post.&lt;BR/&gt;&lt;BR/&gt;I agree with you and I think that most people that don't think Ruby is a serious language usually see only one side of the coin about this aspect of the C#/Java vs Ruby comparison. There's usually not much serious evaluation of both alternatives.&lt;BR/&gt;&lt;BR/&gt;I think this is &lt;I&gt;mostly&lt;/I&gt; due to not seeing the value of low coupled designs. If you can't see this you also can't see the good consequences of not declaring interfaces and you tend to conclude that the way languages like C#/Java handle interfaces is necessarily better.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3836263610079655093/5526479418711428245/comments/default/7596141445884902926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3836263610079655093/5526479418711428245/comments/default/7596141445884902926'/><link rel='alternate' type='text/html' href='http://www.danielcadenas.com/2007/10/ruby.html?showComment=1197749040000#c7596141445884902926' title=''/><author><name>Daniel Cadenas</name><uri>http://www.blogger.com/profile/07935636187234627682</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://lh3.google.es/dcadenas/Ra-_PqMllUI/AAAAAAAAAAw/-221g8_4dkc/594183122.jpg'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.danielcadenas.com/2007/10/ruby.html' ref='tag:blogger.com,1999:blog-3836263610079655093.post-5526479418711428245' source='http://www.blogger.com/feeds/3836263610079655093/posts/default/5526479418711428245' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1964916130'/></entry><entry><id>tag:blogger.com,1999:blog-3836263610079655093.post-4083983473308557973</id><published>2007-12-15T14:05:00.000-02:00</published><updated>2007-12-15T14:05:00.000-02:00</updated><title type='text'>Very good article.&lt;br&gt;&lt;br&gt;Just for correctness wit...</title><content type='html'>Very good article.&lt;BR/&gt;&lt;BR/&gt;Just for correctness with best practices, you should change your clientMethod (camel case) to client_method (snake case) on the ruby example. :-D&lt;BR/&gt;&lt;BR/&gt;But I think is worth to mention what are the "supposedly bad" consequences of not explicitly declaring the interfaces (according to strongly-type-minded developers).&lt;BR/&gt;&lt;BR/&gt;In languages like C# or Java where you have the extra step of compiling your code, the compiler would warn you if your ADuck class happens to declare its use of the Cuackable interface, but you forgot to actually implement the cuack method.&lt;BR/&gt;&lt;BR/&gt;In Ruby, you'll notice your error at runtime, when the client_method calls cuack on your ADuck instance.&lt;BR/&gt;&lt;BR/&gt;Yeah... that can get ugly on a production system.&lt;BR/&gt;&lt;BR/&gt;But (here comes MY opinion):&lt;BR/&gt;&lt;BR/&gt;1. Thanks to ruby's clear and concise syntax, and some best practices you come to learn after a period of ruby programming, I tend to think that this king of human errors are much less frequent.&lt;BR/&gt;&lt;BR/&gt;2. You should ALWAYS have tests. It doesn't matter in what language you're developing, automated tests should be there to give you a safe net over your code. In languages like C# and Java this tests will more likely test your apps behavior, because the compiler already tested your syntax. But in languages like Ruby, these tests will test both aspects of your code. And if you test well, this tests will be responsible for raising that forgotten cuack method on your ADuck class BEFORE you go to production. You'll be safe on production, a happier developer and you'll dream like an angel knowing your apps tests pass.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3836263610079655093/5526479418711428245/comments/default/4083983473308557973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3836263610079655093/5526479418711428245/comments/default/4083983473308557973'/><link rel='alternate' type='text/html' href='http://www.danielcadenas.com/2007/10/ruby.html?showComment=1197734700000#c4083983473308557973' title=''/><author><name>diegal</name><uri>http://www.blogger.com/profile/12733507633199601017</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://www.danielcadenas.com/2007/10/ruby.html' ref='tag:blogger.com,1999:blog-3836263610079655093.post-5526479418711428245' source='http://www.blogger.com/feeds/3836263610079655093/posts/default/5526479418711428245' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1129264057'/></entry></feed>
