Elixir at enterprise

I’ve question to the community.
Is it a goal to increase Elixir adaptation level for the enterprise?

If no, please ignore my post.

Having been in enterprise development for more than 10 years I see the following blockers for Elixir’s enterprise adaptation off the top of my head.
I do recognize that following topics may create some tension, I’m also aware that there are() exceptions, but my intent is to show what are the blockers in general.)

  1. treat windows as first class citizen (including deploy tools), since most devs are using windows as their dev OS.

  2. lack of nice IDE support (enterprise devs live in their IDEs), in the given context Atom, Emacs, VI, etc is not an IDE. OTOH Eclipse, Visual Studio, Intellij Idea are considered as IDEs. Proper Auto Complete is a must have.
    (I’m aware that there is an Intellij Idea plugin, but currently it’s lacking some very important features)

  3. Decimal number support is not part of the language (it can be a though task)

  4. lack of proper MSSQL and Oracle support

  5. lack of collection of best practices, patterns, solutions for well known scenarios.

  6. lack of easy to find info about language/beam/otp limitations/guarantees.

  7. enterprise devs loves static type checing, there should be a standard, out of the box solution for definition and spec in a single line, eg:
    instead of

    @spec add(number, number) :: {number, String.t}
    def add(x, y), do: {x + y, "You need a calculator to do that?!"}
    

use something like this:

```	
def add(number x, number y) :: {number, String.t}, do: {x + y, "You need a calculator to do that?!"}
```
  1. lack of simple dialyzer opt-in with nice default options
  2. lack of easy custom env management
  3. there should be an easy way to configure compiler/beam settings for well known scenarios

Pretty sure there are more…

And would like to emphasize that my goal is not blaming or starting a flame war. My intent is to start constructive discussion if it’s important to make Elixir as a viable choice for the enterprise.

7 Likes

I do not have any problems using windows for elixir. There are some libs though that use NIFs. They have some problems during compilation phase, but thats not a problem of the language. Java has exactly the same problems when it comes to JNI.

There are libraries available which doe handle such stuff pretty well.

One should be able to use both via :odbc.

Can you provide some examples for languages that are doing it “right”?

They don’t. But they don’t know better either! If one follows elixirs idioms correctly, there is not that much of a need of static typechecking.

You don’t need this once you have the former… But as far as I can tell, the current available dialyzer packages on hex have sensible defaults.

You can have as many environments as you want and you can configure them differently.

You can configure pretty much every aspect of the compilechain either via mix.exs or via command-line-switches.

Even if I support your wish to make elixir used more often in the so called enterprise, I do not think that elixir has to move. Elixir as a language is very young and mature and most of its concepts are well thought and selected carefully. The “enterprise” has to move and to learn to accept that there might be things that work differently than a JVM.

6 Likes

I think you are making very large sweeping generalisations here.

  1. Of the 3 companies (one being Klarna - sufficiently enterprise though still quite new in the game) I have worked at none of them used windows, at least in engineering. With that said Erlang and Elixir work great on Windows.

  2. I am also not sure why Emacs/VI wouldn’t qualify an IDE - they are extremely extensible with the full power of the terminal inside your editor and have configurable shortcuts. Emacs also has a decent enough GUI with an extendable menu. Both VI and Emacs support autocomplete for elixir.

  3. https://github.com/ericmj/decimal

  4. Ecto has plugins available for MSSQL and one for Oracle is under development, but if you are looking to get underway you can use ODBC I believe. [1]

  5. Linters like Dogma and Credo have highly regarded “best practices” built in and explained. [2]

  6. There are great talks that dish out in-depth knowledge of the beam [3]

  7. I believe firmly that this is just speculation - there is a good blog post here about why static typing doesn’t really solve a problem, or at least not the problem most people think it does: https://medium.com/javascript-scene/the-shocking-secret-about-static-types-514d39bf30a3#.f8zq0wngb

9 Likes

