Using component-based design helps us build faster
blog.twitter.com
blog.twitter.com
> Those who cannot remember the past are condemned to repeat it. To covet truth is a very distinguished passion. -- George Santayana
[1] https://www.classic-computing.de/wp-content/uploads/2016/01/...
And in many ways we have gone backwards. Interaction patterns vary wildly from site to site. Most don't have undo/redo functionality. A failure of one component often means a failure of the whole. Accessibility on the web is terribly poor for the vision impaired. Interaction response time has gone up, not down even though our machines have many orders of magnitude more power than the 90's. Most websites cannot be properly maintained due to lack of coding standards and abidance of best-practices.
Ok, just an old fart rant. Don't get me wrong: I think we have made leaps of progress when it comes to distributed computing, machine learning and mobile application development. The web, however, has turned into a huge dumpster fire.
The irony is that the current/next generations who have never seen/used/built a non-stock desktop app will not know of this big-step-back that happened, and will think that this is how things always were.
With so much moving to mobile, this comparison is becoming more irrelevant though. And on mobile native apps are very much still alive, due to many of the reasons you brought up.
The move to mobile has really opened up new opportunities and it seems this discussion is less relevant. Then again, loads of apps are web-apps underneath.
Not too much to ask for.
Interesting that React is fundamentally an invention at the level of programming language design, an insight about how to best express UI behavior. This means we could have had it (or any mainstream functional reactive programming) much earlier or later than we did. It came on the scene at an arbitrary unpredictable time.
This article reads a bit like a blast from the past in that sense. I think if I dig a little I might be able to dig out some papers from the sixties and seventies advertising the virtues of functions, modules, and even components with very similar language as in this article.
There is some progress here of course. Internalizing CSS is a good thing. Having that as a separate thing to manage and align is just too painful to keep in a maintainable state. I think some people are still disagreeing with this but I've seen some examples of css increasingly being driven from javascript instead of shipping as a separately loaded and created artifact. Web components sort of formalize this in html/javascript and allow you to isolate components from each other, which is another good thing. Separation of concerns and isolation are good things.
Also good is the shift to typescript, a language with a bit stricter semantics than javascript and of course better typing. The article does not mention this but given the speed and confidence with which they did this, I suspect they'd be pretty happy Typescript users.
Other than that, I think React is mostly a variation of the same kinds of design patterns that have dominated UI development for the past decades. I did some Swing development in the nineties and I still think that was a pretty nice framework to deal with relative to the current madness that is modern web development. The web can still learn a few new tricks. I have good hopes for WASM bringing some more choice and options to the scene.
I don't assume Microsoft was innovating at any point since the 90s, wasn't WPF a response to Mac OS X compositing layer ?
Also I didn't mean to glorify the web. But I really think that it was the main driver of new mainstream desires in terms of UI (not to my taste). Even more than native iphone/ipad application no matter how sleek and sophisticated because of how few dev and users they had compared to web apps.
And regarding innovation, CSS now has a grid layout thanks WPF engineers initial contribution.
Still, wasm is good enough for pretty sophisticated stuff. I was playing a version of doom 3 ported to wasm a few days ago; with decent frames per second even and quite playable: https://news.ycombinator.com/item?id=18817278
In case of React, to me, i no longer bother with syncing state with html, something like `node.innerHTML = `${my_state}`
It's actually beneficial to me.
Like saying that with this new car, I no longer bother checking whether the wheels aren't about to fall off. :)
If you do any web development at all, chances are you will have to work in a React codebase during the next decade
This reminds me of buttons in macOS vs. iOS.
Mac's UI component library AppKit was inherited from NeXT and redesigned for the OS X "Aqua" look in 2000 with incremental updates ever since. It had a very limited set of button styles, with each style having a specific use case. Customizing a button's appearance used to mean creating a subclass and doing your own vector drawing.
When iOS came on the Cocoa scene, it introduced a new component library called UIKit. It supported more flexible customization similar to that described in the Twitter blog post (freely selectable colors for everything as easily applied properties).
The downside of UIKit's customizability was the propagation of absolutely hideous third party UIs that broke every rule of visual accessibility and Apple's own Human Interface Guidelines. So Apple tried to rein it in with the "flat" iOS 7 redesign in 2013. Even though the redesign was quite unpopular in tech circles, it ultimately succeeded in unifying the look of iOS apps compared to the '90s style pandemonium that reigned before.
When iOS developers try to make Mac app in AppKit, it seems 99% of the time their first complaint is: "Why is it so hard to customize a button?"
The answer is that there is great value in UI consistency, as Twitter also discovered. It's more important on the desktop than on mobile simply because there are multiple apps visible at once on the Mac, and it sucks if each of them defines its own crazy branded look.
Making reusable self-contained UI widgets is a menial task that can be solved by just throwing more money at the problem. We could pump out hundreds of widgets every week if we wanted to. The hard part is coming up with a way to easily compose them and share state, not just on one level but widgets that are composed of other widgets that are again composed of other widgets.