People tend to stick to convention, and when they move to something that uses another convention, they tend to apply the convention of the former to the latter due to familiarity and because the former Just Works™. Then they'll meet friction, then blame the thing for being terrible, not knowing that they are approaching it wrong.
- Java with Functional Programming concepts in Java 8 - which was already there for FP-oriented languages like Haskell and Scala.
- PHP, with OOP on PHP 5 - which was already there for Java, C++, C#.
I'm not aware of the innovations of other languages, but I'm pretty sure it's not just JavaScript. It's not also about being "late". It's just extending the language to cater more features to a wider developer audience as well as providing a more flexible language.
Just because someone bought a smartphone first doesn't mean I can't own the same exact model or do the same exact thing.
- Angular seems to provide something similar already with its ng-* attributes and directives.
- JavaServer Faces also do the same thing, where a server-side controller is bound to HTML or UI widgets (and skip writing CSS and JS because they're pre-styled, pre-programmed).
This works for simple stuff, but for much more complex stuff (multiple view interactions, custom views), this becomes a pain to write because you start to create workarounds for things it wasn't prepared to do.
Also, while I'm no expert, but let's just leave HTML, CSS and JS as is. You can always create a framework that provides you that same functionality. In fact, Angular has directives, React has JSX, Ember has components. Several other frameworks do it as well.
Reminds me of E4X, where they tried to bake in XML syntax into JS. This time, it's behavior and logic into the markup. Nope.
Machine doesn't matter, but I recommend Linux or Mac as most of the tools are built with, and are easier to work with on unix-like machines. Invest in an SSD as well, as running a dev server as well as tools do hit hard on the disk.
As for languages, master vanilla HTML, CSS and JS. It's handy especially if you have to work around stuff, or just want to do bare-metal code instead of high-level. But you should have a standard stack in order to finish stuff quickly. The usual choices would be:
- You could also roll your own combination and be proficient with it.
Portfolio? Don't bother. Just run a Blog and Tweet about it. Join meetups in your local area and be visible. Get involved in open source by doing bug reporting or documentation. Eventually, you'd end up knowing a lot, and actually help in code. Use those as your credentials, as they are more credible because others can vouch for you.
Then they flame on everyone using the latter.