The State of JavaScript – Survey results
stateofjs.com
stateofjs.com
This is in strong contrast to something like Elm. I have played around with Elm a bit but it's hard to wrap my head around some of the concepts and setting it up with the back-end frameworks that I'm familiar with has been meh. It's also changing rapidly so trying to figure out the concepts by looking at real world examples doesn't help because of a changing language specification. Going from changing the state of a counter to building out a larger application has been somewhat difficult for me and I feel overwhelmed every time I try to start a small project with it. I'm chipping away at that with an Elixir/Elm project, however. But the overall point is that progress is slow because it's such a different way of doing things and I get this gut feeling that I'm drifting away from KISS principles.
I'm not a front end developer at all. I'm a systems engineer who dabbles in web application development because it's fun and allows me to build some nice internal tooling for other teams. However, because I don't have that deep web experience I tend to gravitate towards the "old but still good" concepts and frameworks. I'm much more likely to reach for jQuery and server side rendered templates than I am for React or whatever amalgamation of libraries that require an overcomplicated build tool.
Ember follows in the Rails tradition of "convention over configuration". This means common activities can be done with a simple command, creating a file, or adding a flag in the right place.
This comes at a price: everything that happens in your Ember app is deeply tangled in Ember internals which are very complex.
This means adding behavior leads one of two places: It Just Works, or you have no idea what is happening or what to even ask.
When you are an Ember beginner this second state can last for days or weeks of frustration. As you learn about Ember internals, it happens less often and you move through it quicker, but expect this to take months or years.
The Ember team has taken steps to mitigate this difficulty: adding great error messages, and adding great documentation. But it a fundamental downside to the architecture they have chosen. And it's fundamentally at odds with what I would consider the Node Ethos, which is small packages that do one thing cleanly.
I would recommend Ember to professional developers who have the time to really learn about its internals and can afford to lose a week here and there to tricky debugging challenges.
I would not recommend it to developers working on small projects with tight deadlines.
and
>"it's fundamentally at odds with what I would consider the Node Ethos, which is small packages that do one thing cleanly."
You could substitute "Ember" with "Microsoft Windows" and "Node" with "UNIX" and be just as correct.
I wonder how frequently this design/philosophy decision comes up.
In that talk, "easy" is defined as being nearby, familiar, or otherwise "at hand" to the person who is involved.
This is different than "simple", which is presented as an orthogonal concept meaning roughly "one operation" not tangled or interleaved with neighboring concepts.
This is a clear and useful way to think about simplicity in software (1). I think it's fair to say that the "do one thing well" aspect of the UNIX philosophy is a pretty good match to Hickeysian (?) simplicity. I haven't worked with Ember, but I think it's safe to say that Rails makes things "easy" that actually introduce significant interleaving to your app. The two examples I can think of are both about ActiveRecord: extending AR gives your classes an enormous protocol, and AR hooks deeply braid persistence to something whatever else it is that you're doing.
1) If you wanted to talk about simplicity as it relates to, say, product design you might be way off. When we talk about a product being simple, what we usually mean is that it integrates (folds together) many complex dimensions such as ergonomics, manufacturing, aesthetics, cultural signs, etc. into a single solution.
I would argue that in order for that to happen, the design and internals of the product need to follow principles of simplicity and separation of concerns. You can't just wrap a pretty layer around a snarl of insanity and get a usable product.
For example, a common design mistake is to use several visual indicators for one piece of information: this warning text is bold, a different color, and placed inside a box. Once you've done that, you have used up three visual "slots" that can't be used as effectively for other information.
Great design like you describe requires thinking about single uses for single mechanics. It requires thinking about how things fit together while remaining functionally distinct, rather than just adding more and more complexity to solve problems that come up.
as a service!
I think, for me, I feel comfortable debugging as long as I understand the idea that is trying to be communicated. I think "weeks of frustration" is a bit of hyperbole but that's just my opinion. I can see days lost... but I think that's true of any technology stack that you're trying to acclimate to.
I also don't know about the last sentence about not recommending it to developers working on small projects. I don't have tight deadline but I find that it's working for my small project. As long as I'm not doing anything too far outside of CRUD operations translating into a view then I'm fine.
I don't think I would power a company with Ember. Though, granted, I don't have the experience to really make a call like that... but I would relay my personal experiences to a single developer looking for advice and suggest it for them if they're used to Rails or Django or some other massive convention over configuration back end framework.
I think you meant the reverse.
Most former Ember devs I know have moved onto React. When I mention Ember to them, I often get the response "you're STILL using ember?"
I could spend an hour explaining on all the issues with Ember's execution (it's been blogged about before, many times). I have no problems with "The Framework Approach", but when the happy path tends to always end up in the same bad destination, the community has to stop and think if they're on the right ship.
Source: I'm a full-time EmberJS dev for past 3yrs, dabbler for a couple years before that. If you'd like to discuss exactly what issues I run into daily with Ember, just contact me (my email is on my profile).
There is a good chance that I'll run into Ember's warts later on but just how easy it was to get started made me so happy. If I do come to the conclusion that it's something to hate, then I hope something comes along to replace it. I've heard great things about Vue.
I couldn't find anything well written and long about Ember from the ten minutes that I googled. Everything mostly seemed to be hot debates in comment sections. I think that as far as full time JavaScript developers, it's a good idea to aim for a React dominant ecosystem. But as a filthy and uncouth back end programmer, I really just want something easy to hook up. I'm not building something super complex and Ember, while it is probably terrible in sections, solves what I need it to do.
Paging data results to increase performance is what I'm working on right now. I want to feed it into a table.
Getting jQuery stuff like datatables working can be annoying and has led me to look at ember addons.
Basically, you're right on the money. I like Ember CLI because it's the closest thing to replicating the ease of Rails development in the Javascript world that I've seen thus far. I'm keeping a keen eye on Angular CLI, but it's not ready for primetime yet.
* Collect instance metadata from EC2 and store it in postgres.
* Collect Chef node data from a Chef API endpoint and store it in postgres.
* Return those collections to Ember to graph/put in a table/whatever.
I followed this guide for Rails 5 and Ember: https://emberigniter.com/modern-bridge-ember-and-rails-5-wit...
I had to pick and choose what it was showing since I wasn't building a book app.
It took some finagling to get everything working. One thing that confused me is that Ember resources get their own route and that wasn't explicitly stated (or maybe it was and I missed the text). So I kept trying to get `/instances` to render a table of instances but I would only get json back. I was super tired and up late at night but it didn't click that that route was bound to my resource and what was used to serve data. Whoopsy daisies.
In this context, I'm defining simplicity as low barrier to entry and/or easy to understand ideas. I think of myself as a fairly average developer; that I'm not wholly intelligent or skilled. I want a framework that bosses me around and tells me what to do.
Accomplishing simple tasks like mapping JSON returned from Rails to Ember routes and rendering that data into a table was very easy for me to understand and do. The simplicity I'm talking about was the setup, generation, and mechanics of the process. Ember, as another commenter pointed out, is not simple internally. It is glued together using evil magicks as far as I'm concerned. But I'm happy about that because when something does break, it means that I'm doing something that is going against convention or that something is truly broken.
As far as the former, then I need to learn the convention. For the latter, then I need to post questions in forums, hit up IRC, etc. But the positive aspect about the second process is that my project is already fully set up and I'm comfortable with my framework enough that I don't feel completely out of water.
However, I see this advice everywhere. When I'm googling "how do I do this in Ember" I usually get a good set of practices.
What's interesting, is there is another thread on HN about a WalmartLabs platform release that bundles React and a bunch of other boilerplate libraries a la Facebook's "create react app" and it looks really cool.
I love working with straight Javascript (ES5), jQuery and template engines like handlebars. I can design things in a way that works for the project and can quickly just refresh the browser to check my changes.
As far as conversion, I don't notice transcompilation times. I'm at Ember 2.8 and whatever other versions that were setup.
I don't really know where I have this preconception from, but probably it's not just me. http://discuss.emberjs.com/t/are-developers-creating-ember-a...
The only possible tie that Ember with Rails is that it used to bundle ActiveRecordAdapter with Ember data. It is now separated into another project possibly due to this exact reason.
[0]: http://sanestack.com
It was on a whim that I chose Ember. I have heard of it before and how the project took stability a bit more seriously than other JavaScript frameworks so I went for it and was pretty pleased. It was super, super easy to integrate.
I think another similar pairing is Vue.js and Laravel and that actually makes me want to learn PHP.
I used to do a lot of Code for America work before I got distracted by my career and a desire to move out of my state. When I get back to it, I'll probably choose Rails and Ember just because of how happy I am.
Now, if I decided to stop doing operations/systems/devops work... I'd probably take React and other frameworks more seriously.
I think a lot of your ease of use comes from it being an internal IT tool. It's allowed to be clunky, you probably don't have many eyes from marketing/design/product on it-- and if they have seen it, they don't care too much.
Design & product want to be able to do some crazy stuff sometimes. And they're justified in that wish, our frameworks should work with anything that is possible in a browser. Your protests of: "oh well, that's not exactly how the Ember/Rails framework works.." will be met by glazed-over eyes. I really just agree with `erikpukinskis` here, but I think it's an important note that I think you'd have a really bad time if this app was consumer/client-facing.
> "that I think you'd have a really bad time if this app was consumer/client-facing"
Gee, thanks.
Now, ignoring the fact that you're immensely disrespectful, you're missing the point of what I'm trying to say. There is nothing wrong with having a small problem that is solved by a simple solution and I'm sharing how I'm solving my problem. I'm not going to choose an engineering solution that's more complex than what I need.
That being said... there are a decent amount of companies that have used Ember to build easy to use and fluid interfaces. I think the very first interface I saw built using Ember was the interface for the Riak data store - which is incredibly slick. Netflix uses it for internal services, Groupon uses it for its website, and so does LinkedIn and Heroku. Actually, technically speaking, Google uses it as well because of their acquisition of Nest - unless they rewrote the Nest store into Angular or something.
If I thought that rendering searchable tables and embedding graphs was more than Ember could handle and would result in a sluggish application then I wouldn't use it regardless of how easy it is to setup. If I thought that it wouldn't allow me to apply basic CSS and buttons and layout principles to my interface so that it's pleasant to use then I wouldn't have used Ember.
And if you think that you can deliver a better web dashboard than what's facing the users of Heroku then I suggest you knock on their door and tell them how to do so.
I was listening to Joe Rogan's interview of Adam Greenfield (a bowhunter) yesterday, and Adam said something like: "look, if you're looking to get into bowhunting but you don't have the cash to get the best equipment, that's fine. You can still have success with a cheaper bow and without the extra gadgets, but it'll take more time." I'm not saying that you can't build world-class products with Ember, I'm just saying that it probably takes more time if you're getting wrenches thrown at you from design & product.
I also really haven't spent enough time with Ember to really back up my last statement, I'm really just trying to give some perspective from a company-politics / organization-process POV?
Is that the sentence? I dunno. I looked at the stats for the first version of Angular and it had a low rate of "heard of it, not interested" and a high rate of "used it, will never use it again" with Ember being the reverse of that. I was just like "awh man, what a pity" because I have really been enjoying my short time with the framework.
"...to hack things together quickly..." That wasn't really what I was getting at. There is a lot of negative connotation around the word "hack." I want something that is easy to setup quickly as well as easy to reason about. With jQuery, I can just point to a CDN and get going. As far as the concept, I can easily understand that I'm just selecting and changing an element of the DOM.
Now, I recognize that jQuery gets super messy and has a lot of inherent limits but the spirit of the approach is something that I admire. Ember, like many front end frameworks, brings organization, conventions for testing, etc... but the concepts are a bit easier for me to grok than some of its competitors and there exists some tooling that removes a barrier to entry for me. That's just my anecdotal experience and others mileage may vary.
"For people that do frontend/JavaScript full time..." Yeah, I dunno. I'm just someone who does front end work for open source projects and when I think it has its role within my regular duties as someone who does more operations work. That being said, I think there are a lot of people out there like me. People who just want to show up at a hackathon and get moving quickly because they have that back end experience but are unsure of themselves when it comes to front end development.
"Does it have a better story for cache management or something?" I think this question shows a misunderstanding of what I'm trying to convey. I can't really offer a set of deep technical answers when contrasting the various JavaScript frameworks. Most of my use cases for front end development comes down to some pretty simple requirements. I just know that I ran a couple commands, changed a few configuration values, and then got going with what I wanted to do.
Ember had a low barrier to entry for me. There are a lot of community resources for how to integrate it with my back ends of choice, it has a rigorous set of conventions that are easy to cognitize, and the practices around Ember haven't changed for a long time.
Take a look at this Reddit /r/programming thread: https://www.reddit.com/r/programming/comments/55okik/how_it_...
The top two comments are about how difficult it is to determine what is an appropriate stack. A lot of programmers solve small problems that benefit from simple solutions. My anecdotal comment was that I found Ember to be a simple, stable, all-in-one solution that worked well with Ruby on Rails - which is the framework and language that best solved the problem that I was addressing.
For a React specific comment, I think Facebook recognizes this problem and it's why they rolled out their React starter CLI tool. WalmartLab's Electrode platform also looks like an admirable attempt to address the "I'm not that great at this so please configure this for me so I can just start learning and being productive" crowd.
I also really like it when a front end framework shows strong preference for and coupling with a back end framework. Vue, for example, has a strong linking to Laravel. The communities for each overlap and it's easy to get going with both. The Laravel generator, for example, sets up a Vue example so it's easier to get started even though Vue is a wholly separate project that can be used with any back end.
That's the comment that listed the article I followed. It's pretty tightly coupled to Rails and ActiveModel but it fit my use case pretty well. I found other resources as I googled around.
I used https://github.com/thoughtbot/ember-cli-rails to hook up Rails and Ember.
I found that I still had to tweak a couple of things like getting generated Rails controller to `render :json` by default but the article was fairly comprehensive.
Trouble is with angular 1 is a lot of people are probably still installing via bower, angular 2 might have a lot of people installing via jspm, elm uses scoped packages which still don't have stats...
I don't know how a sample of 9k maps to the developer community at large but I found it puzzling that so many people were dismissive of Ember. What makes Ember unappealing enough to not warrant being tried out in a side project? Personally, I saw it and thought "boy, a framework that wants to be stable for several years - sign me up."
Regarding react I don't think there is anything in react itself that says that you have to use es6 and an advanced module bundler (like webpack). Just use es5 code, place everything in one file or just concatenate the files before using them in the browser and everything should work. You mainly loses out on how easy it will be to copy from tutorials that are written for es6 code with modules, and that some 3rd party things are written as modules.
What probably killed it for me is when i tried using it a few years ago and i spent a whole weekend on it and ended up with something barely functional and generally being frustrated with a lack of documentation and helpful errors.
I was able to gain understanding by using ember inspector to inspect the store and using jq to inspect the json returned from my Rails endpoints.
The Meteor team really deserves commendations for learning from some of the mistakes in building Meteor. Apollo specifically emphasizes incremental adoptability: you can drop it into an existing project and see benefits almost immediately, without having to refactor/rewrite any of your existing code.
I'd also like to provide a counterpoint to the inevitable complaints about the complexity and low-productivity of a JavaScript. In my experience, once you've paid the initial cost of learning these tools you can become extremely productive. As a freelance developer who is paid a flat rate for projects, I'm directly incentivized to find an efficient stack and the modern JavaScript stack is definitely it.
Specifically, my stack these days is Django + Graphene + React + Redux + Apollo. It's insanely high productivity: I can usually have the basics of an app built within a few hours of starting.
Yes, it was a bit surprising to see "Apollo" separate from "GraphQL" here, since our primary focus is to enable people to take advantage of GraphQL no matter their frontend and backend architecture.
It makes the most sense to make a direct comparison between "Apollo" and "Relay", but they should both be considered a subset of "GraphQL", which is really the core technology that everyone is building on.
However, excited that people like it, and we're excited to collaborate with everyone to make it the best way to use GraphQL in an application!
I'm not a big fan of Redux anymore since I discovered observable streams.
It's your fault for building something innovative that doesn't neatly fit in a pre-existing box… (same thing with Meteor actually!)
It has a steep learning curve and some initial setup overhead; but from a long-range perspective--I think it will have better performance and code comprehensibility. Maybe Apollo is better suited for freelancers though.
My opinion of Relay right now is that it has way too many needless complications. It looks like it brought a ton of baggage from being used in Facebook that just gets in the way of general use. So I'm interested in an alternative.
However, the real problem with all of this stuff is cache management. Properly managing the cache in the face of mutations is very complicated and it's impossible to be perfect anyway without some sort of pubsub.
And since I'm linking to related resources, I just want to add a plug for an awesome project a friend is working on (and we're putting it into production on my startup project). @calebmer/postgraphql[4] let's you get a free GraphQL API from a PostgreSQL schema.
[1]: https://github.com/josephsavona
[2]: https://github.com/wincent
If anything, that actually somewhat affirms my preference for Apollo. Since Apollo is built on top of Redux, you can use both in tandem without any problem instead of having to learn a whole new tool and refactor your application to use it.
That's hardly the definition of a replacement for Redux.
Relay v1 has absolutely no client-side state management support. I'm sorry but it's incredibly disingenuous to say they're substitutes at this point. Apparently v2 will have some client-side support.
To be clear, I don't want to bash Relay. I really like GraphQL and have Relay to thank for helping me to get stated on it. I've just found it to have a lot of challenging complexity which is really hard to manage, especially compared to Apollo. Also, "replacing Redux" is really not a selling point. The Redux ecosystem is strong enough at this point that being able to work with it is a huge advantage.
> How could you even use Relay and Redux together?
Pretty easily. The nice thing about the React ecosystem is that things rarely conflict with each other. In my case, API data is updated/fetched via Relay while purely client-side info uses Redux.
Yes. The Django models are exposed through a GraphQL API (using Graphene), which I query using Apollo.
That being said, I think you should carefully consider whether server-side rendering is necessary for your application before adding it. It does complicate your stack and is not worth it unless either first-load performance or SEO are important to you.
Typically a newbie will ask about which framework they should learn. There will be a bunch of "it depends" and "try them out" responses, and then someone will take pity and pick a clear direction based on their experience.
Well and good.
But this way the newbie can learn from the actual experience of lots of other people. Data, for short.
I can tell here what tech I need to focus on for my pet project, which will also improve my hirability looking forward.
Honestly the easiest way to learn this is to contact your local recruiters and ask them to send you some openings for FED positions.
In nearly every one, you will see which JS framework is the main one they use. In my recent experiences (the last two or three years) most corporate environments are using AngularJS, while the smaller startups are using React and some mix of various other libraries for their apps and sites.
There are still a few agencies I know using BackboneJS, since it was in that first wave of JS frameworks and there's apps and sites out there which still need supporting.
People generally put forward one of the following: Knockout (easy to learn), Ember, Backbone, Angular, React.
Someone will invariably say no, use nothing but plain Javascript at first. This will lead to a little subthread about whether it is fair to include jquery.
Every now and then someone will come up with meteor or vue as an alternative.
When a technology is less popular than it used to be, there's also a glut of experienced talent in that technology. That's why trends matter more than just a point snapshot in choosing what to learn, if you're looking at employability.
Unfortunately the JavaScript ecosystem is frothy enough that a lot of junior developers are inevitably going to waste time learning technologies that will be considered obsolete by the time they have mastered them.
Seeing what people are hiring for is of course a useful signal too but it's easy to become a COBOL programmer if that's the only thing you look at.
I've played with most popular js libs now and I've found that for my use case I wasn't totally happy for one reason or another. I've been dabbling in mobx for that last few weeks and the ease with which it has allowed me resolve issues in my codebase is really promising.
If anyone here is in the 58 people who wouldn't use it again, care to share what you ran in to?
So far, I've only found one common objection to it: that it embraces mutable state. Well duh...UIs are state machines. They need mutable state because their entire existence depends on it. Sure, you might be able to model the mutable state of UIs using immutable data structures, but you can't get rid of the mutable state. And because of this, my opinion of this objection is that it is of a religious nature. You can ignore this particular objection with no risk at all.
State machines don't let you change things whenever you feel like it. There are a set number of states and a bunch of predefined transitions between them.
That structure is exactly what redux forces you to implement - whereas in MobX it's up to you to apply the same constraints.
Redux with plain JS objects a a little messy IMO, because there aren't lots of nice & readable ways to transform objects without mutating the previous version. I use it with Immutable JS and am very happy with this approach.
One thing I've discovered is that a lot of the logic is derived data in the form of pure functions. A huge amount of my codebase seems to be about managing the derived state that trigger from a core bit of state changing. Really there's actually a much smaller core set of data, and then various aggregations on top of that (with the component view tree being the final representation).
I initially played with MobX a while back and had the worry that you could end up with state changes triggering off all over the place, but I don't think it needs to be like that.
There's no reason you can't have core state, layers of calculated properties and a view. Having said that, it's early days, which is why I'm looking to hear real stories of where MobX hasn't worked.
My approach when evaluating technology is to try to find ways in which it works poorly so that if I do pick it up I'll have an idea of the limitations (and can try to work around them).
MobX does also have "strict mode" where you have to declare the transition points. I know that's not really the same as the reducer model, but it does force people to think about when state will be updated.
Redux doesn't force you to apply constraints any more than Mobx does. In fact, it's even less structured than Mobx...any component anywhere can emit any event that modifies any state. With mobx, you can only modify state that you have an actual reference to.
> Redux with plain JS objects a a little messy IMO, because there aren't lots of nice & readable ways to transform objects without mutating the previous version. I use it with Immutable JS and am very happy with this approach.
I agree that semantically immutable data structures are easier to comprehend and work with. But you still have to mutate state, or you don't have a UI. With immutable structures, you copy->modify->replace...with mutable structures, you mutate in place. You can't avoid mutating state with UI programming, so embracing a model that embraces intelligent manipulation of mutable state isn't an indictment, it's a tangible benefit.
Too bad that this model doesn't work well with React. React models the UI as a (mostly pure) function from props/state input to DOM output, however in reality the UI is a stream containing both DOM states and input events. The minimal modification would be to select the input events that a component would like to expose in its event stream, in a similar manner to Elm: https://guide.elm-lang.org/reuse/checkboxes.html
Presumably the concrete state model (like MobX) is a realisation of the event stream at a moment in time. As far as the user is concerned, the only moment in time that really matters is now.
Can you give an example of this?
I have worked on fairly complex Redux applications but have never ever mutated states and it has been just fine. In fact, I use ImmutableJS to keep my apps' states.
State machines without immutability in a large application sounds like a joke to me, sorry.
In fact, the rendering benefits of immutable data structures comes from the fact that you can perform equality comparisons by reference safely, and ref comparisons are faster. Any time you re-assign a variable, you change that variable's reference, and it is no longer necessary to deep check the reference's value to know that it changed.
If your UI is interactive, you have events and actions that mutate that state. A keyboard event modifies the state of your text form field. A button press signals an action. Etc.
A state machine is `State0 + Event -> Action + State1`. Since your UI's entire functionality can be described by the state it is in combined by the Events and resulting Actions and changes in States, your UI is a state machine. This describes the superset of all UIs. Non-interactive UIs can still be described by this, although the benefits are slim because the state isn't really mutated without interactivity, so your State0 is always equal to your State1.
Note that I'm saying UIs are state machines...not like state machines. They literally are state machines. Whether you model them as such is up to you, but my claim here is that modeling your UIs as state machines has tangible benefits because they are state machines.
Funnily enough, there are plenty of articles out there that claim to make stateless UIs. These claims are false...any critical look at the model shows that the state exists, but either is modeled implicitly (keeping state in the DOM and outside of javascript, or within a rendered object, or within a closure attached to an observer somewhere, etc.), or explicitly moved somewhere else. There might be some merits to the latter model (as well as some drawbacks), but the former model is just delusion...a perfectly leaky abstraction where you have state, but have lost your ability to work with it.
UIs in general can not be represented by finite state machines. An example is a page with a button which when pressed adds something to the page. Since there are an infinite number of things that could potentially be added, this can't be represented by a finite number of states.
On the other hand, I think many UIs could be represented by finite state machines, although perhaps sometimes only roughly. You can start by trying to specify that each instance of a specific page a user can see is presented by a state, and any interaction with the user that leads to a different rendering of the same or a new page is a transition. However, this fails to account for things where a user can do something which doesn't change the current page but might change a later page. You can account for this by having multiple states which show the same exact UI but have different transitions to future pages. Of course, it isn't just the user who can interact with your system to produce a different UI for other people, so you'd have to model those transitions and states too..
I'm not a front end developer so I don't know how many UIs can actually be modeled this way, but I can see how it might be a useful way to think about things, even if it isn't necessarily always correct.
That being said, MobX is absolutely my go-to state management library now - it's probably the easiest free FPS you'll find anywhere, it's ridiculously easy to write, and it results in fewer LOC.
Any specific issues with Redux performance that you've noticed?
[0]: https://github.com/markerikson/react-redux-links
[1]: https://github.com/markerikson/react-redux-links/blob/master...
[2]: https://github.com/mweststrate/redux-todomvc/pull/1
At any rate, I really expect this library to take-off in the next year or two, and love introducing it to people who have not heard of it (normal response: "What? Whoa"). If you already have a lot of React experience, I think their 25-line timer example is a great place to see what it can do for you: https://jsfiddle.net/mweststrate/wgbe4guu/
"I would like JavaScript to be my main programming language" (Rate 1 to 5)
49% (5) 35% (4-3) 16% - (2-1)
If you've taken this survey, it means that you have done at least a decent amount of work with Javascript. Chances are, you have at least enjoyed something about it so far, or are absolutely required to use it for some reason.
Of course many current Javascript users want it to be their main programming language.
I love this survey for so many reasons, and this is an incredibly small point. Personally, I think that a good Javascript tool, framework, flavor, whatever, should be able to easily integrate with other technologies. I really enjoyed Angular for that reason (yet to dive into React). I think the idea of "JAVASCRIPT EVERYWHERE" is just really unneeded. Yes, we are stuck with Javascript as a language. Yes, it should be more than a simple afterthought on top of other tech. Making Javascript better and safer doesn't mean you have to do it everywhere, because ubiquitous Javascript doesn't matter if the different dependencies are completely different anyways.
The last part is only my opinion, but I wanted to add it because I think the survey's nature is going to exclude many people with it.
And compared how many people want JavaScript to be their main programming language because they only know one programming language and don't want to learn another, with how many people know multiple programming languages and would rather program in JavaScript as their main language because they like JavaScript better.
This is because of the low percentage of devs in the survey who have used Jest. I can't begin to describe the joy of finally finding a JS test utility that just works and doesn't require a giant configuration file.
If you aren't using Jest, make the switch now! It's likely a lot of your existing tests will work with Jest.
Most of that is just find-and-replace kinds of changes. But we dropped 3 dependencies to one and sped everything up in the process. It's just a fantastic tool! I finally feel like I've got a good Rspec equivalent in the JS world.
I don't know what the general feeling about e2e testing in the JS community, but in my last job we had to write, fix and maintain hundreds of e2e tests and it was a nightmare.
Our stack was Angular 1 and the de facto Angular e2e tool, Protractor. We wrote tons of helpers, like waitToBeVisible & waitToBeHidden, most of them copy/pasted from StackOverflow because every users of Angular and Protractor have the same basic troubles and use the same workarounds, and we had to use those helpers in every test. Also I can't imagine the number of hours spent to mock our Angular services + MySQL/Redshift data, to spy the functions who manipulate url/cookies/localStorage/etc and to write some "page objects" to make the tests readable.
In my opinion: The benefits of the e2e tests are too small to justify the crazy amount of time spent to make the new tests work and maintain the existing ones. Most of the time, the tests break because someone has changed something in the DOM or renamed a CSS class or modified an external API and forgot to update the tests/mocks. But they almost never break for a regression... so what's the point?
Or otherwise you need a dedicated team with 1 or 2 engineers (for a small/medium company) working full time on the e2e.
(PS: I used only Protractor with Angular 1. I haven't tested the other tools like Nightwatch.js, and I don't know what they have done for Angular 2 (Protractor 2?). Now I develop in React and just do unit testing & dog fooding).
I think the benefits come when you're really making use of reusable components. I have about 20 views that all make use of the same Redux container component, and e2e tests would definitely help me sleep better at night.
https://facebook.github.io/jest/blog/2016/10/03/jest-16.html
If your test is fully CPU bound and limited to one core, it probably won't be faster with Jest. If you split it up across multiple files, it will parallelize tests.
A lot of people in the frontend world equates unit testing with Selenium tests (aka: integration tests) and get really ruffled/confused by "pure" unit tests.
Now Jest changed the defaults to what most people expect, which will confuse them less, I suppose.
Honestly though I think ECMA has some of the blame for this. I don't think they do a very good job communicating changes and versioning.
Considering we're encouraging everyone to use transpilers and features from the future, and that browsers will forever lag just a little bit behind, I don't think that's a super bad idea. Most programmers don't care exactly which features are in ECMAScript2015 and which are in ECMAScript2016 etc. All they care about is "Can I do this thing I saw in a code example? Oh cool, it works".
Detailed versioning is an implementation detail.
Please don't encourage this. Transpilers have a huge set of dependencies and technical complexity. I know everyone is in a hurry to use the next standard ASAP but, especially for new people, I think transpilers should be recommended against. Otherwise now you now need a build process and you need to learn how to use map files to properly debug back to your original code not to mention being unable to properly debug on older / alternative browsers.
> Detailed versioning is an implementation detail.
For the engine sure but for everyone who needs the features they need to know what is supported when, etc. It's far, far more than a simple implementation detail.
Incidentally I misspelled "ECMA" in my original comment, so now it's easier to see why it won't catch on anytime soon.
It might be the more "technically" correct name, but from a branding/marketing/communication point of view, ES6 is vastly superior in my opinion.
Two things that stood out from a quick once-over:
Vue is doing better than I expected.
PostCSS is less adopted than I expected.
I'm a big fan of Vue's single file components where you can keep a component's HTML template, CSS, and view model code together in one file. In React, I tended to use lots of inline styles. I also like that I can use templates for the majority of the simple cases while still having the full power of a React like render function (with JSX support) if needed.
My biggest complaint is that I love React/MobX and Vue which makes choosing one over the other really painful. What a great problem to have!
(use a string for the template, not a file)
That doesn't mean that it has huge usage anyway though.
Things I want:
* es2015 transpiling * jsx support * css/less/sass support * module loading * uglification for production builds * hot module replacement * source maps * multiple bundles/entry points * hashed file names
Brunch fulfills a lot of these requirements, and I use it when I need to spin up an application really quick. But it misses on just enough items to make me reach for Webpack when I build anything serious.
It's a pretty slow way to build a project, but that's actually not the main sell. The main sell is in smart asset chunking, and it's pretty darn good at it. That alone earned it a place in my skillset.
One of my use cases is working on a HTML5 game. I pre-process all the tilemap levels to add unique IDs to the entities within the file, but only for those JSON files that look like tilemaps. Each of those files' names get mangled as a hash of their contents as well, so I get some cache-busting for free.
Similarly, I can pngcrush the image assets that pass a certain rule, etc.
I had the same reaction as GP when I first saw it (meh, just another overly complex tool, who cares) but you can really do some ridiculously cool stuff with it. I also love how stable it is, compared to the ecosystem it's associated with.
The save system is next on my list of write-ups.
Even now, Webpack is kind of feature anemic compared to what the real world needs. We just do with what we have. Or in the case of companies with $$$ to hire devs to work with it, we just build a shitload of plugins and loaders.
Browserify, while groundsbreaking, turned out not to be so good and much harder to extend.
Since webpack is not straightforward to use with other build tools, and since it can do most build actions easily enough, people use it for whatever they can get away with, and that usually means most of what you'll use grunt or gulp for.
I'm also finding the overhead from React / Redux very noisy. I have to do so much typing and define the same thing over and over across a bunch of different files just to do something simple.
I really like how Elm basically implements all of this with much cleaner syntax and works out of the box. It's too bad it doesn't have as much community behind it. I'd like to use it more but find it doesn't have enough community for me to consider using it for anything outside of home projects.
Also, I think simple Hello Worlds are a dangerous thing. They convince you that a tool solves all your problems until three months later when you notice your foot's been blown off.
Elm is much SIMPLER than js, but not as EASY for you because it is new.
If you are at all familiar with compilers, types, and functional programming it should all be review anyways.
If not then you are missing a big part of your education and I would question your capabilities as a programmer.
Odd, I have the opposite impression. I view a lot of web developers as the self taught, figured it out for themself kind of folk. I see React as a counterpoint, pulling in ideas from more academic or enterprise-y parts of the field (functional programming, significant tooling, emphasis on correctness).
I know this is the future and I'm trying to embrace it, but boy does it feel icky doing it.
http://stackoverflow.com/questions/33629343/what-is-the-best...
Because all of those things sound very similar to the complaints I hear from web developers on their first foray into desktop development.
There are so many tools it's impossible to know them all (or to even know which one is best to use in which situation), so much legacy code out there it's tough to learn what the "right" way to do things is, it often feels like you are fighting the OS or the language to get what you want how you want it, and dependencies are hard.
Application development is hard, and is still far from "solved". And while the "web stack" is far from perfect, I'm personally significantly more productive in it than I ever was in anything else. And in my experience that extra productivity makes better applications because I spend less time just trying to get it working, and more time getting it working well.
When I started writing apps using Cocoa, for example, I had a pretty good experience. Yeah, I fought some of the tooling that I wasn't really used to, but given that it was quite different from my backgrounds in web and embedded development, I was overall quite pleased with how easy and more importantly how obvious everything was. I found this to be the same when I wrote applications in Qt, and also when starting to work with newer languages (like Go).
This contrasts very much with the Javascript ecosystem. Despite having been a nominal web developer for approaching a decade, I am still consistently baffled by how difficult it is to get to grips with how everything is put together. There seem to be dozens of different workflows, none of which are entirely compatible with one another. There are bad configuration formats all over. Every tool seems to be broken into 200 different parts that subsequently have to be reassembled in order to implement a working pipeline. Documentation is erratic at best, and so on.
I used to feel pretty productive with Javascript, back when the web was a bit more 'Wild West'. But as it has developed as an application platform, it feels more and more like I am fighting the tools, rather than having them help me. That's not a nice feeling.
My usual stack looks something like: Express / React / Redux / Webpack / Enzyme / CSS Modules
I do SSR / Universal JS whenever possible and it works great. The only problem on my stack nowadays is the CSS. Still haven't figured out a good flow. I currently use CSS Modules, but without dead code elimination, it just doesn't do exactly what I would like to (feed in the whole CSS library I use and let it pick and choose the classes that are used in my components, throwing the rest away)
Getting up to speed on all these tools hasn't been easy, but at this point, most of my projects are a breeze. No worrying about browser JS support. No worrying about CSS support. No more choosing between server side and client side rendering. Linting that works great and keeps the projects looking clean. Testing that doesn't make me wanna blow my brains out. Combining and minifying projects is a piece of cake. HMR + Autorefresh is like magic.
I'm really enjoying working on the web now.
Personally, I've been focusing the majority of my "professional research time" in keeping up with the latter stack, and it's ended up paying off in the sense that it's almost trivial to spin up a new project at this point.
> Every tool seems to be broken into 200 different parts that subsequently have to be reassembled in order to implement a working pipeline.
I agree that this can be frustrating. Setting up a new Webpack/Babel/React project does tend to involve installing a bunch of different plugins, presets, and loaders. The way I learned this stuff it was by focusing on one thing at a time: set Webpack up to bundle my Javascript modules. Okay, cool, I fully understand that thing. Okay, now let's add Babel, with the ES6 preset. Alright, rad- now what about CSS?
> But as it has developed as an application platform, it feels more and more like I am fighting the tools, rather than having them help me. That's not a nice feeling.
I absolutely promise that I'm being earnest, NOT snarky, when I say that it sounds like you need to learn the tools more thoroughly. Personally, I tend to forget how much of a pain it was to learn other ecosystems, and so I sometimes get frustrated because it feels like learning a new ecosystem should be easy. And, yes, other ecosystems definitely have an easier learning curve. That said, I'm right there with you when it comes to testing frameworks. Oh god, testing frameworks. -_-;
A major part of the problem, I think, is that the current Javascript ecosystems spend a lot of time optimizing their tutorials and documentation for newbies and junior developers. I'll admit that I think it's a categorically Good Thing to have that, but many's the time I've wished for intermediate-level docs. The absolute best examples of this, in my opinion, are the Rails guides, the Rails API documentation, and the Elixir documentation (all of it).
> I was overall quite pleased with how easy and more importantly how obvious everything was. I found this to be the same when I wrote applications in Qt, and also when starting to work with newer languages (like Go).
Can you go into a little more detail on this? I'm genuinely interested in the details of what these languages got right.
I guess part of my point is I'm made uncomfortable by the encroachment of Javascript into areas where it's not particularly well suited, and the historical baggage it must carry into those areas. It's the when you have Javascript as a hammer, everything looks like a nail issue. I don't think my organization is unique in its embrace of Javascript-everything, either.
I'm surprised you feel that way; I always find it nice to do plain 'ol desktop development because it does feel solved. Everything is clean, quick, and heavily documented. Much of the languages, frameworks, and libraries have been around for decades.
It's analogous to how everybody jumped to document-based databases a few years ago and gradually developed an RDBMS-like schema system enforced only by coding conventions.
I see many new / intermediate people trying to do this. They want to make everything asynchronous when it does make sense to. You want asynchronous when you're accessing an external resources or for something low running (in which case yields / multiple asynchronous calls are necessary to free up the thread for GUI rendering if we're talking web browser here).
I do not like the new async / await syntax. Some days I think I'm alone in this but synchronous and asynchronous are two very different use cases and I think allowing both to be represented the same way can be highly confusing.
> The dependency tree of any one project tends to be incomprehensibly sprawling
This is entirely developers faults. NPM gives you A TON of rope to hang yourself with and every project I jump into people use libraries without considering to their dependencies and end up with a tree of over 3,000 dependencies. It's absolute madness!
> Runtime version numbering is... weird
Semantic versioning has been around for quite some time. I used it when I did Java and C# development; is it really that weird? Is there something about it that's weird?
> Don't even get me started on the interplay of Gulp, Grunt, Webpack and NPM.
NPM is kinda necessary for dependency resolution but beyond that gulp, grunt and webpack are all replaceable with simple scripts. It's actually one of the best and worst things about the JavaScript ecosystem: you can make your build work and behave in any way you want but you have to write the code or learn one of many build systems to do this. In other spaces, like Java, you typically just have ant and mavin and no one bothers with anything else.
I'm talking about the various schisms that have led to this page: https://nodejs.org/en/download/releases/
It's not a big deal once you familiarize yourself with what everything means, it's just a good example of some ecosystem baggage.
The ubiquity of using babel to get future language features also obscures the relevance of any one version of the runtime.
It has a single dependency management tool (pub), support for Angular 2, and is generally a joy to use.
Material widgets for Angular 2 (the same ones Google uses internally to build Adwords) are expected to be announced at the Dart summit in October.
The sweet thing about Dart is you don't need libraries like Angular or JQuery. I just use the built in Dart HTML methods and they compile down to vanilla JS.
While it is possible to write Dart code without using types (hence "optional") - the vast majority of Dart code is written using types.
The new Dart compiler also provides a "strong mode" which enforces strong typing in order to generate cleaner Javascript code.
I'm not a heavy AdWords user, so I can't say for certain that this represents all of the AdWords UI. But based on the linked interview, it sounds like they replaced a lot of GWT with Angular.
Source: http://news.dartlang.org/2016/03/the-new-adwords-ui-uses-dar...
I really wish gar1t would make some new videos, I love them.
(you're getting downvoted unfairly I think, probably a bit politically incorrect in this neighbourhood).
So it's a bit more of a "wild west" and it does represent wasted productivity if you look at it that way. You can also see it in a more positive light as a tradition of taking ownership of the tooling and continuously improving it. Because there's no central authority setting a course for the future, progress is through competition among solutions developed by the community.
Suggestion: Add an optional section on how the developer learned the technology
I think you could do a really interesting meta-analysis where you could see a relationship between the way things were learned and the popularity of the tool.
It would also be a great resource for people looking to learn a technology and want pointers on where to start.
Minor nit: would you be open to using colorblind friendly color choices in the future? The current colors are pretty hard for me to differentiate between.
* 53% of the respondents used React, and would do so again.
* 47% use "No framework", and would do so again.
(hmm. that doesn't leave much room, unless you can use more than one tool depending on the situation)
* 43% had "no interest" in Angular 2.
One other thing to consider, of the "had used X, would/would-not use again" responses: there is of course a lot of selection bias of whether or not to even try X in the first place.
...
My only experience with these so far is Angular 1. It's easy to get started with, but does get messy when you have a very large form (think "government work"). I don't have a "React" axe to grind, I'm just looking at the numbers.
However, by the time I have to haul in Typescript transpiling, much of the appeal of Angular 1 is lost :-(
(it feels like GWT, all over again, at least to some extent)
So I can say I've used Angular and would never use it again while also saying I've used React and would use it again.
This is really a pretty decisively positive stat for React. Very few of its users would never use it again, while a lot of people have tried Angular and abandoned it. (This certainly matches my experience and anecdotes I've heard in the community.)
Mine as well. I have two active work projects -- one is React, and one is plain Javascript. The latter is to keep the project extremely lean (mobile form single time use type thing) and I've enjoyed using no libraries in it (yet). So I would have responded positively to both of those questions.
That said, it looks like React is doing well, and I bet on the wrong horse :-(
For me, a lot of things in the templating seemed goofy, and had horrible, or no error messages when they didn't work right... I also still don't care for the DI system, though it's definitely a leap from ng1, I'd still prefer React over ng1 or ng2.
Just like people used to say that you don't need to use JSX to write React.
What's the point of using a heavy duty, opinionated framework without embracing it completely? that's just bound to get you into a whole lot of hurt.
And then you have tons of libraries to make it nicer.
There are a couple projects out there that do this but they're new. The WalmartLabs Electrode project looks incredibly slick and has good documentation so maybe I'll spend an hour or two with it this upcoming weekend.
Or: There are projects that they would use React for AND projects (presumably different) that they would use no framework for.
edit: I assume it does, but what is the tipping point?
I really do appreciate the format though.
Especially when the headline is "JavaScript Flavors".
One possible explanation is they are not sure about what that means.
As an example, to me that sounds like the Javascript used in the browser. Is that the same as the Javascript I get from NodeJS? Which is "plain javascript"?
I think it represents semantic confusion and not experience. But that is just a guess.
I've been using it since well before v1.0 and can understand peoples frustration around it. A lot of patterns and core themes have come and gone. Allow/deny, blaze, and now it is sounding more and more like mini-mongo might go the way of Blaze in lieu of Apollo.
Like I said though, I really do hope that the core values of Meteor stick around in the framework and it continues to grow. I love it :)
Second that comment.
It strikes me as a brilliant that open-source programming languages should have these sorts of statistics. I wish I could see every OSS language reported like this...hmmm. I would replace the stock market ticker in my phone with that!
The Aurelia community on Gitter is outstanding. Just really helpful and friendly. I would have been in big trouble without them.
I had actually done research on React, Angular 2 (still in Alpha), and Aurelia before I started the SPA. React seemed to weird and foreign to me a the time, and not enough of the community seemed to want to do React in Typescript which I had settled on as my front-end language. Probably the only reason I chose Aurelia over Angular 2 at the time was because it was painful to do dynamic, data-driven, components with Angular 2 at the time.
Aurelia is probably the best of breed in the Model-ViewModel world. It's post 1.0 now. That said, I've just finished my second app in React, and my third app is going to be in React too. I just find composing UIs in React to be much more natural because you're using JavaScript instead of stringy expressions in attributes to say generate list items.
Mostly it's a different take on the next step for Angular that many Angularists that are unhappy with how angular 2 turned out are putting hopes in.
It seems like I'm constantly keeping up with the complexity of the ecosystem, which is taking a toll on my productivity. This is probably my problem more than any specific failing of the evolution of the language, but, I like to ship.
Just my 2 cents to the discussion.
As far as your 'different core' argument I'm not too sure what you mean. If you're a Node dev, then JS is just your means of calling OS routines and giving work to threads (in C under the hood, to be sure). If you're a front end person, then JS is a very high level layer again, making calls various OS services, probably in C++ or C.
Alas, "The Management" demanded that it be dressed up to look like Java (and thus like C++). This led to a bunch of people that were unhappy that Javascript was in fact NOT like Java when they tried to use it like Java.
It's a very nice dynamic FP language, but people keep wanting to do static OOP with it :-(
Just like you can use vanilla PHP, should you desire.
I asked this question on Stack Overflow to not much response: http://stackoverflow.com/questions/39800531/collaborating-wi...
http://qbix.com/platform/features
Would like to get some feedback on it, from anyone who looks through the features.
For enterprise apps it doesn't matter and for that you can safely use a framework like React. But its very crucial for Internet apps. Surprisingly, Google neglected building tools in that area, apart from guidelines via its webmaster blogs.
I believe the data wrongly indicates this because React, Redux and Webpack are used together to achieve things that both Angular 2 and Ember solve similarly internally.
I thought ES6 is just a new version of JavaScript (the ECMAScript standard)? I thought both are written using the same HTML <script> tag. Why is it necessary to consider ES6 different from JavaScript in this survey?
Could you please throw some light on this?
I would like to request more details on your answer.
1. What kind of ES6 requires transpiling to ES5. I mean, I once tried using Promise and something like Promise.resolve("foo") works just fine. Are there any ES6 constructs that would require transpiling, to work fine on, say, Chrome or Firefox?
2. Is ES6 not completely backward compatible with ES5? If yes, I would consider ES6 as the same (although upgraded version of) language as ES5. If no (e.g. Python 2 vs. Python 3), then it would be justified to consider ES6 to be different from ES5. What's your opinion?
Disclaimer: I am not a JavaScript developer. I am a system programmer. But I do a little bit of web-designing once in a while, for example, to maintain my blog etc. That's why I would like to understand why ES6 is considered a different language than ES5.
I want to use `let` (and `const`) for everything and never use `var` again, but I couldn't even do that on my own PRIVATE website (for me alone) until today, because I didn't upgrade my iPhone to iOS 10 until last night, and iOS Safari never supported `let` (or arrow functions or so many other things) before v10 (and Apple won't allow anyone to break their browser monopoly on their platform).
I could just use Android, but I can't switch everyone else to Android, and LOTS of Android and Windows (and even Mac) users are stuck with even older browsers, because they don't know how to (or can't) upgrade.
Are there any ES6 constructs that would require transpiling, to work fine on, say, Chrome or Firefox?
Not on the latest Chrome or Firefox, but that hardly matters in a world where so many people aren't using the latest Chrome or Firefox. The question for a developer is not whether some in their market can run their software but whether some CAN'T.
Is ES6 not completely backward compatible with ES5?
It is (in practice) completely backward compatible, but I suspect you are a little confused about what that means. It doesn't mean "forward compatible". Backward compatible means that a new ES6 browser is still compatible with old ES5 code, which it is. Old ES5 code will keep working. It does NOT mean that my new ES6 code, full of `let` and arrow functions will run in an old ES5-only browser, and there are still plenty of them out there.
As long as you choose to target a market that includes ES5-only browsers (and you may or may not, but if you do), the things that are new in ES6 (Google "what's new in ES6") have to be transpiled to ES5 to run in ES5-only browsers.
Edit: forgot to add that these are my initial impressions after diving into front end development with node and browserify. I ended up avoiding a lot of pain by just using TypeScript and a make file. Who has time to wade through umpteen million build systems?
Nonsense. Though sometimes using an object can look cleaner depending on your use case.
> indenting with 2 spaces is the only way to go
I love 4 spaces and I use 4 in my JavaScript projects. Just because you've seen some subset of people use 2 doesn't mean it's the majority, what you have to use, etc.
> semi-colons should be banished
Absolutely, positively NO. Semi-colons are a requirement of the language. Some people elide them, incorrectly, because the JavaScript engines are good enough to still handle it. In my experience being playing a limited part in open source JavaScript eliding the semi colon seems to be a rarely done practice.
Regardless it's incorrect no matter how you slice it.
> "boilerplate" code should be hidden in libraries the magically wipe it away so your code looks "clean,"
This sounds more like a rails-ism than a JavaScript-ism. Though you'd be hard pressed to find libraries without implicit behaviors in every language. Some people take DRY way too far.
This point just seems more anecdotal than anything else.
> a make file. Who has time to wade through umpteen million build systems?
A lot of JavaScript devs use make. Nothing wrong with that.
huh. You obviously haven't played with Redux yet, it's basically switch statements all they way.
The JS community is the biggest programming community in the world, there is no way you can lump anything on the community as a whole.
https://www.reddit.com/r/javascript/comments/2582qv/is_switc...
Putting in semicolons won't make the language NOT terminate a statement if you split a line in the wrong spot. (I suppose one solution would be just to put everything on one giant line, and separate the statements with semis, but, YUCK)
Repetitive boilerplate should indeed be pushed down a level or two in any language, so the top of your program reads in terms of the business logic / problem space, not a bunch of code management noise. This is less traumatic if your functions have actual documentation for an IDE to display when a symbol is clicked on, rather than buying into the "self documenting" fairy tale.
However, 2 spaces per level isn't visually very much. I don't need to nest things so deeply that I begrudge a few spaces per level.
- - - -
Static OOP was the shizzle back in the 80s (when we were learning about clones, often bad clones, of Simula 67). The last 10 years or so, though, I have really started to appreciate much (if not all) of what Lisp offered back in the day. Javascript is an acceptable Lisp.
My view is that if you need an IDE to maintain your code effectively; if your volume of edits is such that macros and navigation tricks make a meaningful impact on your pace of development, then your code probably has serious architectural problems¹.
You see all impediments to action as debilitating, but I think impediments, carefully curated, can provide useful constraints on my development process. Friction helps me see where my interfaces are getting strained.
¹ I feel bad writing this because I know, if I step back from my own preferences, that your approach to development probably works great too. But your claim was so insulting, I'll leave this as is to match your tenor.
I take issue with that statement. Just anecdotal, but I think these days Typescript is much more "popular" than CoffeeScript
RedMonk seems to confirm these trends. TS grows while CS stagnates:
Q1 2016: http://sogrady-media.redmonk.com/sogrady/files/2016/02/lang-...
Q3 2016: http://sogrady-media.redmonk.com/sogrady/files/2016/07/lang....
That is the biggest detriment to typescript in my book. I played around with it for a bit but finding accurate (and up to date!) type definitions for external dependencies was a huge pain.
Hopefully DHH recognizes this and deprecates CS out of Rails.
Yeah, doesn't mean much to me, but it does guarantee you can get tools that are compatible with it.
It's funny to me that certain people are so disdainful of the churn in web development on a forum dedicated to "hackers". Web application development is hard, and the reason why there's so much churn is because smart, inventive people are constantly finding better ways to do things. Things aren't just resetting from scratch every 18 months. The web apps I'm working on today are way more modular, composable, testable, and maintainable than the ones I was writing as little as two or three years ago. Just because Java systems development hasn't changed significantly in the last 5 years doesn't mean Java devs are any more or less reasonable developers than web folks.
It also follows that at some point, these smart, inventive people will come up with fairly stable frameworks that are sufficiently flexible and powerful to accommodate most of the problem space out there. It is reasonable to ask if such a point has been reached...
Browserify -> Webpack has been noisy. Babel 5 -> 6 equally noisy, but better for moving forward
Today, I think webpack, babel, react, redux and fetch cover a LOT of ground for client-side dev. There's a few other bits around that, and I think CSS tooling is starting the a similar shakeup to node's tooling options.
In the end, almost all the JS features I care about seem to be at stage-3 now, so who knows when they'll be in the major browsers.
The better question is: are the apps someone with two or three fewer years of experience than you more modular, etc?
My experience is on the backend rather than the frontend, but in that domain, at least, system quality is still way more about developer maturity than ecosystem maturity. You can figure out a terrible, hard-to-maintain lazy way of solving today's immediate problems in any language.
Replace JavaScript with Java in all browsers and make it much easier, dependable, predictable and reliable.
Furthmore, it's not even JS that's really the problem. It's the entire JS/DOM/CSS stack.
There will still be more churn as people come up with ways to be more productive, however it will be hopefully concentrated in areas other than build process tooling.
Specifically the fact that we still don't have modules or widely-deployed http2 is what makes the build tool complexity necessary.
I'm very satisfied with Clojurescript.
Would be fun to maybe turn ip addresses into lat/long and map out where the responses came from...
-----
edit: I've tried to read it now and this site is crappy as hell. Does anyone have a link to a coherent write-up of these results?
-----
Furthermore, I know it's bad form to mention your own downvotes but I dare you I DARE YOU to make a case for that horrible font choice. You can't because it's pure vanity. Style over substance. Thhhpppppt!