| C# is easy compared to C++, you'll like it. It's a different matter whether it will truly develop your skills when it comes to your goals. C/C++ role is guaranteed to develop you more and give you better understanding of the underlying hardware for machine learning, data analytics and scientific computing than C#. If I were you, I wouldn't pick just one of anything when it comes to software development. Sure learn C#, but don't become a one trick pony. Looking at your goals: Learn the tools, technologies and libraries related to your interest, be it OpenCV, R, Fortran or whatever. Write proof of concepts and experiments on your free time. Reinvent the wheel to learn. But also learn how the things you use work underneath. When dealing with large data sets, you can't do it with just one system. You need to distribute it over a larger set of systems. Learn about clustering, distributed systems. In other words, algorithms like Paxos, MVCC, vector clocks, etc. Hardware side of it: RDMA and NUMA (to some extent). Especially learn how to deal with latency! Find the rest yourself. Google is your friend. :-) Also learn how to push the hardware to the max. Some things you might need to deal with: NUMA, cache coherency, cache agnostic algorithms, SSE, AVX, OpenCL and CUDA. Don't forget to take a look at the source code of that amazingly fast library. The items listed was just what came to my mind immediately, there's a lot more of topics to cover! |