I have been doing programming work for desktop applications for decades. Assembly and C were the favorite languages back in the late 80s and 90s for doing things fast. Since then, our applications were built using Visual Basic - switching to C# and .net gradually.
What I have learnt over the years is that the language isn't the limiting factor in doing good work. It's the mental capacity of the programmer and how well he/she have mastered the concepts and facilities offered by the programming environment. Of course, writing a full fledged ERP in assembly is beyond the capability and capacity of any programming team - it would be a waste of their time. UI components and interoperability classes are much better addressed by more enhanced platforms.
But when you are called upon interfacing and controlling hardware by implementing a protocol or even polling control signals, it sometimes boils down to either C++ or even building some interface h/w using a microcontroller and writing some embedded C. And even in a data processing environment, one needs to carefully decide between implementing logic in the programming language of the application or application server (be it C#, delphi or whatever) or implement it as stored procedures in the database engine. It's all about minimizing un-needed roundtrips to the database.
I often quote something I've read once: If your only tool is a hammer, everything around you looks like a nail. One has to be able to master multiple tools and be able to use the appropriate one for each task.