A Defense of Frameworks

For the last week, I've needed something to distract myself with. So I started to notice (again) a lot of familiar chatter about front-end frameworks being the wrong choice for beginners, that beginners need to focus on understanding the fundamentals.

First, I want to say it's weird that we as a community do this. We don't do this with back-end frameworks. No one bats an eye referring to themselves as a Rails developer or a Phoenix developer or, gasp, a WordPress developer. Now that I got that off my chest, I can layout, my feelings in the clearest way possible.

Comments like this, really bother me. They give the implication that you aren't a qualified developer, "enough", or valuable to the longevity of your own work. This implication is a poison that goes way way way too easy.

Frameworks give context to fundamentals

I started to learn to code in 2011. I picked up HTML and CSS because I had a professor that I hated. For the web design portion of my graphic design degree, he forced everyone to use Dreamweaver and if you remember that particular program, it was a nightmare to navigate and a lot of professional web designers told me that they "just used HTML and CSS in a Coda". So I focused on doing that, my professor hadn't really designed a website in years or worked outside the world of academia in a decade so I didn't really trust him that much.

I honestly found HTML and CSS pretty easy concepts to pick up. CSS clicked a lot more for me than a program like Photoshop or Illustrator. Then, in the process I tried to learn JavaScript and I tried to read a lot of books on the subject. And I failed, miserably.

The onus of having to build something and provide value to the people I worked for and to the users we worked led me to different JavaScript frameworks. The classic: "well we have to build a dashboard, Heroku uses Ember.js for theirs, sounds like a good idea" -- as poor as those intentions I've had dozens and dozens of conversations just like that. So I took a tutorial on Ember and Firebase. It put those fundamental parts of JavaScript in actual context, I quickly saw the difference between an Array and an Object, methods and functions because very obvious, class inheritance was something else entirely. But it enabled learning and way-finding within a manageable context and left me with a skeleton to build the next thing.

Fundamentals are great, but there are diminishing returns on basics. Building with a framework early vs from scratch you gain:

  • Understanding the complexity of the application you're building
  • The ability to see trade-offs early

Frameworks enable productivity

I've written about productivity across a team with CSS. But the other side of that is lack of need to communicate the fundamentals of a framework or choices about conventions. This helps you focus on the problem your team is being paid to solve.

Even as an individual, clinging to a framework, things can very quickly become isolated as nails and your framework becomes a pretty powerful hammer.

GIF of Thor with Hammer
This makes you Thor. You get to be Thor.

Not surprisingly, finding other people who are {Angular,Vue,React} developers trying to solve the same problems often exposes you to modules that are low cost to bring into your projects.

Frameworks aid in a job hunting

I've only ever gotten jobs I really liked because they were hiring "React" developers. This had two benefits: showing me what I needed highlight in my skillset and gave me something to discuss in an interview.

Also from that experience, there's an pretty obvious benefit of working with frameworks that often goes underappreciated. I don't like Angular; not my thing. But because I know that, I can filter out all the jobs I don't want.

Just Know Your Edges

Find tools that make you productive in building the things you ultimately want to build or see exist. But you as an engineer have a finite capacity, you only have so much brain space, hours in the day. You have limits: edges. Understanding that you do, allows you to work with the capacity you have and not a projection of skills you're being convinced that you need.

This is probably an unhelpful story

A good programming friend of mine, Sean Washington and I have often chatted about the role of frameworks. He loves Vue. I can't get into it. He's indifferent to React, I don't think there's a day I'm not wondering if my component's are artisanal enough (you don't want them to unmount too soon, it takes care and patience, thank you for coming to my TED talk). At this point if Sean and I ever work together on a project, the framework doesn't matter. If one of us wants to prototype something for the other, that's the important part.

Because the reality is having worked in any framework that enables you to understand the underlying language it's implemented in, teaches you the language and good fundamentals and you gain more experience along the way.

Now, this React developer, this Next.js fanboy, this GraphQL gambler, has stuff to build.