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

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
B
Blog RSS Feed
W
WeLiveSecurity
I
InfoQ
L
Lohrmann on Cybersecurity
Simon Willison's Weblog
Simon Willison's Weblog
腾讯CDC
S
Schneier on Security
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Threat Research - Cisco Blogs
P
Palo Alto Networks Blog
Attack and Defense Labs
Attack and Defense Labs
I
Intezer
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Last Week in AI
Last Week in AI
WordPress大学
WordPress大学
Cisco Talos Blog
Cisco Talos Blog
T
The Exploit Database - CXSecurity.com
S
Securelist
T
Tailwind CSS Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
美团技术团队
Stack Overflow Blog
Stack Overflow Blog
T
Tor Project blog
博客园 - 叶小钗
Engineering at Meta
Engineering at Meta
Microsoft Security Blog
Microsoft Security Blog
Project Zero
Project Zero
C
Cybersecurity and Infrastructure Security Agency CISA
Apple Machine Learning Research
Apple Machine Learning Research
V
Visual Studio Blog
Know Your Adversary
Know Your Adversary
T
The Blog of Author Tim Ferriss
N
News and Events Feed by Topic
小众软件
小众软件
G
Google Developers Blog
F
Full Disclosure
O
OpenAI News
The Last Watchdog
The Last Watchdog
G
GRAHAM CLULEY
TaoSecurity Blog
TaoSecurity Blog
U
Unit 42
Jina AI
Jina AI
S
SegmentFault 最新的问题
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
P
Proofpoint News Feed
Y
Y Combinator Blog
N
News and Events Feed by Topic
K
Kaspersky official blog

Bryan Robinson's Blog

Does our technology still work for us? Product pricing, dev bad habits, and the role of the pit of success Astro Server Island for latest Bluesky post (heavily cached!) Type-safe environment variables in Astro 5.0 New Website, but really is it? Netlify Durable Cache: Caching for a third-party world Introducing the Hygraph Astro Content Loader Integrating Astro.js Starlight Documentation into a Next.js Project Using Proxies 😱 Book Release: Eleventy by Example – Learn 11ty with 5 in-depth projects 11ty Second 11ty: Creating Template Filters 11ty Second 11ty: Global Data files (JS and JSON) 11ty second 11ty: The Render Plugin Part 1 Help needed: Netlify Frontend environment variables with Astro.js Quick experiment with the Slinkity 11ty plugin Creating a dynamic color converter with 11ty Serverless Using 11ty JavaScript Data files to mix Markdown and CMS content into one collection How to show your template code in 11ty blog posts New City, New Job, New Content Using Nunjucks Climbing the 11ty Performance leaderboard with Cloudinary, critical CSS and more Three JAMstack movements to watch in 2020 Create a Codepen promo watermark with no additional HTML, CSS or JS 3 underused CSS features to learn for 2020 Use CSS Subgrid to layout full-width content stripes in an article template Adapt client-side JavaScript for use in 11ty (Eleventy) data files CSS Gap creates a bright future for margins in Flex as well as Grid Create your first CSS Custom Properties (Variables) Use CSS Grid to create a self-centering full-width element Creating an 11ty Plugin - SVG Embed Tool Now offering design and code reviews at PeerReviews.dev Routing contact-form emails to different addresses with Netlify, Zapier and SendGrid Create an Eleventy (11ty) theme based on a free HTML template Client work and the JAMstack Grid vs. Flex: A Tale of a "Simple" Promo Space Using Eleventy The Tech Barrier to Entry What Can We Learn from CERN Let Practical CSS Grid - Launching My First Course Build Trust on the Web incorporating User Worries with your User Stories 2019 The Year of Markup-First Development Refactoring CSS into a Sass mixin Starting a new journey with Code Contemporary Dynamic Static Sites with Netlify and iOS Shortcuts Top 3 uses for the ::before and ::after CSS pseudo elements How To: Use CSS Grid to Mix and Match Design Patterns Use CSS ::before and ::after for simple, spicy image overlays Modern CSS: Four Things Every Developer and Designer Should Know About CSS 3 Strategies for Getting Started with CSS Grid CSS Tip: Use rotate() and skew() together to introduce some clean punk rock to your CSS The 5 Stages of Grid Love How To: A CSS-Only Mobile Off Canvas Navigation How To: Use CSS Grid Layout to Make a Simple, Fluid Card Grid Make a More Flexible Cover Screen with CSS Grid Can CSS Grid open up interesting CMS Layout options? Firefox 52 to Introduce New Box-Alignment Values Falling Forward — Rethinking Progressive Enhancement, Graceful Degradation and Developer Morality Start Exploring the Magic of CSS Grid Layout I Converted My Blog to CSS Grid Layout and Regret Nothing Feature Queries are on the Rise CSS Shapes — Let the Text Flow Around You Flexbox -- Let Memorializing Prince and Print vs. The Web I went to Italy and noticed UX fails How to Get Designers to Contribute in Open Source The True Gift of Your Former Code
Jamstack is meaningless
2023-08-12 · via Bryan Robinson's Blog

