惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - Franky
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
J
Java Code Geeks
F
Full Disclosure
V
V2EX
The Register - Security
The Register - Security
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
云风的 BLOG
云风的 BLOG
T
Troy Hunt's Blog
Microsoft Security Blog
Microsoft Security Blog
Help Net Security
Help Net Security
P
Privacy & Cybersecurity Law Blog
K
Kaspersky official blog
博客园 - 聂微东
Recorded Future
Recorded Future
I
Intezer
S
Schneier on Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
H
Hacker News: Front Page
SecWiki News
SecWiki News
M
MIT News - Artificial intelligence
Security Latest
Security Latest
Attack and Defense Labs
Attack and Defense Labs
A
About on SuperTechFans
aimingoo的专栏
aimingoo的专栏
宝玉的分享
宝玉的分享
T
Tenable Blog
B
Blog
N
News | PayPal Newsroom
P
Proofpoint News Feed
D
Docker
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
MyScale Blog
MyScale Blog
C
Cisco Blogs
A
Arctic Wolf
T
Threat Research - Cisco Blogs
I
InfoQ
Stack Overflow Blog
Stack Overflow Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
GbyAI
GbyAI
P
Palo Alto Networks Blog
Engineering at Meta
Engineering at Meta
Hugging Face - Blog
Hugging Face - Blog
Latest news
Latest news
Project Zero
Project Zero

Pierce Freeman

A browser for agents | Pierce Freeman The grey market of podcast appearances The way I travel | Pierce Freeman Fixing slow AWS uploads | Pierce Freeman Local tools should still use vaults We solved scratch content first Starting a podcast in 2025 Being late but still being early Automating our home video imports Adding my parents to tailscale A deep dive on agent sandboxes Language servers for AI | Pierce Freeman My simple home podcast studio We need centralized infrastructure | Pierce Freeman Coercing agents to follow conventions using AST validation My unified theory of social selling My personal backup strategy | Pierce Freeman July updates to the homelab How the KV Cache works httpx is the right way to do web requests in Python Reputation is becoming everything | Pierce Freeman Building a (kind of) invisible mac app Updated knowledge in language models Making an ascii animation | Pierce Freeman How speculative decoding works | Pierce Freeman Under the hood of Claude Code Doing things because they're easy, not hard Speeding up sideeffects with JIT in mountaineer Firehot for hot reloading in Python Misadventures in Python hot reloading How text diffusion works | Pierce Freeman The tenacity of modern LLMs The ergonomics of rails | Pierce Freeman How language servers work | Pierce Freeman Just add eggs | Pierce Freeman Unfortunately SEO still matters | Pierce Freeman The futility of human-only web requirements Setting up Input Leap | Pierce Freeman Checking in on Waymo | Pierce Freeman Speeding up many small transfers to a unifi nas Quick notes on swift libraries AI engineering is a different animal San Francisco | Pierce Freeman Debugging a mountaineer rendering segfault Local network config on macOS Building our home network | Pierce Freeman Introducing Envelope.dev | Pierce Freeman Legacy code and AI copilots Typehinting from day-zero | Pierce Freeman Generating database migrations with acyclic graphs Lofoten | Pierce Freeman Mountaineer v0.1: Webapps in Python and React Constraining LLM Outputs | Pierce Freeman Passthrough above all | Pierce Freeman Accuracy in kudos | Pierce Freeman How quick we are to adapt The curious case of LM repetition Costa Rica | Pierce Freeman Debugging chrome extensions with system-level logging Speeding up runpod | Pierce Freeman Inline footnotes with html templates Parsing Common Crawl in a day for $60 An era of rich CLI All or nothing with remote work The Next 10 Years | Pierce Freeman Adding wheels to flash-attention | Pierce Freeman LLMs as interdisciplinary agents | Pierce Freeman New Zealand | Pierce Freeman Representations in autoregressive models | Pierce Freeman Let's talk about Siri | Pierce Freeman Minimum viable public infrastructure | Pierce Freeman Reasoning vs. Memorization in LLMs Automatically migrate enums in alembic Greater sequence lengths will set us free On learning to ski | Pierce Freeman Dolomites | Pierce Freeman Using grpc with node and typescript Opportunity years | Pierce Freeman Buzzword peaks and valleys | Pierce Freeman Buenos Aires | Pierce Freeman Network routing interaction on MacOS Independent work: November recap | Pierce Freeman Debugging slow pytorch training performance The provenance of copy and paste Debugging tips for neural network training Patagonia | Pierce Freeman Santiago | Pierce Freeman My 2022 digital travel kit AWS vs GCP - GPU Availability V2 Independent work: October recap | Pierce Freeman Planning Patagonia | Pierce Freeman Relationship modeling | Pierce Freeman The power of status updates A new chapter | Pierce Freeman Give my library a coffee shop AWS vs GCP - GPU Availability V1 Switzerland | Pierce Freeman Headfull browsers beat headless | Pierce Freeman Webcrawling tradeoffs | Pierce Freeman Copenhagen | Pierce Freeman
The react revolution | Pierce Freeman
2025-05-03 · via Pierce Freeman