On the contents of the Eric Elliott blog this posting with counter points:
https://www.quora.com/Is-static-type-checking-overrated
Reacting on Elliott’s blog also: read about the shocking secret about TDD. It’s easy to find some articles (google) with “is TDD overrated” as subject. Also: BDD / TDD criticized

1 Like

you can’t teach an old dog new tricks, at least the transition should be really smooth
that’s why java and c# are the most commonly used languages in “enterprise”…

someone can hate it, someone can fight it, someone can even find exceptions, but i’m talking about trends

1 Like

You can’t teach old dogs new tricks, but old dogs will die out eventually.

At least at my university, they are trying hard to teach the necessary stuff to survive in current enterprise ecosystems while staying open minded.

Also todays startups which are using young technologies might be the enterprises of tomorrowland™.

4 Likes

I think my post wasn’t very clear - my argument is against the mediocre type systems of “enterprise languages” such as Java and C# giving false sense of security to developers (as the bug density graph sort of indicates albeit not the best method of determining this kind of thing).

On the other hand proper use of something like Haskell’s / Agda’s type system kills quite a few bugs before they have a chance to start but even then, you only get out what you put in…

1 Like

I don’t think Elixir cares about being used in the Enterprise or not. If it is, awesome. If not, oh well. Plenty of languages have done great without Enterprise support. It’s not really a big deal is it?

2 Likes

I’ve question to the community.
Is it a goal to increase Elixir adaptation level for the enterprise?

I think it’s pretty unlikely that Elixir would ever become a “enterprise” standard.
Ruby never did and the Java VM has pretty much a strangle hold on that market.

For good or ill, Elixir’s focus is the quick development of web based apps by small teams that need to scale. If your enterprise doesn’t already have a microservices based architecture, then getting the
“camel’s nose in the tent” is going to be a very difficult problem.

I don’t disagree with any of your premises[1], but the reality is that Enterprise Elixir isn’t a problem anybody with the time, skill and interest is focused on solving. There are really very few people driving the project and they are all focused on the smaller consulting/start-up scale of applications.

IMHO, this is entirely appropriate. Without the resources of an large company behind you there is simply no way to duplicate all the features required. Your checklist is many hundreds if not thousands of FTE’s to accomplish. Java won because it had Sun and IBM behind it.

The next Enterprise language will come out of Facebook or Google, not a handful of enthusiasts on the internet.

[1]- For an early days language/project Elixir supports windows remarkably well and the project attempts to be as Windows friendly as possible with the resources available.

1 Like

As a Windows user (only at work), there are no issues here. exrm works wonderfully (though distillary is lacking, but I do not use it because of that).

Hmm, in Atom, vim, and Spacemacs I have everything that I’ve come to expect from such an IDE, including auto-complete on type, what is lacking? Literally, what does something like eclipse or visual studio have that vim or emacs (or atom or etc…) do not?! I have debuggers, compiling lattices, test runners, git integration, accurate syntax coloring (like a given variable is a certain color, in another scope it has another color, etc… even visual studio did not have that last I was on it unless you had the costly visual assist extension), etc… etc… etc… They have even far more than things like eclipse or visual studio have.

Nor should it be, things like that should be a library, just like it is in .NET or Java or C++. Sure bringing in the library might be useful to the core, but if it does not bring immediate benefit to the core then there is no need, bringing it in via hex is just a single line in the mix.exs file, not hard.

Uh, I use both MSSQL and Oracle at work with Elixir/Erlang, what are you talking about?

Standard functional programming, what is different from any other functional programming language? This is not Ruby where it collapses in on itself from monkey patching after all. ^.^

You have not perused the Erlang website at all I’m gathering? It is utterly detailed there, even PDF’s on how the JIT works are around.

From what I’ve seen in ‘enterprise’, no, they like what is flashy or what they’ve already bought (even if it cost $4million a year, blehg), they have no clue what ‘types’ even are. However I do agree on type checking, I really really badly want an OCaml transpiler to Elixir… >.>

