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

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
L
LangChain Blog
A
About on SuperTechFans
博客园_首页
GbyAI
GbyAI
人人都是产品经理
人人都是产品经理
NISL@THU
NISL@THU
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
IT之家
IT之家
博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
MyScale Blog
MyScale Blog
Last Week in AI
Last Week in AI
S
SegmentFault 最新的问题
V
V2EX
D
DataBreaches.Net
B
Blog RSS Feed
Apple Machine Learning Research
Apple Machine Learning Research
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 聂微东
Vercel News
Vercel News
博客园 - 叶小钗
F
Full Disclosure
Google DeepMind News
Google DeepMind News
宝玉的分享
宝玉的分享
博客园 - Franky
WordPress大学
WordPress大学
小众软件
小众软件
T
The Blog of Author Tim Ferriss
阮一峰的网络日志
阮一峰的网络日志
T
Tailwind CSS Blog
The Register - Security
The Register - Security
Y
Y Combinator Blog
Jina AI
Jina AI
月光博客
月光博客
The GitHub Blog
The GitHub Blog
有赞技术团队
有赞技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
量子位
云风的 BLOG
云风的 BLOG
Hugging Face - Blog
Hugging Face - Blog
爱范儿
爱范儿
Blog — PlanetScale
Blog — PlanetScale
C
Check Point Blog
MongoDB | Blog
MongoDB | Blog
博客园 - 三生石上(FineUI控件)
美团技术团队
Engineering at Meta
Engineering at Meta
雷峰网
雷峰网
Recent Announcements
Recent Announcements

Secret Weblog

Becoming More Xee: A Modern XPath and XSLT Engine in Rust Looking for new challenges! Repeat Yourself, A Bit The Curious Case of Quentell The Humble For Loop in Rust The Humble For Loop in JavaScript Don Question Best Practices I Was a 1980s Teenage Programmer Part 5: Achieving Assembly I Was a 1980s Teenage Programmer Part 4: The Call of Assembly The Tooling Shift I Was a 1980s Teenage Programmer Part 3: MSX-2 JavaScript: when you need two ways to do it! Empowering Programming Languages Refreshing my Blog Again Random Rust Impressions Apilar: An Alife System I Was a 1980s Teenage Programmer Part 2: Olivetti M24 I Was a 1980s Teenage Programmer: the Alphatronic SolidJS fits my brain Is premature optimization the root of all evil? Framework Patterns: JavaScript edition Roll Your Own Frameworks Framework Patterns Secret Weblog Highlights Refactoring to Multiple Exit Points mstform: a form library for mobx-state-tree Seven Years: A Very Personal History of the Web Morepath 0.16 released! Is Morepath Fast Yet? Introducing Bob Strongpinion Punctuated Equilibrium in Software Morepath 0.15 released! Impressions of React Europe 2016 Morepath 0.14 released! Morepath 0.13 now with Dectate Dectate: advanced configuration for Python code JavaScript Dependencies Revisited: An Example Project The Incredible Drifting Cyber A Brief History of Reselect The Emerging GraphQL Python stack Thoughts about React Europe Build a better batching UI with Morepath and Jinja2 GraphQL and REST Server Templating in Morepath 0.10 10 reasons to check out the Morepath web framework in 2015 A Review of the Web and how Morepath fits in Morepath 0.9 released! Better REST with Morepath 0.8 Morepath 0.7: new inter-app linking They say something I don Life at the Boundaries: Conversion and Validation BowerStatic 0.4 released! Morepath 0.6 released! Morepath 0.5(.1) and friends released! New HTTP 1.1 RFCs versus WSGI Against On Naming In Open Source My visit to EuroPython 2014 Morepath 0.4.1 released (with Python 3 fixes) Morepath 0.4 and breaking changes Announcing BowerStatic Morepath 0.3 released! Morepath 0.2 Morepath Python 3 support The Call of Python 2.8 Morepath 0.1 released! WebOb and Werkzeug compared Morepath: from Werkzeug to WebOb Racing the Morepath: SQLAlchemy Integration The Centre Cannot Hold Breaking Morepath Changes Morepath Update How to do REST with Morepath Morepath Security the Gravity of Python 2 #python2.8 discussion channel on freenode Alex Gaynor on Python 3 Morepath Documentation Starting to Take Shape Back to the Center Morepath App Reuse Implementing Grok Grok: the Idea Why Linux Works for Me On the Morepath Reg, Now With More Generic! The New Zope as a Web Framework Jim Fulton, Zope Architect Renewing Zope Object Publishing The Weirdness of Zope The Rise of Zope My Exit from Zope Reg: Component Architecture Reimagined JSConf EU 2013 impressions Obviel 1.0! JS Dependency Tools Redux Obviel 1.0rc1 released! Succinct data structures
Bloat and Retrofuturism
Martijn Faassen · 2024-05-27 · via Secret Weblog

Everything is so bloated

Developers like to complain about bloated applications taking too many computer resources.

Back in the olden days programmers could do amazing things with kilobytes on extremely limited CPUs. It's true!

I too have these thoughts on occasions. What is huge and sluggish always changes and stretches upward. The joke was, long ago, that Emacs was an acronym for Eight Megabytes and Constantly Swapping as 8 megabytes is too big for main memory and would force the use of the swap partition on the hard disks. Now we think 8 megabytes is tiny.

Computers have gotten incredibly powerful. They have many thousands of times more computing resources than back in the day.

