I don't think "refusing to learn C++" is the right way to frame it. I want to use the language features that are actually useful to me, without being forced into a specific programming style. I can't speak for every "orthodox C++" programmer, but for me that means using exclusively plain-old-data structs, non-member functions, and "dumb" pointers. I have no issue with learning to use a C++ feature when it's directly useful to a problem I'm trying to solve.
As one example, I recently found templated lambdas useful in making animations.
Right. Use/Choose those features you are most knowledgeable/comfortable with. That is why C++ has such a smorgasbord of features and supports multiple paradigms. Over time, as one learns "better ways" (for a certain definition and one is convinced of it) of doing something change/modify as needed.
Our culture has too much focus on landing a job and not enough focus on becoming the kind of person who can adapt and thrive in any situation.
Computer science isn't for everyone, and probably the people going into it for the money should look elsewhere. You should study computer science if you find it intrinsically interesting. If you fall into that category, it will teach you how to think about problems rigorously, how to find solutions and break them down into steps that can be stated unambiguously, and how to reason about the performance and real-world tradeoffs of complex systems. Those are skills that will never be outdated, even if programming becomes fully automated.
If a job is well-paying, there will always be many people going into it for the money. High paying and only people who love it do it are pretty much incompatible.
Philosophy is excellent training in the analytical skills needed for any knowledge-based job. Critically evaluating information, constructing arguments, thinking of counter-examples, etc.
I agree that some of the examples the author provided are instances of bad animation. But I don't agree with the premise of the article.
Computer graphics is all about exploiting features of the human visual system. We perceive things differently when they're moving vs. when they're standing still. It's very possible that a "wrong" frame in isolation is the best looking one in a real-time context. We can also pick apart screenshots but these don't capture everything about how the user perceives a display in real-world lighting conditions.
I would draw an analogy to film. A fast tracking shot might look bad on individual frames because of motion blur. A wide-angle shot might make some objects look "wrong" because of optical distortion. But these are still the right choice if they have the intended artistic effect in the theater.
I initially thought "Every Frame Perfect" meant a strict avoidance of any jank or stutter in motion, which I'm fully on-board for but as a film, video and 3D technologist, you're spot on calling out motion blur and similar temporal artifacts. In motion, they not only look 'most correct' to the human visual system, they are the most interpretable.
Adding the correct blur to motion makes it appear clearer but seen as a still, it's obviously not clearer. The nuance is correct motion blur appears clearer while guaranteeing it's as clear as the human visual system can perceive moving details at that speed, so no perceptual detail is actually lost. It's a method that objectively improves perception which only works in motion. If frozen, the method breaks. Thus, evaluating motion blurred stills for clarity or interpretability is incorrect.
The rest of the article focuses on details of proper implementation while missing the opportunity to question whether some of these animations should exist at all. IMHO, motion can be a valuable affordance in limited doses but it's reached a point of overuse and, in some cases, outright abuse of the user's visual field and cognitive load. Designers (and their PMs) see it as a badge of 'Refined Modern UX' but it's devolved into a trendy gimmick aping good design without being good design.
Regarding your last point, I think it's almost always wrong to move something discontinuously, but I do think designers should think a lot more about getting out of the way of the user. A 50-100 ms animation is more than enough for most motions and keeps the UI feeling snappy. Also, animation should be decoupled from input wherever possible. I hate it when I have to sit there waiting for an animation to complete before the app will start acknowledging my keystrokes.
> I think it's almost always wrong to move something discontinuously
Yes, I think we agree. When a thing is becoming a larger/smaller form of itself in a different place, it can be useful to cue the relationship visually with motion. But there are times when the change or displacement is minor enough, I do prefer 'just do it', even when the animation is hyper-fast. It's just more visual/cognitive clutter.
It's obviously situational, and if such motion is always very fast, consistent and well-motivated, it never rises to the level of annoying me. I might personally prefer some instances where, if the position overlaps and the size change is minor, just skipping it, but it's not 'bad'. I think the key may be that, done properly, such motion should cognitively be a 'barely there' hint. The moment a state-change animation rises to having perceivable aesthetic value, like being 'pleasing', it's too much.
As the senior product owner, I once had a new designer argue that if an animation was as fast as I wanted, no one would be able to appreciate the excellent S-curve ease-in/out. :-) I had to explain if a simple state-change animation was slow enough to be consciously 'appreciated', it had failed in its purpose.
> waiting for an animation to complete before the app will start acknowledging my keystrokes.
Or you find out you can input as the animation happens, but when the animation finishes, you’ve lost where your input ended up and don’t know if you can backspace/delete and retype.
Animations on software are infuriatingly slow these days. I turn on dev mode on my android phone for 2 settings. DPI and double animation speed. Simply to compensate for software design taking up too much space and time. On windows I turn animations off for the same reason. Just let me use the thing.
... I wonder if we're seeing a downstream effect of Apple rejecting Flash on iPhone, triggering a slow collapse of Adobe empire. It seems that there are multiple concepts missing in conversations going on here.
Sorry, I'm not connecting how "collapse of Adobe empire" leads to "multiple concepts missing" in this UX discussion. Can you clarify?
Also: Apple dumped Flash ~15 yrs ago, so whatever it is... it's very slow. The larger, more recent suspects for any "collapse of Adobe empire" would be "Adobe forcing $ubscription model" and "rise of Figma."
I think you are taking it a step too far. First of all, unlike film, we are not recording reality in any way, every pixel that appears on screen is there because we put it there. I'd argue a closer parallel is a cartoon. And something like cartoon inbetweening is not an example of imperfect frames. These are in fact, perfect and even carefully crafted frames.
It's one thing if the frame halfway through an animation looks a bit "funny", but is still completely logically correct. It is another if the intermediate state of the animation legitimately doesn't make any sense and is just the result of not really caring about what actually goes on during the animation. In that case I'd almost rather just not have the animation at all, or just have a simpler one.
We do this in cartoons as well. Check out this Spider-Verse animator breaking down a shot of Gwen drumming. [1] If you look at individual frames, there are all sorts of details that make no logical sense. In one frame, she actually has three hands! But it looks great if you see it in motion.
That is exactly what I'm talking about, though. This is not what is happening with buggy computer UI animations: these are not carefully crafted to look better in motion, they're actually only considered acceptable because it's kind of difficult to see the mistakes in the animation. Whereas cartoon animating, you could argue the details don't make logical sense, but that's only to someone who doesn't understand the principles of animation. You can't explain away glitchy weird UI transitions this way because they're pretty much universally not intentional. They're usually just taking the technical path of least resistance.
I think there's also a major difference between the kind of weird intermediate frames that are acceptable for a highly-stylized cartoon at 24FPS and the kind of intermediate frames that are acceptable for a UI running at 120FPS.
No one is defending outright buggy animations. OP is just saying the idea that every frame should make logical sense on its own ignores how animation actually works (and they're correct).
Look at the youtube example - it has two pieces of UI animating from from a start point to an end point, and the paths are such that they momentarily overlap. There's nothing buggy or janky about it in motion; TFA is just saying that if you ignore the motion and take a screenshot mid-transition it looks odd. Same complaint as what GP describes, and silly for the same reasons.
It's what I personally took away from it. I was also someone who had the same feeling when I first heard Wayland's "every frame is perfect" mentality. I thought, "This is probably a good idea on multiple levels."
I agree the YouTube example isn't the worst one, but also at the same time, I don't agree with you that there is nothing buggy or janky about it.
There is no logical reason for there to be two copies of the video rendered at once. The video is literally resizing into position, while all of the UI elements shift around it. Why would there be more than one copy of the thing that is resizing?
I will relent on only one thing: "If I take a screenshot of your app at any moment, it must make sense" is too strong of a statement on its own. The context that it is a screenshot of an animation is important, just like cartoon inbetween frames. However, I think if you're being generous with interpretation you can allow this to be implied.
I see what you're getting at, but I think you're focusing on the incidental. An animation is good if it's clear and intuitive in motion. It may often be the case that good animations also look nice in a screenshot halfway through, but (a) they don't always, and (b) working well in motion is obviously the more important of the two goals.
As such it makes no sense to worry about the latter thing - it's not a signal whether the animation is good or not.
Or "squash and stretch" [0] frames cartoons and 3D modeling, where people prefer the final result even though individual frames can be grotesque.
That said, I think it's fair to hold most practical UIs to a different standard. Prioritizing amusement leads to a lot of strange non-ergonomic places.
Of course, even real life can look quite grotesque if you look at it in slow motion, as things get deformed by forces [0], so it makes sense animations would need to simulate that.
Oh boy, I wouldn't use Spider-verse animation as an example. I personally hate it. When I saw the first movie I thought something was wrong and asked the staff if I had mistakenly been put in a 3D movie without the 3D glasses.
The point is that if a pixel is in a nonsensical place the only thing that is to blame for that is the code. It doesn't matter if it looks pleasing; there's no good reason for something to be wrong just because it looks acceptable.
If you can't even guarantee internally consistent state then good luck communicating your "convincing and aesthetically pleasing effapt update && apt upgradeects" successfully.
The final "zoom animation from Preview app" also illustrates the inverse. Every frame looks perfect in isolation, just like the author wants. It's only when you see it in motion that you notice the issue.
I think it’s pretty telling that with the YouTube example, I legitimately couldn’t figure out what he could have a problem with until he slowed it down. The overall effect worked and gave the impression that it was aiming for. The fact that you can get out your calipers and find flaws in a paused animation is not compelling in the least to me. I don’t think looking at your animations in slow motion is a bad exercise — it may reveal unintentional things — but I don’t buy that animations need to “make sense” when paused in the middle any more than a 250ms snippet of audio clipped out of the middle of a word needs to make sense.
It's crazy for me to think that people cannot see how wrong it is from the normal speed video. For me it's obvious and infuriating, it physically feels like it's punching my retina
I like this comment. The idea that animations should be able to be picked apart frame by frame and always be coherent doesn't make much sense, because the user will never actually do that.
I do like the point the article makes about using ui fidelity as a proxy for software quality, and agree that they pointed out some bad animations. But, I think you hit the nail on the head .. frame by frame coherence isn't the best yardstick for measuring animation "goodness".
Exactly, you should optimize for quality and have a high bar forbit but I'm not sure sacrificing framerate for pixel perfect rendering or perfect subpixel antialiasing and compositing a perfect glass chroma aberration when wheezing a superfast animation is more important than it being solid 144Hz or audio synced.
I wouldn't mind it, if he had supplied suggested mitigations.
I think every one of those animations are system-supplied ones. Some are likely SwiftUI ones, which heavily abstract you from the iron, and, if other frameworks are supplied, the abstraction goes even farther.
It can be a major engineering effort, to improve a half-second animation.
That said, this is how designers work. I have worked with some of the top designers in the world, and it can be tempting to want to strangle them, as they choose a half-pixel alias as the hill to die on.
But if we try to work with them, it can make an enormous difference in how users react to our software.
> I think every one of those animations are system-supplied ones. Some are likely SwiftUI ones
Yes, this is a major factor for the regression in overall UI quality and consistency on Apple platforms. SwiftUI aims to make all those fancy animations transitions a single line view modifier rather than 30 lines of manually specified CoreAnimation easing curves and manual animation blocks, but it results in a lot of things just feeling janky, because one-size-fits-all rule and precise polish are fundamentally at odds.
This article would do better to show good use cases to draw strengths to their premise but I agree with your take that frames matter less than the total feel of the transition. Some of them definitely could be improved of what he outlined.
I find AI to feel real nice for pushing delight like this further than I used to have time for as it was never a priority.
That was an analogy, and about art and artistic effect.
What does it exploit in human vision??
Your example is even worse - it's a cost-driven degradation of quality
> smear frames helped to reduce production costs
> I'm not aware of any normal software
Ok, but that was the question to shift from some generic theory about how human vision isn't perfect and dynamic vs static to a practical example we can see and evaluate - just like the examples in the blog, where you can clearly see the issues both dynamically and statically
No, artists (of every animated media: 2d, 3d, stop motion, video game) intentionally put extra effort into creating ugly frames.
Not based on theory, but based on taste (artists' personal taste, or measured).
It's not a cost cutting method, not anymore. It actually requires extra effort, and it makes the product more expensive.
Maybe in animated media it is an acquired taste/coconut effect and not a way to exploit our visual system.
Either way this does not say much about whether youtube should have only sensible frames or not. But it points to the direction that (intentionally) broken, nonsensical frames in UI are worth exploring--they are everywhere in animated arts. As GP has said: "It's very possible".
And as the reply asked: provide at least one example
> Maybe in animated media it is an acquired taste/coconut effect and not a way to exploit our visual system.
So not relevant to the original theory? Also, that'd be an example of extra effort into ugly frames that originated as cost saving measures, not quality/artistic expression methods.
You can read why people prefer 24 fps movies instead of high-fps ones.
I'm quite puzzled by the article. Animations in software are transitions, it should not be perfect in UI sense, because it might look weird to the human eye in this case.
I'd prefer motion blur to something crisp. This is the case of file picker example.
You can also read why those people are misguided.
But instead of doing the irrelevant art analogies again, go back to the article and cite a specific principle that is violated by blur.
It has a list:
> Now, what does it mean in practice?
Also, blur doesn't even look weird statically! And again, provide at least one example where it looks weird to our eyes
> This is the case of file picker example.
You also don't seem to understand what that example shows, the "blur/crisp" is not at issue here, it's, for example, "textedit" jumping on top of "where".
Now explain what non-artistic human vision benefit there is to 2 words being drawn on top of one another in a UI transition instead of the first word disappearing completely before the second moves to its place.
>You also don't seem to understand what that example shows
I do understand, and this is exactly what I consider weird. Instead of repainting (in any way, even what is considered pleasant by you and Nikita), I'd prefer blur/mosaic/white window during the animation. Not the motion blur, but just not the actual contents of the window! This breaks "every frame is perfect", you can't make a meaningful screenshot of this transaction.
In KDE's Kwin, I configure windows resizung using crude stretching algorithm. This means I see non-proportionally weirdly stretched window several frames, then it repaints. On screenshots that looks really weird, while in reality this is quite ok.
> On screenshots that looks really weird, while in reality this is quite ok.
That wasn't the criterion, which was "the best"
> very possible that a "wrong" frame in isolation is the best looking one in a real-time context.
So show your Kwin animation example and explain how it's the best due to "human vision" compared to a transition without the weird stretches.
> I'd prefer blur/mosaic/white window during the animation
You mean blur where no content is visible/readable (that's different from the animation examples where text is visible, is moving, just not crisp)??? That's another reason you should just answer the initial question directly and provide a UI animation example supporting the theory instead of keeping arguing with nothing to show for it.
And again, what features of "the human visual system" does white window exploit that makes it the best?
Yes. Making perfect transition animations for the software is a very hard task, which is totally useless in my opinion — transitions shouldn't be made for screenshots, it should be made for humans to understand what have changed, how did click influence the UI.
>explain how it's the best due to "human vision" compared to a transition without the weird stretches.
Simple: Nikita's file picker example tries hard to repaint in time, and that looks very weird, because it's both janky and not how the window usually repaints.
And the latter is what the human eye and human brain are consider weird. If the animation does not attempt to present the contents during the animation, but instead only acts as a transition from state 1 to state 2 using smooth (as in constant-FPS) action, it does it job better, even if it does not preserve or even present the real contents during the animation.
The example of it could be seen on many websites which show the web page elements templates during loading (elements are positioned on their places but don't have real data yet).
>And again, what features of "the human visual system" does white window exploit that makes it the best?
If you present crispy sharp, high-fps picture to the user, the brain would look for any animation deficiencies, nitpicks.
If you just hide the contents in some way (blur, no repaints, no data), the brain just won't try to find anything weird.
I hacked a Panasonic GH1 to use 24fps in 2014. My newer camera, the GX85 includes this frame rate by default. Movies look more dreamlike in 24fps, due to the magic number of resetting some cycle every 5 seconds (24 frames in 5 seconds is 120 frames). Seinfeld was also filmed in 24fps. Maybe the jokes sounded funnier becaue of that? I don't know, but I enjoy playing games at 20- 30fps more than 60fps for the cinematic effect.
The difference with games is that they generally don't have motion blur, every frame is sharp like a photo, so at low framerates like 30 you can see a distracting judder from the series of low fps sharp frames which you don't see in movies. At high framerates your eyes will naturally see blur in the same way your eyes see your hand waving as blurry even though there is theoretically infinite frames.
Some of this is also just learned and cultural. 24fps looks like movies because movies are 24fps and you have learned to make that association. In the same way certain color grades and aspect ratios look cinematic, just because that's a reinforced association rather than an inherent fact.
agreed, there is a memory aspect to it too. That said, there is something about this video that looks funny: https://www.youtube.com/watch?v=M3-15YADeyg (I made this last year)
> It's very possible that a "wrong" frame in isolation is the best looking one in a real-time context.
Maybe that’s sometimes true. But, more often, the intermediate states will contribute in a predictable way to the overall look of the animation and if the intermediate states don’t look coherent, then the animation as a whole will be hard to understand.
The examples in the article make this clear. For example, the search box where the initial text animates from the middle while the cursor starts on the left. That disconnects the text from the cursor. There’s no reason for that. It’s just shitty animation work.
What do you think the premise of the article is? The article is pretty narrowly speaking of "app" UI and your comment is a "well actually" that some videos intentionally introduce noise or temporary discomfort for an emotional or artistic effect. On the same basis, comments like yours would defend screen shake if it was added to desktop and mobile apps on every user input.
The premise of the article is that every frame of an animation should look good if captured and analyzed statically, in isolation. There's no reason provided for this other than "it feels right." I'm saying that this ignores how the human visual system works and how we perceive displays in real-world lighting conditions. I used film as an analogy to illustrate the point.
The idea that I would defend screen shake is a complete straw man. How do you get from my comment to that conclusion?
> every frame of an animation should look good if captured and analyzed statically, in isolation
This is just true though. It isn't the only thing that matters but if you are creating a game or a video sometimes you do capture things frame by frame to understand why something looks off when animated.
Your film thing isn't an analogy, you are trying to say film is an example where some frames have motion blur so they don't look good, but since that's okay in film, it should be okay in software and apps. The word "good" is being overloaded to mean different things in each example. Screen shake in a video game or chromatic abberation in a film can be good in those contexts because they are the intent of the artistic direction. Maybe if you are hung up on the word "good" replace it with "appropriate" or "intentional".
I think speaking fluidly while thinking out loud is a completely separate skill. Some people are really good at it, usually the ones who get a lot of practice at public speaking. I also suspect extroverts have an easier time with it than introverts. "Ums" and "ahs" aren't necessarily evidence that a person is thinking, but it's also true that a lot of very smart people are "inarticulate" in the conventional sense.
Productivity is relative to whatever we value. That could be building things, making art, making scientific discoveries, or delivering food to people in poverty.
Maybe you value non-tangible, non-durable things like experiences. That's great, but it would be weird to tell someone who's devoted their life to X "there's more to life than X." (Replace X with any of the fields mentioned above.)
And experiences absolutely benefit from productivity improvements. AI has helped me plan better trips, find places and activities I had no idea about, better prepare for weather in remote destinations.
It’s said that “productivity” is mistakenly connoted as scoped to work.
The non-technical people are in charge and they're not tethered to reality in the same way that engineers are. Objective reality will win in the end, but that doesn't prevent damage being done in the short term.
IDK, I do think a lot of it is LLMs enable people who were not in our community to come into it (in an eternal september kind of way) and they are going through all this from first principals and ignoring their elders, but I've also seen technical people suddenly measuring themselves this way. The most optimistic read of this is that they _feel_ productive, and that feels nice, and they want to share how that feels, and so they are reaching for these garbage metrics because they have nothing else.
> The most optimistic read of this is that they _feel_ productive
In addition to "feel productive", two other feels I think are flying under the radar:
1. You get a parasocial relationship with a "friend" (or at least conversation partner) who seems to "understand" you.
2. You get some form of gambling entertainment when you pull the lever and the output keeps landing on different sides of the jackpot you want.
While #2 has some overlap with classic creative struggle, I think it can at least be seen as a kind of junk-food verson, where the frequency is different and the health-promoting parts aren't present.
Wayland is better if you have multiple monitors with high DPI and different fractional scaling settings. But yes, it is less functional than X11 in other ways.
I abandoned Windows for a variety of reasons and while I find Linux better in many ways, the graphics and compositing situation is a bummer. To add another example, I was trying to do a screen recording the other day and it was dropping frames like crazy. I don't know who to blame, whether it's Gnome, or Wayland, or OBS, or Nvidia. But the point is my confidence in the entire ecosystem is low. I have plenty of bad things to say about Microsoft, but I think their track record is quite good when it comes to making low latency input and graphics "just work."
With OBS recordings (not streaming) on Linux I occasionally get situations where short but heavy disk or network I/O will cause my webcam's video to get out of sync with my microphone (separate mic from the webcam). This makes it look like my lips are way out of sync with the video. It's something I haven't been able to track down as there's no errors or side effects posted in journald logs.
This is using vanilla Arch with niri. It happens pretty often and I fix it by splitting the audio and video in my editing tool and then shifting the audio track over half a second or so.
I recorded over 1,000 videos on Windows with the same hardware and the above never happened once.
I've been using OBS on wayland, they got captures working really well a few years ago.
But for VR stuff I've been going back to X11, and I was just last night trying to finish a screen capture program on wayland (w/ kde plasma) and idk I just have to do repeated screenshots ana analyze those > horrible fps, but at least I think I got that working finally after many attempts last year.
Gaming is not really an issue now with DEs that help ppl disable compositions and wine/proton.
Actually having to work and take responsibility is extremely exhausting compared to corp life, I experienced both, I currently have no corp job, am responsible for a lot of apps and hate every part of it.
Boreout is so much better than burnout and I never worked a job that allowed me to have none of them.
As one example, I recently found templated lambdas useful in making animations.
https://www.youtube.com/watch?v=cw-h0dePYZM
reply