Contrast Is Clarifying
Which is best?
- Generalist or specialist?
- Native or web?
- Web site or web app?
- JavaScript or Typescript?
- Framework or library?
- Server side or client side?
- Photoshop or Sketch or Figma?
- Designing in a tool or design in the browser?
- Skueomorphic or flat?
- Mac or PC or Linux?
This list could go on forever. Zoom in to just the JavaScript ecosystem and its overwhelming:
- Modules: ESM, CJS, AMD, UMD
- Package managers: npm, yarn, pnpm, bower
- Bundlers: Webpack, Rollup, Parcel, Bun, Vite
- Compilers: Babel, TypeScript, esbuild, swc
- Runtimes: Node, Deno, Bun
- UI frameworks: React, Vue, Angular, Svelte, Lit
Even here, the list could go on forever: db libraries, task runners, testing libraries, UI metaframeworks, server frameworks, state management libraries, etc.
Module systems — ESM, CJS, AMD, UMD — are a great example: how could we truly understand any of them individually without having had all of them?
We need opposing options. They exist not solely in opposition to one another but as contrast.
We must have a diversity to understand and discuss which is most fit for a given context. The web is big! “It depends”!
How do you understand one thing without the contrast of its opposite? What is white without black? How do you understand salty without sweet? One, by definition, excludes the other, which gives form and shape to the definition of each.
And guess what? Whichever you choose, you’ll likely choose poorly. That’s ok. Choosing poorly is where growth happens — if you let it.
Silver bullets are for killing werewolves not building technology.