Humans are intrigued by Magic. The mysterious and the unexplained has always sold books, TV shows and movies. Even when we watch a magic performance knowing everything we are about to see is a trick, we still enjoy it because it challenges our imagination in a childlike and playful way, which inspires an idea of infinite possibilities, and the curiosity of the world we have as children.
In the software world Magic has slowly become a negative word and I think this is very sad. In the tech scene a sentence like "I do no like framework X because it has too much magic" is quite common. This "magic" is usually used to explain conventional frameworks. These are frameworks that require you to place your files in a specific directory, name them a certain way or name some of your methods following a certain convention. Because of this the framework can make assumptions about what you are trying to do and go ahead and do them for you with less work from the developers end. This got coined as magic because your data gets transported and transformed with significantly less input from the developer and what you intended just happens...sometimes it feels like the framework read your mind.
The common criticisms are that using these kind of tools restrict you and make you build software in a certain way, another criticism is if you deviate too far from the tools core competence simple things may become harder to do, also in the wrong hands giving all this magic to people who do not understand how it works leads to half baked developers and crappy software.
These criticisms are all true... to an extent. For me the fundamental problem that the critics of
magic conventional frameworks are making is that they blame the software and not the person using it. Yes you are not free to place or name you files as you like but with this comes a standard, it is easy for anyone who is familiar with that framework to pick up from where the previous developer stopped with minimum ramp up time. Yes if you deviate too far from the frameworks competence, some easy things become hard to do, but we should not be using a tool that is not built to solve the problem we are trying to solve. As for the criticism about creating crappy software, this is all on the developer. Software should not force you to learn how to code, all these frameworks are open source, you can look under the hood, you curiosity should drive you to learn software and not the your tools. We live in a world today where no one person knows how to make a pencil, we use tools all the time to create things and we do not know how these tools themselves where created, why should programming be any different? I think it is noble to want to learn details about your tool and even how to make your own version, but it is not necessary to learn how to make a hammer in order for you to build a good chair.
To be great is to be misunderstood. - Ralph Emerson
Conventional frameworks like ruby on rails have done more good for the software eco-system than we can quantify. They have lowered the barrier of entry into coding for millions of people, they have inspired other frameworks and software we have built and last but not least these frameworks create and foster a community of developers who believe in a similar philosophy and encourages them to exchange knowledge and code. Magic is not bad, it is just misunderstood.