lokolan

lokolan

Opinions about investing on Elixir being Senior in other language

Hello. I’ve been having some trouble to choose a better decision in my career.
I’ve been working Senior NodeJS backend for the last 6 years and I already work a lot with C# too.
Today I’m a little bit frustrated about so many frameworks and a lot of packages that we need to in Node. I always feel that I never know enough about what I should use and what I’m working. Other thing that have been annoying to me is always being designated to work on Frontend just because I know javascript.
I’ve been considering to change to Elixir for work totally focused on Backend, either monolith or microservice.
I just want create scalable, resilient and concurrent APIs. Leave this world of Oriented Objects and investing on Funcional way.

My great doubt is would be better if I change to Elixir to focus more on backend or continue focusing on Node because it’s too late to change language and be specialist on Elixir?
I already built some API using Elixir, and I can consider take a Mid level job on Elixir, but I’m afraid of have some trouble to find these opportunities and some company give me the opportunity to migrate of language, I’m afraid of switch language is learning curve be big and opportunities to work Elixir only in backend be scarce.
Maybe it would be shooting myself in the foot?

Most Liked

dimitarvp

dimitarvp

Welcome to the forum!

If you already know JS and C# then I don’t think Elixir would be a challenge in terms of complexity. What can trip you up however is the functional programming paradigm – you have to learn that things are immutable and that the scopes of modifying things work differently e.g. you CANNOT do this:

a = 1

if something do
  a = 2
end

This doesn’t work. a only preserves the 2 value inside the if block.

So you have no mutation.

You instead do it like this:

a =
  if something do
    2
  else
    1
  end

Elixir is really easy to get into if you already have programming experience. For reasons unknown to me most newcomers skip the official tutorial, however I found it absolutely invaluable.

If you like what you see by the end of it, then move on to the Exercism.IO Elixir track which will truly open your eyes about what Elixir is about (especially the part where you will have to reinvent the crucially important Enum module).


If by the end of that, or even the middle, you still like what you see, the rest is relatively easily – there have been more and more employers looking for Elixir devs, some offering very chill and nice-to-work-at atmosphere. Be warned: the employer pool is much smaller compared to the vast ocean of JS and C# employers but then again, they (together with Java and a few others) are impossible to beat so not sure that’s an apt comparison. I however had almost no problems finding Elixir employment for 6 years now (although I have to admit most Elixir companies that I communicated with were super lazy in their hiring efforts during the summer!).

If you are more conservative in terms of preferring bigger employer pools then I’d advise you to aim at Golang.

I believe most programmers who worked with imperative / OOP / mutable programming languages do enjoy FP languages quite a lot because you forever stop playing 99.9% of all whack-a-mole games in your work (“who might have modified this global state again?” – a source of nightmares from all my 16 years of 7 other languages before picking Elixir).

The BEAM VM (the Erlang runtime Elixir steps on) is one of the secret weapons that somehow not many people still know about. It has solved 95% of the concurrency and parallelism problems just by the mere fact of having actors / processes / green threads that exchange messages and can’t modify each other’s state. And APIs like Task.async_stream allow you to transparently parallelize work, no matter how many items does your task queue have (so if you have 20 CPU cores then you’ll process 20 tasks at a time without lifting a finger).


Finally, every language has problems. An interesting side effect of Elixir’s rising popularity – and the rising level of seniority of the people attracted to it – is that a sub-group of its users (myself included) started being unhappy that Elixir doesn’t have static (compile-type) strong typing a la what Golang / Rust / Haskell / OCaml have.

OPINION: this has become a thorn in my side because it requires you to think about certain problems long before they might happen, and you become quite paranoid and sometimes even insecure. Whereas when I code in Rust I just make a sum / enum type for practically everything where I want to limit the space of the values and make errors of the type “unexpected function argument” impossible. But again, this is an opinion! Static typing has unquestionable benefits (prevent whole classes of bugs by the mere virtue of the program compiling) but dynamic typing has a huge boon as well: speed of iterating in your code. In Rust I have to plan out a bunch of things in my head and only after I code 100% of them can I test and see if my idea works whereas in Elixir 95% of the time checking your idea is just 3 minutes of coding inside iex (the REPL).


I hope the comments here help you make a decision. Even if you don’t end up working professionally with Elixir I believe just learning and practicing it every now and then will make you a better programmer.

k3n

k3n

There is opportunity everywhere. I think moving to Elixir or not is pretty independent of the overall landscape. What kind of problems do you want to solve? If Elixir sounds like a good fit for those then find a team to work in Elixir with because you’re clearly motivated to learn it.

Who I work with > compensation > problems interested in > language tooling

Is how I tend to look at career trajectory. It’s not too late to learn Elixir, I think it’s pretty easy to get far with it really fast. Frameworks like phoenix require a whole lot more specialization but I write very little real phoenix code compared to everything else.

