7 ms·
> I dislike all the magic of rails. I never know what is going on because there is some functionality that inherits from a rails class or some other part of the
by BurningFrog 5y ago
> I dislike all the magic of rails. I never know what is going on because there is some functionality that inherits from a rails class or some other part of the code base.
This is also my only complaint with Rails.
I'm a programmer, not a wizard, and I'm not good at magic.
- jstummbillig 5y agoI never really understood the criticism about "magic" in Rails. We are surrounded by magic (which only means things we can not realistically be bothered to take the time to really understand, in contrast to things which are incomprehensible). I have no real clue why the terminal works. I have no real clue why my OS works. I have no real idea how TCP/IP does its thing. Sure, I can use them – but I couldn't really explain and much less recreate them. What I need in all the above is replicability. I do x, and I know y is going to happen. Get x, do y. This is true in Rails. If I really wanna know more Rails is open and easily explorable. No one is preventing me from finding out how any piece of the "magic" works. "Magic" class inheritance is a thing in JS as much as it is in Rails. What is so special about Rails and "magic"?
- onehair 5y agoWhen multiple teams work on the same rails project, you're bound to have someone enhance some class somewhere, and all of a sudden, your isolated class is doing things it's not supposed to do, or at least you think it's not supposed to be doing it. You try to debug it, but there are no types no way for the tools you're using to let you know easily, here is where this specific piece of logic coming from. In Typescript, entities have types and when you misuse something the typescript checker tells you while you're coding why, that's not what you're supposed to do. You can super easily track down the type and navigate the code base to the source and adapt either your code or edit the source. Easily. With rails, you're often required to do mental gymnastics to debug simple things, after the fact
- LargeWu 5y agoLet's not pretend javascript Promises and async/await are not magic in the same way some of Rails is. Lots of gotchas and unintuitive behavior, let alone cryptic error messages and stack traces. At least Ruby generally gives pretty useful stack traces. When something breaks, it gives you a pretty clear indication of exactly what line it happened on and what the problem is.
- CoffeeOnWrite 5y agoI love Rails (though criticism of its magic is fair), but this isn’t a good analogy. Async/await is literally syntactic sugar over the Promises abstraction. There’s nothing magic about Promises, and certainly nothing magic about async/await. In fact, I’d argue you’re in for a slower learning curve if you believe there to be magic in these areas.
- horsawlarway 5y ago> In fact, I’d argue you’re in for a slower learning curve if you believe there to be magic in these areas. I 110% agree with you. This is Rails striking again! "Don't look at the magic, just memorize it." might as well be Rails' slogan. Convention over configuration really just means "Memorize all my conventions, and don't ask why I picked them". Great for the case where your use-case is in line with the chosen conventions and you don't want to think all that hard (or you just need to pump out content - like a contract agency). Pretty terrible for just about everything else.
- davelnewton 5y agoPromises/async/await seem very different than Ruby's (and Rails') metaprogramming to me. I'd need an example of a cryptic stack trace to know exactly what you're referring to--half the problem is because of the overuse of anonymous functions that bork the trace. There's an easy solution to that (and it makes the resulting code easier to test as well).
- weaksauce 5y ago
- cmelbye 5y agoIt might come from the pervasive use of metaprogramming / DSLs in Rails and many other Ruby libraries.
- weaksauce 5y agoI think rails should have explained a bit more about what rails does... every single rails method call like has_one or belongs_to inside a controller is just a method call that sets up a few methods based on the name of the thing you pass into it. not that much magic there. it's just ruby. in fact the single best thing to know that they are not some spooky things to be feared but they are just simple method calls outside the scope of a method. class Foo; puts "foo.rb was parsed"; end is a simple example of nothing is really special.
- horsawlarway 5y ago> I never really understood the criticism about "magic" in Rails. I'll state my case as clearly as possible: The magic in Rails REQUIRES memorization... freaking everywhere. And it provides virtually no hints to jog your memory. There's just too much tooling, hidden away out of sight, and applied through shenanigans with Ruby that other languages/frameworks make MUCH more obvious. Simple trivial example? Rails fucks with imports left and right. Rails allows you to not even write a require statement half the time - it's just going to load things from places. Hope you have that list memorized. Does it save you some time? Yes. Does it make the code look "Cleaner"? Sure. Does it make my life a fucking chore every time I have to run a damn console to find the source location of an object at runtime because it's entirely unintuitive about where it freaking came from? Damn right it does. --- If you started early in your career with Rails - you probably don't notice this. But if you have experience with a solid selection of languages (ex professionally I've used: GoLang, C, C++, JS/Typescript, C#, Java, Netlogo, Rust & Ruby) I find the discoverability in Ruby/Rails about the lowest on the list. Very fast to work with if you happen to have it all memorized. But that's about the only compliment I can give it.
- svachalek 5y agoI have to work with a lot of legacy codebases day to day, but generally it's get in, figure it out, make a change, test it, and go. With Rails, I just end up in that "figure it out" loop over and over. In my book it's a write-only coding environment like everyone used to complain about with Perl and PHP. People crank that stuff out really fast and move on and leave future generations to suffer. But they love it, of course.
- montblanc 5y agoHow much effort did you put into learning Ruby and Rails properly? It's easy to get started but rather hard to master and it sounds like you're invested in other tech.
- horsawlarway 5y agoRight back at ya: "Which version of Ruby and Rails?" :P Because to me - RoR is in the death spiral period that the original ASP.Net was in before Microsoft threw the whole thing out and started over with the Core version. Namely: Rails trys to give you opinionated best defaults, but the "best defaults" have changed dramatically since the framework came into existence. So you end up with 6 very different set of opinions as the framework has evolved, and the documentation is poor (honestly, at least ASP.net had okish docs - I find Rails docs pretty damn bad) and you get a complete wash on 3rd party sites trying to find relevant info for the version you happen to be using. Also - Unlike MS and ASP, Rails doesn't even fucking try to keep naming consistent. They seem to favor making the syntax as close to natural language as possible, often deprecating the old syntax in favor of new method names solely "because it reads better". Which drives me freaking nuts. Inertia will keep it running for a long time, but it's not the thing I would pick for greenfield projects anymore.
- tcoff91 5y agoLarge Rails projects are the worst I’ve ever encountered as far as being able to find the code that’s actually going to run when I’m looking at a function call in some code. Even with Rubymine, the jump to definition support is a joke compared to typescript, Java, etc… You just see these functions and there is no require in the file to tell you where they come from. Rails just loads that shit from somewhere. It could be from a mixin, it could be from one of the 50 classes in your hierarchy, who the hell knows. You press jump to definition and rubymine just fucking chokes and gives you like 30 different method definitions with the same name in different places.
- BurningFrog 5y agoYeah, that's a good summary of my frustrations. I don't know how much blame to put on Rails, Ruby, or the teams I worked on, but in the end it was very frustrating. Aside from that I like Ruby a lot, and Rails only a bit less. But it's a big aside :)
- imhilla 5y agoHey @here i have had the same issue with tracking what is executed when jumping into a new code base, sometimes the code base is so large that instead of contributing you start learning what exists. There is AppMap, google maps for codes, used it quite a few times and unlike rubymine, you can track functions, methods easily by tracing views with just instant clicks. Here is the site https://appland.org/ https://appland.org/ and they have a vscode extension to ease the process of recording maps
- ylhert 5y agoI understand the "too much Magic" criticism of Rails from novices & intermediate Rails developers, but once you reach a sufficient level of mastery, I think this goes away. After using Rails every day for 12 years I know pretty much all the ins and outs, and what is "magic" to others is just the robust tooling I love. Just like any tools, they are overwhelming and daunting when you don't know how to use them, but once you become proficient with them, they make your life so much easier. While it might be difficult when the "magic" doesn't do exactly what you want for your edge case, when you have a sufficient level of mastery, it's easy to find a way to adapt/modify/override the tooling and make it do what you want. Further, many times the tooling is there to keep you from doing things you probably should not be doing, and this kind of strict, opinionated, best practice enforcing philosophy has gotten me out of trouble at times, and I think it makes it much easier for engineers to move between Rails codebases and start being productive even faster. I've done plenty of Node/JS/React and I honestly do not understand how people can prefer to use these stacks over Rails. For full stack web dev, Rails is such a pleasant place to work every day.
- gkop 5y agoAlso, Rails has moved away from the magic over the years, learning where it is and is not appropriate.
- cageface 5y agoI've been doing Rails for literally decades. I understand the magic but I still struggle to figure out what's going on in larger codebases. The amount of context you have to pull in to understand what a particular block of code is doing can be huge.
- theonething 5y ago> I've been doing Rails for literally decades. Rails is 17 years old.
- cageface 5y agoYep I've been using since some the beginning.