I think we are sort of on the same page here. For me, the real conundrum is the admiration for dynamic properties of JS, however, I can't seem to escape the never ending torrent of articles recommending tools like TypeScript or Flow.js whose sole purpose is to introduce the very thing JS tried to avoid in the first place. I refereed to TypeScript as a tool, since it is just a transpiler to JS, with type checking and probably some other features I'm not aware of.
I have done a lot with React, Node, Bootstrap and Android so I am not speaking on behalf of someone else, or just wittering about. Something has to change, a breakthrough of sort, since this trend is creating chaos and we will eventually lose a whole lot of knowledge when older generations expire. I see Web Assembly as a potential game changer, a much needed alternative to JS in the Web arena.
My viewpoint might seem a bit too dystopian, but has anyone ever cared to imagine what would happen if browsers ceased to exist? The majority of new generation developers would be completely clueless, and the only useful developers left would be the ones that were alive before internet and mobile phones were invented.
First of all, I would like to thank You for writing this article. Secondly, I would also like to state that arguing about languages is beneath me and please don't get offended as I'm only writing about my experience and conveying my own opinion.
First of all, C++ is not so great and you can say what you will, but template hell aside, C is much faster and cleaner language and if low level and embedded is your thing, there's no other language that will make you REALLY understand how memory, threading and CPU works.
If you are in academic circles, doing some extensive calculations, then GPU or OpenCL will be your best friend, and that is also where C is your only option. The only low level language other than C is VHDL, a relatively new language used for FGPA programming.
So called modern programming paradigms apply only for Web and Mobile world since nothing has really changed, apart from new buzzwords that are basically synonyms for algorithms and/or technologies that have been available for quite a while. There are exceptions of course, but in the case of C++, there is really nothing you can do in C++ that you can't do in C. I accept that some will argue against type safety of void pointers and casting issues but the whole point of low level languages is to learn how stuff really works. If you are aware of endianness, padding, byte boundaries and how pointer arithmetic works, you will begin to appreciate the gained knowledge which will outweigh the initial frustrations of C. GDB and Valgrind are exceptional tools and are only getting better (GCC/Clang fsanitize methods).
I welcome the advances in Web realm, but let's not forget that all that JS is compiled and prepared by Node.js, served mostly by some Virtual Machines running on some *NIX distributions, and ALL of that is written in C. Node.js is a combination of C and C++ but it's core part, libuv, is written also in pure C.
Thank You for reading,
Haskell is a special kind of beast :)
I'd simply say that C and C++ have two entirely different applications. (I know 'em both.)
And I never found templates all that scary. Neither did any of my interns. I think that's taste, once again.
I used templates heavily in one of my projects and never intended to say they were difficult. They are essentially quite easy, but can get quite complex if you add inheritance for example. The most difficult part regarding templates are cryptic and verbose compiler messages. I don't really know if that particular issue has improved or not, since I use C exclusively these days. Nevertheless, I just wanted to say that I understand your point and completely agree with everything you've written in your article.
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.