In my experience, the developers who fall into this trap of despair almost always do so because they aren't consciously choosing what tools to use; instead they are letting the tools choose them.<p>They see job descriptions demanding AngularJS or ReactJS and they think that they must learn it, or someone posts an article here and they don't want to feel left behind.<p>Choose a library or tool because it improves your development process. If it doesn't appear to improve it, don't use it (at least not unless external forces compel you to). Especially don't use it if it appears that it will retard your performance (<i>cough</i> Angular <i>cough</i>).<p>For example, after months (years?) of finding ever more efficient ways of enforcing object interfaces (or even basic types) at runtime, I eventually reached the limits of what JS and unit testing alone could acomplish and found myself researching Typescript, Flow, and the like.<p>That's not to say I'm a user of either of those, but if I do choose to adopt one in a project, I will know exactly what performance gain I am expecting from it. I'm still very productive without them.<p>In fact, I've successfully avoided a lot of fads in the industry for most of my career. It turns out that being able to explain why I <i>don't</i> use a tool makes me look like I know what I'm talking about and not just cargo culting. Employers quite like that.<p>Incidentally, this isn't unique to the front-end. I've seen the same thing happen with the SQL->ORM->Mongo->Couch->SQL nonsense, or the myriad of templating engines written for PHP, a language that itself <i>is</i> a templating engine.
I'm a web dev, been doing this 11 years. But i totally feel past it, granted i code less and less nowadays so i havent kept up with new technologies.<p>I've hired people that are much better at web dev than me and let them accomplish a task with pretty much whatever tech they want to use, because i believe you shouldn't constrict a developer if you dont have to. Even for a simple app that it'd take me 20 - 30 hours for me to create in basic jQuery, bootstrap and simple PHP/MySQL, the tendency is to pull in Angular, Laravel, gulp or grunt, composer dependencies and a whole host of code for doing something really simple. It ends up becoming a frigging nightmare to maintain and deploy, i just want to do a git pull and thats it deployed, but instead i've gotta do artisan commands, migrations, grunt commands etc etc etc.<p>Anyway, i tell myself that what their doing is a better way of doing things and i'm just someone with outdated knowledge, because when i do it, i use basic tech and accomplish the same task in less time and with WAAAY less lines of code. While its maybe not the best practices, its simple.<p>I still feel like a bad coder because i'm not doing it their way. :(
It's easy to show how complex those systems are. It's easy because they <i>are</i> complex. And that's pretty normal. Let someone talk about Java Enterprise development, the symptoms of your body and their diagnoses or just try to explain how to build a pencil (<a href="https://en.wikisource.org/wiki/I,_Pencil" rel="nofollow">https://en.wikisource.org/wiki/I,_Pencil</a>).<p>We're professionals, after all, and TypeScript and React were not build by some teenage hackers.<p>I think the problem is that everybody remembers how they build that one website using jQuery in the early 2000s and now wonders why everything's so complex now. The reason is that we started to build complex applications instead of enhancing grandma's blog using jQuery.animate, get over it.<p>And if a software developer talks about all of this tools in the same manner you've described, he has poor social skills, nothing related to the tooling.<p>He could also talk about the intricacies of scaling web services using k8s and OpenStack and you'll find another bunch of tools and concepts. If someone would actually talk like you've described it, he would play buzzword bingo in any domain of expertise like medicine students who want to sound smart using latin words.
Thank god we have all these libraries. I mean remember the days when the back button worked, pages rendered quickly without 3-second ajax spinning animations, the browser remembered where you were when you clicked back, your phone didn’t randomly jump around the page when you’re trying to read something, and a syntactical fuckup didn’t prevent your entire site from being rendered? Oh, and you could scroll normally too. And crawlers other than Google could index your content, and blind people could listen to it. But right, javascript is awesome, I probably just don’t understand enough yet.
I feel like knowing which tools are useful, which ones are currently dominating, and which ones are going to continue being supported in the future is the best place to start learning JavaScript. This is difficult because the ecosystem is so wildly fragmented and insane. You'll get a lot of different opinions if you go searching for them, so here are mine.<p>ES2015 is the place to start, it is a finished stable release of the latest version of JavaScript. It represents the single largest update to the language in a long time and includes many features that make development easier. It is being phased into web browsers natively and is the future of the language.<p>For maximum browser support you need a transpiler, this would be a matter of preference because it isn't for you, it's for the computer. TypeScript however is a very very clean transpiler and it offers optional features which are for you, should you choose to use them.<p>Once you have that setup, you really don't need anything else. You don't need jQuery unless you're trying to support IE8, which is a tiny proportion of the browser market and that will gum up your code significantly.<p>Speaking of gumming up your code, nearly every single library out there is bloat and can or should be avoided. React is very popular but it suits one very specific use case, it should be used almost nowhere else. Particularly since it is still new and evolving, it is going to cause more headaches than it will resolve. Webpack is an enormous bloated nightmare for example, it messes with even static html for little or no perceivable benefit and honestly just avoid all of it if you're trying to learn JavaScript.<p>If you want the full-stack experience, Node.js is rapidly becoming the largest JavaScript community on the net. You'll have your questions answered quickly and there are modules for everything you want to do. Choose a markup tool for html and css, such as pug and less.<p>There you go. State of the art front end JavaScript with two tools. Full stack with five. If it wasn't for the whirlwind massive chaos of the JavaScript community currently, fewer new developers would feel discouraged from becoming involved.
I have no trouble at all "keeping up" with the "insanity" that is front-end development. If you're confused learning new things, it means you're learning.<p>At my company, we have moved a lot of our front-end code to eslint-checked ES6 with some plugins, writing react/redux powered interfaces. New hires generally learn the codebase fast, you're well protected from shooting yourself in the foot thanks to type checking and linting and the absence of globals. Our team is many times more productive with this stack than with the es5 + knockoutjs code we built with before.<p>If you're building a hobby project, just start with a <html> tag with inline ES5 and css, and refactor and iterate from there. Use server-side templates. "keep it simple". But when building client-side interfaces at a higher complexity level, React is king.
JavaScript is a very special language, I think.<p>When I learned it in 2011 it was already strange to me, coming from years of work with PHP. Also, Java and C in university.<p>It was nerver meant to build big applications and had a few issues that many people tried to assert.<p>Old implementations which needed stuff like jQuery to normalize the APIs, no native module system so everyone implemented their own stuff (ExtJS, CommonJS, AMD, etc.), strange scoping rules forcing variable aliases and wrapper functions all over the place, functions as first class objects intruducing people to a new world of possibilities with ideas from FP, prototype based OO which comes with a different set of problems than class based OO.<p>The whole "we want new stuff now" movement forced many tools onto us to build our software, which before could simply be run in a browser without compilation. So we got rid of a few problems with a whole set of new problems.
I know it's super fashionable to hate on javascript, but I'd be very interested to see a similar rant on another area of software. I'm pretty convinced this is just how the industry works.
Occasionally designers seem to seek credit merely for possessing a new technology, rather than using it to make better designs. Computers and their affiliated apparatus can do powerful things graphically, in part by turning out the hundreds of plots necessary for good data analysis. But at least a few computer graphics only evoke the response "Isn’t it remarkable that the computer can be programmed to draw like that?" instead of "My, what interesting data".<p>- Edward Tufte
People writing these kind of articles are really not looking at their current stack objectively.<p>If I'm doing backend, I have to pick from various languages, I often will still need build tools (often more complicated) for various reason), you need to spin up a server (or make an AWS account....maybe use S3, maybe not!), you still have dependency management, etc etc.<p>Remember when Maven picked up, the bitchfests that surrounded it?<p>And debugging a server side app in production by picking at memory dumps, profilers, etc? Its not exactly easy.<p>The difference is that those problems are understood, and everyone knows the barrier for entry is higher.<p>The web platform used to feel like it had a low barrier for entry because it was so limited and there was only so much you could do. Those barriers were removed, so now its just as hard as anything else, except its not quite as understood (the barriers were removed recently). So all of the peanut gallery goes in thinking they can change the world in JavaScript, then realize they actually need to learn to engineer.<p>A good example of that problem is all of the big companies and startups hiring "full stack" engineers, which is code name for "pure backend engineer who has 10+ years of experience doing backend...and has heard of HTML".<p>Of course, that kind of people won't go far.
The worst is, if you don't keep up with this, good luck getting a web job five years from now, you'll be the equivalent of a Cobol programmer. Can't get off the train.
I spend my time in C++ and Python land the majority of the time. I have had to jump in to fix front end bugs a few times... This page reflects my experience fairly well. I spend hours trying to find the magic incantation of bower, grunt, less, npm and/or make, shell, versions to make one line of JS change. And I sincerely hope it gets better. I <i>want</i> to develop web sometimes, but every time I approach a new code base, I feel like I am starting from ground zero.
As these rehashed JavaScript versions of <a href="http://harmful.cat-v.org/software/xml/soap/simple" rel="nofollow">http://harmful.cat-v.org/software/xml/soap/simple</a> are on front page of Hacker News every other day, I can't even begin to imagine what kinds of rants we will see in the next 15 years or so.
In defense of JavaScript, there is an article that appeared here not long ago:<p><a href="http://mrmrs.io/writing/2015/07/27/too-many-tools/" rel="nofollow">http://mrmrs.io/writing/2015/07/27/too-many-tools/</a><p>Basically all these new terms come out because people are constantly trying to improve the ecosystem and make it better according to their own standards, be it more modular, more robust, or more scalable.<p>Eventually winners will emerge and the losers will die out. Give it a few more years and it will stabilize.
I've always been of the mentality to use a tool only when the efficiency gains outweigh the learning curve. This is, of course, impossible to judge without spending a lot of time understanding exactly where your efficiency bottlenecks are.<p>The truth is, a complex application is going to be complicated no matter what tool you use. I look at application programming like this: the more complicated it is, the more likely it is that you've missed key requirements early in the process. This means you will likely need to refactor, rearrange, add/remove features, etc. Choose tools that make this inevitable process as quick and painless as possible. For me that's the number one goal.<p>I reject tools that make picking a project back up a week or two difficult because of dependencies or weird hacks, syntaxes, or configurations that worked fine when they were fresh in your mind but required an hour of your life to retrace how you got there using the tool.<p>For example, I chose to use a library that used generators to eliminate callback hell in a screen scraping project of mine. I did this for no other reason than it was too hard to modify the scrapper when everything was nested 8 levels deep. I didn't know what generators or coroutines were before that, but I had spent enough time with my problem to know that I was going to hit a serious maintainability wall unless I found a more clear syntax to write my app. In that case, it was worth the inital overhead of learning new parts of ES6 and programming language concepts.
I can not emphasize this enough. Keep it simple. I see to many software written through solutions just because they are a hype. Pick the right tools for the job.
In my experience the whole complex JavaScript comes when you try to build the entire thing using JavaScript.<p>If you are developing a web app, restrict JS to the client side only, get something like react to do it.<p>On the server side I stick with Go(lang). This separation helps me and my team think of these two separate problems, well.. separately. Isomorphic this isomorphic that is when things start to go all in sane.<p>tldr; JS for front-end. Go for back-end.
And that's way I feel much more comfortable in Dart ecosystem:<p>- sane SDK and sane - not surprising - lang without <i>this</i> hell<p>- jquery like functionality built in<p>- one package manager and package repository<p>- can be used on server as well<p>- nice tooling (WebStorm-IntelliJ, VisualStudio Code)
Funny, but it's not quite that complex.<p>How about "Here's a link to a CLI utility or git repo which will give you a working project in 2-3 hours"?<p>I took a break from web dev for some years and had barely used any JS frameworks besides jQuery, until June, when I began working on an ambitious project and quickly got up to speed with the state of JS.<p>I'm using React/Redux/Sagas/Webpack/etc. for the client, and Express (with ES6 and what have you) for the API.<p>Developing with these new technologies has been a delight, especially compared to hacking bits of jQuery together.<p>Sure I've had to learn a lot of new concepts, particularly after being away from this world for so long, but this has always felt like a continual learning process to me.<p>We are the early adopters, the cutting-edge types. If you want to work with aging technologies there are plenty of companies invested in them.<p>Otherwise you can learn React in a few hours. What's the big deal?
"I need to display data on a page, not perform Sub Zero’s original MK fatality."<p>This sums up my opinion of the whole React+Redux+Webpack+SatansSeventhCircleOfHellLib combination.
I think people that don't like to constantly learn new stuff shouldn't be developers in the first place ... personally this is the part about web development I like most. I love to write prototypes and experiment with new stuff.<p>Second JS is not changing so fast imho and there are not so many frameworks that stand out of the crowd. Yeah there are lots of frameworks and libraries on github and even this is a good thing because it shows JS has a vibrant community that loves to create stuff. But it's not like you need know all of them, if you are really lost and don't know what to choose, just ask other developers around you or check out websites like <a href="http://stateofjs.com/" rel="nofollow">http://stateofjs.com/</a> and you will notice that there are not that many frameworks that get used by a lot of devs.
A common problem when I try to switch to platform that I haven't been paying close attention to. It is very difficult to quickly figure out what is the current stack of libraries and tools you should use if you are starting now. For example jump to the .NET and it is not so obvious should go for Core, Asp.net Core, how to do data access, which version of EF to use and so on.<p>Usually it is very difficult to find this information from anywhere. Articles and blog posts get outdated fast. Material produced by vendors is usually a bit biased. You get to see all the good things, but they might forget to mention stuff that is still under development. If you are new to the field, you don't know the right people and right blogs.
There's no need to jump straight into the deep end of tooling.<p>An iterative approach works really well here - do a brief survey of what tools there are and what problems they solve. Then, when that problem starts soaking up a lot of time, you can read up on the available tooling in greater detail.<p>There _are_ a vast amount of libraries in the js ecosystem, and it'll take time to fully understand all the different pieces.
It took me nearly 2 years to achieve an understanding of most of the buzzwords in that article (and even then, there are some I still haven't worked with directly).<p>In my personal experience, learning JS is very much a BFS process.
Very accurate. The web is still highly immature and the rate of change is proof of that. Very much looking forward to WebAssembly (and its full adoption by web browsers) so then we can end this madness once and for all.
The frontend frameworks wars are pathological. It's useful, to me, to remember _why_ that's the case: because web sites/apps have to support every browser make and model out there. But how do we know that? Presumably from testing. So its funny that there's isn't any mention in the article about browser testing, or harnesses, or what-not. So now there needs to be another iteration of this series where we step through PhantomJS, Selenium, AWS Device Farm, etc. etc. (and shout-out to Quirksmode and Caniuse).
JavaScript devs have an embarrassment of riches when it comes to tools/frameworks. It is overwhelming yes, but this anecdotal ranting is counterproductive. JQuery still works excellently, and so does ReactJS if you have the patience and time to learn it. One just needs discretion when distinguishing the tools of the avant-guard from the tools of the pragmatic workhorses.
Why I Hate Frameworks (2005) is climbing back up the charts, probably because of this very news thread. Here's the link to that:
<a href="https://news.ycombinator.com/item?id=12635142" rel="nofollow">https://news.ycombinator.com/item?id=12635142</a>
No seriously it's crazy. I tried doing some MEAN stuff for a while(I'm backend and can do some WPF UI MVVM ). Anyway it was insane I'm not doing any javascript development. Why would I ? Come to .NET we have cookies.
To me, this topic highlights the difference between a developer/programmer and a software engineer. As a small business owner, If I'm hiring a developer/programmer, I'm looking for specific skill sets in a given language/framework. I don't expect to hire a PHP programmer and throw them into React/Mobx/Webpack/Gulp/Babel/Websockets without a tremendous amount of training. Frankly, I don't even expect them to know SQL in any sort of advanced way. I'm paying less for that person and getting less in return. I'm taking on the challenge of "growing" them into what I want them to be in the future or letting them go if our project pivots<p>When I hire a software engineer, however, I'm paying more and getting more (hopefully). I expect software engineers to understand engineering principles and be able to work in almost any language. At a foundational level, they understand the basics of compiled vs interpreted languages, OOP vs functional programming, client vs server, optimization, testing, databases, networking, software release life cycle...and how to employ all of those. I expect to give them a business problem and have them develop an entire technical solution using whatever tools are best suited for that job.<p>In most cases, projects are a good mix of both software engineers and developers/programmers. The two can balance each other out and produce amazing things.<p>Lastly, everyone should be looking to improve their knowledge of their own industry. If you are a developer/programmer/software engineer, you should be looking at what is new/upcoming in the industry. You need to remain fresh or you become obsolete. In a very small example, the move from Python 2 to Python 3 has been a long road. If you are not aware of the improvements in Python 3 over Python 2, how can you actually determine if Python 3 is a good choice for your project? How can you take advantage of the improvements? What about Go vs Python 3? How does Erlang/Elixir fit in to the equation?
I feel like everyone needs to be reminded that this post is probably more of a joke than anything. Not criticizing JS so much as a buzzword-iness surrounding it
Holy shit these articles are truly tiresome.<p>I am learning Javascript in 2016. I also learned it in 1998. It was a simpler time back then, sure, BECAUSE YOU COULDN'T DO MUCH. Rollovers, alerts, scroll some annoying text in the status bar of a browser. This was about the extent of it.<p>I can do SO MUCH COOL STUFF with 2016 Javascript. Much of it comes with a complexity cost, but of course I'm free to code "raw" Javascript in the browser just like I used to. Instead, I choose to learn some new tooling, because the leverage it gives me to execute my ideas is worth the effort.
How it feels to learn parallel parking in 2016<p>"I want to parallel park in that parking space."<p>You'll need a car first.<p>"When I was a kid I just walked into the parking spaces."<p>Yeah, but that's not really parallel parking, you were just walking into a parking space.<p>"Oh ok. So I'll get a car then."<p>Well, it's not that simple, you have to actually get inside the car in order to parallel park.<p>"What? Can't I just push the car?"<p>No way! First you have to unlock the car, start it and put it in gear.<p>"Oh. OK, how do I do that?"<p>First take out your key.<p>"What's that?"<p>It's a small attachment that should have come with your car. Then press the unlock button.<p>"I unlocked it and am sitting in the seat. Ready to park?<p>"Not quite. first, you need to put the key in the ignition"<p>What is an ignition?<p>"It's the small hole on the side of the steering wheel. Now turn it. No, the other way.<p>"OK, let's parallel park!"<p>Hold on now, you need to adjust your seat, rearview mirrors and side view mirrors to ensure that you can drive safely.<p>"But I don't want to drive, I just want to parallel park!"<p>It doesn't work like that.<p>"Fine. How do I get these side view mirrors to adjust?"<p>Well, first you have to select which mirror you want using the switch to your left, then push the directional arrows until it's at the correct angle.<p>"How do I know what the correct angle is?"<p>There are lots of opinions about this, just search Stack Overflow.<p>"This seems like a good angle. Let's park!"<p>Hold your horses, first you have to put the car in Drive...<p>...<p>Some things that we take for granted as simple really aren't and never have been. Within a generation the above will be completely outdated knowledge and you'll get a car from point A to point B using an app, with its own complexities and absurdities at which we can poke fun in blog posts.
Still laughing but if you want to know what:<p>1. people use<p>2. people are happy with<p>Try the results of this survey:<p><a href="https://news.ycombinator.com/item?id=12627693" rel="nofollow">https://news.ycombinator.com/item?id=12627693</a>
This misses the point.<p>It's about the unit test.<p>jQuery is easy to develop with but difficult to unit test.<p>React is slow to develop with but easier to unit test.<p>For small projects, jQuery is better.<p>For large projects where the all the persons writing it tomorrow might not be here today, pick the testable one so they have a chance of future refactoring.
It's so interesting to me that so many people complain and no one does anything.<p>If Javascript is so bad just make any other JIT compiler run in browsers. Defeat the argument with action.<p>I'm comfortable with my build process. I have a package.json and a gulpfile.js. I run npm i, then gulp dev. For every new project this is automatic.<p>Don't follow trends if you don't want to, but I don't believe anything in the OP was difficult if you understand why you're doing it and learn it properly.
> What's wrong with HTML?<p>Its impossible to share data between JS and HTML without reimplementing parts of JS in HTML from scratch, or rather, implementing a HTML-like template engine from scratch in JS. The model just isn't designed to do what we want it to.<p>Web components are working on this, except they're reimplementing every modularity feature that JS already provides (HTML imports, shadow dom) from scratch, and then they're implementing every feature that React gives you (custom elements) from scratch. But its still too early, and most tutorials don't show how it works beyond the simplest examples (I would be convinced if I see a data grid component demo with custom item rendering per column which supports passing table data from JS)
I'm getting tired of these pointless non-specific rants. You could write an article about "How it feels to learn C++ in 2016" and make it all about the complexities of operating systems, linking, compilation, text editors and the QWERTY keyboard layout, and you'd still be as accurate.<p>All you need to "JavaScript in 2016" (as a beginner) is a config file and one or two commands. That's it. If that's too information or too hipstery for your taste, then follow the footsteps of other programming languages and use an IDE with a button that can hide that complexity for you.