That said, I feel the need to diversify my skills and learn a new language. But I want to do it the smart way: my plan is to move in the coming years from Europe to Canada with my little family, and I would like to be able to reach companies which might not need a Frontend developer full-time.
I obviously tried a lot of language in my career so far, but never deeply enough to call myself efficient (except maybe Ruby), so I would like to know if some of you could advise me or share with the community your experiences with others languages.
Main points for me would be:
- being able to reach a wide range of projects/companies. This point is important as I prefer to be efficient in fewer languages, but having a deep understanding of them.
- not too obscure/difficult (as a father, I would rather use my nights to sleep)
- having a nice future and community
- and fun to use!
My candidates so far (but open to others):
- Elixir (although I do not see very often positions requiring this language, which is too bad 'cause I really love functional programming)
- Python (I have to admit that I got quickly bored with this one, but might give another shot)
Thanks a lot for your help. I know majority of answers could start with "it depends", but please keep in mind I am not looking for the best or most performant language, but simply the one allowing me to diversify my skills while enjoying the learning process.
I think the requirements will need you to compromise a little:
- You'll learn much more from a language that is very different from the ones you know, e.g. a different paradigm. But that'll take a lot longer to learn.
- Similarly, I'd recommend different languages for finding jobs than for becoming a better programmer.
As for learning:
- It'd be useful to learn a language that forces a different paradigm, but as I said, it conflicts with some requirements (I agree with your remark about Elixir).
- I think it'd be very educative to learn a language with a good type system, especially since if I understand correctly, you're just beginning with Typescript.
- Not so familiar with C# myself, I believe it's a good language but not particular outstanding qualities for your situation.
- I don't know Elixir, I was going to say that any purely functional language would be very educative, but I agree with your remark that career opportunities are limited.
- The advantage of Golang would be that it's easy to learn. I don't think it's very educative since there's not much new and the type system is mediocre.
- I think Python is a lovely and easy language and used for backends (Django), but since you don't like it, it has no static type system and many of the non-Django opportunities are in data and science, maybe not the best choice.
So if I have to have a conclusion, I would say both Kotlin and Typescript, but there are many valid choices.
being able to reach a wide range of projects/companies. This point is important as I prefer to be efficient in fewer languages, but having a deep understanding of them.
unfortunately, Rust is very young, so there are only a few companies who employ Rust developers.
Definitely does, because you can use Rust to write WASM or a server (playing well with JS) and Rust can do all the things JS cannot do (completing it).
not too obscure/difficult (as a father, I would rather use my nights to sleep)
Rust has a rather steep learning curve, but the reason for that is that it forces you to learn a lot of important principles. If you do not adhere to good and safe standards, your program will not compile. That said, using a framework, most of the difficult stuff is gone, and it is fairly easy to use.
having a nice future and community
Rust has a bright future. Many low-level developers learn Rust. It is used to create awesome new software. And the community is very nice, most of the time. Just don't try to discuss the math behind Rust :D
and fun to use!
Definitely. I can use it without the fear of doing some bad mistakes. Usually, you'd learn as you go, and then end up with throwing away projects, because you cannot find the damn memory leak or race condition, which makes your application unusable. With Rust, you don't have that problem, and you just write, and if it compiles, it's formally correct (though you have to make sure your business logic works).
All in all, though, Rust might not be the language you are looking for here. What you write sounds like you want to change your job description. If I understand you right, you want to get away from the front-end and at least add a bit of back-end or even something completely different. For that, you might want to think about your preferences. For example, most companies still want Java or C# for application development. Kotlin would be nice, but its usage is not that spread, yet. Python will most likely help you find a job in research. As far as I can see, it is mostly used for that, or Linux management tasks. Golang and especially Elexir might be hard to land you a job.
So, imho, learning Java is the safest way to go, if you want a language which meets all of your requirements and lets you choose a company from a wide selection.
However, if you would actually try to go more into the direction of native mobile development, the world looks different! While Java is still an important language there, Kotlin is on the rise - at least for Android development. Other than that, you might add Swift to the list for iOS development and C# or F# for Windows app development. You will most likely start to miss your single code base for all platforms, though ;)
There are many other areas of expertise, which each require different coding skills and languages. Without more information of what exactly you are looking for, it is quite difficult to make a suggestion. That's why I would like to advice you to take a look at all the languages above. Write a small application in each of them and compare them. What are the differences, what do you like about them, what do you dislike about them? A small application might include writing a little game (Pong, Snake, whatever) or some app, which tracks your GPS coordinates or a server with a REST API, which tells you the current CPU load. Whatever comes to mind is OK. Then go to a company of your choice and see what jobs they have to offer. Apply there and use the language they require. They will teach you whatever you need, if you are motivated and they think that you can do it! I think that the only thing which is more important than the programming language and frameworks you use is the company and the people you have to work with every day.
- TypeScript is a great start.
- RxJS is a library for reactive functional programming. It greatly enhances the ease of dealing with asychronous logic. It will also introduce you to functional programming.
- Enhance your skills with backend development on Node. Express is a good place to start.
- Enhance your automation skills with a glue language like Bash or PowerShell.
- Learn a build system like Travis, CircleCI, or Jenkins.
- Enhance your skills with a cloud platform like AWS, Azure, or Google Cloud Platform.
- Learn a container system, like Docker as well as Docker Compose.
- If you're feeling intrepid, learn about a container orchestration system like Kubernetes.
That's not a joke. 99%+ of the people I encounter using react, vue, etc, and calling themselves "front end developers" don't know enough about HTML, CSS, accessibility, or dozens of other things to have any business front-ending a blasted thing -- particularly in the areas of semantics, progressive enhancement, and graceful degradation. Hence why they're typically GULLIBLE enough to dive for halfwitted mentally enfeebled GARBAGE like react-ui, bootcrap, jquery, etc, etc.
Failing that go for PHP. The others may be hot and trendy, but PHP has the largest audience due to it being client-side facing on damned near every server on the planet (which you REALLY can't say about any other language), has far superior documentation than most in the form of php.net, and has a far more active community of developers. It's hard NOT to find help for dealing with PHP problems... often the problem is deciding who's advice to take since there are so many different answers to the same question!
Sure, the language has its share of issues, but what programming language doesn't? It's usually the same dance just a different tune. Honestly given the pro's and con's I'd stack PHP 7 up against any in the current crop of server side development.
A lot of people said good points, I will just underline one thing that you mentioned about reaching people/companies via a language/tech. I find this quite a double-edged sword because do not forget that the people/companies that provided you an opportunity just because a tech stack is trendy, will not refrain from putting you out of a job once another trend is getting traction.
I'm sure there are companies out there that value deep vertical knowledge about a specific topic. Follow your passion, not the trends. (this is hard, very hard given the conditions in life, but not impossible)