<story><title>It&apos;s about time to start fighting against the Rails “magic” myth</title><url>http://blog.plataformatec.com.br/2010/12/crafting-rails-applications-why-i-wrote-this-book/</url></story><parent_chain></parent_chain><comment><author>j4mie</author><text>I think you might be fighting an uphill battle here.&lt;p&gt;Some developers prefer Python, some prefer Ruby. An individual developer might be able to reel off a list of reasons why one is better than the other, but in the end it comes down to something intangible and subjective - &quot;Ruby just &lt;i&gt;feels&lt;/i&gt; better&quot; or &quot;Python &lt;i&gt;fits my brain&lt;/i&gt; better&quot;.&lt;p&gt;The concept of &quot;magic&quot; is very similar. What feels magical and opaque to one developer might be plain and obvious to another. When you ask what &quot;magic&quot; means, you&apos;ll get different answers from different people.&lt;p&gt;From my point of view (as a Python/Django developer), even the basic &lt;i&gt;commands&lt;/i&gt; that Rails uses feel strange. Compare the very first line of code that you run in a Django project vs a Rails project:&lt;p&gt;&lt;pre&gt;&lt;code&gt;    django-admin.py startproject mysite
&lt;/code&gt;&lt;/pre&gt;
with&lt;p&gt;&lt;pre&gt;&lt;code&gt;    rails new blog  
&lt;/code&gt;&lt;/pre&gt;
The former says: &quot;run the Python script called django-admin.py&quot; (which immediately tells me that this is just a Python script that I could read, if I were so inclined) and pass the arguments &quot;startproject&quot; (which is a clear description of what is about to happen) and &quot;mysite&quot; (which is, fairly obviously, the name of the project to start). This reads like a sentence of the form &apos;use &amp;#60;tool&amp;#62; to perform &amp;#60;action&amp;#62; with arguments &amp;#60;arguments&amp;#62;&apos;.&lt;p&gt;The latter says: &quot;run the command rails&quot; (what is this? A Ruby script? A bash script? A binary? Why is it called &quot;rails&quot; when the whole framework is called &quot;Rails&quot;?) and pass the arguments &quot;new blog&quot; (obviously this is creating &lt;i&gt;something&lt;/i&gt;, but what? In most languages, &quot;new&quot; is a keyword that is usually used to create instances of classes - so is it creating an instance of something called &quot;blog&quot;? Does that mean that Rails knows what a &quot;blog&quot; is already?) To me - this is magic. Rails says &quot;type this incantation and I&apos;ll do some stuff for you&quot;. Django says &quot;here are some tools you can use to do stuff&quot;.&lt;p&gt;You might disagree with me entirely in this particular case - perhaps you find the Rails example clearer - which is fine. The point of this example is to say that framework and language preference is so intangible that the &lt;i&gt;very first line&lt;/i&gt; of your documentation can sway someone&apos;s opinion either way. Instead of fighting against the &quot;magic myth&quot;, you should just be trying to attract developers who &lt;i&gt;like&lt;/i&gt; your particular brand of magic (or, alternatively, don&apos;t see your code as magic at all).</text></comment>
<story><title>It&apos;s about time to start fighting against the Rails “magic” myth</title><url>http://blog.plataformatec.com.br/2010/12/crafting-rails-applications-why-i-wrote-this-book/</url></story><parent_chain></parent_chain><comment><author>aaronblohowiak</author><text>Convention over configuration: sane default values.&lt;p&gt;magic: changing the scope in which a block is eval&apos;d so you can inject BlankSlates that have method_missing defined on them that then do some string manipulation in order to pick which code path to take.&lt;p&gt;Sometimes you need to lean pretty hard on the super-dynamic features to get the api you want.  But is it worth it?</text></comment>