Ok, lets flame
Looking back at 30 years of programming I have a definite strong opinion about that.
1. I tried and hate functional programming. Nice exercise for the brain, but useless for big projects. The only on I was remotely interested in, was Erlang
2. I tried and hate meta-programing. Most libraries using meta-progrming with C++ templates are terrible uncooperative and complicated (e.g. OpenMesh or some of the boost libraries I validated for FreeCAD)
3. Internal DSLs are a bad idea, although we use in FreeCAD a DSL for our python binding generator. But thats a generative approach which generate C++ code you can compile and debug. Thats the right way to do a DSLs.
C++ is the only true programing language! You can unleash undreamed speed in working directly on the memory, registers or raw OS interface. At the same time you have all the high level constructs to master REALLY big projects.
--- end of flame ---
But thankfully every programmers generation has to decide on its own