Hacker News new | ask | show | jobs
by OrthoMetaPara 3867 days ago
Isn't this like comparing apples to a fruit salad? Quoting from the React website, "Lots of people use React as the V in MVC," whereas Angular is the whole kit `n' kaboodle.

I thought React was supposed to be used in tandem with a Flux-like component that stores the state of the application, thereby allowing the developer to adopt the functional reactive programming style.

Anyways, I think React will be short lived, because anyone who really wants to hop on the FRP bandwagon will pick up something like http://elm-lang.org in order to fully achieve Satori. I mean, if you're going to drink the Kool-aid, you might as well down the whole pitcher.

11 comments

I think FRP is one of those technologies where going full-hog (all the things are event streams!) results in confusing code and a dogmatic, difficult, and unpleasant development experience. However, if you apply it just enough, you'll have coherent one-directional dataflow, effortless propagation of state changes, and a nice testable push architecture as a free side-effect. It's a way to tame the state-monster. And there will be numerous small isolated parts of your codebase that are unrelated to the aforementioned goals, where sticking to FRP would be masochistic and pointless.

A major part of mastering a technology or paradigm is knowing when to apply it and when the costs of it outweigh the benefits. Then again, I prefer hybrid-friendly languages like scala, so maybe the haskell and clojure people are onto something that I'm missing.

I agree with you. I also like being "closer to the machine" so to speak. One day, my dev browser will support ES6/7 and I won't need babel + webpack/browserify while doing locally development, debugging will be done on unmunged code and TDD will be easy to practice as the feedback loop will be back to normal.
If you ditch Babel you won't be able to use ES8/9.
For me ES6/7 has addressed all the low hanging fruit, I really hope ES8/9 is about removing features with only a few additions.
Agreed... about the only thing from ES7 that I feel the burning need for is await/async, which I've been using for some time via Babel, and it makes the code so much easier to reason with... the hardest part is explaining to people that an async function returns a Promise and can be wrapped/used as such.
everybody agrees to add "only a few additions", except has different set of them!
From my experience, it is not about the FRP kool-aid. It's about the robustness of the concepts of React (DOM diff-ing, favor immutability, declarative views etc.)

Adopting something like elm might have its advantages, but also comes with practical disadvantages that, depending on your team and your project might be simply too big make the jump.

React got a lot of things right in my opinion. So much that to go from apple to fruit salad, you need roughly 200-300 additional LOCs, and you have a very robust Frontend system that, once you wrapped your head around React, has a very low knowledge barrier.

However, the good traits of React are not attributable to one concept like "FRP" but are simply "good concepts" that seem to influence other Frameworks to do "the same, a little different".

The adoption, the somewhat small API, the support from a large company, the possibility to integrate it easily in existing codebases that use other frameworks and react native has a much stronger pull than FRP in my opinion.

I think a lot of attention is given tot he DOM diffing... I don't think it really means that much in practice as far as understanding the flux-like workflows and how applications come together.

To me, the unidirectional data flow, optionally immutable data structures and even tooling around redux (and similar) are what are nice. You have predictable, testable output without excessive complexity.

The need to understand a certain level of complexity in React+Redux in getting started is indeed a bit higher. But as features are added, that complexity doesn't grow nearly as much as with Angular.

I find the simpler node-like requires/es6-imports are easier to reason with than dealing with angular's weird DI system (though better in v2). Testing injection is supported via tooling (proxyquire and the like), and you can do full unit testing of your UI without firing up a browser.

I agree that full on FRP isn't needed... but will say that having data flowing in one direction, and events in the other can simplify things a lot. I'm also not sold on static typing for JS, as someone who really likes C#. I also think the use of classes in JS should generally be very limited.

> Anyways, I think React will be short lived, because anyone who really wants to hop on the FRP bandwagon...

I don't think most front end developers even care. React will stick around because it's backed by Facebook and if Facebook says this is the way to go with front-end development then that is all the convincing most folks need. They'll go on to learn React and not think twice about the minutiae of "FRP" or whatever the programming paradigm de jour is because at the end of the day, people just want something they can easily grok, something that works without too much hassle and something that is going to be used/supported for the long term.

> React will stick around because it's backed by Facebook and if Facebook says this is the way to go with front-end development then that is all the convincing most folks need.

Not just that. Facebook uses it for their flagship website (and as React Native for their mobile apps). So does Instagram. So does Netflix. If you have the React developer tools installed you can literally go to facebook.com or netflix.com and see them using React.

Angular in turn can't really namedrop use cases like these. Yes, Google uses it somewhere in their ad manager, YouTube uses it in their video manager, Amazon uses it for something -- these are big names too, but the use cases aren't nearly as impressive and they're not as integral to the relative companies' core business. Google (who is backing Angular) doesn't have nearly as much skin in the game as Facebook (who is backing React).

