Stupid Slow: The Perceived Speed of Computers
datagubbe.se
datagubbe.se
But it doesnt have a spell checker for 30 languages, it doesnt have a publish to social media button, it doesnt have a video tutorial, it doesnt have a collaberative network share mode, etc.
These features add bloat and latency. That is the root cause of software slowness today. Apps from 20 years ago are still usable today, and are blazingly fast.
Another cause of software slowness is all the layers of abstractions. The author uses the Amiga as an example in the article. I also had a A600 and it was quite snappy because it did a lot less.
But you are right that you need to focus on latency, if you want to keep latency down. If you add all the other features, it's hard to keep that focus.
I guess our commenter meant a video tutorial available from within the application?
I think this became a discussion item because facebook servers briefly went down and a bunch of apps wouldn't open
If I'm remembering it wrong, consider this a hypothetical scenario :)
No. The root cause is that there's certain speed above which average user doesn't perceive much improvement, so instead of optimizing the software to be as fast as possible, it's better to stick to that speed, put all the features we need, and minimize the expenditures.
Think about it this way: do you need your video games to be at 1000FPS, or is 120 enough and you'd rather see more graphics effects or lower price?
To be clear, the hardware is faster today.
I am a daily user of "apps from 20 years ago".
I have no desire to let today's software developers negate the gains I should be receiving from the new hardware that I purchase. It is as if they think the hardware belongs to them and they can use the resources as they please. The resources belong to me, not to software developers.
It is like an expanding budget allocation that has no valid justification. In the year 199x/200x, the computer owner allocated program X that does job Y a certain amount of RAM, storage and CPU resources. Today, the computer owner has more RAM, storage and CPU available. Why should the computer owner allocate more resources to an "app" that wants to perform Y today than they did in 199x/200x. What if they do not want spell checker for 30 languages, publish to social media button, video tutorial and collaborative network share mode? The computer owner is not given a valid justification for the expansion nor the choice to say, "Upon careful consideration of your proposal for a 500% increase to the RAM, storage and CPU budget for app X to perform job Y, I have decided I will allocate the same amount of RAM, storage and CPU. The budget will not be increased. Thank you." As it happens that decision results in faster, more efficient completion of Y.
I mean, C is not my goto language by far, but handling a truckload of memory operations efficiently seems like an ideal case for it.
It's difficult for me to gauge overall effect between network reduction (say, 1% speedup across 50 concurrent and 50 inter-dependent network calls) versus complexity reduction (1% speedup across 5 concurrent + 5 inter-dependent calls).
Aside from niche tools like AI, that’s exactly how software works already
The old school MPAs were the ones that required the network for every single interaction.
This type of SPA has invented a new version of "FOUC" as well. Because the data for the front page doesn't come with the page, you get a set of placeholder items rendered.
TL;DR: money math works in SPA's favor, users be damned
Small correction from a software house perspective:
except a year down the line the app is a complicated piece of spaghetti THE CLIENT has to rewrite OR PAY YOU TO REWRITE
:D
And with this: > most of the components you can reuse would work OK as pure HTML components anyway
I unfortunately cannot agree. It is theoretically true from pure "it's possible" standpoint but it was not my experience in pre-jQuery times. The shit backend devs did with concatenating html + JS snippets as strings wrapped in various patterns like the builder to make it configurable was pure maintenance horror. I don't miss it at all.
I think the reason we don’t see this much is because you have to model your entire app on this (with multiple layers of data state and primitive types that represent sync-able states) and most apps aren’t written with that much forethought.
One machine having a bad day could wreck the start menu for everyone on the local business LAN.
Nowadays, I still largely blame network. Seems as though everything is either verifying something over the internet before showing you the UI and/or posting telemetry on your action after you click something.
There’s little reason most applications used by most people couldn’t do the same 100fps that almost all video games can achieve. It’s just not a development priority, and being slow and laggy doesn’t negatively affect software revenues that much.
It would be interesting to see what happens if a company like Apple took a hardline approach to application latencies the way they did with iOS system framerates and VR/AR passthrough latency. They have obviously already done this with the stack that supports the Apple Pencil, which benefits all iOS devices to some extent. It’s astounding that a $300 iPad can scroll around a map about an order of magnitude better than a brand new $50k Tesla’s console.
Most development teams just don’t really care about latency and perceived snappiness. Google does because they learned early on that even gains of a dozen milliseconds have direct and measurable effects on their ad revenue.
To a great extent they already do. Native Mac/iOS apps very rarely exhibit these problems (and many companies producing native Mac apps even advertise this advantage).
I don't think there's much they can do about the electron apps - they held the line a long time on iOS before letting those run in the first place.
If that fails I take whatever remaining Electron options, which is just Discord these days, and create a desktop web app via Safari or Orion. WebKit is much lighter on the system.
Now when I fire up the company machine, which is even more spec’d out, it can feel stupid slow at times.
That's mostly only on their frontpage. Android isn't necessarily all that snappy, for example. Nor is GMail (app nor website).
Any more info on this? Android vs iPhone, and Android TV vs Apple TV suggests Apple is doing something very right on these small devices.
Two years after that Joel Spolsky - former PM on the Excel team - wrote his famous essay "How Microsoft Lost The API War" which predicted everything would eventually be rewritten as web apps. Gmail had launched two months earlier.
https://www.joelonsoftware.com/2004/06/13/how-microsoft-lost...
So, even back then the trend was clear. The Windows team systematically dropped the ball / refused to believe the ball existed, and was outcompeted by much smaller teams writing browsers.
Oh, they had a very good go at killing the web or trying to tie it to their existing APIs: the IE6/ActiveX era.
I'm not really sure what they could have done, though. Other than modernize away from WinForms properly; they have repeatedly dropped the ball on UI frameworks and failed to modernize all their own stuff.
Conversely, Apple appear to have "won" despite (because?) completely ditching all backwards compatibility for their APIs on multiple occasions.
I think if they'd done that they'd have concluded:
• Devs pick the web because it means deployment+start can be one click on a hyperlink, the browser will also update your software without any prompting of the user.
• Sandboxing really matters because it's what enables the former.
• Guaranteed and easy server connectivity really matters.
• High level scripting really matters.
So, they could have e.g. tried to make a sandboxed version of Visual Basic in which the P-code you downloaded was used just for UI, with all other serious logic on the server. Maybe even using a properly client/server variant of DCOM to provide client<->server calls. Basically a kind of web browser like thing but on top of the MS stack instead of HTML. Devs would probably have found that pretty compelling.
ActiveX was the closest attempt but it didn't fit the bill. It wasn't sandboxed in any way, and ActiveX controls took forever to download because they were all native code. They definitely weren't high level and you didn't get any kind of convenient server connectivity out of the box either. Then BillG decided to do .NET and I guess code sandboxing got sucked up into that project, the Windows guys were somehow allowed to reject the whole .NET concept, and deployment wasn't sorted out for many years. Kernel level native code sandboxing wasn't possible on the Win 9x codebase and is still pretty ropey even in Win 11, so that was also out.
Apple didn't really win against the web, and their API is largely backwards compatible to the start of OS X. Also, the initial versions of OS X did contain support for both running old MacOS Classic apps in emulation, and also porting them to the new APIs whilst minimizing the size of rewrite required (Carbon). So their backwards compatibility isn't too bad.
What I heard was that the higher-ups pushed .NET as a core part of the OS pretty hard during Longhorn, and it failed, leading to the Longhorn development reset around 2004 or 2005.
Disclosure: I was on the Windows team at Microsoft, but long after all of this happened (2017-2020), and I never learned about Longhorn history from the inside. I don't remember sources for what I said above, though I think Herb Sutter has talked about it.
Also, Teams isn't written in 1999 JavaScript.
I dunno how relevant that is: 1999 JS performance is closer to 2024 JS performance than 2024 JS performance is to 1999 C++.
IOW, just because 2024 JS might be faster by a factor of 2, doesn't mean it's faster at all[1] than the equivalent program written in native code.
[1] Maybe it is - I haven't checked benchmarks because programming language benchmarks have almost no correlation to reality when you use the language in a program, because the program is not doing 25k calls to the same function in a while loop.
It'd be in a non-native language, like C#.
JavaScript is faster than you think. Miles ahead of Python, Ruby, Perl, PHP. Not too different than C#/Java (especially if you consider 2x to be effectively the same) [1].
True; C# is the most obvious choice for Teams.
> JavaScript is faster than you think.
I'd be very surprised.
> Miles ahead of Python, Ruby, Perl, PHP.
Depends on "miles" - I think it is within the same order of magnitude as all of those. If it's far off from being in the same order of magnitude of those, I'd be very surprised.
> Not too different than C#/Java
I don't think so, not for idiomatic usages anyway. Java and C# are pretty damn fast! ISTR that Java/C#/Go are in a different order of magnitude from JS, Python, PHP, etc.
(The link doesn't work, btw)
https://benchmarksgame-team.pages.debian.net/benchmarksgame/...
And Java/C# is nowhere even close to an order of magnitude faster than JS.
https://benchmarksgame-team.pages.debian.net/benchmarksgame/...
The better showcase would be complex application code where JS cannot keep up with .NET or JVM no matter how much you optimize V8 due to dynamic typing and even simplest operations like property access needing inline caching and guards.
[0]: https://benchmarksgame-team.pages.debian.net/benchmarksgame/...
déjà vu all over again
(Or would C# aot and GraalVM be more to the point?)
Apart from standardizing some things (doesn't hugely matter for electron since it's the only target) and getting async - what has really changed?
Check out:
https://compat-table.github.io/compat-table/es5/
https://compat-table.github.io/compat-table/es6/
https://compat-table.github.io/compat-table/es2016plus/
https://compat-table.github.io/compat-table/esintl/
---
Not to mention that fact that Teams is actually written in TypeScript (tho compiled to JavaScript).
"It's not a different language, because you could have another language compile to it."
Most of the "modern JS" stuff was based on that idea. Teams was released before even the modules existed in the browsers.
Decades ago, I looked at how Microsoft handled procedure calls and returns of data. I found the same problem elsewhere.
The problem was related to copying of data. A single API call could involve (at the time) up to 100's of copy actions of the same value for each subsequent internal call. The actual processing of that data was minimal in the scheme of things.
This has been a problem amongst many others over the decades and will continue to be so for the foreseeable future.
Things that we did as a matter of course when resources were restricted have been dispensed with once those resource limits were exceeded. The lessons have subsequently been forgotten.
https://man.openbsd.org/ssh_config#ObscureKeystrokeTiming
https://news.ycombinator.com/item?id=37307708
(I hope it is, there's something ironic in John Nagle complaining about network-induced latency in interactive sessions.)
I'd wager some clunky autocomplete addon for bash is causing it.
That showed that the stupid nodejs plugin was making network calls all the freaking time. Instant deleted it. That may be what's affecting you if you're a web developer.
In other words, it may not be the OS at fault here. Make sure you've double-checked all your prompt customisations and autocompletes
Displays paths that have differences between the index file and the current HEAD commit, paths that have differences between the working tree and the index file, and paths in the working tree that are not tracked by Git (and are not ignored by gitignore[5]).
Different story if the FS is a network FS of course.(Side note: I would do unspeakable things for a macOS 9 GUI on a modern, lean OS, plus some cloud integration. That’s all I want, until I think of something else).
1. RIIR -- for native code execution performance, and correctness
2. async rust preferably -- green threads for efficient cpu usage
3. the constraint efficiency of game developers: 16 ms window to do all your processing
4. data structures sized to fit cache lines
5. vulkan/metal rendering pipeline
oh my
(edit: formatting)
This is the only one that really matters. It also implies a complete redesign of how "responsiveness" is handled, because the usual failure mode of slow GUIs is to get blocked on a whole cascade of updates which have to be done in series. Immediate mode GUIs are a lot better for this because the programmer knows that they can't call out to get some data; you render what you're given, either it's arrived on this frame or it hasn't.
The article starts talking about windows, but doesn't have any examples of windows apps. I would tend to agree about the bloat, but I assume that a machine running windows 95 and 4MB of RAM was pretty responsive except for the occasional disk paging and as long as you didn't have multiple large apps going at the same time.