Applications today indeed often do a lot more than applications back in the day, but thousands of times more, probably not!

Code is a lot easier to write than back in the day, but thousands of times easier, probably not!

We have squandered a lot of those resources.

Software getting slower more rapidly than hardware is becoming faster has been observed for a long time. It even has a law named after it, Wirth's Law

It's our fault

Related to this is that modern software uses too many layers - it's too far from the metal. And related too is that software uses too many dependencies: "my node_modules is 100 gigs". Our software has grown gigantic because we pile layers upon layers.

Layers and dependencies bring us a lot of benefits. They allow use to reuse someone else's hard work without having to reimplement it. They allow us abstraction from hardware concerns, so our software is more multi-platform.

It allows our applications to do more than they did in the past. But not, usually, thousands of times more.

There's a big caveat. Some of our modern applications can scale to massive quantities of data while those applications in the olden days could not.

But still.

We complain these things are bad, yet we keep doing it. We keep creating more software like this. We keep using software like this. How bad do we really think it is, then?

And let's not just blame management here. The evil management, so convenient. Too easy.

It's us. We do it.

What are the problems?

What are the actual underlying problems? and economic and environmental wastefulness, and excessive and accidental underlying complexity. There is also a more aesthetic concern: good, efficient design can be beautiful. Let's discuss these topics in a bit more detail.

Wastefulness

Wastefulness is our software taking more resources than is necessary. It wastes computing resources and energy.

To reduce wastefulness, we can use better algorithms and more efficient languages. For organizations at a certain scale this becomes a real economic problem, and people invest effort in this already. So I think this is at least partially in hand as it aligns with a lot of interests.

But it's conceivable that a dramatically simpler stack could lead to far more efficiency. I don't know whether that's true. It's worth exploring, however.

Complexity

Why is excessive complexity a problem? Besides the wastefulness aspects, there are educational issues, and issues of expertise.

Educationally, it makes sense to deal with a simpler system. But we can create simplified educational sandboxes easily enough already. So while it could certainly be beneficial if we could use production software in education about software, it's not a huge problem overall.

It would be nice to be an expert on a larger part of a simpler stack, but I am not sure this is a pressing concern. For all their flaws many of these layers of abstraction are actually working fairly well for us!

It could be a pressing concern in one way however: software security. If we don't understand all the layers, we may more leave serious security flaws in the system. In general, more layers, more security risks. A simpler stack could reduce the risks here quite a bit.

Aesthetics

That leaves aesthetic concerns. I don't want to dismiss this; happiness matters, plus our aethestic feelings about complexity gives us the strong suggestion real improvements are possible. But it's also the one least important in most real world contexts. The forces at work are mostly passion projects and hobbies. Code as art. I love this exploration myself.

How should we feel?

Should we feel guilty about this situation of excessive bloat? Not too much. Perhaps a little. I only feel a little bit guilty for this situation myself. I'm only playing a small part and there are a lot of forces around me.

I am not that interested in just complaining. It makes sense to use the bountiful resources we have anyway to make your program just a little bit easier to write. Complaining seems a bit too easy; you get to feel a bit superior, perhaps?

How to fix this?

What if we were serious about reducing complexity in real world software? Throwing out layers on an individual basis won't work. It's difficult to do and these layers are adopted because there are real forces that makes their adoption seem worthwhile.

Instead, we would need to carefully analyze layers and either somehow simply a layer significantly internally, or try to replace multiple layers with a single simpler one that offers the same services, or at least the subset in use. Moreover, we need to do this incrementally, and lots people need to buy into it to have a real world effect.

Software environmentalism

Reducing layers in real software is hard, the benefits are indirect. Lots of people and organizations would have to work together to have a real impact.

This is starting to sound like an environmental problem.

It may be that at the moment the environmental problem of software complexity isn't big enough to hurt us much. Or maybe we haven't really noticed it, and it's there already. How much money is lost through security flaws, for instance?

It's conceivable that at some point it hurts so much we actually start to notice. Security is one area. Energy use is also an increasing concern.

Awareness of the costs of software bloat and complexity is a good place to start, but individual awareness is not enough with an environmental problem. Reducing complexity in software might require a society scale effort to solve.

Retrofuturism?

Recently I read an interesting discussion about Oberon, a fascinating project led by Wirth to simplify the software stack back in the 1980. Oberon was ambitious: programming language, operating system, GUI, even CPU were all in scope.

In that discussion, @datarama@hachyderm.io made the following fascinating observation:

I read a while ago that perhaps the reason retrocomputing has taken off so much in recent years is that it takes us back to a more innocent time, when we could all still imagine computing as personal empowerment rather than bleak people-farming, dehumanization and surveillance feudalism.

But perhaps what we should be thinking about is less retrocomputing and more retrofuturistic computing. What would a 2024 Oberon successor be like?

Let's think about topics like this more often. Just for fun if nothing else.

One retrofuturism topic I like to ponder about is whether you can have a modern programming language with advanced features like static typing but implemented in a simpler way. Is that even possible? What is essential complexity and what is not? Could we give up features in a programming language to accomplish this?

There are many retrofuturism topics. Let's imagine alternatives!

Conclusion

I will end my musings on software complexity for now. For me the interest is mostly aesthetic, but my environmental sensibilities, both physical and complexity, are slowly starting to wake up.

What do you think? Should be become software environmentalists? Should we imagine alternative versions of the present more often, roads not taken?