The difference between React and FRP in turn is that React simply builds on well-understood ideas that already exist in mainstream front-end programming: modular components and one-way data flow. You don't need a CS degree to understand the benefits of having your views not directly manipulate your state.

FRP isn't bad. It's just that React is good enough, which is what really matters at the end of the day.

> Google (who is backing Angular) doesn't have nearly as much skin in the game as Facebook (who is backing React).

Excellent point. Here's another "smell" with angular: http://angularjs.org versus https://angular.io/. The former is AngularJS 2.0 and the latter is AngularJS 1.0... they maintain two websites for two versions of the same framework.

It boggles my mind.

Who thought it would be a good idea to separate versions of the framework onto two different domain names? While they're still owned by the same company? Why? Unfortunately, the only sensible answer that comes to mind is "AngularJS 1.0 was such a colossal, terrible mistake that we need to move away from it not just from a code perspective, but from a marketing perspective as well."

Normally, I avoid framework/language wars but I had ( and will soon again have ) the misfortune of developing in Angular. Consulting out-of-date documentation on their quick-and-dirty bootstrap site, fervently wishing that the devs didn't rage-delete the comments section which corrected the incorrect documentation... yuck.

We were over the moon about Angular in 2014, but it quickly showed its failings as we got a bit deeper in. 2 way data binding is just precarious. But the thing that really killed me on the whole idea is how TERRIBLE it is as a user of Doubleclick Bid Manager. It is SO impossibly slow that it is practically unusable on a laptop with 4GB Ram and an i5. For a few months we could only actually upload ads to the system if we used OPERA!! If their shining star UI that gives Google about a billion dollars in revenue a month is this bad, we asked ourselves "why we should try to emulate it?"
I feel your pain. I was making a case primarily from a marketing/community perspective, but the code and its ( lack of ) organization speaks for itself as well.
The reason is because Angular 2 merges Angular Dart and AngularJS into one framework.

Can't say I have first hand knowledge, but I have heard that Angular dominates internally at Google.

UI Bootstrap is also separate from Angular (if that is what is meant by quick-and-dirty bootstrap site) - I am currently the lead developer of the project, and not once in my tenure have I deleted any comments, and I know of no instance since I joined in March this year of anyone doing so. The documentation certainly can use work, but we are unfortunately strapped for resources with not much quality work coming from outside the team. File issues if you have problems, but otherwise, I can only say that usually the team responds correctly, and it is usually immaturity on the reporters' side that is the issue we have observed.

I think the jab at the "quick-and-dirty bootstrap site" was about the Angular docs (which seem to use bootstrap or at least look that way), not the UI Bootstrap project.
I'll engage because I'd like to get to the bottom of this.

> The reason is because Angular 2 merges Angular Dart and AngularJS into one framework.

One technical reason for a seismic marketing change does not inspire confidence. Is Angular, Angular JS 2.0? Is AngularJS, AngularJS 1.0? Incoherency at the starting gate will not win new converts.

> Can't say I have first hand knowledge, but I have heard that Angular dominates internally at Google.

Company wide usage is fine; the real test is in production outside of the company. Unfair, but if the framework wants to dominate the front-end, then that is its lot in life. FB probably realized how fast that moving goal post would be and resolved limit their scope with React.

> UI Bootstrap is also separate from Angular

It's not the Bootstrap that is bad, but how they use it. At the time in 2013 (and even now) the presentation of the Angular website is pretty ugly. Yes, there are coders who don't care for little UI flourishes. Yes, a pretty framework with bad code is still a bad framework. Yet, when comparing AngularJS's website with competitors like React or Ember or even Backbone, it seems their developers care more for making their software look good. Design as a lagging indicator of quality, perhaps.

> I am currently the lead developer of the project, and not once in my tenure have I deleted any comments

You probably joined after this debacle. Strange that you don't know about it:

http://angularjs.blogspot.com/2013/11/farewell-disqus.html

The reason for removing all the comment threads was ostensibly for easing concerns of moderation. Yet, interestingly, the documentation was not updated for several months after the comments removal. This means that, for several months, all the fixes, suggestions, and the like were no longer viewable for the current version of AngularJS. The solution put forward by the developers for this long interim was to... use Stackoverflow.

Needless to say, Angular users were less than enthused. That the devs didn't seem to engage with the community before or after regarding the sudden change, made me question a number of things about the project.

Sorry, I was mistaken on the bootstrap comment - UI Bootstrap is separate from Angular and has little affiliation with Google other than the creator of the project being a part of the core Angular team.

I can't speak to the online interactions as to the comments, but I do recall the comments being outdated and not useful in a bunch of cases.

The Angular team is very professional and pleasant to interact with in my experience though. Igor once told me that open source is hard - I was skeptical at first, but being in charge of a major project myself now, I wholeheartedly agree. It is challenging to keep development going at a good clip, manage the team, and satisfy developers using the product, who are a ruthless bunch.

