3 ms·
It's very hard to predict the future, but I think, there are things which are and will always be worth learning in software development world (however, they are
by solomatov 13y ago
It's very hard to predict the future, but I think, there are things which are and will always be worth learning in software development world (however, they aren't enough to find a great job):
- Large scale programming languages(Java, C#, C++) and techniques. JavaScript is in fashion today, however, as web is replacing desktop apps we will have more and more capable and large scale applications. It won't be possible to develop them in JavaScript because of its lack of support for large scale development. All these languages have compiler to JS (and in future probably will have compilers to asm.js), and I think, they will replace JS in the future.
- Algorithms and data structures (It's very hard to find a person who can describe well how hash tables work. I interviewed many people who studied this at university).
- Programming language theory. It makes you better programmer, since you will have a better understanding of why languages are implemented the way they are.
- Mathematics which is relevant to software: discrete math, statistics (data science is on the rise now), mathematical logic. These skills are timeless
This part is more speculative (however, I personally bet on this stuff):
- Reactive libraries. They allow you to become so much productive. You can learn Reactive Extensions (https://rx.codeplex.com/ https://rx.codeplex.com/) or one of its port to other languages. Also I can recommend you the framework which we developed at JetBrains: https://github.com/JetBrains/jetpad-mapper https://github.com/JetBrains/jetpad-mapper.
- Web platform. I mean WebGL, WebCL, WebWorkers, and other HTML5 APIs. The next generation of apps will be based on the web platform, and you need to be fluent in these APIs to be relevant.
- Emerging languages: Scala, Kotlin, Rust. Don't learn Go, that language is defective by design. Also don't learn Haskell, the language isn't widely used and if we take a language + popular extensions it's more complicated than C++. Haskell will probably be replaced by one of the dependently typed programming languages.
- Dependently typed programming language. Currently, they are mostly academic languages, however, they give us a promise of writing reliable software by construction without too much effort. The best language here is Agda. However, you might want to learn Coq or Idris.
Things you should stay away from:
- Do not learn dynamic languages unless you have to (for ex. JavaScript, I hate it, but I have to write code in it from time to time). Modern statically typed languages are so good now, that they give you almost all advantages of dynamic language while keeping code correct.
- Do not learn language which try to make themselves easier at the cost of correctness: Go (lack of generics) and Dart (optional unsound type system). I think they won't work out despite the fact that Google backs them.