[HN Gopher] Beam/Erlang/Elixir Concept Explanations
___________________________________________________________________
Beam/Erlang/Elixir Concept Explanations
Author : pkilgore
Score : 267 points
Date : 2021-09-12 14:33 UTC (8 hours ago)
(HTM) web link (beam-wisdoms.clau.se)
(TXT) w3m dump (beam-wisdoms.clau.se)
| colesantiago wrote:
| Very curious about the recent surge of Elixir / Erlang posts on
| HN, is there a reason for this?
|
| How is the the job market surrounding this as well for Elixir /
| Erlang devs?
| brightball wrote:
| Elixir shops are learning quickly that the best bet is probably
| to hire a senior dev that wants to learn and just give them a
| couple of weeks to learn.
|
| As for the surge in interest, I can't speak for everybody but
| when I dove into the language I realized it addressed virtually
| every short term and long term problem that I've experienced in
| my programming career. The rules it sets out force things to be
| done in such a way that many issues are avoided as a by
| product.
|
| I find it balances all of my concerns better than anything else
| (productivity, performance, maintainability, scalability,
| learning curve, concurrency, stack simplification, capability,
| refactorability).
| dimitrios1 wrote:
| If you are one of these shops please email me :)
|
| I have been dipping my toe in functional land through
| fantasyland / ramda
| javajosh wrote:
| Yeah, I'd be into that.
| marcandre wrote:
| I was hired by super.mx with 3 days of elixir under my belt.
| We're still hiring btw...
| lejboua wrote:
| Really liked the recent podcast and hearing from you how
| you fixed those slow compilation times issues. Looking
| forward to hear more from you!
| tobinharris wrote:
| We do this. We're only a small 12-person software agency, we
| have two Elixir developers right now.
|
| When we hired the 2nd, we looked for someone who had good
| knowledge of Node, Rails, Laravel or whatever and were
| excited to learn Elixir/Phoenix. Then they completed a Udemy
| course and started practicing. It worked out pretty great!
| joelbluminator wrote:
| I guess the reason is enough people upvote it? HN is pretty
| popular for nichier tech like Clojure, Julia etc. It gets as
| many votes as Java I think because the community in general
| likes reading about exotic stuff.
| ralmidani wrote:
| Are Erlang/Elixir really that exotic? I interpret exotic in
| our context to mean a language aimed at academics and very
| advanced programmers but lacking mainstream appeal.
|
| Erlang/Elixir strike me as very pragmatic and, compared to
| Haskell/Lisp/Clojure/Scala/Julia/etc., they seem more
| beginner-friendly.
| joelbluminator wrote:
| I don't think Erlang/Elixir is many people's first
| language, no. It's advanced. Someone who is doing their 1st
| programming project would be better off choosing javascript
| / php / ruby if they are building for the web. It's quite
| unlikely their first use cases will be 2 million concurrent
| web sockets. So given it's not mainstream and it has the
| advanced aura I think it's fair to call it exotic or "
| language aimed at academics and very advanced programmers
| but lacking mainstream appeal" as you just said.
| ralmidani wrote:
| I honestly don't see why a beginner couldn't learn
| Elixir. You can start with if/else, and later learn how
| to do things more elegantly with pattern matching. You
| don't have to use processes and GenServers right away
| (and even afterwards, you can use a library/framework
| which provides an abstraction). The ecosystem has many
| advanced features and use cases, but simple programs are
| not much harder to write than they are in Python or Ruby.
|
| In some ways, getting programmers to start out thinking
| about "everything as an expression" and immutability-by-
| default might help them write elegant and robust code
| earlier in their journeys.
| joelbluminator wrote:
| > but simple programs are not much harder to write than
| they are in Python or Ruby.
|
| Even if they are just a bit harder it makes it a
| questionable choice for a beginner. And let's not forget
| the huge amount of Stackoverflow answers a stack like
| Python/Ruby have.
|
| > immutability by default
|
| I don't know that beginners should think about that
| stuff.
| dnautics wrote:
| There was a class aimed at middle school? Iirc Students
| where they were taught erlang and by the end of two
| classes they had built a crude networked chat system,
| which, believe it or not, gets their attention. You can't
| really do that so easily in any other language system.
|
| > I don't know that beginners should think about
| [immutable by default].
|
| Yeah. Beginners should not have to think about
| mutability. So, immutability by default is the right
| choice. Details like "why don't integers mutate when
| passed to a function versus a dict" should not ever have
| to be answered to a beginner.
| sergiomattei wrote:
| I don't think Elixir is aimed at academics, though. It's
| very clear that it tries to be as pragmatic as possible.
| joelbluminator wrote:
| Yeah agree, you can erase academics from that sentence.
| Academics mostly use Python and R and Python is actually
| super pragmatic.
| ralmidani wrote:
| To clarify, by "aimed at academics" I meant CS academics,
| not researchers in other fields.
| weatherlight wrote:
| 1) It's worthy of the praise and attention, ( The BEAM is a
| marvel of engineering). 2) It's just "exotic" enough for people
| who work in Java/Ruby/JS to be interested to read and upvote.
| The articles shared tend to be easy to understand and bite
| sized. 3) There's enough demand out there and Elixir Devs are
| usually paid pretty well, that market( for the time being,) is
| pretty small.
| atraac wrote:
| As far as I've seen, Elixir job market for Europe is almost
| nonexistent, sadly.
| Teifion wrote:
| As a sample size of 1 I can say I didn't have an issue finding
| an Elixir job and those I did speak to were keen to get an
| Elixir dev asap. For context I have a few years in Elixir and
| over 10 as a developer in general. Better yet, the jobs in
| question were remote only.
| linkdd wrote:
| I don't really know about the job market, but Erlang/OTP has
| been a very fine piece of technology for the past 30 to 40
| years.
|
| Elixir is quite new (2015) and with every release it gains in
| maturity, and the ecosystem is growing. IMHO, Mix was a game
| changer in terms of tooling.
|
| Also, with tools like Horde[0] and libcluster[1], it became
| very easy to setup an Erlang/Elixir cluster on Kubernetes.
|
| When you work with distributed systems, the OTP framework is a
| godsend, it's no surprise to me that it's finally getting
| traction.
|
| Also, I like to use Rambo[2] to call small go/rust binaries
| that I ship with my Docker images, useful for features where
| performance is important. [0] -
| https://hexdocs.pm/horde/readme.html [1] -
| https://hexdocs.pm/libcluster/readme.html [2] -
| https://hexdocs.pm/rambo/Rambo.html
| derefr wrote:
| > Elixir is quite new (2015)
|
| I suppose you can say that; that's when it 1.0ed. But Elixir
| was surprisingly stable pre-1.0; I was writing production
| Elixir 0.6 code at Spawngrid in 2012!
|
| Really, the 1.0 announcement felt more like a formality than
| anything; there was no discontinuous switch from "throwing
| features at the wall" to "considered engineering." Changes to
| Elixir have always been considered -- and props to Jose Valim
| for that! :)
| Zababa wrote:
| > Elixir is quite new (2015) and with every release it gains
| in maturity, and the ecosystem is growing.
|
| One thing I really like is that it's considered mostly done.
| The community has the wisdom of not always trying to add new
| features and deprecating old ones. There's no 2.0 planned but
| that doesn't stop people from doing impressive work like Nx.
| I don't know about the ecosystem, but the language itself
| seem like a stable investment.
| linkdd wrote:
| This also has the benefit that your code is likely to keep
| working in 10 years.
| Zababa wrote:
| That's what I meant by "stable investment".
| ralmidani wrote:
| I am starting my first Elixir role tomorrow. I come in with no
| real-world experience (edit: no real-world experience with
| Elixir specifically - I have a mid-senior level of experience
| using other languages), just some tutorials (Elixir Koans and
| Pragmatic Studio) which helped me submit a decent code sample.
| There aren't a ton of Elixir roles, but hiring managers also
| recognize the shortage of devs so for a junior or mid-senior
| role they might overlook a lack of formal experience with the
| language. Elixir roles also seem to have pay scales as well as
| work arrangement flexibility that are higher-than-average.
|
| Geography-wise, I've noticed growing, "hipster" cities like
| Columbus (where I live), Denver, and Austin have a pretty
| decent share of the Elixir job postings (although, again, if
| you want to live elsewhere there are lots of fully-remote
| Elixir roles out there).
| derefr wrote:
| More demand than supply, definitely. It's hard to hire
| Erlang/Elixir devs from outside.
|
| Some companies just avoid using the platform because of that,
| but others (like my own company, Covalent) hire devs who seem
| like they're experienced in learning languages generally, and
| then train them in Erlang/Elixir internally.
|
| These devs don't move around much, though -- a company willing
| to do internal promotion/education is usually pretty good at
| retaining talent. So new companies looking for Elixir devs
| still don't find as many as they'd like.
|
| (An interesting other side effect of this dynamic is that it's
| easier to hire _senior_ Erlang /Elixir people than junior ones,
| since most Elixir devs you'll find that have ever used the
| language for anything serious, learned it at work, and so
| usually have a decent chunk of their career already behind
| them.)
| toast0 wrote:
| I'm retired but look around a bit for interesting jobs using
| Erlang, and I don't see a whole lot of listings that mention
| it. More that mention Elixir. And one company (smarkets) that
| specifically calls out that they're not using it anymore.
|
| But, some of that is I think because, as others noted, it's
| hard to find Erlang developers, it's easier to target for good
| developers and convince them to learn Erlang on the job. So I'm
| guessing some places use it and don't mention it.
|
| I was working at an Erlang shop and out of all of our hires and
| interviews I did, we hired one person with Erlang experience
| (from a conference) and I recall interviewing one other
| candidate with experience. Oh and we had an intern who did a
| college course with Erlang, but interned in a client group that
| was limited to j2me (sorry!).
| pessimizer wrote:
| It's not a particularly recent trend irt HN:
| https://www.flickr.com/photos/stilist/3348380060/
| sharmin123 wrote:
| How Does A Hacker Hack A Phone? How To Avoid Phone Hacking?:
| https://www.hackerslist.co/how-does-a-hacker-hack-a-phone-ho...
| AlchemistCamp wrote:
| I like the teaching style and the lower-level BEAM focus.
| Bookmarked it!
| halotrope wrote:
| I had a brief love affair with Elixir/OTP recently. The language
| ist beautiful, the platform very impressive. Genserver and the
| actor model are very powerful tools for concurrent systems and
| Phoenix is one of the best web frameworks I ever tried.
|
| BUT the tooling was a bit lacking (e.g JetBrains IDE, good
| debugging workflow), the library support was a bit spotty (e.g
| for Auth, everything high quality but often abandoned). Then if
| you use e.g GCP there is no real first class language support and
| if you deploy to Kubernetes then there is a lot of overlap with
| Beam/OTP for deployment management etc. this and I feel for most
| quick web development pure functional programming is too much
| mental overhead for me (maybe this comes down to practice). I
| feel way more productive with e.g Go or Node.
|
| I have mad respect for Jose Valim and the community for
| delivering such an exceptional project in a world saturated with
| languages and frameworks. But I fear its not for me. At least not
| yet.
| ch4s3 wrote:
| > good debugging workflow
|
| Most of use use IO.inspect/2, pry, :observer, :recon, and
| Phoenix dashboard for that.
|
| > if you deploy to Kubernetes then there is a lot of overlap
| with Beam/OTP for deployment management etc.
|
| These things are complementary. Releases are great for multi-
| stage docker builds. Libcluster is nice for allowing different
| containers to talk to one another without any messaging glue.
| Supervision can crash and restart at a sub container level.
| mrjoelkemp wrote:
| Google does provide elixir clients for most of their products:
| https://github.com/googleapis/elixir-google-api
| halotrope wrote:
| Yes I was using them. But its just the repo and the
| documentation is quite lacking compared to the other
| languages. Like with most things it I referred to is workable
| but has just quite a bit more friction.
| [deleted]
| sidkshatriya wrote:
| I have a problem with a lack of static types. Was that an issue
| for you?
| halotrope wrote:
| In fact yes. You can use Typespecs and I tried to make up for
| it with tests. However it did not really come close to the
| safety and convenience of static typing for me.
| Teifion wrote:
| My biggest issue with the language. I make use of typespecs
| where possible but it's a far cry from anything enforced.
| brightball wrote:
| This is always a preference issue. You get strong types but
| the nature of hot loading and communication across clusters
| doesn't leading to static typing being a practical trade off.
| The moment you add it, you end up with a need for contract
| enforcement across nodes that changes most of what the
| platform is designed around.
|
| In practice, static typing just doesn't add much other than
| headaches to a project of this style. Doesn't mean you're
| wrong for wanting them, just that the language might not be
| for you if you feel like you need them that much.
| sidkshatriya wrote:
| I understand why dynamic typing might be needed for code
| reloading and multiple nodes. However for an overwhelming
| number of uses a single erlang node is sufficient and code
| reloading itself comes with additional complexity that it
| is only useful for rare applications. On the other hand
| hand static types give you cheap and easy freedom from a
| large class of bugs. Erlang spends a lot of time bringing
| reliability through sophisticated patterns such a
| supervision trees etc etc but then totally fails by having
| dynamic typing. I love Elixir/Erlang but I would say that
| here (provocatively perhaps) the platform is penny wise and
| pound foolish: It spends a lot of time on sophisticated
| strategies while omitting the most elementary one: static
| types. I like the platform but like every platform it does
| have weaknesses. To me, personally, missing static types is
| a weakness.
| [deleted]
| raitom wrote:
| Same as you. The language looks nice but despite having tried
| Elixir multiple times this past 4 years, the tooling and lack
| of Jetbrains support always makes me stop and run back to Ruby.
| franz_kafkaagh wrote:
| I learned functional programming first and I find it the
| opposite. And I find the context switch from functional to not
| is always difficult, namely because I can't just assume things
| are immutable and I have to go out of my way to make it so.
|
| That's all to say that the mental overhead is just comfort more
| than anything.
| louissm_it wrote:
| Great resource, thank you. I've been slowly transitioning my
| programming time to Elixir/Phoenix the last couple years. Every
| couple weeks I dive in, but mostly going back to Rails. But
| recently with the `1.6.0-rc.0` release, this time it might stick.
| HEEx templates are fantastic, esbuild as the default is a really
| good choice, LiveView is getting some traction, and the packages
| seem to be picking up. Fantastic language & framework in general.
| lobo_tuerto wrote:
| Please someone update the link to the HTTPS version.
| Teifion wrote:
| Like this? - https://beam-wisdoms.clau.se/en/latest/index.html
| fortran77 wrote:
| As a long-time professional Erlang developer, I'm frustrated
| about "Rubyists" sticking their toe into the ecosystem via Elixir
| and then declaring they don't like it. In many ways, the shift to
| Elixir has been a bad thing.
| zubspace wrote:
| I would love to get into erlang and beam. As far as I know, Beam
| must be a great tool for servers and webservers in general. But
| can I use the language in other scenarios, too? For example
| commandline tools, desktop Gui's or games?
| Teifion wrote:
| Commandline tools yes (though that's not it's strong point).
| Desktop GUIs could be done though I've not looked into it, if I
| were then I'd look at making a desktop Electron app and use
| something like Phoenix LiveView with that to create the GUI.
|
| Games are a tricky one, it all depends on what you are doing
| with the game. I develop a middleware server for an RTS and for
| that it shines but it would not suit the gameplay side of
| things very well (you can of course still use it for
| anything!).
|
| Repo for reference: https://github.com/beyond-all-
| reason/teiserver
| toast0 wrote:
| Command line can work, there's even escript for shorter tasks:
| "escript provides support for running short Erlang programs
| without having to compile them first, and an easy way to
| retrieve the command-line arguments."
|
| GUIs are a challenge, I think there might be some change since
| this thread in 2017 [1], but the most supported way is
| wxWidgets and the interface is most unErlanglike. I gather it's
| similar to GUI programming in c++/mfc style which I never could
| understand. I do have an erlang program with a small gui (just
| a fixed sized bitmap output window, no controls, no inputs, no
| text other than titlebar), and I made it work with wx, but it
| felt a lot nicer with ex11.
|
| ex11 is ancient, was an academic thesis project/proof of
| concept and is pretty much raw x11. Erlang and x11 work well
| together, Erlang is built for distributed systems and x11 is a
| distributed systems protocol. On the other hand, x11 doesn't
| include a widget library, the client has to bring one, ex11 has
| some widgets, but they're very basic. It also relies on x11
| font rendering which is not very common anymore. If you wanted
| to build a mainstreamish GUI on ex11, you'd need to spend a lot
| of time on building a modern looking toolkit. (And make sure
| people have an X server)
|
| Games are outside of my ability, but while it's certainly
| possible, I think the confines of immutable data and lack of
| shared state would tend to make things cumbersome. Screen
| output would also be a challenge. It might make netcode easier,
| though, because of the general need to do explicit
| communication may mean you're already thinking about how things
| interact and can avoid some of the pitfalls of synchronization.
|
| [1] https://groups.google.com/g/erlang-
| programming/c/-0uH3DfnYvM...
___________________________________________________________________
(page generated 2021-09-12 23:00 UTC)