Lately (in term of years) I noticed I prefer using libraries over frameworks. Or in other words I like to use packages that each do their one thing well rather than one package with all batteries included. I recognize both libraries and frameworks have their pros and cons.
You can see my preference for libraries if you are reading my blog where I write a lot about web development, specifically about React and Go. Well, Go is a programming language but because it has an excellent standard library, there’s actually no need for a framework.
The most obvious advantage of using libraries over frameworks I have are:
- I have a freedom of putting all pieces of an application as I see fit and only those necessarily.
- I can easily replace one piece after another, better option appears.
- they take less time to learn.
- feeling I have a control over them not other way around.
- process of updating a library is less painful.
The biggest pain point is writing boilerplate after starting every new project. But this is solvable by maintaining your own starter/base/boilerplate. I don’t like using boilerplates from other people because they don’t fit my mental model (but that doesn’t mean I don’t like inspecting them for fresh ideas on how to I improve my own boilerplate).
Disadvantages of using frameworks I’ve experienced so far are:
- hard to learn
- developing in it I often don’t feel like a [insert a programming language] developer
- learning specifics which are in general useless instead of core programming concepts, computer science that can be reapplied to every new project.
- using only small subset of features or fixing a bug? Too bad, you have to learn all of it so that you might not break anything.
- having to conform to specific mindset and way of doing things because framework is designed for doing things THAT way (convention over configuration).
I only enjoyed using/learning frameworks at the beginning of my career because I didn’t exactly know what a modern applications consist of. After years of learning how to architecture an application (folder structure, design patterns etc) on my own or from popular frameworks I became confident in doing them from scratch with the help of libraries that aren’t limiting my creativeness.