Re-writing the site of Norway's largest transport provider in Elm
blogg.bekk.no
blogg.bekk.no
I guess if you have a CS degree you can understand how that parser works, I couldn’t. The community tried to help me on the forums but you are supposed to know a lot of key functional concepts to even understand their answers.
Then I learned about how they decided to throw away Javascript interops. I mean I love benevolent dictators but this was too much. Just fyi their benevolent dictator thinks if you need a library you should program it yourself. I can see his point but in Python word there are so many amazing libraries. That principle sounds good in theory but it’s theory, the rest or the world thrives with libraries.
However I became a better programmer thanks to elm. I would love for something like ocaml to pick up more steam in data analytics. I think though python won that battle for good principles (easy to use) and not for being functional, or controlling side effects or having less bugs. If you think about it that’s exactly why Excel is still so popular, it’s a monster but it’s easy to use.
> I guess if you have a CS degree you can understand how that parser works, I couldn’t. The community tried to help me on the forums but you are supposed to know a lot of key functional concepts to even understand their answers.
Have you tried writing a simple parser (i.e. just recursive descent) yourself in another language like Python? If so, you'll find the approach of using parser combinators in your Elm example rather superior. If you do not currently understand the foundational concepts of writing a parser, perhaps you should understand them before starting to write a parser.
Or perhaps consider this. Can you get by without writing a parser? If the grammar you're trying to parse is well-known you might find an existing parser; if the grammar is extremely simple you might just use a few string manipulation functions to get the job done.
Is this true? I'm not an Elm user yet, but I've been eyeing it and my understanding was that there was interop:
https://guide.elm-lang.org/interop/
It'd be a big deal if that weren't there -- FP stuff I may or may not be used to? Bring it on. Stretch my CS knowledge? Cool. No 3P libraries? That'd make it wrong for a lot of use cases.
What the poster is referring to is that Elm 0.18 had an unsupported, undocumented way of calling javascript code directly. This was inherently unsafe (Javascript can throw exceptions and Elm doesn't support exceptions, let alone catching them) and people were abusing it, so it was removed from the language in 0.19.
I think programmers—myself included—tend to be surprised by these stories, because we envision two learning curves: general programming concepts, plus the additional weirdness of learning Elm.
But "general programming concepts" unpacks into: A) valuable stuff everyone needs to learn anyway, B) a bunch of hard-bought mental discipline which Elm makes obsolete, due to its lack of side effects and mutable state. Going cold-turkey into Elm, newcomers fast-forward through a lot of things JS learners for example have to wrestle through.
[edit for clarity]
The number of developers with Elm experience in Norway is small, and I think it will make it harder to attract good consultants that want to work on it.
There are few experienced Elm and Rust devs to recruit from, but there are tons of very experienced developers who would take a pay cut just to work with these languages.
What people know and what people want to work with are in my experience very loosely related.
I bet that an old and badly designed Elm app would be just as bad to work with.
Not at all!
My company has used Elm since 2015, and I'd be happier maintaining our 4-year-old Elm code from before we knew what we were doing to any modern JS or TS project that's been built optimally according to any definition of JS/TS best practices you like.
I don't think that's an uncommon view among people who have used both Elm and JS/TS in production for a few months.
It's a pretty night and day difference in experience - that's why people who use Elm on the side for awhile so often end up valuing the opportunity to use it at work too.
I definitely believe that functional code bases rot less/slower than imperative/OO code bases. If it’s because the functional code bases are written by “better developers” that’s an even stronger argument for aiming for taking a job using one.
Jokes aside, there are structural reasons for this phenomena, but the most obvious and pithy one is simply: you get what you paid for.
Our experience is that previous Elm experience isn't necessary, as the language is very easy to learn, and people get productive very quickly.
To understand this correctly; 'we' means the company 'Bekk' and the customer is 'Vy', right?
I don't find it too strange that it is relatively easy to onboard new Elm programmers when they are part of the same company. But what happens when competing companies want to bid for jobs at Vy? Vy is after all wholly owned by the Norwegian Ministry of Transport and Communications, so new future contracts are bound to come up. A language decision like this–beyond the merit of the language itself–might create a vendor lock-in that can stifle competition. Without being an Elm programmer myself, I am not sure that the technical merits of Elm is really worth it when taking the competition aspect into condsideration.
Right.
Good question! Vy has their own developers for this very reason. The teams here are a mix of Bekk and Vy developers, should Bekk be replaced by another company, someone will still remain to train the new developers.
As distinct from the endlessly changing dot Carousel :]
From the Study of Programming Languages Not to Learn in 2019: "the five languages not to learn in 2019 are Elm, CoffeeScript, Erlang, Lua, and Perl."
Also in Study of Programming Languages Not to Learn in 2019:
"As a final word, we wanted to reiterate that while the languages that didn’t perform well this year are useful and powerful in their respective fields, they may not have ranked as highly on our list because of the three metrics we chose. Therefore, if you really want to learn Erlang, Elm, or Lua, go for it — after all, these languages may make a comeback by 2020 because of your interest in them!"
I think one has to take the result in that article with a grain of salt as they only look at a very limiting set of metrics.
Also in the specific case of Elm I would recommend that people give it a try as it is a very different programming language than the most common languages and a great intro to the realm of strongly typed functional languages and functional thinking in general. Even if you don't end up liking or using it, it is a good thing to have experienced. There is always something to learn from learning new programming languages! ^^,
Choosing Elm for a project in 2017 seems to have been a very good move.
Considering JS graveyards, I would have sworn that was 100% of frontend devs until now.
I'm starting to think that there really are a lot of front-end devs who don't know anything but JavaScript.
Describing a situation as worse than it really is.
But again, what are the clear benefits for the customer of choosing Elm compared to the more popular choices in the market, given the (IMO significant) drawbacks of a niche language?
Other advantages: async is baked into the framework and isn't an afterthought like React. Immutability is standard and doesn't require a competing ecosystem of immutable datastructures like React. Also significantly smaller download sizes [1]
I also question that Javascript the language doesn't change: it's gone through several big language changes, and a growing number of devs wanted more changes, so stared writing in Typescript or Flow.
[1] https://elm-lang.org/news/small-assets-without-the-headache
From a business perspective, having 0 JS crashes or errors in production is nice. I say that as someone who works at a startup that switched to Elm in 2017 and have had that very experience.
b) Immutability, strong type system and few language constructs make local reasoning very easy. Developers spend less time chasing bugs.
c) Easy to learn. In virtual all jobs that I've had as a frontend developer, there's always been something new to learn. I spent more time learning Ember than I did spend on learning Elm.
d) Less churn. Javascript and related frameworks are, to me at least, exhausting to stay up to date on. Elm changes at a much slower pace.
I think the technical reasoning is okayish, but from a business perspective I don't think the customer made a good choice.
Elm compiles faster, has better error messages, is a simpler language (so our apps tend to stay simple, so easier to pick up again after some time) and has less churn.
We have experience with other technologies, we just find Elm better :)
Go on then. ;)
- Better tooling - Easier to work with existing javascript code - Superset of javascript - Larger community and ecosystem - More developers are familiar with it - Easy Server Side Rendering
In what way is the Typescript tooling better? i.e. what can you do with it you can’t do with Elm’s tooling?
Also I’m intrigued by the claim of “easier server side rendering” is it difficult to run Elm code on top of node.js?
Sure there might not be a whole lot of Elm jobs out there. But if there is one and you feel like learning Elm, what does it matter?
Also, since you talk about good programmers, surely a potential employer won't list it as negative that you've been able to switch technologies during your career? To me that's a strength rather than a weakness.
Initial development was done, system worked and ran for years. Team left, turned over and then 5 years later no erlang developers were left on staff.
The service is business critical, and you don't need 1 developer, you need a team. 3 would provide some basic backup, but you need 5 to fill out the 24/7 on-call rotation. (yes people need vacations, weekends off, etc)
Sadly it's not the entire stack, far from it, it's one mission critical service that's part of a very large system. So the excitement they get from growing, enhancing and scaling the system is already a bit restricted. Problem is, trying to hire is SF is already hard, and now we just selected the pool of engineers to be a small subset of those.
So now the cost of 3-5 engineers, the work to hire them, manager and deal with turn over. Wow.
Sadly (not sadly) we replaced the service with an AWS offering for $1000/mo. World changed in the 9 years since the Erlang product was first written.
It's turned me off niche languages.
This can't be 1 person anymore, what if they person takes a vacation. So that's 2 people. Perhaps the 2nd person can be much less capable that the first, they just need to hold the system together for how ever long it takes the lead dev to come back from his 2 week hiking trip in the amazon....yeah not good enough. So then you end up saying we actually need proper on call, so now you're hiring a team.
What if it was another language? Let's assume it's a core language of the organization. Then you don't need a team, but capable Sr/Staff Engineers who can jump in during emergencies. Might not be the perfect fix, but then you have a series of people who can duck tape it together until the person responsible is available.
Using Erlang tied our hands, and made a decision to throw a project business requirement.
Also BEAM developers are not hard to find in the Bay. it's hardly a niche language, plenty of Cisco people around at least.
A lot of companies aren't even making knowing their core language as a hiring requirement.
You could make an argument about Elm's community size for long term support of libraries. But hiring isn't a very good one. Elm isn't entirely fringe nor immature.
And I'm not debating what's possible technically, but if it was a wise business decision by the customer to choose Elm. Based on the popularity in Norway in 2017, today and what it likely will be in the future, I think they should have made a different choice.
You say 'here', so I'm going to assume you mean that literally, and that you are indeed in Norway. Forgive me for assuming the worst, but you seem to have an axe to grind against either Elm, Vy, Bekk, or something else based on your several posts on the story—is that correct?
The article, and others have pointed out, it appears to be a good business decision, as far as hiring is concerned. They haven't had issues with newcomers learning the language. The OP them self said that Elm was a selling point for working there.
As someone who recently lived in Norway, and who has used Elm professionally there, we've also found it to be a good business decision.
A lot of companies hire for 'polyglots' these days anyway. For the most part, I wouldn't want to hire someone who wouldn't be capable of picking up Elm to a decent level, relatively quickly. When mentioning that we used Elm, it usually elicited excitement.
It is more a concern regarding how the tax I'm paying is used. I understand that people are happy with Elm today. But how will it be in 5 years? Given the small Elm community, will it still be up to date then? Will it be easy to recruit then?
I know of other publicly funded projects in Norway where they ended up using non-mainstream languages, and where it became a problem in the long-term.
Yes, you've asserted that several times here, based on next to no information.
As for recruiting, using Elm has put Vy in the spotlight several times the last years. So even if most people aren't elm developers, I think this has at least given lots of potential candidates a positive view on working there.
The language has some problems of course, but in terms of developers availability, training effectiveness makes it good.
I think front end rendering is well suited for internal tools or tools that you must login (gmail, google docs, etc..). Anything that is front facing and/or require SEO shouldn't be frontend rendering javascript unless you can afford a fallback with it.
Are there a lot of people who actually want to use Elm tho? Seems like the real risk to me, not finding anyone interested in learning and using Elm.
Problem is that also attracts those where new technologies is not a mean but the end goal. So when they start to get productive in the "new technology" (that's now "one year old, ugh") and if the shop ain't up to the task of rewriting everything every year those people move on to the next hype baby [1]. Being a geek-magnet should be a very minor and explicitly stated short-term factor in deciding what tools and technologies to use.
[1] Yes, this is anecdotal and based on one former colleague!
Elm is by far the best experience that I've had with any language.
Small nitpick, but you need to be a Norwegian resident with an ID number (fødselsnummer) and a postal address in Norway, not necessarily a citizen.
Nothing gets Norwegians arguing more than wolf politics.
I could imagine acronyms just make more sense if long words like that are common in the country.
"Lokomotivmannsforbund" = "train engineers union" :)
We also commonly make up compound words on the fly making it very hard to use things like swiftkey without typing the two words and then removing the space as they are in no word list.
FWIW i am Danish and almost all of our public IT projects are done in .NET, almost always the reasoning is "more developers, more mainstream, less lock-in". Our IT projects are always hilariously belated and more expensive than budgeted. More often than not the same contractor (one of 5ish big corporations) keeps getting the same contracts from the same departments because they have pre-existing knowledge of the system they previously built (hint: this is lock-in). Now, the last part is changing somewhat due to EU tender rules, which I think Norway also abides by (they are not in EU, but are committed to complying with most EU laws)
We're incentivized to work this way because that makes the customer feel safe. Which is how we win contracts.
In fact, I think what you suggest would be an extremely short-sighted "strategy" for a consultancy. Sure, you might get the next contract working this way. But once the customer could get rid of you they would, and they would never hire you again.
At Vy, Elm is used for frontend, Java and Kotlin for backend.
Kotlin in the backend isn't a mainstream technology choice either.
So far we are not dissapointed, and in my opinion Elm is on its way to become mainstream because of these things.
Also, as learning Elm is quite fast - I don't think the vendor lock-in is a very convincing argument.
I live in Oslo and use Vy to travel outside the city. I find the overall experience to be excellent, and appreciate the friendly and simple interface.