Hope this helps!

xpg

xpg

Welcome to the forum, lokolan.

I think it is generally difficult to provide any general good advise for something like this, as it really depends very much on which kind of person and developer you are. But I can share part of my story:

Personally, I find it rewarding to try to work with new languages once in a while.
I have changed from professionally using C++ to Java, to C++ again, and I have been working for ~5 years full time with Elixir. Even if I were to go back to work with an object oriented language, I have learned a lot by spending time with a functional language. Of course I would have some catching up to do, before I would be fluent in modern C++ or Java, but I believe it can be done (and still make me a better developer in the end).

I totally agree with k3n, that the programming language is only part of the equation when it comes to career and job satisfaction.
No programming language will ever be perfect. Nor will using a specific programming language replace the need for being a skilled developer. This also goes for Elixir. Some of the code I wrote 5 years ago, which is still in production, is truly a mess and very complicated to understand. Other parts are easy and straightforward.

Like all other languages, there are many ways of structuring and writing Elixir programs. And as your system grows, certain ways of doing things are less optimal than others. Unfortunately, it is not always possible to tell, before you run into to trouble.
This is, as far as I see, just how software development works. There is simply no magic solution that can be applied equally in all cases.

What Elixir brings to the table, is an extensible language, an awesome foundation in terms of the BEAM, a set of really good frameworks and libraries (Phoenix, Ecto, Nerves, Plug, LiveView, Broadway, …) and an awesome community that generally has a very high quality of libraries.

I jumped head first into Elixir 5 years ago, and even though I have had my ups and downs with it (and there are things I dislike in the language), I am generally happy about that choice, and see myself working with it in many years to come.

Arpple

Arpple

I want something more standard, that everybody know to use and stop to renovate the circle.

We have this same problem in our project for having too much style of writing code in our code base from naming to pattern and etc.
But the problem is actually not from the junior or any project newcomer but from more of the experienced or other outsource people that we can’t control or communicate easily (we are also like one of the outsource in the project too)
The reasons why we have no problem within our team are that most people when writing code will try to follow or copy the old one. If your code is consistent enough or you can tell which one is the good example they will follow. So the problem lies in those who we can’t communicate with or one that already have followed another standard from somewhere else.

My point is coding standard is the person relate thing that you should build from your team using communication, language may help in some part but if you can’t control it, it will still happen somewhere.

And yes you should learn Elixir and also other languages. Learn the idea behind it, what problem is it good at, why people like this kind of idea from it. Even you may not have chance to use the language itself in job you can still adapt something from what you got.

jbz3n

jbz3n

It’s certainly a breath of fresh of air coming from the JavaScript ecosystem after a serious burnout.

Although I could be considered a Sr. Fullstack developer under JS, with Elixir I have barely scratched the surface.

What I Iike the most is how easy is to maintain and add features to my own products.

The leap to production requires less tooling than a Node/React project with similar scale.

I can build, not just MVPs, but production quality products almost on my own. With less effort and people than with other languages/frameworks.

I can focus just on building, not worrying about shinny toys and FOMO.

Where Next?

Popular in Questions Top

srinivasu
How to handle excepions in elixir? Suppose i have A, B, C ,D, E modules. and each module has get() function. A.get() method will call th...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 record...
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
Fl4m3Ph03n1x
Background Let’s assume I have a typical GenServer that receives messages as requests, does some operation in a DB and returns responses....
New
fayddelight
I tried installing elixir 1.11.2 erlang 23.3.4 via asdf in my zsh shell. Enabled the versions locally and globally. When I list them ...
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers' Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
idi527
I’ve been re-reading swift book again and noticed that multiline strings there don’t have a trailing line break, unlike in elixir iex(2)...
New

Other popular topics Top

sorentwo
Hello! tl;dr Announcing Oban, an Ecto based job processing library with a focus on reliability and historical observability. After spen...
977 41022 311
New
pmjoe
I have a relationship of love and hate with Elixir. Lots of things are just absolutely right, but there are some things that are kind of ...
New
William
I would like to know that is there any online source for learning Phoenix Framework for building E-Commerce Store? Any advantage on build...
New
KronicDeth
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine) This is a plugin that adds support for Elixir to JetBrains IntelliJ...
289 35421 110
New
chrismccord
This release brings a number of exciting features, including integration with the new Phoenix LiveDashboard and Phoenix LiveView. There h...
New
minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
qwerescape
Is there a way to get the call stack or stack trace at any point in the code? Not from exceptions, but an expression that returns how the...
New
johnnyicon
Hi all, I've just started learning Elixir and Phoenix Framework, so please pardon my n00bness at this stage. I'm trying to use Postg...
New
WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
josevalim
Hi everyone, One of the features added to Elixir early on to help integration with Erlang code was the idea of overridable function defi...
New

We're in Beta

About us Mission Statement