React was greeted like an ugly stepchild when it walked on stage in May 2013. HTML inside JavaScript? When CDN framework imports and jQuery were the standard build pipelines1, the new syntax was doing too much all at once. It not only mixed two separate languages, but it also mixed two inherently imperative communities. Declarative state programming was not how you build websites.

A few months later Pete Hunt doubled‑down with his now‑classic "Rethinking Best Practices" talk at JSConf EU, waving JSX around like a red cape and daring everyone to give it five minutes before stampeding. Five minutes might be all that it takes when you know an alternative would take you hours.

React's timing helped. Node.js was already exploding. npm ended 2014 serving 7 billion downloads a month, up roughly 4x from just two years before2. Same language in the front and back promised zero context switching, more flexible engineers, and faster features. React hitched a ride on that freight train then jumped tracks. Electron (open‑sourced 2013) put those components on the desktop, Slack‑style. React Native went mobile after Facebook’s F8 reveal in 2015 and suddenly JavaScript was compiling down to real Cocoa Touch views instead of running in a WebView.

"Good enough" cross‑platform was more than enough when the alternative was three different codebases.

Meanwhile every platform stole the mental model. Apple lit up WWDC 2019 with SwiftUI - declarative, live‑previewed. It was the whole React playbook just with SomeView instead of <div>. Google answered with Jetpack Compose, hitting 1.0‑stable in July of 2021. The idea is contagious: describe the final state, let the runtime figure out the steps.

We collectively realized, everyone at the same time, that it just feels good to write declarative interface code. To describe how you want something to look at its end state - not how to transform the current state of an element to get there.

The general arguments about declarative vs imperative design patterns emerge as they always do. The tension distills down to something like "declarative cuts boilerplate" versus "imperative gives me control". But then they stall out in abstract territory. They miss how people feel after six hours at the keyboard. Cognitive‑load studies keep showing that when a language lets you state your intent instead of narrating every micro‑step, you burn less mental energy and make fewer mistakes.3 You can actually think about the problem instead of shepherding variable properties.

Imperative code flatters you with an illusion of mastery - every loop, every mutation screaming “I did this.” Jeremy Keith calls it the comfort of inventing everything from scratch, right up until the day you inherit someone else’s mess and realize the knobs were placebo all along.

Declarative flips that relationship: you hand the runtime the goal, the runtime does the grunt work, and your brain stays parked in high‑level land. That feels like magic the first time a <Button> component re‑skins itself across the entire app with one prop change. It gives you a little jolt of magic every day.4

Simplicity makes it easier to get into the flow. Hooks (React 16.8, February 2019) distilled the API to three lines: useState, useEffect, and a return statement full of markup. Add props and you’ve basically memorized the surface area.

When you're writing JSX you just feel like you're writing regular Javascript and regular HTML. The additional syntax layered on top of two existing languages makes the learning curve almost trivial. There's way more you can learn but at its heart that's all you have to deeply internalize. Learn how to manipulate variables and you learn how to manipulate the whole layout of the page.

So here we are, twelve years on. No headings, no templates, just one big component tree. React didn’t just win the JavaScript wars; it changed how every major platform thinks about UI. Everything else is implementation detail.

  1. This statement is an offense to pipelines everywhere. ↩

  2. From npm's historical record. ↩

  3. Similar to the research in Scenario-based programming. ↩

  4. Of course there’s a trade‑off. When something doesn’t behave, a declarative layer can feel like a black box. SQL is lovely until the query planner decides to full‑scan a billion‑row table. HTML is great until you need hidden elements to hack around the box model. But most days the win is emotional: less ritual. ↩