You do the math. Relay style features is the standard way of doing things in Om before React and it does a lot more, i.e. the stuff I already mentioned.
They are using Github pretty much exclusively. Om has been around for 2 years, almost as long as React. I felt the same way about FP stuff for a while–“it cant be all that, if we [as a community] haven’t switched to it from OOP yet.” But the reality is a very psychological thing: we all have been having the mindset you have (basically fear of the unknown, and not wanting to spend more time we hardly have to learn new things), and therefore some great technologies have been held back unnecessarily. It really boils down to that sorta stuff.
Om had Time Travel since 2013: http://swannodette.github.io/2013/12/31/time-travel
Elm since September 2014:
http://elm-lang.org/blog/time-travel-made-easy
These are features that just became prevalent in the JS/React world in July 2015!
So again, you do the math, the JS community is copying the best stuff from their functional counterparts. The latest “higher order component” stuff is directly a functional concept that you use day in and day out in ClojureScript and Elm.
So you have a case where these technologies are totally useable, but aren’t being used anywhere near enough in proportion to the value they bring because we have mental blocks holding us back, not because the technologies aren’t ready for us.
When you label “this crowd” as slow and behind the times essentially, my perspective is you are holding people back. My perspective is right now more than ever u gotta push yourself to stay ahead of the pack or get lost behind. The greater react/NPM community is considering all this. If u look at the upcoming facebook react conference schedule, the precise technologies they consider besides react to be important and and have talks are: Om next (clojurescript), cycle.js, and Elm.
Meteor has kept us in the dark, whether we wanna realize it or not. There’s nothing I can say except you are going to miss out if you want to maintain your current mindset. This stuff is mature enough, even if ur only way of judging it is whether om next has a landing page or not. Elm is used in production by several companies by the way and Elm is considered the most forward thinking tech of all of these.
Perhaps more importantly, it’s not about any specific technology–it’s about what they have to teach you, what techniques you can learn from them. React is borrowing right and left from not just functional programming, but these specific technologies! Elm, ClojureScript/Om, Cycle/Observables. Programmers day in and day out are writing better code because they are learning from these technologies. They may be writing React code or Blaze code or even backend code. Meteor keeps us locked in a “one technology to solve all our problems” mindset. It’s great to have such a full-featured option (and the reason I’ve used Meteor for so long just like you). But to write better code (and write it faster), your mindset must be more expansive.
- Immutable functional programming makes testing and therefore maintainability many times easier.
- Time varying values (i.e. “Observables” and “Signals” as they are called in Elm) reduce code that you used to take many procedural steps down to declarative mathematical definitions/equations
- functional composition, transducers, etc, allow for your code to be “lazy” and therefore save compute resources–that means you can design an algorithm by combining functions and then run your data through it at the end. This is as opposed to what you would do with underscore where you
map
, then filter
, then reduce
etc, each time creating a new stack frame with all the same variables in memory.
- “Observables all the way down” means you can circumvent stateful bottlenecks at every layer of the stack. You know how you can switch out your webservers in your cluster, but the database is far from as easy?? Well ClojureScript’s datomic database provides this. Watch the “Turning the Database Inside Out” video. There’s really a lot of value you can get here–from time traveling the entire database (not just a client side store) to subscriptions/livequery without hacks.
- and there’s a lot more…
That all said, I’m an OOP advocate. I spent an entire year up until November building an OOP framework on top of Meteor. Everything is a class/object. Every file you open is a class. So I’m not just a ship-jumper without grounds. I’ve researched all this, and even though these FP languages are bit harder to read, it’s the “one true way” of the future. CLJS lets you use OOP-like syntax if you want–and that’s exactly how they approach React components in OM. I’m the first one to say that representing code as objects with methods etc more closely mirrors human experience. And OOP will continue to beat FP on that front. But the immutable functional “observables all the way down” stuff just trumps that. I imagine as I get deeper into FP it will feel just as natural as OOP to me.
So I don’t know what else to say here except all my research points to this stuff being plain out BETTER and not IMMATURE. Clojure is a hosted language–it uses Java on the server. That means you get the benefit of the entire Java ecosystem to securely/etc launch your app. You can interface with Java from Clojure and you can interface with Javascript from ClojureScript. So client code lets you make use of the js ecosystem. There’s very little difference between Clojure and ClojureScript by the way–for all intents and purposes they are the same language. You can launch full stack apps just as you do with the meteor
command for the most part. …So anyway, my point in this paragraph was because these languages are “hosted” they are less immature than they might be otherwise.
I’m done for now, just don’t be afraid my friend. Find the time. We’ve all been there, and if there ever was a time where it might be worth it to take the leap on emerging technologies, now’s it. If this stuff is leading the “Cambrian explosion” in the javascript world, it may be worth checking out. It’s gonna be different this time. With things like “WebAssembly” it very soon will matter what language you’re using to target clients that support javascript. That’s basically the underlying theme here.