Right at the top, let’s say what’s in the title… The name Jamstack is meaningless… but then again, so is MACH … and composable… and headless… and Developer experience… and serverless…, but also, they’re all hugely important

Meaningless and hugely important seem to be almost diametrically opposed, so let me take a step back and explain

I’ll start where all good tech thought leadership should start: With the works of Ludwig Wittgenstein.

Who is Wittgenstein and why do I care?

Wittgenstein was an Austrian philosopher of the early 20th century. His primary focuses were logic and philosophies of language and the mind. He had only one book published during his life: Tractatus Logico-Philosophicus.

The Tractatus is a collection of 525 declarative statements that seems to try to solve both philosophy and language. needless to say, we’re not going to dive into all those, we’re going to focus on one interesting statement made near the end of the work.

Often referred to as “Wittgenstein’s ladder” proposition 6.54 says the following

“My propositions serve as elucidations in the following way: anyone who understands me eventually recognizes them as nonsensical, when he has used them—as steps—to climb beyond them. (He must, so to speak, throw away the ladder after he has climbed up it.)

He must transcend these propositions, and then he will see the world aright.”

In other words, as you read and understand the work of the Tractatus, you realize the words and propositions you’ve read are meaningless, despite allowing you to attain a new level of understanding: a ladder to be kicked away after you’ve climbed it

And that’s where we come back to our technologies.

I’ve been professionally working on the web since 2006 and building on the web since well before that. I’ve seen the eras of the web. They’re all marked by their own best practices and nomenclature. Marked by their own frameworks, both mental and code.

I started with pure HTML. I grew into proto-static site generators like movable type. I got HYPED for WordPress. Got Hyped again for Django. Full-stack frameworks, frontend frameworks, static sites, object-oriented programming, test-driven development, domain-driven development, LAMP stack, headless… JAMstack…no, i mean Jamstack.

All these terms. All this language. It’s representational of ideas of how to build sites or apps or software. They describe process. They give categorization. They build mental models. They all have common communication. They allow humans to understand technology, and humans to understand each other. And once a person (or industry) understands what the term is representing and transcends the terms to “see the world aright,” then those terms become meaningless. They have served their purpose and can be kicked away.

That’s maybe where we stand with the Jamstack.

The term and technologies caused a small revolution, but perhaps that term has served its purpose and now we all think of it as meaningless.

Let’s take a quick aside and exam the path the Jamstack has gone through as a term and trend.

Jamstack origins

We’ll start with something that, in hindsight is obvious: Jamstack is a marketing term cooked up by the folks at Netlify. Mat Biilman, co-founder of Netlify gave a talk at SmashingConf in 2016 (2016 was 7 years ago.. god I’m old…). Netlify was betting on the new architecture that was starting to spring up around the industry. What started as Static sites with generators like Jekyll, but went beyond “static”.

They had to find a way to make static sites cool. Make them seem more than what the term static implies. Mat goes so far in the presentation to say that the word static is a bad word since the experiences we created with these tools could be incredibly dynamic.

The term comes from an industry convention of naming our “technology stacks” using an acronym to describe each piece of the technology. The most famous of these at the time would have been the LAMP stack. This stood for Linux the OS, Apache, the web server, MySQL, the database, and PHP, the server-side language. There wasn’t a singular analog in the world of static sites.