> Can't say I have first hand knowledge, but I have heard that Angular dominates internally at Google.

Yes, Angular is better than Closure, the politically acceptable alternative for Google-internal.

We use UI Bootstrap heavily on roadster.com and have been very happy, albeit with some customization. I hear your pain about outside contributors to OSS but am excited you're keeping up the great work.
You just blew my mind. Thanks for the heads up about the dual websites... would never have found that in a million years.
The new Grubhub UI is built around Angular... and it shows around the edges in the types of quirkiness and bugs that show up around state/workflow. I don't fault the devs ag grubhub for this, but the types of problems I typically see around Angular are pretty typical.

Personally, I really appreciate React+Redux... it seems to be the distillation of a lot of ideas. Also, good or bad, React has actually removed features in support of a better project/application workflow. That doesn't even get into how goofy I feel that Angular's DI system is (better in 2, but not good).

React has embraced the larger JS/npm community/tools and Angular seems to be actively fighting against it.

React killed their JSX transpiler after Babel added support for JSX. Angular merely merged AtScript into TypeScript.

React had CommonJS module support from the get go. Angular1 was incredibly awkward to use with a real module system, Angular2 is only marginally better.

Ugh.

> anyone who really wants to hop on the FRP bandwagon will pick up something like http://elm-lang.org in order to fully achieve Satori

Or you could just use React with Redux, like many people are doing! :)

https://github.com/rackt/redux#influences

React only covers the V of MVC, true, but in practice it influences heavily the rest of your app.

So comparing Angular and React is useful, most people will have to pick one or the other when they start their next project.

The difference is that React is much less opinionated. You can tie it into your existing Backbone app or you can use Flux (or one of the many Flux-like libraries out there) or you can use Redux (which is in many ways exactly like React, but for state) or you can use something like Relay or Falcor or even something entirely different.

Angular wants to own your project. That's not necessarily a bad thing because it also means you don't need to evaluate the relative pros and cons of lots of tools doing what it already gives you for free and you're more likely to find help because there are more people with your specific combination. But it also limits how much you can adapt Angular to your specific application's needs.

The more you deviate from the defaults, the more you lose the benefits of using a full-featured framework in the first place and the more you have to muck around trying to bend all the parts into the shape you want.

Plus you actually CAN use React inside Angular (or vice versa) if you really want to. It's probably not a good idea because React doesn't do anything Angular can already do (but differently), but it's entirely possible (just like how people already used Angular with Polymer or Backbone or what have you).

I wouldn't say React influences the rest of your app as much as Angular (or Ember) necessarily does but saying that a tool will influence the rest of the app is almost tautological -- every decision affects other decisions, even if it's only because of the mental models it may bring with it.

The truth is, it's not a decision between Angular or just React. You're not going to simply use React. You're going to use React plus something else. That's simply a set of decisions choosing a framework won't require you to make.

The comparison isn't meaningless because there is no either-or choice. The comparison is meaningless because it's incredibly hard to compare just React with all of Angular (or Ember or whatever).

Elm will not replace React among most web developers for the simple reason that it is not JavaScript. It's easy to incrementally introduce React to JavaScript developers. Requiring an entire new language is a non-starter for many web developers (though I think the popularity of CoffeeScript and Babel et al is changing that to some extent)
> because anyone who really wants to hop on the FRP bandwagon will pick up something like http://elm-lang.org

Elm is awesome, but also look into Cycle[1].

[1] http://cycle.js.org

When evaluating techs to make our frontend evolve, I looked at cycle. It seems genuinely interesting, and much more FRP than React+Flux, but it doesn't seem to have a lot of traction.
Sadly you are right. I think it got sandwiched under React/Redux.

That said, it does raise very interesting ideas about writing web apps so it's worth a look at least just for fun.

I don't know about that. You can write controllers and models in react, it is just an anti-pattern. The same is true of Angular. Angular is usually used as the V, and a little bit of the C with protected controller functionality server side, and APIs for public model interfaces and public controller api endpoints.
What's wrong with RxJS and React that makes you think it will be short lived as an alternative to Elm?
React will be short-lived because of Web Components, not because of Elm. Either that, or React will evolve to be a Web Components framework. The days of proprietary component silos are numbered, IMO.
Here a discussion on React github about WebComponents: https://github.com/facebook/react/issues/5052
React goes into the exact opposite direction than Web Components. Declarative vs. imperative. (Relatively) clearly defined state vs. mixing DOM and JS state. What's your evidence that WCs are replacing React?
>Anyways, I think React will be short lived, because anyone who really wants to hop on the FRP bandwagon will pick up something like http://elm-lang.org in order to fully achieve Satori

Lot of ppl do server side rendering with react so elm is not going to cut it.