You’ve not used dialyxer eh?

Uh, erlang (and thus elixir) are not location sensitive, you can install it inside the project itself if you want. And there are runnings that can package off and install multiple erlangs with ease. Or are you talking about development environments, which is built-in to mix directly?

All documented on the erlang beam website, dead simple.

1 Like

What are you using for autocomplete?

For me it comes from one of these (I have all these installed for elixir, and more, it might even be in the ‘more’):

  • atom-elixir
  • autocomplete-elixir
  • build-elixir
  • elixir-cmd
  • language-elixir
  • linter-elixir-credo
  • and more…
3 Likes

While most of the points are more-or-less relevant, I have to push back against inline types. It’s not done, because it doesn’t work with pattern matching. How would it work?

def foo({number x, %{"bar" => integer y}})

This looks far less readable than additional type annotation on a separate line - and this is just a simple example.

3 Likes

Quick background: I’ve spent about half of my 20 year career working in “enterprises”.

The first thing to notice is there is no commercial entity behind Elixir (aside from employers that allow their employees to work on it – I know Plataformatech and DockYard – whom I applaud) so where’s the budget for all these new “enterprise” features going to come from? Where’s the profit to be made? Are there paths to enterprise adoption without a team of highly-paid sales people to convince enterprises to adopt their technology? And also, how has erlang survived this long at enterprises without all these features?

From my experience (which probably differs from yours) enterprise developers consist of 3 main groups: 1) mid-to-late career good developers who appreciate the ancillary benefits an enterprise can offer with a strong work/life balance. 2) average to below average developers at all ranges of years of service to whom programming is just a job 3) forward-looking good developers looking to make a difference and swimming upstream from the culture they are within. I suspect the original poster is of that 3rd group to have even heard of elixir.

Considering those original points at the top of the thread, and given these 3 groups (probably incomplete, but let’s go with it for now) group #1 will adapt fine to incomplete tooling if/when needs arise. #2 will remain minimally effective. #3 will make temporary headway, but will ultimately be limited because there are no sales people to take CTOs golfing.

As a member of the Elixir community, I would be happy to see PRs come to implement any/all of those features. But I find it offputting to receive this list as something “the Elixir community needs to do.”

4 Likes

Interesting subject. Found this article: http://learnyousomeerlang.com/types-or-lack-thereof

lack of collection of best practices, patterns, solutions for well known scenarios.

Elixir Recipes.

1 Like

Looks like most of the work is made by a single person. I’m not knocking his Elixir skills but this is far from a collection of community-vetted best practices.

That said, I think Elixir already has an opinionated way to solve problems so this isn’t that big of a deal.

But I will. I looked at http://elixir-recipes.github.io/files/counting-words-in-a-file/ only and already see a problem, it’s not wise to open a file and do stuff with it. If you’ll get few hundreds MB file it’s very easy to kill the machine :wink:

It’s much wiser to stream it http://elixir-lang.org/docs/stable/elixir/File.html#stream!/3 by lines and then scan that stream http://elixir-lang.org/docs/stable/elixir/Stream.html#scan/3 applying split for each line. And if you want to be super safe, stream it by X bytes, and pass leftover letters between whitespace and end of a stream chunk in accumulator along with count, or use Agents for storing those leftover letters.

“Best practices” is not just a bunch of better or worse recipes. And that example in counting-words-in-a-file really not a bad recipe, but it only works for small files.

I disagree, because I really would like to have a place, scratch that… THE PLACE to go for really the best solutions to common problems.

Enterprise now is all about cloud ready applications Cloud Native. (public/private cloud)
Fast cycle development to production, scaling, monitoring and all dev ops culture :slight_smile:
Migrating to Cloud Native Application Architectures

Can you give an example to such a place for other languages? I’m interested! Maybe we can start one in this forum.