You could host your HTML wherever. Your data could just be markdown or pulled from postgres… or mongo db or mysql. The underlying technologies mattered less. But how you added interactivity was JavaScript and APIs and the initial page load was just Markup. JavaScript, APIs, and Markup. JAM.

This sort of work was already in the zeitgeist. React and Vue had hit their first real stride. People saw how interactive the web could be and how the tools made that easier. This was already happening, but naming the movement made things catch faster and helped rally more folks to the cause.

In many ways, this was an instance where culture changed the language, but then language helped change the culture. We had our ladder to help people climb to this new level of architecture.

But because the JAM of the Jamstack could be nearly anything, the freeform nature of the name meant people brought their own understandings

Language games: Definitions matter

Permit me another philosophical moment. Wittgenstein’s second published work (published after his death) dealt again with language. In the book, Philosophical Investigations, he explores the idea of language as a game and how the context of language is as important as syntax and vocabulary.

Imagine, he argues, you hear the utterance “Water!” what this means is dependent on the context. It could be an order, as in “Fetch me water,” an answer to a question, “Yes, that is a cup of water,” or perhaps an exclamation of relief to a parched person. We can’t know without a common context.

In the same way, we need comprehensive definitions to avoid miscommunications.

For over two years, I ran a podcast called That’s My Jamstack. on the podcast, we talked about various technologies, and I would ask people what their entry point was into the ecosystem and their favorite parts (what was their jam in the jamstack). This always elicited interesting conversations, but I noticed (especially through the first year of hosting) that the Jamstack typically fell into two different camps… both thinking of what they were doing as the Jamstack, often with little thought to the other methodology.

One camp pre-rendered their HTML via generators like Jekyll, Hugo and 11ty. The other camp took the JavaScript of the JAM stack to whole new levels and rendered everything via client-side JS with the top framework of the time: Gatsby. Sending a simple HTML wrapper over the wire and hydrating the rest via the client JS. Now, near what is being considered the end of the Jamstack era, we’ve got new technologies that have been grouped in: server-rendered (maybe more precisely “serverless-rendered) pages. Next.js, with their adoption of React Server Components, is at the forefront of this. It’s definitely a fun way of developing, but in the waning moments of the Jamstack movement, it has ALSO been considered Jamstack.

Can you believe it? This is often a server-rendered application (albeit with great caching and some really great affordances to prerender when possible), and it’s considered Jamstack. In fact, beyond that, in 2022’s Jamstack survey, there are data points for RedwoodJS and Remix. Both amazing tools. Neither would be what I would consider “Jamstack” personally. Except… there they both are.

And that’s because… well the definition has never really been set in stone (even with a definition listed on jamstack.org), and it’s been ever changing (did you know the definition on jamstack.org changed?).

In this way, Jamstack has often been “Water!” from our earlier language game. It changes based on context, the people involved, the use case… and much much more.

The Discourse: The Jamstack is dead

With recent developments coming from Netlify (such as the shutting down of the Jamstack Discord community) and companies like Vercel doubling down on Next’s next iteration, the discourse has of course turned back to the term Jamstack. Is it helpful? Will it continue to exist? Is it dead? Is it toast?

The general consensus has been that it doesn’t matter. Whether that’s been in thevein of “it’s served its purpose” or “did it ever really matter?” what we see is that these terms are incredibly fluid.

I’d add to the discourse that while the Jamstack may be dead (and I truly mourn for that), these concepts must remain.

The problem is that without a word or a flag or a rallying cry, these systems and setups will drift further apart. We’ve already seen that as “Composability” becomes the next big rallying cry. When you’re more interested in the systems that tie things together, the implementation details can become more varied. We’ll get more server-side rendering; we’ll get more static site generation; we’ll get more islands architecture. As we get all those, the overall naming convention for “modern web practices” will slip away, and the community that was found may also.

I still might argue that the term Jamstack should have a place in our nomenclature, but maybe that place should be closer to its roots: static sites with interactivity brought in via small amounts of serverless functions and small amounts of front-end JavaScript.

That won’t happen, of course. The Jamstack term was coined by Netlify, and as Netlify shifts toward its next horizon of composability and enterprise, the term will set over the horizon behind them.

But it certainly would be nice.

Additional reading

In the time since I started writing this, there have been a lot of great articles near this subject. Here are a few of my favorites: