I believe a CS student should learn C and C++ for imperative programming, and Python/Ruby as well for dynamic programming. That is the way I see it, with no balanced view, political correctness or anything of the sort.
I don't doubt that Java and C# are more than adequate, as they contain most if not everything good about C++, but you have to be more responsible without a garbage collector, and if you then need to work as a programmer you can go managed or unmanaged. Starting
off managed with C# means it is difficult for most to then go unmanaged.
I think the most pertinent question is why the CS student does not use what is there already, be it C++ or Java books. Don Syme says this in a recent video. Instead of saying "where can I find a F# Math library", you should find a C# library (or whatever
.NET langauge) and use that instead.
Apples and oranges. To read code in a programming language you don't much care for is quite different from importing some assemblies written in a different language and just using them, especially as there is mostly no performance reasons for using F# over
C# for example - so why care. I couldn't care less whether the .Net BCL assemblies are written in C#, VB or F# so long as my own code is written in C#; it all compiles down to MSIL anyway.