As a self-taught developer, I have a feeling my story is similar to others. I was first exposed to HTML and CSS followed by a smattering of JavaScript. At that point, the curriculum I was followed diverged into a completely new realm of coding that I had never heard of: Ruby on Rails. After getting the basics and nuances of Ruby, I found myself knee-deep in the Rails framework. I was awed and amazed by the power of how all the different files could be compiled into a website and the ease at which it could be accomplished. It was awesome! I was so enthused by my Rails experience that I even started developing my own app so as to put my skills to the test. It was going great...until I rediscovered JavaScript.
I found myself spending less time adding new features to my pet project and eventually stopped working on it all-together. My attention had become fully enamored with the idea of a full-stack app all in JavaScript. Just like I had done in Rails, I left the tutorials behind and embarked on my own creation. This time I had used a MERN stack for my app's structure. At this point, after months of tinkering with this app, I am still fully engaged in refactoring and advancing it. In having followed the same path twice, what was different between Rails and MERN that with the former had me losing interest and the latter still holding on tight? It's all a matter of opinion...or should I say opinionated.
Don't get me wrong, Ruby on Rails is a really impressive framework that serves a wide variety of purposes, especially due to all the set-up it provides right out of the box. However, one of the biggest hurdles I faced as a self-taught newbie was learning the "Rails Way" of doing things. I became overly critical of my code base feeling that I was somehow violating all the fundamental rules of Rails. The freedom that should come from using an opinionated framework was lost on me as someone newly arrived to the programming world.
Working within a MERN stack, however, was and is really exciting for me at this point. I'm constantly trying new things out, completely breaking my app, and then attempting to figure out what went wrong as I fix it. I know the solutions I reach are not perfect, but I feel that they are still acceptable.
I think about how my daughter colors in pictures. As a toddler, her goal is to get the crayon on the paper, with the expectation of casualties to the floor or table. The concept of staying within the opinionated lines on a page is lost on her.
Likewise, as a new coder, my goal most days is to get code into an editor and see something appear on the screen, with the occasional pretzel crumb casualty in the keyboard. Non-opinionated frameworks, like Express, help me to scratch this itch as I still learn what all the lines in good programming are. And, like most of us as we learned to color in pictures, we realized and appreciated the lines on the page for what they were and how those opinionated outlines could help us create some pretty cool art projects for the fridge.
So, both newbies and veterans alike, what has been your experience if you've worked with both opinionated and non-opinionated frameworks? What can new learners take away from each of these systems?
Top comments (2)
Interestingly, when I transitioned from Rails to MERN, I felt like I never knew where to put things! I felt like if I did something I needed to document it all because conventions weren't enough.
There is plenty to like about MERN and other environments, but I loved Rails' opinions.
I'll also add for being pedantic that this discussion seems to be more about frameworks than languages. Ruby itself is not so much an opinionated language.
Great perspective! Finding a home for where different pieces of code should live is a daunting task, especially when starting with a few or no starter files.
And thanks for catching my error - meant framework, not language! There are actually a lot of features from Ruby that I really miss in JavaScript.