<story><title>Why Learning to Code Is So Damn Hard</title><url>http://www.vikingcodeschool.com/posts/why-learning-to-code-is-so-damn-hard</url></story><parent_chain><item><author>lelandbatey</author><text>That is absolutely something that irritates me. I&amp;#x27;ve just inherited a large RoR application, and the amount of &amp;quot;magic&amp;quot; and things by convention is driving me crazy. There should be answers to questions like &amp;quot;why is this the way it is?!&amp;quot;&lt;p&gt;On a side note, if anyone has some great resources for RoR, I&amp;#x27;d love to have them linked. I suspect my inexperience is the source of my problems, and I&amp;#x27;m welcome to any assistance any one would like to give.</text></item><item><author>SilasX</author><text>Unless you&amp;#x27;re doing Rails, in which case it&amp;#x27;ll be read as a magic method and guess what you meant :-P&lt;p&gt;Seriously, that was a major sticking point for me having programmed for a long time: going from &amp;quot;if you have not declared that identifier, game over&amp;quot; to &amp;quot;magic happens&amp;quot;.</text></item><item><author>rcthompson</author><text>When I was in college, one CS professor explained the difficulty of coding to me in terms of discreteness vs continuity. In the real world, things are continuous. If you accidentally build your structure with 9 supports instead of 10, then you only lose 10% of the strength of the structure, more or less. The strength varies continuously with the amount of support. But if you&amp;#x27;re writing a 10-line program and you forget one of the lines (or even one character), the program isn&amp;#x27;t 10% wrong, it&amp;#x27;s 100% wrong. (For example, instead of compiling and running correctly, it doesn&amp;#x27;t compile at all. Completely different results.)&lt;p&gt;Of course this logic doesn&amp;#x27;t hold up all the time. Sometimes you can remove a critical support and collapse a structure, and sometimes removing a line of code has little to no effect, but the point is that in programming, a small change can have an unboundedly large effect, which is the definition of discontinuity.&lt;p&gt;(I believe it was this professor, who was my teacher for discrete math: &lt;a href=&quot;http://www.cs.virginia.edu/~jck/&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;www.cs.virginia.edu&amp;#x2F;~jck&amp;#x2F;&lt;/a&gt; )</text></item></parent_chain><comment><author>grey-area</author><text>The guides on the ror website are pretty good:&lt;p&gt;&lt;a href=&quot;http://guides.rubyonrails.org/&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;guides.rubyonrails.org&amp;#x2F;&lt;/a&gt;&lt;p&gt;Which bits did you find were magic? The bits of convention I can think of you&amp;#x27;d have to know about are:&lt;p&gt;DB naming conventions - these are used so that it can do joins etc easily behind the scenes, they&amp;#x27;re pretty simple so not a huge problem I find.&lt;p&gt;Rendering at the end of controller actions - it&amp;#x27;ll render the template with the same path as your route - again relatively straightforward.&lt;p&gt;Class loading - lots of things are loaded at startup time, so that you don&amp;#x27;t have to include files - I have mixed feelings about this, it feels easy and simple at first, but could leave you unsure where code comes from or which methods you can use in which files (e.g. view helpers). Definitely more magic.&lt;p&gt;One other area which does lead to real problems is that rails sites often use a lot of libraries in the form of gems - this leads to unknown, sometimes poorly maintained or inappropriate code being pulled in at runtime, and makes it far harder to reason about things like say authentication if using a gem. This is my biggest complaint with rails - lack of transparency of code paths when using gems like devise, paperclip etc but it is unfortunately quite common in web frameworks&lt;p&gt;They actually got rid of quite a few bits of method_missing madness I think recently so that magic is gone at least (all those magic find_by_ methods are deprecated or removed, not sure which as I never used them). I haven&amp;#x27;t found the conventions get in the way much as it&amp;#x27;s something you learn once and can apply anywhere, but completely understand why someone might object to some of the magic setup for helpers&amp;#x2F;rendering.</text></comment>
<story><title>Why Learning to Code Is So Damn Hard</title><url>http://www.vikingcodeschool.com/posts/why-learning-to-code-is-so-damn-hard</url></story><parent_chain><item><author>lelandbatey</author><text>That is absolutely something that irritates me. I&amp;#x27;ve just inherited a large RoR application, and the amount of &amp;quot;magic&amp;quot; and things by convention is driving me crazy. There should be answers to questions like &amp;quot;why is this the way it is?!&amp;quot;&lt;p&gt;On a side note, if anyone has some great resources for RoR, I&amp;#x27;d love to have them linked. I suspect my inexperience is the source of my problems, and I&amp;#x27;m welcome to any assistance any one would like to give.</text></item><item><author>SilasX</author><text>Unless you&amp;#x27;re doing Rails, in which case it&amp;#x27;ll be read as a magic method and guess what you meant :-P&lt;p&gt;Seriously, that was a major sticking point for me having programmed for a long time: going from &amp;quot;if you have not declared that identifier, game over&amp;quot; to &amp;quot;magic happens&amp;quot;.</text></item><item><author>rcthompson</author><text>When I was in college, one CS professor explained the difficulty of coding to me in terms of discreteness vs continuity. In the real world, things are continuous. If you accidentally build your structure with 9 supports instead of 10, then you only lose 10% of the strength of the structure, more or less. The strength varies continuously with the amount of support. But if you&amp;#x27;re writing a 10-line program and you forget one of the lines (or even one character), the program isn&amp;#x27;t 10% wrong, it&amp;#x27;s 100% wrong. (For example, instead of compiling and running correctly, it doesn&amp;#x27;t compile at all. Completely different results.)&lt;p&gt;Of course this logic doesn&amp;#x27;t hold up all the time. Sometimes you can remove a critical support and collapse a structure, and sometimes removing a line of code has little to no effect, but the point is that in programming, a small change can have an unboundedly large effect, which is the definition of discontinuity.&lt;p&gt;(I believe it was this professor, who was my teacher for discrete math: &lt;a href=&quot;http://www.cs.virginia.edu/~jck/&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;www.cs.virginia.edu&amp;#x2F;~jck&amp;#x2F;&lt;/a&gt; )</text></item></parent_chain><comment><author>quetzthecoatl</author><text>Convention over configuration is awesome, if you know the conventions. If you don&amp;#x27;t, it&amp;#x27;s all magic. At least with configurations, you can read them and get some pointers.</text></comment>