DS Algorithms vs Languages & Frameworks
I have come across many people asking me on LinkedIn whether and what language they should use to learn the DS & Algorithms? Also what languages & frameworks they should learn to get a job or make a better career move?
Another question that is frequently debated is whether we should learn algorithms or 'languages and frameworks' and how should we divide out limited time.
You can use any language to learn DS & algorithms. It doesn't matter. Few people like to solve algorithms using C/C++ while others like to use Java/Scala. There are many other popular languages like Python/Javascript which can also be used for the same purpose.
As far as languages and frameworks are concerned it depends on what is your interest. If you want to learn OOPS concepts, you can learn Java. Java also has strong support for functional and Reactive programming style which are very popular now a days. If you really like to learn function programming then Scala/Haskell are great choices. Scala is a great language for learning both functional programming and OOPS but the syntax can be hard to understand if you are coming from Java or other programming languages. Scala is statically typed language and provides strong type safety (which is also know as Generics in Java). Haskell on the other hand is purely functional language. Both Haskell and Scala support powerful functional programming paradigms e.g. Monads/Functors/Monoids etc.
If you want to build distributed applications running on multiple machines and communicating with each other then Scala (Akka framework) and Erlang are great choices. WhatsApp is written in Erlang and is highly scalable. Akka framework(written in scala) is a great choice for build scalable and distributed systems as well. A Java flavour for Akka is also available for those who don't know Scala.
Finally, what to choose between "DS algorithms" vs "Languages and Frameworks", It is better to divide time wisely between the them. Learning DS Algorithms can be overwhelming as it is quite absorbing. The more you move towards solving problems of higher complexity, the more intense it gets. The big companies (e.g. FAANG) don't care which language/framework you know. They want you to solve the problem in any language.
But on the other hand, there are many organisations which look for both. If you can solve medium complexity DS algorithms problems they would be fine. They don't want an expert in this area many times but it is always better to be one if possible. Some companies look for niche skill areas and they want you to know Languages and frameworks which are specialised and have steeper learning curve. Scala/Erlang/Haskell are some of the skills for which candidates are not easily available in large numbers in the market as they have steeper learning curve compared to other languages like Javascript/Python etc.
Hope this helps!