> People complain that C++ is a mishmash of too many concepts [...] but it's that heterogeneity that ends up yielding such high caliber talks.
I agree. Scala gets the same kind of criticism, but just like with C++, you can easily limit Scala to whatever subset suits you (e.g., pure OOP or pure FP). C++ and Scala are among my favorite languages to work with, so I might be slightly biased :P
Also if one looks at any successful programming language in the market that began by fighting complexity, it is easy to observe that they had to eventually embrace complexity to adapt and survive in the market of programming languages.
Even if they kept the core simple, the complexity was shovelled into the libraries instead.
For example, I doubt there is anyone able to know the complete Python 3.6.1 documentation by heart, plus all major libraries, tools and implementations. Yet it is touted as a simple language.
It seems to me that the engineering trade-off is found in how we distribute complexity between:
(1). The language itself.
(2). The tooling (IDE, build system, linters etc...).
(3). The standard library.
(4). The ecosystem of third-party libraries.
(5). The developer's application code.
Moving complexity away from (5) might make applications smaller and easier to maintain, but it is done at the risk of increasing the training / learning burden on the development team.
If too much complexity ends up in (1), then we create a barrier to entry for new developers and hiring becomes harder.
If too much complexity ends up in (4), then we end up with endemic not-invented-here syndrome, because it becomes too hard to learn new libraries.
It seems to me that a lot of this is driven by learning and learnability -- any educational specialists around who want to wade in on this discussion?
Yes knowing how to play scales and reading notes might seem easy, but mastering an instrument and its variations (e.g. string instruments) takes a whole life.
There are big languages where all the stuff fits together nicely and into a conceptual whole, and big languages where it seems like a hairball with more and more hair bolted on as the years go by.
I agree. Scala gets the same kind of criticism, but just like with C++, you can easily limit Scala to whatever subset suits you (e.g., pure OOP or pure FP). C++ and Scala are among my favorite languages to work with, so I might be slightly biased :P