Lots of things are happening there. As of today it’s the liveliest software ecosystem. The last time I’ve seen such an interesting gathering was 15 years ago in Java.
In 2016 the situation is drastically different:
— All major browsers support most of the ES6 syntax.
— Transpilers easily generate ES5 program from the ES6 code so you can deploy the ES6 code today in all browsers.
— The WebComponents standard prescribes how to develop custom HTML components. The Material Design principles explain how to develop nice-looking Web pages. Google implemented these principles in a library of custom components called Polymer. We already tried it in the real-world projects, and it works!
– HTTP/2, a major revision of HTTP will substantially speed up the client-server communications.
Libraries and Frameworks
Developers who want a lighter framework that puts a structure on your app with navigation and data binding usually go with AngularJS 1.x or Ember. They would need to integrate third-party libraries for graphical components, grids, and a usual Twitter’s Bootstrap (to make the app usable on mobile phones and tablets), but it’s doable. Some people prefer the React framework from Facebook, but React is mainly about views, and you’d need to use some third-party libraries to build an app.
Those who don’t like prix fixe meals and prefer a la carte menus pick a bunch of small libraries each of which can do one thing well. They are ready to face the issues while trying to make these libraries work together. Such people charge higher rates and project managers keep their fingers crossed hoping that these developers won’t quit.
In the reactive world every component or service is implemented as a stream. Everything is a stream. You are a stream. I am a stream. A click on a button spits out the event as a next element of a stream. An HTTP request to a server returns a response as an element of a stream (promises had their 15-min of fame and are considered old fashioned these days). A piece of data pushed over a WebSocket connection is an element of a stream you can subscribe to. And there is a nice little twist to it: a subscriber can regulate the stream volume and lower the pressure if need be.
A year ago a team from Google decided to re-write their super-popular (1.1M devs) framework AngularJS. They started with creating a new language AtScript just for the new Anguar 2, but then invited the TypeScript team from Microsoft (can we start liking Microsoft, just a little bit?), and asked them to add some features to the TypeScript language. Microsoft folks kindly agreed, and Google wrote Angular 2 in TypeScript, which also became a recommended language for developing Angular 2 apps. Now the code of Angular 2 apps is easy to read and write even for Java and C# developers (see this). Needless to say that RxJS is embedded inside Angular 2.
Jokes aside, I really like the Angular 2/TypeScript/RxJS/npm/Webpack combo. During the last ten months I’ve been working with my colleague Anton Moiseev on the book “Angular 2 Development with TypeScript“. So far Manning published 300 pages of this book, and the remaining 150 pages are almost ready. The code faindz will lower the price of the eBook by 39%.
If you prefer to learn Angular 2 in a classroom setting, this year I’ll be teaching Angular 2 classes and my training/speaking schedule is published here.
The Bottom Line
Very well written.
How do I explain students that it is still necessary to learn Java, then? Or is it not?
This is easy.
1. Java remains the most popular popular language in the world for many many years:
2. Ten million Java developers make a pretty good living programming in Java
3. Compare the demand in a job search aggregator Indeed.com:
Excellent summary! I look forward to attending your NYC class later this month.
Regarding Polymer, it appears now that the Angular team is not promoting it as a first choice for Material Design controls in Angular 2. Rather, they’re positioning their own suite of “Angular Material 2” components as the preferred option, which was just released in alpha yesterday, with a promise for a final version when Angular 2 comes out of beta: http://angularjs.blogspot.com/2016/03/angular-material-2-alpha-preview.html .
I was at the Fluent conference in SF last week, and in a Q&A, Brad Green (the Angular 2 team lead) said that yes, Polymer will work in Angular 2, but additional work may be required to overcome polyfill issues outside of Chrome (the only browser where Polymer’s pure web components are already natively supported). In a follow-up, I asked why Angular 2 wasn’t embracing Polymer more fully, and he cited “performance and architecture concerns”, noting that the “Angular Material 2” components will be ready when Angular 2 is ready.
All this I take to mean that google is still very much wanting to expand adoption of Material Design; but it doesn’t necessarily have to come through Polymer (the first MD adopter). So, “Angular Material 2” for Ang2 projects, and Polymer for those who want MD without Angular. I had been planning to use Polymer in Angular 2 going forward, but for the moment this has changed my thinking.
We tried to marry Angular 2 and Polymer. It works, but Polymer doesn’t use modules, so you have to use html imports. Besides the need to manually deal with these imports, it makes it impossible to use Webpack for creating deployment bundles.
Angular Material 2 has started the first Alpha already: